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

基于TI-MSPM0L1306 芯片的电表测量
2024年12月18日 09:52 电子产品世界

1   简介

本文引用地址:

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

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

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

图1
图1图1
图2图2
图3图3
图4图4
图5图5
图6图6
(产品展示图)
(产品展示图)

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或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片