基于TI-MSPM0L1306 芯片的电表测量

  作者:彭义祥 时间:2024-12-18来源:EEPW

1   简介

电表芯片在现代社会的用处越来越多,比如智能电表、开关电源、逆变电源和智能插座等领域,为各种设备和系统提供精确可靠的电能计量支持。以上这些电能计量功能,都离不开电表芯片对电压电流的采样。

本项目正是通过MSPM0L1306 芯片对电表芯片的通信和控制,实现一个简单的电表功能,从而实时获得设备的用电量。本控制的设计流程是:LPMSPM0L1306作为主控MCU芯片, 与电能表芯片HT7017 进行通信,实时读取HT7017 芯片采集的电压,电流,并计算出设备消耗的功率。最后通过LCD 显示屏显示出来。

Bom表(所用元器件的型号)

image.png

image.png

图1

image.png

图2

image.png

图3

image.png

图4

image.png

图5

image.png

图6

1734482832324744.png

(产品展示图)

3   软件开发:

4   开发平台

TI的CCS V12.7.0开发环境。

5   外设的配置

本项目外设主要由串口和I2C 接口来驱动。

1. I2C 接口的配置

I2C 接口用于MCU 对1.8 英寸彩色显示屏的驱动。配置为9600 波特的速率,同时开启接收中断,配置发送与接收的缓冲区。

2. 串口的配置

选择串口UART0,如下图所示:

1734482893294277.png

配置输出的IO:TX 为PA8 、RX 为PA9,如下图所示:

1734482929520845.png

1734483089508220.png

代码保存后生成工程文件。

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, &reg_addr, 1)) {

return false;

}

// 读取数据

return HAL_I2C_Read(dev_addr, buffer,

length);

}

/*i2c_app.h 文件*/

#ifndef I2C_APP_H

#define I2C_APP_H

#include <stdint.h>

#include <stdbool.h>

// 初始化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

image.png

这个驱动封装了读写两个驱动,可实现与硬件低层的解耦。

1734483174957635.png

8   LCD

使用公有的LCD驱动库,只需要封装LCD_WR_Byte即可实现驱动的移植。

1734483212617798.png

以上是主要代码的介绍。

9   结束语

本项目主要是在利用Ti 的MSPM0L1306 这颗优秀的MCU 来实现对单相交流电压电能的采集。利用芯片的AD 口和I2C 通讯,采集到的数据可以通过UART、I2C 或其他通信接口发送到上位机进行进一步的处理和分析;通过对ADC 的输出进行适当的信号处理,例如通过软件滤波或算法来减少噪声和干扰,从而得到更准确的电压读数。

(本文来源于《EEPW》202412)

关键词: 202412 MSPM0 电表测量

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版