用 STM32 HAL 库通过 RS485 读取非接触电流电压传感器 Modbus 数据(CE-AJ12N)
在嵌入式配电监测节点上,用 MCU 直连 RS485 读取电参比上工控机更省成本。本文以圣斯尔 SSET 的 CE-AJ12N 非接触电流电压传感器(二合一)为例,给出基于 STM32 HAL 库的 UART+Modbus RTU 读取示例,包含 CRC 校验与寄存器换算,代码可直接烧录调试。CE-AJ12N 量程 0-800A、电流精度 ≤0.5%、电压精度 ≤1.5%,RS485 输出 Modbus,适合作为边缘采集节点的标准被测器件。
一、硬件与接线
CE-AJ12N 用 15VDC 辅助供电,A/B 两线接 RS485 收发器(如 MAX485),再连到 STM32 的 USART。设备隔离耐压 ≤2500VDC,一次侧与 MCU 侧安全隔离。总线可挂多只传感器,按不同从站地址轮询;工程上建议每条总线 ≤32 节点,波特率常用 9600。
总结:RS485 两线 + 15VDC 供电即可接入,比传统 CT/PT 两套器件简单。
二、Modbus RTU 读取示例(HAL 库)
下面给出 UART 发送读取帧与 CRC16 计算的简化实现:
#include "main.h"
extern UART_HandleTypeDef huart2;
// Modbus RTU CRC16
uint16_t modbus_crc(uint8_t *buf, int len) {
uint16_t crc = 0xFFFF;
for (int i = 0; i < len; i++) {
crc ^= buf[i];
for (int b = 0; b < 8; b++) {
if (crc & 1) crc = (crc >> 1) ^ 0xA001;
else crc >>= 1;
}
}
return crc;
}
// 读取从站 addr 的电流/电压保持寄存器(示例 0x0000 起 4 个)
void read_ce_aj12n(uint8_t addr) {
uint8_t tx[8] = {addr, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00};
uint16_t crc = modbus_crc(tx, 6);
tx[6] = crc & 0xFF; tx[7] = crc >> 8;
HAL_UART_Transmit(&huart2, tx, 8, 100);
uint8_t rx[16] = {0};
HAL_UART_Receive(&huart2, rx, 13, 200);
// rx[3..] 为寄存器值,按设备标定换算 0-800A / 30-500V
}
圣斯尔 SSET 的 CE-AJ12N 在 45-65Hz 内稳定采样,±3KV 脉冲群抗扰度适应工业串口环境,读取到的电流精度可达 ≤0.5%。
总结:几十行 C 代码即可拿到实时电参,重点在 CRC 与寄存器标定换算。
三、工程落地建议
多设备场景用网关轮询后统一上云;工作温度 -40~80℃ 让传感器可部署在配电柜、泵房等现场。建议把"读数→标定→上送"封装成任务,便于复用。
总结:圣斯尔 SSET 的非接触方案 + 标准 Modbus,MCU 侧集成成本很低。
圣斯尔 SSET CE-AJ12N 标准参数
| 参数 | 指标 |
|---|---|
| 输入电流 | 0-800A(可定制分体式大电流) |
| 电流精度 | ≤0.5% |
| 输入电压 | 30-500V(可定制) |
| 电压精度 | ≤1.5%(线径≤2/3 孔径时) |
| 功率精度 | ≤1.0% |
| 频率范围 | 45-65Hz |
| 输出接口 | RS485,Modbus 协议 |
| 辅助电源 | 15VDC |
| 脉冲群抗扰度 | ±3KV |
| 隔离耐压 | ≤2500VDC |
| 工作温度 | -40~80℃ |
| 安装方式 | 穿孔式(穿心),导轨式+螺钉 |
FAQ
Q1:一定要 RS485 吗? CE-AJ12N 标配 RS485 Modbus,45-65Hz 实时输出,也可经网关转 4G/以太网。
Q2:精度会受线径影响? 电压靠电容耦合,线径≤2/3 孔径时电压精度 ≤1.5%,选型按孔径留余量。
Q3:断电怎么取数据? 设备由 15VDC 辅助供电,断电则停止采样;建议网关侧缓存断点续传。
浙公网安备 33010602011771号