当前位置: 首页 > news >正文

实战:用 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 读取数据帧,解析物理量
上层扩展告警、图表、云端上传、数据记录

视频教程请关注 B 站:“嵌入式 Jerry”

http://www.xdnf.cn/news/909505.html

相关文章:

  • 华科:视觉大模型动态剪枝框架FlowCut
  • onSaveInstanceState() 和 ViewModel 在数据保存能力差异
  • nginx的安装
  • 《100天精通Python——基础篇 2025 第5天:巩固核心知识,选择题实战演练基础语法》
  • 软件测评服务如何依据标准确保品质?涵盖哪些常见内容?
  • SQLAlchemy 中的 func 函数使用指南
  • [密码学实战]C语言使用SDF库构建国密算法RESTful服务(五)
  • janus客户端源码分析
  • 【计算机网络】非阻塞IO——poll实现多路转接
  • AIGC 基础篇 Python基础 01
  • 使用阿里云百炼embeddings+langchain+Milvus实现简单RAG
  • PCB设计教程【大师篇】——STM32开发板电源设计(LDO、DCDC)
  • 深入Kubernetes源码阅读指南:从环境搭建到核心原理剖析
  • 【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
  • 在 Caliper 中执行不同合约的方法
  • Varjo如何帮助Entrol最大化其XR模拟器的性能
  • 探索GIS局部放电监测:PRPD与PRPS图谱的奥秘
  • 好子集的数目之解决方案
  • EDA断供危机下的冷思考:中国芯片设计软件的破局之道优雅草卓伊凡
  • Executors for C++- A Long Story
  • C++.OpenGL (4/64)纹理(Texture)
  • Vue3 GSAP动画库绑定滚动条视差效果 绑定滚动条 滚动条动画 时间轴
  • 破壁焕新能:DeviceNET转EtherNet/IP网关赋能烟草智能制造跃迁
  • Redis 主从 + 哨兵集群部署
  • Python爬虫伪装
  • 校招 Java 面试基础题目解析学习指南含新技术实操要点
  • Android第十三次面试总结基础
  • 【工具变量】上市公司企业华证esg数据集(2009-2024年)
  • 在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用
  • 2025远离Deno和Fresh