|
最近公司做一个项目,需要采集三相交流电压和电流,市面电量芯片很多,最后选择了钜泉光电HT7038,主要看中其性价比。
项目实施后,还是比较顺利,读取电压、电流精度还是不错的,但是调试的时候发现,受到干扰后,HT7038容易出问题,比如手触摸芯片后读取的电压电流数据就乱了,要么读出来全是0,要么读出来数据完全不对,后面联系了钜泉光电官网电话好久,一直无人接听,几经周折终于问到个技术,说的是HT7038受到干扰就复位了,导致校表寄存器数据乱了,所以输出就不正常,后面我修改了程序,加入了校表寄存器数据和的检测,如果校验不对就初始化HT7038,奇怪的是调试发现,初始化根本没用,必须完全板子断电,再上电才能恢复,程序里面也对HT7038 REST引脚拉低复位了的,同时还通过SPI发送0xD3软件复位,但是都没起到作用,实在不明白了,MCU用的PIC18F25K80,硬件SPI与HT7038通讯。
初始化部分程序:
void HT7038_Init(void)
{
HT7038_RST_CLR;
Delay_mS_Self(100);
HT7038_RST_SET;
Delay_mS_Self(100);
/*主路HT7038初始化*/
//校表数据寄存器的内容恢复到上电初始值
HT7038_REST(HT7038_Main); //发送0xD3软件复位HT7038
Delay_mS_Self(100);
Write_Reg(0xc3,0x000000,HT7038_Main);
//推荐值B9FE,开启Vref Chopper功能提升Vref性能;开启功率有效值慢速模式,减小跳动;配置EMU时钟921.6kHz,降低功耗;开启6路ADC,关闭In通道
Write_Reg(0x01,0xb9fe,HT7038_Main);
Write_Reg(0x03,0xf804,HT7038_Main);
//配置内部模拟模块
Write_Reg(0x31,0x3c36,HT7038_Main);
//配置三相电源、电流通道ADC增益1
Write_Reg(0x02,0,HT7038_Main);
Write_Reg(0x17,UaGain,HT7038_Main); //A相电压增益
Write_Reg(0x18,UbGain,HT7038_Main); //B相电压增益
Write_Reg(0x19,UcGain,HT7038_Main); //C相电压增益
Write_Reg(0x1a,IaGain,HT7038_Main); //A相电流增益
Write_Reg(0x1b,IbGain,HT7038_Main); //B相电流增益
Write_Reg(0x1c,IcGain,HT7038_Main); //C相电流增益
Write_Reg(0xc9,0x000001,HT7038_Main); //关闭校表使能
请大家帮忙分析下什么原因导致的,谢谢了! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|