这个三相交流电测量RTU项目采用了STM32F103C8T6作为主控芯片,搭配专用电能计量芯片ATT7022,实现了工业级电力参数测量系统。在实际应用中,这套方案已经稳定运行超过2000小时,测量精度达到0.5级标准。
核心测量功能包括:
通信方面采用工业标准的RS485物理层,配合Modbus-RTU协议,波特率可配置为9600/19200/38400bps。系统支持同时响应多个主站查询,实测在20节点总线网络中通信成功率可达99.9%。
选择STM32F103C8T6主要基于三点考虑:
ATT7022作为专用计量芯片,其优势在于:
电源电路:
采用两级滤波设计,第一级TVS管+π型滤波器抑制浪涌,第二级LC滤波消除高频噪声。实测在4kV群脉冲干扰下,电源纹波仍小于50mV。
信号调理电路:
电压采样使用电阻分压网络(精度0.1%的金属膜电阻),电流采样通过CT互感器接入。特别注意在ATT7022的VREF引脚并联4.7μF+100nF电容,保证基准电压稳定。
RS485接口:
选用SN65HVD72芯片,总线端增加120Ω终端电阻和10kΩ上下拉电阻。防护电路采用SM712 TVS阵列,可承受±15kV ESD冲击。
ATT7022的SPI时序有特殊要求:
寄存器读取函数优化后实现:
c复制uint32_t ATT7022_ReadReg(uint8_t addr) {
uint32_t data = 0;
SPI_CS_LOW();
HAL_SPI_Transmit(&hspi1, &addr, 1, 100);
HAL_SPI_Receive(&hspi1, (uint8_t*)&data, 3, 100);
SPI_CS_HIGH();
return data >> 8; // 丢弃无效低位
}
电压有效值计算公式:
[ U_{rms} = \frac{REG_{U} \times U_{base}}{32768} \times PT_{ratio} ]
其中:
功率因数计算需注意:
当有功功率接近0时,直接使用芯片输出值可能产生跳变,需增加软件滤波:
c复制float CalcPF(float P, float S) {
static float pf_filter = 1.0;
if(S > 10) { // 10W阈值
pf_filter = 0.9*pf_filter + 0.1*(P/S);
}
return pf_filter;
}
采用状态机方式解析Modbus帧:
c复制typedef enum {
MB_RX_IDLE,
MB_RX_ADDR,
MB_RX_FUNC,
MB_RX_DATA,
MB_RX_CRC
} ModbusState;
void USART1_IRQHandler(void) {
static ModbusState state = MB_RX_IDLE;
uint8_t data = USART1->DR;
switch(state) {
case MB_RX_IDLE:
if(data == SLAVE_ADDR) {
state = MB_RX_ADDR;
mb_frame.index = 0;
mb_frame.buf[mb_frame.index++] = data;
}
break;
// ...其他状态处理
}
}
支持的功能码包括:
电压校准:
相位校准:
重要提示:校准前务必断开负载,校准后需写保护寄存器0x28开启数据保护
问题1:SPI通信失败
问题2:测量值跳变
问题3:Modbus响应超时
采样速率优化:
ATT7022支持最高8kHz的采样率,但实际应用中可设置为3.2kHz,在STM32中配置定时器触发DMA读取,减少CPU开销。
数据滤波处理:
对关键参数采用滑动平均滤波:
c复制#define FILTER_DEPTH 8
typedef struct {
float buf[FILTER_DEPTH];
uint8_t index;
} Filter;
float UpdateFilter(Filter* f, float new_val) {
f->buf[f->index++] = new_val;
if(f->index >= FILTER_DEPTH) f->index = 0;
float sum = 0;
for(int i=0; i<FILTER_DEPTH; i++) {
sum += f->buf[i];
}
return sum / FILTER_DEPTH;
}
c复制void ATT7022_Sleep(void) {
ATT7022_WriteReg(0x10, 0x0001); // 进入休眠模式
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭基准电压
}
这个项目从原型到量产经历了三次硬件改版,最重要的经验是:在初期就要做好EMC设计,包括电源滤波、信号走线隔离和机壳接地等。现在这套方案已经成功应用于智能配电柜和能源管理系统,累计出货超过500台。