1. 项目背景与核心需求
在工业自动化、新能源系统和智能硬件开发领域,直流电参数的精确采集一直是嵌入式工程师的必修课。去年我在开发一款光伏储能控制器时,就曾为如何实现0.5%精度的电压电流检测折腾了整整两周。市面上常见的方案要么成本过高,要么抗干扰能力不足,最终基于STM32设计了一套性价比极高的解决方案。
这个方案的核心在于解决三个实际问题:
- 如何将0-100V/0-20A的直流信号安全地转换为MCU可处理的0-3.3V范围
- 在存在PWM噪声的环境中保证采样精度
- 通过软件算法实现温度漂移补偿
2. 硬件设计关键点解析
2.1 信号调理电路设计
高压侧采用TI的INA282电流检测放大器搭配0.005Ω锰铜分流器,实测在20A满量程时温升仅2.3℃。电压检测则使用ADI的AD8479分压方案,其共模抑制比(CMRR)达到94dB,能有效抑制光伏系统中的共模干扰。
重要提示:分流器一定要选择低温漂系数的材质,普通铜合金每℃温漂可达0.4%,会严重影响精度。
电路设计中特别注意了:
- 在运放输入端增加TVS二极管防护
- 采用1%精度的金属膜电阻分压网络
- 所有模拟走线做guard ring保护
2.2 STM32外设配置
使用STM32F303的16位ADC模块,配置要点:
c复制hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_16B;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.NbrOfConversion = 2; // 电压电流双通道
采样时序上采用交替触发模式,电压电流间隔5μs采样,避免通道间串扰。
3. 软件算法实现
3.1 数字滤波处理
针对光伏逆变器产生的20kHz PWM噪声,设计了三重滤波方案:
- 硬件RC滤波(截止频率1kHz)
- 软件滑动平均滤波(窗口宽度16)
- 递推中值滤波(采样点数5)
实测在满载工况下,噪声峰峰值从原始信号的120mV降低到8mV以内。
3.2 温度补偿算法
通过内置温度传感器采集环境温度,建立补偿模型:
c复制float compensate_current(float raw, float temp) {
const float k = -0.0012; // 温漂系数
return raw * (1 + k * (temp - 25));
}
在-20℃~60℃范围内,将温漂误差控制在0.2%FS以内。
4. 实测数据与优化
4.1 校准流程
采用六点校准法(0%、20%、40%、60%、80%、100%),使用Fluke 8846A标准源:
- 先校准零点(短接输入)
- 再校准满量程(施加标准信号)
- 中间点采用最小二乘法拟合
4.2 典型性能指标
| 参数 | 电压通道 | 电流通道 |
|---|---|---|
| 测量范围 | 0-100V | 0-20A |
| 分辨率 | 1mV | 1mA |
| 线性度误差 | ±0.1% | ±0.15% |
| 温漂(0-50℃) | ±30ppm | ±50ppm |
5. 工程经验分享
-
PCB布局要特别注意:
- 将模拟部分与数字部分分区布局
- 分流器采用开尔文接法
- 避免在ADC基准源附近走高频信号线
-
调试时发现的典型问题:
- 未接地的示波器探头会引入50Hz干扰
- 采样时序不当会导致通道间串扰
- 软件滤波过度会引入相位延迟
-
成本优化方案:
- 可用STM32G4系列替代F3系列
- 普通运放+外部基准源方案可降低成本30%
- 分流器改用贴片式可节省空间
这套方案已成功应用于3kW光伏控制器项目,连续运行18个月无故障。对于需要直流参数检测的场合,建议优先考虑这种"高精度运放+16位ADC"的架构,相比专用计量芯片更具灵活性。