实战:用 i.MX8MP 读取 220V 电流信息的完整方案(HLW8032 接入)
本文将讲解如何安全、高效地实现 220V 交流电的电流检测,通过 HLW8032 电能计量芯片将数据传输给 NXP i.MX8MP SoC,最终实现软件层的数据采集与上层处理。
一、为什么不能直接把 220V 接到 SoC?
- i.MX8MP 的 GPIO、电源、通信接口电压为 1.8V / 3.3V
- 220V 属于强电,超过 5V 会直接烧毁芯片
- 强电和弱电必须做 电气隔离(如光耦、变压器)
二、整体架构设计
系统结构图:
┌────────────┐│ 220V AC │└─────┬──────┘│┌───────▼──────────┐│ 电流互感器 (CT/SCT) │└───────┬──────────┘│┌───────▼──────────┐│ HLW8032 芯片 │ ← UART└───────┬──────────┘│┌───────▼──────────┐│ i.MX8MP SoC │└───────┬──────────┘│┌───────▼────────────┐│ Linux 驱动 / 应用层 │└────────────────────┘
三、硬件设计要点
1. 电流/电压采集模块选择
我们选择 HLW8032,它具备以下优势:
特性 | 描述 |
---|---|
可测参数 | 电压、电流、有功功率 |
通信接口 | UART(TTL电平) |
适合嵌入式 | 输出为数字数据,免除 ADC 调理 |
安规设计好 | 外围包含隔离和滤波 |
2. HLW8032 典型连接图
┌────────────┐
220V 火线───┤ 分压电阻 ├────┐└────────────┘ │▼┌────────────┐│ HLW8032 │零线──────┬────▶│ 内部电压采样 ││ └────────────┘电流互感器─┘ │UART TX ──────▶ i.MX8MP UART RX
3. 接口要求说明
接口 | 描述 |
---|---|
UART(TTL) | 接 i.MX8MP 的 UART RX(需注意电平兼容) |
VCC | 使用 HLW8032 提供的 5V 电源 |
GND | 接地(注意共地或加隔离) |
⚠️ 注意:UART 信号线不承担高压传输,仅传送采样后的数字数据。必须与 220V 高压部分充分隔离!
4. 电气隔离设计
推荐隔离措施:
- UART 使用 光耦隔离模块(如 PC817 + 三极管)
- 电流互感器选择 封装式非接触型号 SCT-013(输出为 0~1V)
- PCB 上强电与弱电间距 ≥ 5mm
- 电源建议使用 双电源隔离变压器(一边供 HLW8032,一边供 SoC)
四、软件设计方案
1. Linux 下启用串口
确认 i.MX8MP 上对应 UART 口可用,如 UART4
:
设备树配置示例(简化版)
&uart4 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_uart4>;status = "okay";
};
确认设备挂载为 /dev/ttymxc3
2. 用户空间数据读取程序
HLW8032 默认串口参数:
- 波特率:4800bps
- 数据位:8
- 停止位:1
- 校验位:无
示例读取程序(C语言)
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <termios.h>int main() {int fd = open("/dev/ttymxc3", O_RDONLY | O_NOCTTY);if (fd < 0) {perror("open");return -1;}struct termios tty;tcgetattr(fd, &tty);cfsetispeed(&tty, B4800);cfsetospeed(&tty, B4800);tty.c_cflag |= (CLOCAL | CREAD);tty.c_cflag &= ~PARENB; // 无奇偶校验tty.c_cflag &= ~CSTOPB;tty.c_cflag &= ~CSIZE;tty.c_cflag |= CS8;tcsetattr(fd, TCSANOW, &tty);uint8_t buffer[16];while (1) {int len = read(fd, buffer, sizeof(buffer));if (len > 0) {printf("recv: ");for (int i = 0; i < len; i++) {printf("%02X ", buffer[i]);}printf("\n");}usleep(500000);}close(fd);return 0;
}
⚠️ HLW8032 的数据格式可查阅其规格书:通常为固定帧头、功能位、电流电压数据、高低字节和校验和。
3. 数据处理建议
-
建议使用
CRC
校验每帧数据完整性 -
将数据解析为物理量单位(如电压单位为 0.01V、电流单位为 0.001A)
-
可选功能:
- 报警输出(如超过额定电流)
- 写入 SQLite 或通过 MQTT 远程上传
- 上层界面显示(如 Qt + 图表)
五、应用场景推荐
场景 | 用途 |
---|---|
工业设备监控 | 实时检测用电情况,判断设备状态 |
智能插座 | 检测当前功率、统计用电量 |
能耗统计系统 | 多通道并发采集各路电流,集中上报 |
六、小结
项目 | 内容说明 |
---|---|
芯片选择 | HLW8032(电压、电流、功率采集) |
接口类型 | TTL UART 接入 i.MX8MP |
安全设计 | 强弱电隔离、光耦、互感器使用 |
软件读取 | 使用 UART 读取数据帧,解析物理量 |
上层扩展 | 告警、图表、云端上传、数据记录 |