1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 免校准的电量计量芯片_请问电能计量芯片CS5463增益如何校准?

免校准的电量计量芯片_请问电能计量芯片CS5463增益如何校准?

时间:2020-02-21 03:49:03

相关推荐

免校准的电量计量芯片_请问电能计量芯片CS5463增益如何校准?

最近在用这个芯片,碰到一些问题,请各位指点指点···

1. 在指定电压范围内输入交流信号到芯片的VIN±、IIN±脚。 例如:电压/电流通道最大输入电压为±250mV,

为适应更大的电压范围,系数取0.6, 则输入交流信号为150mV,实际上一般取110mV

2. 在串口上发0xa0命令(停止计算,中止A/D转换)

3. 在串口上发0xd6命令(电压通道AC增益校准命令)

4. 在串口上发0x1e命令, 读状态寄存器内的DRDY位。为1,则表示校准已完成,不为1则等待。

5. 校准完成(这时Vrms寄存器值近似等于0.6),在串口上发0x08命令,去读电压通道AC增益寄存器值并把它

存到存储器中

这是资料上关于电压AC增益的一段话, 按照他的要求,我给电压输入通道给150mV AC电压,然后执行AC增益校准, 可是问题出来了,校准后读出来的AC增益寄存器的值一直都是默认值 0x400000,如果Vrms的值是满量程的0.6我倒也没话说, 可是我读出来的是 0x95xxxx~0x96xxxx , (0xFFFFFF*0.6 = 0x999999).

我的程序应该没有问题, 因为用这个程序执行了DC偏移校准,能看到有效果,程序如下,等好了再把完整的程序发上来:

另外,还一个问题,读取到的Vrms 和Irms的0:16位数值不稳定,是硬件问题还是其他什么原因?

/****************************************************************************

* 名称:correct_cs5463()

* 功能:CS5463校准,将校准结果存入flash

* 入口参数:

* 出口参数:无

* 校准命令: 直流电压偏移: 0xD1---0x06 直流电流偏移: 0xC9---0x02

交流电压偏移: 0xD5---0x22 交流电流偏移: 0xCD---0x20

* 交流电压增益: 0xD6---0x08 交流电流增益: 0xCE---0x04

****************************************************************************/

void CS5463_Correct(u8 comm1, u8 comm2, u8 reg_indexh,u8 reg_indexl)

{

u8 a[3];

CS5463_Write_Nbytes(0xa0,0xfe,0xfe,0xfe);//停止AD转换

CS5463_Write_Nbytes(comm1,0xfe,0xfe,0xfe);//发校准命令 0xD1电压DC偏移校准0xC9电流通道DC偏移校准

while((a[0]&0x80) != 0x80)

{

CS5463_Read_Nbytes(0x1e,a,a+1,a+2);//等待校准完成 读状态寄存器

}

CS5463_Read_Nbytes(comm2,a,a+1,a+2); //读校准后的偏移值 电压:0x06电流:0x02

sys.reg[reg_indexh] = a[0];

sys.reg[reg_indexl] = (a[1] << 8);

sys.reg[reg_indexl] += a[2];

Reg_To_Eeprom(sys.reg[reg_indexh],reg_indexh);

Reg_To_Eeprom(sys.reg[reg_indexl],reg_indexl);

}

main() 函数里初始化,校准 :

CS5463_Init();

//CS5463_Correct(0xD1,0x06,VDCOFF_H,VDCOFF_L); // 电压DC偏移

//CS5463_Correct(0xC9,0x02,IDCOFF_H,IDCOFF_L); // 电流DC偏移

CS5463_Correct(0xD6,0x08,VGN_H,VGN_L);// 电压AC增益

//CS5463_Correct(0xD2,0x08,VGN_H,VGN_L);// 电压DC增益

//CS5463_Correct(0xCE,0x04,VGN_H,VGN_L);// 电流AC增益

//CS5463_Reset();

CS5463_Write_Nbytes(Vdcoff+WRITE_OFFSET,

sys.reg[VDCOFF_H],(sys.reg[VDCOFF_L]>>8),

(sys.reg[VDCOFF_L]&0xFF)); //电压偏移

CS5463_Write_Nbytes(Idcoff+WRITE_OFFSET,

sys.reg[IDCOFF_H],(sys.reg[IDCOFF_L]>>8),

(sys.reg[IDCOFF_L]&0xFF)); // 电流偏移

CS5463_Write_Nbytes(Vgn+WRITE_OFFSET,

sys.reg[VGN_H],(sys.reg[IDCOFF_L]>>8),

(sys.reg[VGN_L]&0xFF)); // 电压增益

//CS5463_Write_Nbytes(Poff+WRITE_OFFSET,0x00,0x0d,0x4b); // 功率偏移

CS5463_Init();

主循环读取相关寄存器值:

switch (run_index)

{

case 0:// 30ms

CS5463_Read_Nbytes(Vrms,&buff[0],&buff[1],&buff[2]);

CS5463_Read_Nbytes(Irms,&buff[3],&buff[4],&buff[5]);

CS5463_Read_Nbytes(Pactive,&buff[6],&buff[7],&buff[8]);

CS5463_Read_Nbytes(Vdcoff,&buff2[0],&buff2[1],&buff2[2]);

CS5463_Read_Nbytes(Idcoff,&buff2[3],&buff2[4],&buff2[5]);

CS5463_Read_Nbytes(Vgn,&buff2[6],&buff2[7],&buff2[8]);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。