2、硬件核心组件解析:主控芯片选型(STM32/ESP32)、电源管理模块(PMIC)、电流/电压传感器(INA226/ACS712)

做能耗监测,说白了就是三件事:选对脑子、管好电、测准数。脑子就是主控芯片,电靠PMIC管,数靠传感器采。这三样选不对,后面写再多代码也是白搭。

我这些年经手过不下二十个能耗监测项目,踩过的坑能写满一本笔记本。今天就把核心硬件的选型思路和实战经验,掰开了讲给你听。

2.1 主控芯片选型:STM32 vs ESP32

选主控,我习惯先问自己三个问题:
- 要不要联网?
- 功耗要求多严?
- 成本预算多少?

这两个芯片我都用过,各有各的脾气。

2.1.1 STM32:稳如老狗

STM32的优势就一个字——。工业级温度范围、丰富的外设、成熟的生态。我在一个电力监测项目里用过STM32F103,连续跑了三年没重启过一次。

型号 适用场景 典型功耗 我推荐的理由
STM32F103 低功耗、有线监测 ~50mA(运行) 资料最多,新手友好
STM32L4 电池供电场景 ~8μA(待机) 低功耗模式真香
STM32WB 需要蓝牙 ~5mA(BLE广播) 双核,省一颗芯片
我的小技巧: 如果项目对实时性要求高(比如1ms内必须响应中断),我无脑选STM32。它的中断响应时间比ESP32稳定得多。

2.1.2 ESP32:能联网就是王道

ESP32最大的卖点是自带Wi-Fi和蓝牙。你想想看,一颗芯片搞定主控+通信,BOM成本直接砍半。

我记得有个智能插座项目,客户要求成本控制在30块以内。用STM32+外挂Wi-Fi模块,光通信部分就要15块。换成ESP32,一颗芯片10块钱搞定,还多出两个ADC通道。

对比项 STM32F103 ESP32
主频 72MHz 240MHz
RAM 20KB 520KB
联网能力 需外挂 内置Wi-Fi/BLE
ADC精度 12位 12位(但噪声大)
典型价格 ¥8-15 ¥10-18
注意: ESP32的ADC我吃过亏。它的12位ADC实际有效位数只有9-10位,而且受Wi-Fi射频干扰严重。如果你要测高精度模拟信号,建议外挂ADC芯片,或者老老实实用STM32。

2.1.3 我的选型决策树

嗯,这里我直接给个决策逻辑,你照着走就行:

  1. 需要联网吗? 是 → ESP32;否 → 看第2步
  2. 电池供电? 是 → STM32L4;否 → 看第3步
  3. 成本敏感? 是 → STM32F030(2块钱);否 → STM32F103
  4. 需要大量计算? 是 → ESP32(双核240MHz);否 → 随便选

2.2 电源管理模块(PMIC)

电源管理这块,我见过太多人翻车了。说白了,PMIC就是给整个系统喂饭的——饭喂不好,芯片再牛也白搭。

2.2.1 核心参数怎么看

选PMIC,我只看三个参数:

  • 静态电流(Iq):电池供电场景,Iq必须小于10μA。我有个项目用TPS782,Iq只有0.5μA,一节CR2032撑了两年。
  • 转换效率:DC-DC的效率一般在85%-95%,LDO的效率就是Vout/Vin。电池从4.2V降到3.3V,用LDO效率只有78%,白白浪费22%的电。
  • 纹波噪声:给ADC供电,纹波要小于10mV。否则你的采样值会像心电图一样乱跳。
型号 类型 静态电流 效率 适合场景
TPS782 LDO 0.5μA Vout/Vin 超低功耗待机
TPS62130 DC-DC 17μA 95% 电池供电主系统
MP2307 DC-DC 1.5mA 92% 12V转5V,大电流
避坑指南: 我曾经在一个产品里用了某国产LDO,手册写Iq 2μA,实测8μA。后来学乖了,每次打样前先焊10片测静态电流,取平均值。别信手册,信你的万用表。

2.2.2 电源时序

多路供电的系统,上电顺序搞反了,芯片会闩锁(latch-up),直接烧掉。我一般这样处理:

// 伪代码:电源时序控制
void power_sequence(void) {
    // 1. 先开主电源3.3V
    PMIC_EN_MAIN = 1;
    delay_ms(10);  // 等电压稳定
    
    // 2. 再开IO口电源1.8V
    PMIC_EN_IO = 1;
    delay_ms(5);
    
    // 3. 最后开传感器电源5V
    PMIC_EN_SENSOR = 1;
}

2.3 电流/电压传感器:INA226 vs ACS712

测电流,我常用的就两种方案:INA226(高精度)ACS712(隔离型)。选哪个,取决于你要测什么。

2.3.1 INA226:精度之王

INA226是I2C接口的电流/电压/功率监测芯片。精度能做到0.1%,分辨率1μV。我做个电池容量计,用INA226配合10mΩ采样电阻,能测到1mA的电流变化。

它的核心用法很简单:

// INA226初始化代码片段
void INA226_Init(void) {
    // 配置为连续测量模式
    uint16_t config = 0x4527;  // 平均128次,转换时间8.2ms
    I2C_Write(INA226_ADDR, 0x00, config);
    
    // 设置校准值(采样电阻10mΩ,最大电流5A)
    uint16_t cal = 0x1000;  // 根据公式计算
    I2C_Write(INA226_ADDR, 0x05, cal);
}

// 读取电流(单位:mA)
float INA226_ReadCurrent(void) {
    int16_t raw = I2C_Read(INA226_ADDR, 0x04);
    return raw * 2.5f;  // 根据校准值换算
}
我的经验: INA226的采样电阻布局很关键。电阻要靠近芯片,走线要开尔文连接(四线制)。我见过有人用普通两线制,结果测出来的电流误差5%以上。

2.3.2 ACS712:隔离安全

ACS712是霍尔效应电流传感器,自带隔离。测220V交流电时,我必用ACS712。它的隔离电压高达2.1kV,安全第一。

对比项 INA226 ACS712
测量方式 分流电阻 霍尔效应
精度 0.1% 1.5%
隔离 2.1kV
带宽 DC DC~80kHz
典型价格 ¥8 ¥12
适用场景 电池、DC-DC 交流电、电机
注意: ACS712的输出有2.5V的直流偏置。测交流电时,要用ADC采到偏置电压,然后做减法。我刚开始做时忘了这茬,读出来的电流值一直偏大,查了两天才发现。

2.3.3 实战选型建议

最后给个总结:

  • 测电池放电曲线 → INA226,精度高,能捕捉到微小的电压变化
  • 测220V家电功耗 → ACS712,安全隔离,不担心触电
  • 测电机电流 → ACS712,带宽高,能捕捉到启动浪涌
  • 测太阳能MPPT → INA226,需要精确的功率计算

嗯,硬件选型这块,说白了就是权衡。没有完美的芯片,只有最适合你项目的方案。我建议你拿到芯片后,先搭个最小系统跑一跑,别急着画PCB。有些坑,焊几根杜邦线就能发现,比打样回来再改省事多了。