1 简介
本文引用地址:
电表芯片在现代社会的用处越来越多,比如智能电表、开关电源、逆变电源和智能插座等领域,为各种设备和系统提供精确可靠的电能计量支持。以上这些电能计量功能,都离不开电表芯片对电压电流的采样。
本项目正是通过MSPM0L1306 芯片对电表芯片的通信和控制,实现一个简单的电表功能,从而实时获得设备的用电量。本控制的设计流程是:LPMSPM0L1306作为主控MCU芯片, 与电能表芯片HT7017 进行通信,实时读取HT7017 芯片采集的电压,电流,并计算出设备消耗的功率。最后通过LCD 显示屏显示出来。
Bom表(所用元器件的型号)
3 软件开发:
4 开发平台
TI的CCS V12.7.0开发环境。
5 外设的配置
本项目外设主要由串口和I2C 接口来驱动。
1. I2C 接口的配置
I2C 接口用于MCU 对1.8 英寸彩色显示屏的驱动。配置为9600 波特的速率,同时开启接收中断,配置发送与接收的缓冲区。
2. 串口的配置
选择串口UART0,如下图所示:
配置输出的IO:TX 为PA8 、RX 为PA9,如下图所示:
代码保存后生成工程文件。
6 公共代码
I2C 发送与接收代码
1. I2C 接收中断函数的实现:
/*i2c_app.c 文件*/
#include “i2c_app.h”
/ /假设的底层 I2C写函数
bool HAL_I2C_Write(uint8_t dev_addr, uint8_t
*data, uint16_t length) {
// 底层I2C 写操作
// 返回true 表示成功,false 表示失败
return true;
}
// 假设的底层I2C 读函数
bool HAL_I2C_Read(uint8_t dev_addr, uint8_t
*buffer, uint16_t length) {
// 底层I2C 读操作
// 返回true 表示成功,false 表示失败
return true; // 示例中总是返回成功
}
void I2C_Init(void) {
// 初始化I2C 硬件接口
// 这里应该是调用底层库的初始化函数
// 例如:HAL_I2C_Init(&hi2c1);
}
bool I2C_Write(uint8_t dev_addr, uint8_t reg_
addr, uint8_t *data, uint16_t length) {
uint8_t tx_buffer[length + 1]; // +1 for register
address
tx_buffer[0] = reg_addr;
for (uint16_t i = 0; i < length; i++) {
tx_buffer[i + 1] = data[i];
}
return HAL_I2C_Write(dev_addr, tx_buffer,
length + 1);
}
bool I2C_Read(uint8_t dev_addr, uint8_t reg_
addr, uint8_t *buffer, uint16_t length) {
// 发送寄存器地址
if (!HAL_I2C_Write(dev_addr, ®_addr, 1)) {
return false;
}
// 读取数据
return HAL_I2C_Read(dev_addr, buffer,
length);
}
/*i2c_app.h 文件*/
#ifndef I2C_APP_H
#define I2C_APP_H
#include
// 初始化I2C 接口
void I2C_Init(void);
// 向I2C 设备写入数据
bool I2C_Write(uint8_t dev_addr, uint8_t reg_
addr, uint8_t *data, uint16_t length);
// 从I2C 设备读取数据
bool I2C_Read(uint8_t dev_addr, uint8_t reg_
addr, uint8_t *buffer, uint16_t length);
#endif // I2C_APP_H
7 I2C驱动
在工程中添加I2C 的驱动封装I2C_app.c/h
这个驱动封装了读写两个驱动,可实现与硬件低层的解耦。
8 LCD
使用公有的LCD驱动库,只需要封装LCD_WR_Byte即可实现驱动的移植。
以上是主要代码的介绍。
9 结束语
本项目主要是在利用Ti 的MSPM0L1306 这颗优秀的MCU 来实现对单相交流电压电能的采集。利用芯片的AD 口和I2C 通讯,采集到的数据可以通过UART、I2C 或其他通信接口发送到上位机进行进一步的处理和分析;通过对ADC 的输出进行适当的信号处理,例如通过软件滤波或算法来减少噪声和干扰,从而得到更准确的电压读数。
“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)