2、能耗监测硬件基础:常见传感器、微控制器选型与数据采集模块设计

各位同学,咱们今天聊聊能耗监测的硬件基础。说白了,就是怎么把电流、电压这些物理量,变成微控制器能读懂的信号。我做了这么多年嵌入式,发现很多新手一上来就追求高精度传感器、高性能芯片,结果项目做出来成本高、功耗大,还不好用。其实,选对器件比选贵器件重要得多。

2.1 常见传感器:电流、电压、功率

先说说传感器。能耗监测的核心,就是测电流和电压,然后算出功率。我见过不少方案,有的用分立元件搭,有的用集成芯片。我个人习惯,能用集成芯片就别自己搭,省心省力。

2.1.1 电流传感器

电流测量,主流方案有两种:

  • 霍尔效应传感器:比如ACS712、ACS758系列。非接触式测量,隔离性好。我曾在项目中用ACS712测电机电流,精度够用,但要注意它的输出有零点偏移,需要软件校准。
  • 采样电阻+差分放大器:比如INA219、INA226。精度高,但需要串联在电路中。适合低侧或高侧电流检测。

我的经验:如果你测的是交流电,优先考虑霍尔传感器。直流的话,INA219这类芯片更香。记得,采样电阻的功率要留够余量,我曾经因为电阻功率选小了,直接冒烟了……

2.1.2 电压传感器

电压测量相对简单。常见做法:

  • 电阻分压:最基础的方法。用两个电阻把高压降到ADC能接受的0-3.3V范围。注意分压电阻的阻值要够大,减少对被测电路的影响。
  • 专用电压检测芯片:比如ZMPT101B(交流)、ADS1115(高精度ADC)。我建议,如果被测电压超过36V,一定要用隔离方案,安全第一。

避坑指南:我曾经在测220V市电时,直接用电阻分压,结果地线没处理好,导致整个板子带电。后来老老实实用了电压互感器。嗯,这里要注意,高压测量必须考虑隔离!

2.1.3 功率计算

有了电流和电压,功率就好算了。直流功率就是P=U×I。交流功率稍微复杂点,要考虑功率因数。我一般用专用计量芯片,比如HLW8032、BL0937,它们内部集成了乘法器和有效值计算,直接输出功率值。

2.2 微控制器选型:STM32 vs ESP32

微控制器是整个系统的脑子。选型时,我主要看三点:处理能力、外设资源、功耗。目前市面上最常用的就是STM32和ESP32。你想想看,这两个芯片有什么区别?

对比项 STM32(如F103、L4系列) ESP32
内核 Cortex-M3/M4 Xtensa LX6双核
主频 72MHz~240MHz 240MHz
ADC精度 12位,部分型号16位 12位
无线功能 无(需外挂WiFi/蓝牙) 内置WiFi+蓝牙
功耗 低功耗模式优秀(L4系列) 中等,深度睡眠约10μA
开发难度 中等,HAL库较复杂 较低,Arduino兼容
成本 中等(F103约10元) 较低(约15元,含无线)

我个人习惯,如果项目需要无线传输数据,直接上ESP32,省一个WiFi模块的钱和空间。如果项目对功耗要求极高,比如电池供电,我会选STM32L4系列,它的低功耗模式真的强。

注意:ESP32的ADC线性度不太好,测电压时误差可能达到2%~3%。如果你需要高精度测量,建议外挂一个ADS1115。我踩过这个坑,当时用ESP32的ADC测电池电压,结果数据波动很大,后来换了外部ADC才解决。

2.3 数据采集模块设计

数据采集模块,就是把传感器信号调理好,送到微控制器的ADC里。设计时,我重点关注信号调理和抗干扰。

2.3.1 信号调理电路

传感器输出的信号,往往不是微控制器能直接用的。比如:

  • 电流传感器输出:ACS712输出是2.5V±0.185V/A,需要偏置到0-3.3V范围。
  • 电压分压:分压后的信号可能很微弱,需要运放放大。

我常用的调理电路是这样的:

// 伪代码:信号调理流程
1. 传感器输出 -> 低通滤波器(RC,截止频率约1kHz)
2. 滤波后 -> 电压跟随器(运放,提高驱动能力)
3. 跟随器输出 -> 偏置电路(将信号调整到ADC输入范围)
4. 偏置后 -> 限幅二极管(保护ADC引脚,防止过压)
5. 最终 -> 微控制器ADC输入

关键点:滤波器的截止频率要根据信号频率来定。测50Hz工频信号,截止频率设100Hz就够了。我见过有人设了10kHz,结果高频噪声全进来了,数据根本没法看。

2.3.2 抗干扰设计

能耗监测环境往往有电机、开关电源等强干扰源。抗干扰设计做不好,数据就是一堆废纸。我总结了几条经验:

  • 模拟地和数字地分开:用0欧电阻或磁珠单点连接。别问我为什么,我试过不分开,ADC读数跳得像心电图。
  • 电源去耦:每个芯片的电源引脚旁放一个0.1μF陶瓷电容,靠近引脚放置。
  • PCB布线:传感器信号线尽量短,远离高频信号线。如果必须交叉,用GND层隔离。

我的小技巧:在ADC采样引脚和GND之间并联一个100pF的电容,可以有效滤除高频噪声。这个电容值是我反复试出来的,效果不错。

2.3.3 采样策略

数据采集不是一直采就行。我一般用定时器触发ADC,固定采样率。比如测50Hz交流电,采样率设1kHz,每个周期采20个点,然后做均方根计算。

// 示例:定时器触发ADC采样(伪代码)
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
    uint32_t adc_value = HAL_ADC_GetValue(hadc);
    // 将adc_value转换为电压值
    float voltage = adc_value * 3.3f / 4096.0f;
    // 存入环形缓冲区
    buffer[write_index++] = voltage;
    if (write_index >= BUFFER_SIZE) write_index = 0;
}

嗯,这里要注意,采样率不能太高,否则CPU忙不过来。我一般把采样和计算分开,采样用DMA,计算在主循环里做。

小结

好了,这一章的内容就这些。总结一下:传感器选型要匹配精度和成本,微控制器选型要看无线需求和功耗,数据采集模块设计要重视信号调理和抗干扰。说白了,硬件设计就是平衡的艺术。下一章咱们聊聊通信协议,到时候见。