专注于圣邦微电源芯片、晶豪科技功放IC
English
13430436368 sale@fydchip.com
Email

圣邦微三相智能电表方案开发:电源芯片SGM61330A通信电源与掉电保存实战|霏帆科技

圣邦微三相智能电表方案开发:SGM61330A通信电源与掉电保存实战

园区光伏、储能、充电设施和虚拟电厂正在把三相电表从“定时抄数设备”推向持续在线的边缘节点。硬件开发随之出现两个容易被平均功耗掩盖的问题:无线发射的毫秒级电流脉冲会不会拉低主控电源,主电源消失后是否还有足够时间完成数据提交。

本文依据圣邦微三相电表应用框图,构建一个12V内部母线、3.8V通信支路和3.3V主控支路的开发示例。文章给出可复算的电感、电容和时间预算,并把硬件计算落实到固件状态机、PCB测试点与样机验收。三相采样、计量算法、校准和整机认证不在本文计算范围内。

本文的工程结论:在“0.2A待机、2A发射峰值、50μs电源响应缺口”的设计假设下,3.8V模块端需要约703μF有效电容才能把估算下冲控制在200mV内;取800μF有效容量时,估算下冲为184.5mV。5V侧使用680μF标称储能电容,按64%有效容量和20.1mA保存负载计算,可提供约23.8ms保持时间,覆盖15ms固件保存预算。

上述结果是项目设计预算,不是实测性能。量产结论必须由最终原理图、PCB、物料和样机测试共同确认。

三相智能电表与圣邦微SGM61330A电源芯片组合图
图1 三相智能电表与SGM61330A电源芯片组合。本文围绕通信供电、掉电保持和PCB验证展开开发。

一、把需求先写成可测量的指标

项目第一版采用RS485与无线通信,PLC只保留接口位置。这样可以先验证电源、掉电保存和两种通信路径,再决定是否引入载波驱动及耦合网络。以下数值是本文开发示例的输入条件。

开发项目 设计输入 首轮通过条件
内部直流母线 12V标称 在9V、12V、15V三点验证
无线通信电源 3.8V;待机0.2A;发射2A 模块端电压3.45~4.15V;上下冲≤200mV
负载脉冲 峰值持续2ms;每100ms重复 连续运行无复位、丢帧或电源异常
掉电保存负载 主控、存储20mA;辅助消耗0.1mA 告警后15ms内完成有效提交
首轮环境点 −40℃、25℃、85℃ 重复关键电源与掉电测试

这组输入的平均电流只有0.236A,但发射瞬时输出功率达到7.6W:

IAVG = 0.2 + (2 - 0.2) × 2/100 = 0.236A
PPEAK = 3.8 × 2 = 7.6W

因此,平均功率适合估算系统能耗,不能代替Buck峰值电流、供电路径阻抗和局部储能设计。

二、供电架构:通信、保存和执行支路分开核算

通信支路承受快速负载变化;主控保存支路需要在输入消失后保持供电;H桥及执行机构可能产生更大的启动或堵转电流。三个支路共用母线时,仍应分别定义纹波、峰值电流和优先级。

三相智能电表主控与通信配套板12V母线供电架构工程图
图2 主控与通信板供电架构。该图表示功能与能量路径,不是完整电表原理图。市电输入、三相采样、计量前端、保护和认证相关设计需在整机方案中补齐。

5V保存节点前增加反向阻断,目的是防止掉电后储能电容向通信模块、背光或其他支路放电。硬件评审时还要检查GPIO、接口保护二极管和调试连接器形成的隐蔽反灌路径。保存电容的充电路径需要限流,避免上电浪涌压垮前级电源。

三相智能电表低压主控通信PCB原创概念图
图3 低压主控与通信PCB分区:Buck与储能靠近电源入口,MCU和存储置于中部,RS485隔离区与无线模块分置板边。

三、3.8V通信Buck的外围计算

通信支路以SGM61330A作为工程实现示例。根据2025年8月A.3版数据手册,该器件输入范围为3.8~36V,额定输出最高3A;A、B、C版本的标称开关频率分别为400kHz、1.4MHz和2.1MHz;典型静态电流28μA,典型关断电流2μA。SGM61330A的开关频率规格范围为335~475kHz,TQFN封装高低侧MOSFET典型导通电阻为65mΩ/42mΩ,峰值电感限流规格范围为3.6~5.9A。查看原厂产品页

1. 反馈电阻

SGM61330反馈基准标称为1V。若上臂使用100kΩ,下臂使用35.7kΩ,输出设定值为:

VOUT = 1 × (1 + 100/35.7) = 3.801V

电阻采用0.1%精度只是第一步。输出误差预算还需包含基准误差、反馈漏电、线路与负载调整,以及模块连接器上的压降。

2. 电感值与饱和电流

首轮选择10μH,通过连续导通近似式计算电感纹波:

ΔIL = VOUT × (1 - VOUT/VIN) ÷ (L × fSW)
计算工况 输入 电感 频率 纹波峰峰值 2A负载时峰值
低输入 9V 10μH 400kHz 0.549A 2.274A
标称输入 12V 10μH 400kHz 0.649A 2.325A
高输入 15V 10μH 400kHz 0.709A 2.355A
边界计算 15V 8μH,计入−20% 335kHz 1.059A 2.529A

2.529A正常峰值低于芯片最小峰值限流3.6A,但这不能直接推出3A饱和电流的电感可用。短路、启动和动态过程中电流可能进一步上升。首版可把“最高工作温度下饱和电流不低于6.5A”作为筛选起点,再用温升、短路和恢复测试收敛。

3. 输出电容与负载下冲

负载从0.2A上升到2A,新增电流为1.8A。先假设控制环路需要50μs补足新增电流,路径总电阻控制在30mΩ,电容组ESR控制在10mΩ:

ΔV ≈ ΔI × RPATH + ΔI × ESR + ΔI × Δt/CEFF

路径压降占54mV,ESR跳变占18mV;若把总下冲限制在200mV,留给容量放电的预算为128mV,因此有效容量至少为703μF。

3.8V通信电源不同有效电容下负载瞬态下冲计算图
图4 通信电源瞬态预算。800μF有效容量对应184.5mV估算下冲,余量仅15.5mV。该图是矩形电流缺口近似计算,不是示波器波形。

PCB可以预留两颗470μF聚合物电容和两颗47μF陶瓷电容的位置,实际装配容量应根据直流偏压、温度、容差和频率下ESR换算。大容量还会增加启动负担:若实际充电容量为1000μF,按2.9ms最短软启动时间估算,单是电容充电平均电流约为1.31A,尚未加入模块启动负载。

启动顺序建议:Buck先启动,PG稳定后再释放无线模块使能或复位。10ms可以作为首轮调试等待值,正式固件应同时检查PG、模块上电要求和超时状态。

四、掉电保存:从电容容量推导固件窗口

本例把储能电容放在受保护的5V节点,再通过低压差稳压器向主控与非易失存储供电。计算采用4.70V最低初始电压、3.60V最低允许电压、20.1mA负载和15ms保存目标。

CMIN = 20.1mA × 15ms ÷ (4.70V - 3.60V) = 274μF

680μF标称电容按−20%容量容差,再乘0.8的额外衰减预算,有效容量为435.2μF:

t = 435.2μF × 1.10V ÷ 20.1mA = 23.8ms
680微法储能电容支持三相电表掉电数据保存的电压时间计算图
图5 掉电保持时间理想模型。15ms时储能节点约4.01V,距离3.60V计算边界仍有约8.8ms。ESR、漏电、切换损耗与后级稳压压差需在样机中加入。

后级稳压器不能只看静态电流。本例要求在保存负载和全温范围内压差上限不超过200mV。以SGM2203C为例,其低静态电流适合某些低功耗支路,但原厂规格给出的150mA、全温最大压差为2.7V,因此不能直接放入本例保存电源。这个反例说明:项目开发必须按最坏工况闭环,不能由一个亮点参数替代完整检查。

固件把15ms拆成五段

掉电告警后立即阻止新业务,关闭无线、背光和执行输出,冻结计量快照,再完成写入与有效提交。Flash擦除应提前在正常供电阶段完成。

三相电表15毫秒掉电保存固件任务时序预算图
图6 固件任务预算:0.2ms响应、0.8ms关闭非必要负载、1ms数据快照、10ms写入与提交、3ms余量。具体存储器须按最大写入时间校核。

核心开发代码:双槽记录与CRC校验

下面的C代码把“数据写入”和“记录生效”分成两个动作。两个存储槽在正常供电阶段预擦除;掉电期间只写非活动槽,CRC验证通过后最后写入提交字节。再次掉电时,旧槽仍保持有效。

#include 
#include 
#include 
#include 

#define METER_MAGIC       0x4D545231u  /* "MTR1" */
#define COMMIT_VALID      0xA5u
#define COMMIT_ERASED     0xFFu
#define SLOT_A_ADDR       0x0003F000u
#define SLOT_B_ADDR       0x0003F100u

typedef struct __attribute__((packed)) {
    uint32_t magic;
    uint32_t sequence;
    uint64_t import_mWh;
    uint64_t export_mWh;
    uint32_t rtc_seconds;
    uint32_t status_flags;
    uint32_t crc32;
    uint8_t  commit;
} meter_record_t;

/* 根据MCU片上Flash、外置EEPROM或FRAM实现这三个接口。 */
bool nvm_program(uint32_t address, const void *data, uint32_t length);
bool nvm_read(uint32_t address, void *data, uint32_t length);
bool nvm_slot_is_erased(uint32_t address, uint32_t length);

static uint32_t crc32_ieee(const void *data, uint32_t length)
{
    const uint8_t *p = (const uint8_t *)data;
    uint32_t crc = 0xFFFFFFFFu;

    while (length-- != 0u) {
        crc ^= *p++;
        for (uint8_t bit = 0; bit < 8u; ++bit) {
            uint32_t mask = (uint32_t)-(int32_t)(crc & 1u);
            crc = (crc >> 1) ^ (0xEDB88320u & mask);
        }
    }
    return ~crc;
}

static bool record_valid(const meter_record_t *r)
{
    if ((r->magic != METER_MAGIC) || (r->commit != COMMIT_VALID)) {
        return false;
    }
    return r->crc32 == crc32_ieee(r, offsetof(meter_record_t, crc32));
}

static bool sequence_is_newer(uint32_t a, uint32_t b)
{
    return (int32_t)(a - b) > 0;   /* 支持uint32_t序号回卷 */
}

bool meter_restore_latest(meter_record_t *out)
{
    meter_record_t a, b;
    bool va = nvm_read(SLOT_A_ADDR, &a, sizeof(a)) && record_valid(&a);
    bool vb = nvm_read(SLOT_B_ADDR, &b, sizeof(b)) && record_valid(&b);

    if (!va && !vb) return false;
    if (va && (!vb || sequence_is_newer(a.sequence, b.sequence))) {
        *out = a;
    } else {
        *out = b;
    }
    return true;
}

bool meter_commit_record(uint32_t slot_addr, meter_record_t *r)
{
    meter_record_t verify;
    const uint32_t body_len = offsetof(meter_record_t, commit);

    if (!nvm_slot_is_erased(slot_addr, sizeof(*r))) return false;

    r->magic = METER_MAGIC;
    r->commit = COMMIT_ERASED;
    r->crc32 = crc32_ieee(r, offsetof(meter_record_t, crc32));

    /* 第一步:写正文与CRC,提交字节保持擦除态。 */
    if (!nvm_program(slot_addr, r, body_len)) return false;
    if (!nvm_read(slot_addr, &verify, body_len)) return false;
    if ((verify.magic != METER_MAGIC) ||
        (verify.crc32 != crc32_ieee(&verify, offsetof(meter_record_t, crc32)))) {
        return false;
    }

    /* 第二步:最后写提交字节,使新记录原子生效。 */
    const uint8_t valid = COMMIT_VALID;
    return nvm_program(slot_addr + offsetof(meter_record_t, commit),
                       &valid, sizeof(valid));
}

核心开发代码:掉电中断与15ms保存状态机

比较器或PVD中断只锁存事件与时间戳,不在中断内执行Flash写入。主循环中的高优先级服务关闭非必要负载、冻结计量快照,再向预擦除槽提交记录。示例把12ms设为写入硬截止点,为电压下降和异常处理留下约3ms余量。

typedef enum {
    PF_NORMAL = 0,
    PF_LOAD_SHED,
    PF_COMMITTING,
    PF_SAFE
} power_fail_state_t;

static volatile bool g_power_fail_event;
static volatile uint32_t g_power_fail_us;
static power_fail_state_t g_pf_state = PF_NORMAL;
static uint32_t g_next_sequence;
static uint32_t g_pre_erased_slot;

uint32_t timer_us(void);
void power_fail_irq_clear(void);
void radio_enable(bool enable);
void backlight_enable(bool enable);
void hbridge_force_off(void);
void rs485_tx_abort(void);
void meter_snapshot_atomic(meter_record_t *record);
void save_done_pin_set(bool high);
void system_enter_safe_mode(void);

void PVD_IRQHandler(void)
{
    power_fail_irq_clear();
    if (!g_power_fail_event) {
        g_power_fail_us = timer_us();
        g_power_fail_event = true;
    }
}

void power_fail_service(void)
{
    static meter_record_t pending;
    uint32_t elapsed_us;

    if (!g_power_fail_event) return;
    elapsed_us = timer_us() - g_power_fail_us;

    switch (g_pf_state) {
    case PF_NORMAL:
        /* 目标:告警后1ms内卸载通信、背光和执行支路。 */
        radio_enable(false);
        backlight_enable(false);
        rs485_tx_abort();
        hbridge_force_off();
        g_pf_state = PF_LOAD_SHED;
        break;

    case PF_LOAD_SHED:
        memset(&pending, 0, sizeof(pending));
        meter_snapshot_atomic(&pending);
        pending.sequence = g_next_sequence++;
        g_pf_state = PF_COMMITTING;
        break;

    case PF_COMMITTING:
        if (elapsed_us > 12000u) {
            /* 已失去写入时间余量:保留旧槽,不提交破损记录。 */
            g_pf_state = PF_SAFE;
            break;
        }
        if (meter_commit_record(g_pre_erased_slot, &pending)) {
            save_done_pin_set(true);       /* 对应PCB测试点TP7 */
        }
        g_pf_state = PF_SAFE;
        break;

    case PF_SAFE:
        system_enter_safe_mode();
        break;
    }
}

代码落地检查:Flash方案必须确认最小编程粒度,提交字节可能需要扩展成一个编程字;EEPROM要核对页写边界与最大写周期;FRAM可省去预擦除,但仍应保留CRC与提交顺序。看门狗窗口必须覆盖最长NVM写入时间,棕断阈值必须早于主控最低工作电压。

五、PCB分区和测试点必须服务于故障定位

Buck输入电容靠近VIN与PGND,开关热回路保持紧凑;反馈网络远离SW节点。通信储能放在模块电源引脚附近。RS485隔离边界同时检查信号、隔离侧供电、铜皮与连接器。执行机构的动作电流回路避免与主控和保存支路共用高阻抗回流路径。

圣邦微SGM61330A同步降压转换器SOIC8封装产品图
图7 SGM61330A同步Buck转换器,SOIC-8封装版本可用于首版样机焊接、测温和波形调试。
三相智能电表低压PCB功能分区和TP1到TP7测试点规划图
图8 PCB功能分区与TP1~TP7测试点规划,覆盖母线、Buck输出、模块端、储能节点、主控电源和固件时序信号。
测试点 放置位置 同步观测信号 能定位的问题
TP1 12V母线入口 通信发送或执行动作 前级母线跌落与公共支路耦合
TP2 Buck输出电容 TP3、负载电流 稳压器本体动态响应
TP3 无线模块电源引脚 TP2、发送使能 走线、连接器和局部储能压降
TP4 5V储能节点 TP5、TP6、TP7 电容保持时间与反灌路径
TP5 主控3.3V引脚附近 TP4、复位信号 保存期间主控实际供电裕量
TP6 掉电告警 TP4、TP7 定义15ms保存窗口的起点
TP7 固件保存完成GPIO TP4、存储读回 定义保存终点;随后验证记录有效性

六、样机验收不只看“能否工作”

测试项 测试条件 本文示例通过条件
通信负载跃变 9V、12V、15V;0.2A↔2A;记录电流边沿 上下冲≤200mV,模块端电压3.45~4.15V
大电容启动 输入边界、空载、模块连接三种状态 无异常限流、反复启动或模块误复位
掉电保存 移除后备电池;硬切断与慢速降压 15ms内完成提交,读回记录有效
随机断电 在更新和提交不同阶段执行1000次首轮筛查 不接受破损记录,重启恢复路径符合设计
温度边界 −40℃、25℃、85℃重复关键项目 通信电源和数据保存均满足目标
并发干扰 通信发送时触发允许的执行动作 主控不复位,记录和通信状态可恢复
短路恢复 通信支路受控短路后释放 保护动作明确,自动或受控恢复正常

1000次断电属于工程筛查,不代表量产失效率。样机进入下一阶段前,还要结合产品市场完成计量校准、协议一致性、EMC、安全与环境可靠性验证。

七、新设计还要检查器件状态与证据链

截至2026年9月13日,SGM61330原厂页面显示为Active。旧型号SGM6130已标记“不推荐用于新设计”。项目BOM应记录完整订货型号、数据手册版本、替代关系、样品测试版本和定版日期。 类似器件不能只凭输入电压和输出电流直接替换,还要核对引脚、控制方式、开关频率、外围器件、保护行为与封装散热。

资料来源:圣邦微三相电表应用框图SGM61330原厂产品页及A.3数据手册

圣邦微电子应用开发解决方案和代理商

霏帆科技可围绕圣邦微器件提供产品资料、样品、BOM供应与项目沟通支持。提交三相电表项目时,建议一并提供电源树、输入范围、负载电流波形、原理图版本、异常示波器截图和预计用量。

项目咨询:深圳市霏帆科技有限公司 电话:13430436368

TOP
圣邦微代理商

延伸阅读

询价不止于价格,更是一份保障

专业团队为您提供极具竞争力的价格和可靠交期
选择我们您获得的是原装正品与全程无忧的服务