【esp8266】esp8266 [hlw8032计量IC]使用

文章详细介绍了HLW8032芯片的引脚功能、寄存器配置,包括状态寄存器、电压和电流寄存器等,并阐述了参数计算方法。同时,提供了ESP8266通过UART接口读取HLW8032数据的代码实现,涉及串口配置和数据处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们看下hlw8032相关

1、引脚配置和功能描述

hlw8032芯片引脚图

引脚序号引脚名称输入/输出说明
1VDD芯片电源芯片电源
2IP模拟输入电流差分信号正输入端,最大差分输入电压有效值是±30.9mV
3IN模拟输入电流差分信号负输入端,最大差分输入电压有效值是±30.9mV
4VP模拟输入电压信号正输入端,最大输入电压有效值是±495mV
5GND芯片地芯片地
6TX数字输出UART 数据输出口
7RF输出输出有功高频方波脉冲,占空比 50%
8RX数字输入UART 数据输入口(保留端口,用户不需使用)

2、寄存器说明

序号数据类型数据长度(Byte)描述
1状态寄存器(State REG)1数据状态的指示
2检测寄存器(Check REG)1默认值
3电压参数寄存器(Voltage parameter REG)3默认值
4电压寄存器(Voltage REG)3
5电流参数寄存器(Current Parameter REG)3默认值
6电流寄存器(Current REG)3
7功率参数寄存器(Power parameter REG)3默认值
8功率寄存器(Power REG)3
9数据更新寄存器(Data Updata REG)1功率、电压、电流状态指示
10PF 寄存器(PF REG)2PF 脉冲个数,配合状态寄存器使用,掉电后不保存
11校验和寄存器(CheckSum REG)1数据校验和,用于通讯时验证数据包是否完整

HLW8032 每发送一次完整数据是 24byte; 从寄存器 1(State REG)开发发送,到寄存器
11(CheckSum REG)结束一组数据,一共 11 个寄存器,24 byte 数据。

2.1 状态寄存器(State REG)

在这里插入图片描述1、 当 State REG = 0xaa 时,芯片误差修正功能失效,此时电压参数寄存器、电流参数寄存器和功率参数寄存器不可用;
2、 当 State REG = 0x55 时,芯片误差修正功能正常,此时电压参数寄存器、电流参数寄存器和功率参数寄存器可用,且电压寄存器、电流寄存器和功率寄存器未溢出;
3、 当 State REG = 0xfx 时,芯片误差修正功能正常, 此时电压参数寄存器、电流参数寄存器和功率参数寄存器可用, State REG 的相应位为 1 时表示相应的寄存器溢出,溢出表示电流、电压或功率值非常小,接近 0;

2.2 检测寄存器(Check REG)

Check REG十六进制描述
8bit0x5A默认值

2.3 电压参数寄存器(Voltage Parameter REG)

U Parameter REGHigh ByteMiddle ByteLow Byte
24bit8bit8bit8bit

数据发送顺序:高 8bit–>中 8bit–>低 8bit
此寄存器是默认值

2.4 电压寄存器(Voltage REG)

Voltage REGHigh ByteMiddle ByteLow Byte
24bit8bit8bit8bit

数据发送顺序:高 8bit–>中 8bit–>低 8bit

2.5 电流参数寄存器(Current Parameter REG)

Current ParameterREGHigh ByteMiddle ByteLow Byte
24bit8bit8bit8bit

数据发送顺序:高 8bit–>中 8bit–>低 8bit
此寄存器是默认值

2.6 电流寄存器(Current REG)

Current REGHigh ByteMiddle ByteLow Byte
24bit8bit8bit8bit

数据发送顺序:高 8bit–>中 8bit–>低 8bit

2.7 功率参数寄存器(Power Parameter REG)

Power Parameter REGHigh ByteMiddle ByteLow Byte
24bit8bit8bit8bit

数据发送顺序:高 8bit–>中 8bit–>低 8bit
此寄存器是默认值

2.8 功率寄存器(Power REG)

Power REGHigh ByteMiddle ByteLow Byte
24bit8bit8bit8bit

数据发送顺序:高 8bit–>中 8bit–>低 8bit

2.9 数据更新寄存器(Data Updata REG)

在这里插入图片描述1、 当 bit6 = 1 时,表示电压寄存器的数据状态己更新;
2、 当 bit5 = 1 时,表示电流寄存器的数据状态己更新;
3、 当 bit4 = 1 时,表示功率寄存器的数据状态己更新;

2.10 PF 寄存器(PF REG)

RF REGMiddle ByteLow Byte
16bit8bit8bit

数据发送顺序:高 8bit -->低 8bit
PF 寄存器用来累计脉冲信号,当 16 位寄存器数据溢出时,数据更新寄存器(Data Updata REG)
的 bit7 位会进行一次取反,PF 寄存器(PF REG)清零。

2.11 校验和寄存器(CheckSum REG)

CheckSum REG十六进制描述
8bit0xXXCHECKSUM除状态寄存器(State REG)、检测寄存器(Check REG)和校验和寄存器(CheckSum REG)之外的寄存器的数据之和的低 8bit

3.参数计算

3.1 电压有效值计算

在这里插入图片描述

3.2 电流有效值的计算

在这里插入图片描述

3.3 有功功率的计算

在这里插入图片描述

3.4 视在功率的计算

在这里插入图片描述

3.5 功率因数的计算

在这里插入图片描述

4 、esp8266 代码实现

4.1 流程图

在这里插入图片描述

4.2 代码实现

创建串口读取任务
static void hlw8032_uart_task()
{
    // Configure parameters of an UART driver,
    // communication pins and install the driver
    uart_config_t uart_config = {
        .baud_rate = 4800,
        .data_bits = UART_DATA_8_BITS,
        .parity    = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
    };
    uart_param_config(UART_NUM_0, &uart_config);
    uart_driver_install(UART_NUM_0, BUF_SIZE * 2, 0, 0, NULL, 0);

    // Configure a temporary buffer for the incoming data
    unsigned char *data = (uint8_t *) malloc(BUF_SIZE);                     
    while (1) {
        // Read data from the UART
        int len = uart_read_bytes(UART_NUM_0, data, BUF_SIZE, 20 / portTICK_RATE_MS);
        // Write data back to the UART
        // uart_write_bytes(UART_NUM_0, (const char *) data, len);
        if(len >0)
        {
            // log_info("read hlw8032 data len:%d",len);
            // for(int i =0;i<len;i++)
            // {
            //     printf("%02x ",data[i]);
            // }
            // printf("\r\n");
            hlw8032_data_deal(data,len);
        }
        vTaskDelay(100 / portTICK_RATE_MS);
    }
}
xTaskCreate(hlw8032_uart_task, "hlw8032_uart_task", 1024*3, NULL, 10, NULL);

主要数据处理

//电压参数寄存器值
(data[VOLTAGE_PARA_REG_H] <<16) +(data[VOLTAGE_PARA_REG_M]<<8)+data[VOLTAGE_PARA_REG_L]
//电压寄存器值
(data[VOLTAGE_REG_H] <<16) +(data[VOLTAGE_REG_M]<<8)+data[VOLTAGE_REG_L]
//电流参数寄存器值
(data[CURRENT_PARA_REG_H] <<16) +(data[CURRENT_PARA_REG_M]<<8)+data[CURRENT_PARA_REG_L]
//电流寄存器值
(data[CURRENT_REG_H] <<16) +(data[CURRENT_REG_M]<<8)+data[CURRENT_REG_L]
//功率参数寄存器值
(data[POWER_PARA_REG_H] <<16) +(data[POWER_PARA_REG_M]<<8)+data[POWER_PARA_REG_L]
//功率寄存器值
(data[POWER_REG_H] <<16) +(data[POWER_REG_M]<<8)+data[POWER_REG_L]
//电流寄存器状态标志位
((data[DATA_UPDATA_REG] & 0x20) == 0x20)?1:0
//电压寄存器状态标志位
((data[DATA_UPDATA_REG] & 0x40) == 0x40)?1:0
//功率寄存器状态标志位
((data[DATA_UPDATA_REG] & 0x10) == 0x10)?1:0
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值