Ht7038 三相电能计量芯片 测量6路电流。

        芯片上电之后默认使能校表数据写操作和计量数据读操作,也就是芯片配置写操作和数据读操作。

        也就是0xC9和0xC6的功能码。

SPI写0xC9(1字节),数据 = 0x00005A(3字节)是开启写校表寄存器。

SPI写0xC9(1字节),数据 ≠ 0x00005A(3字节)比如0x00005F,是关闭写校表寄存器。

SPI写0xC6(1字节),数据 = 0x00005A(3字节)是开启读校表寄存器。

SPI写0xC6(1字节),数据 ≠ 0x00005A(3字节)比如0x00005F,是关闭读校表寄存器,此时就可以读计量寄存器也就是读电流电压等数据。

        上面涉及到校表寄存器,如果是配置模式,三项增益,等芯片有关就是写校表寄存器。地址如下

 

比如用到的模式配置寄存器,spi写0x01,数据0x89fe。

 模块使能寄存器,SPI写0x31,数据0x3521。

 配置完成之后就开启读计量数据。

void ht7038_setting_Init(void)
{
	delay_ms(100);
	ht7038_Write(0xC9,0x5A); //开启写校准表
	delay_ms(10);
	ht7038_Write(0x01,0xB9fe); //配置模式,bit12,13慢速模式,跳动小
	delay_ms(10);
	ht7038_Write(0x31,0x3521); //模拟模块使能配置
	
	delay_ms(100);
	ht7038_Write(0xc9,0x5b); // 关闭写操作
	delay_ms(10);
	ht7038_Write(0xc6,0x5b); // 开启读操作
	delay_ms(100);
}

 计量寄存器读取6路ADC值得地址依次是 uint8_t chAddr[6] = {0x10, 0x11, 0x12, 0x0D, 0x0E, 0x0F};

 

 

 SPI写

void ht7038_Write(uint8_t addr, uint32_t dat)
{
	uint8_t i;
	
	ht7038_CS_Low();
	ht7038_SCK_Low();
	
	addr |= 0x80;
	delay_us(10);
	for(i=0;i<8;i++)
	{
		ht7038_SCK_High();
		if(addr&0x80)
		{
			ht7038_MOSI_High();
		}
		else
		{
			ht7038_MOSI_Low();
		}
		
		addr = addr << 1;
		delay_us(3);
		ht7038_SCK_Low();
		delay_us(3);
	}
	for(i=0;i<24;i++)
	{
		ht7038_SCK_High();
		if(dat&0x800000)
		{
			ht7038_MOSI_High();
		}
		else
		{
			ht7038_MOSI_Low();
		}
		
		dat = dat << 1;
		delay_us(3);
		ht7038_SCK_Low();
		delay_us(3);
	}
	
	ht7038_CS_High();
	ht7038_SCK_Low();
	ht7038_MOSI_Low();
}

 SPI读

uint32_t ht7038_Read(uint8_t addr)
{
	unsigned char i;
	unsigned int dat=0;
	
	ht7038_CS_Low();
	ht7038_SCK_Low();
	delay_us(2);
	
	for(i=0;i<8;i++)
	{
		ht7038_SCK_High();
		if(addr&0x80)
		{
			ht7038_MOSI_High();
		}
		else
		{
			ht7038_MOSI_Low();
		}
		
		addr = addr << 1;
		delay_us(1);
		ht7038_SCK_Low();
		delay_us(1);
	}
	
	delay_us(2);
	
	for(i=0;i<24;i++)
	{
		ht7038_SCK_High();
		dat =dat << 1;
		if(ht7038_MISO_STA())
		{
			dat |= 1;
		}
		delay_us(1);
		ht7038_SCK_Low();
		delay_us(1);
	}
	
	ht7038_CS_High();
	ht7038_SCK_Low();
	ht7038_MOSI_Low();
	
	return dat;
}

 大概换算

//264ma 271 0ma 48 264/(271-48) = 1.184;  264*48/(271-48)=56.8 
uint32_t read_ele_ch(uint8_t ch)
{
	uint32_t ele = read_ele_ori(ch)/188; //读ADC值
	
	return ele*1.184-56.8;
}

含程序、硬件设计及开发使用手册。 计量  提供全波、基波有功电能,5000:1 动态范围内,非线性误差<0.1%,满足 0.5S 和 0.2S 级有功电能表精度要求  提供全波、基波无功电能,5000:1 动态范围内,非线性误差<0.1%  提供全波、基波视在电能  提供有功、无功功率方向,支持无功四象限判断  具有潜动启动功能,启动阈值可调  电表常数可调  提供有功、无功、视在的快速脉冲计数  提供全波、基波,有功、无功和视在脉冲输出  测量  提供全波和基波有功、无功、视在功率  提供全波、基波和谐波三相电压电流有效值  提供全波、基波功率因数  提供电压线频率,测量误差<0.02%  提供各相电压电流相角,测量误差<0.02°  提供七过零检测,过零阈值可设置  提供电压相序错检测  提供失压指示,失压阈值可设置  提供灵活的电压、电流波形缓存数据  提供电压暂降检测  提供过压、过流检测  防窃电  提供零线电流测量  提供一种低功耗模式 NVM2,用于电流比较预判,阈值 2 档可设置,功耗小于 150μA  提供一种低功耗模式 NVM1,实现低功耗电流有效值测量,功耗小于 2mA  提供全失压主动上报功能,典型应用平均功耗仅为 7μ A  软件校表  提供七 ADC 通道增益校正  提供七 ADC 通道相位校正,其中 A、B、C 三电流通道支持分段相位校正  提供功率增益校正  提供有功、无功功率分段相位校正  提供有功、无功、有效值 Offset 校正  提供校验和寄存器,对校表数据自动校验  适用于三相三线、三相四线制  单+3.3V 电源供电,具有电源监控功能  内置 1.25V ADC 基准电压,温度系数典型值 5ppm/℃,也可外接基准电压  具有高速 SPI 接口,传输速率可达 3.5Mbps,提供写保护功能  具有一个中断输出引脚  工作电压范围:3.0V-3.6V  工作温度范围:-40℃-85℃  采用 LQFP44 绿色封装  通过欧盟 RoHS 指令 2011/65EU 附录的修订指令(EU)2015/863 的测试需求
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值