基于上海钜泉科技HT7017单相计量芯片的参考例程实现
一、HT7017芯片简介
HT7017是上海钜泉科技推出的单相电能计量专用芯片,集成高精度Sigma-Delta ADC、数字信号处理(DSP)单元及UART通信接口,支持电压、电流、有功功率、无功功率、电能等参数的实时测量,适用于智能电表、充电桩等电力计量场景。其核心特性包括:
-
工作电压:3.0V~5.5V(宽电压域);
-
采样速率:31.2kHz(高分辨率);
-
动态范围:5000:1(覆盖宽量程);
-
通信接口:UART(支持9600~115200bps);
-
封装形式:SSOP16(小型化)。
二、参考例程框架
HT7017的参考例程基于STM32F103C8T6单片机实现,涵盖芯片初始化、UART通信、数据读取三大核心模块,采用HAL库开发,代码可移植性强。例程框架如下:
三、核心代码实现
1. 系统初始化(时钟、GPIO)
#include "stm32f1xx_hal.h"
UART_HandleTypeDef huart1; // UART1句柄(连接HT7017)
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 配置HSE(外部高速时钟)
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 72MHz系统时钟
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// 配置系统时钟
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
void GPIO_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟(UART1_TX/RX引脚)
}
2. HT7017初始化(UART配置)
HT7017通过UART接口与单片机通信,需配置UART参数(波特率、数据位、停止位)与芯片寄存器(如采样率、通信格式)。
void HT7017_Init(void) {
// 配置UART1(波特率9600,8数据位,1停止位,无校验)
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
HAL_UART_Init(&huart1);
// 发送初始化命令(示例:设置采样率为31.2kHz)
uint8_t init_cmd[] = {0x01, 0x03, 0x00, 0x01, 0x00, 0x01, 0xD5, 0xCA}; // 写寄存器命令(地址0x0001,值0x0001)
HAL_UART_Transmit(&huart1, init_cmd, sizeof(init_cmd), HAL_MAX_DELAY);
}
3. 数据读取与解析
HT7017的测量数据(如电压、电流、电能)存储在内部寄存器中,需通过UART读取并解析。以下是读取电压有效值的示例:
float HT7017_ReadVoltage(void) {
uint8_t read_cmd[] = {0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x25, 0xCA}; // 读寄存器命令(地址0x0002,长度0x0001)
uint8_t recv_buf[7] = {0}; // 接收缓冲区(7字节:地址+功能码+数据长度+数据+CRC)
// 发送读命令
HAL_UART_Transmit(&huart1, read_cmd, sizeof(read_cmd), HAL_MAX_DELAY);
// 接收响应(超时100ms)
HAL_UART_Receive(&huart1, recv_buf, sizeof(recv_buf), 100);
// 解析数据(假设数据格式为16位无符号整数,单位:mV)
uint16_t voltage_raw = (recv_buf[3] << 8) | recv_buf[4];
float voltage = voltage_raw / 1000.0f; // 转换为伏特(V)
return voltage;
}
4. 主函数(循环读取数据)
int main(void) {
HAL_Init(); // 初始化HAL库
SystemClock_Config(); // 配置系统时钟
GPIO_Init(); // 初始化GPIO
HT7017_Init(); // 初始化HT7017
while (1) {
float voltage = HT7017_ReadVoltage(); // 读取电压
float current = HT7017_ReadCurrent(); // 读取电流(类似电压读取函数)
float power = HT7017_ReadPower(); // 读取有功功率(类似电压读取函数)
// 输出结果(通过串口助手或LCD显示)
printf("电压:%.2f V\r\n", voltage);
printf("电流:%.2f A\r\n", current);
printf("功率:%.2f W\r\n", power);
HAL_Delay(1000); // 1秒更新一次
}
}
参考代码 基于上海钜泉科技的单相计量芯片HT7017的参考例程 www.youwenfan.com/contentcnq/56489.html
四、关键模块说明
1. UART通信协议
HT7017采用Modbus RTU协议(或自定义协议)与单片机通信,命令格式如下:
-
写寄存器命令:地址(1字节)+ 功能码(0x03)+ 寄存器地址(2字节)+ 数据长度(2字节)+ 数据(n字节)+ CRC(2字节);
-
读寄存器命令:地址(1字节)+ 功能码(0x03)+ 寄存器地址(2字节)+ 数据长度(2字节)+ CRC(2字节);
-
响应格式:地址(1字节)+ 功能码(1字节)+ 数据长度(1字节)+ 数据(n字节)+ CRC(2字节)。
2. 数据解析
HT7017的测量数据为16位无符号整数(如电压、电流),需根据芯片手册转换为实际物理量。例如:
-
电压有效值:寄存器值 × 0.001(单位:V);
-
电流有效值:寄存器值 × 0.001(单位:A);
-
有功功率:寄存器值 × 0.1(单位:W)。
3. 错误处理
-
通信超时:若UART接收超时(如100ms未收到数据),需重新发送命令;
-
CRC校验:对接收数据进行CRC校验(Modbus RTU采用CRC-16),确保数据正确性;
-
异常值处理:若读取的数据超出合理范围(如电压>250V),需丢弃并重新读取。
五、扩展功能建议
1. 数据存储
将测量数据存储在EEPROM(如AT24C02)或SD卡中,用于后续分析(如电能统计、故障排查)。
2. 通信协议扩展
支持Modbus TCP(通过以太网模块如W5500)或MQTT(通过ESP8266),实现远程数据传输(如上传至云平台)。
3. 校准功能
添加自动校准模块(如通过标准源输入已知电压/电流,调整芯片寄存器值),提高测量精度。
六、注意事项
-
电源稳定性:HT7017的模拟电源(AVDD)需与数字电源(DVDD)分开,避免数字噪声干扰;
-
PCB布局:UART通信线需远离强电线路(如电源线),避免电磁干扰;
-
芯片散热:若长时间工作在满负荷状态,需添加散热片(如HT7017的封装为SSOP16,散热能力有限)。
七、参考文档
-
《HT7017单相电能计量芯片数据手册》(上海钜泉科技);
-
《STM32F103C8T6 HAL库开发手册》(STMicroelectronics);
-
《Modbus RTU协议规范》(Modbus Organization)。

浙公网安备 33010602011771号