用CS5460作了个电源监测,但读出来的数据乱跳
用了cs5460A了个电源监测,读I ,V ,P ,E(7~12)数据变化很大,读IRMS ,VRMS(11,12)数据可以用。初始化程序如下:
//*************CS5460初始化函数*********//
void Init5460a(void)
{
Rst_L();
_delay_ms(100);
Rst_H();
_delay_ms(50);
unsigned char buff1,read;
//写串口初始化//
buff1=0xff;//SYNC1
buff1=0xff;//SYNC1
buff1=0xff;//SYNC1
buff1=0xff;//SYNC0
Write_CS5460A(buff1,4);
//写串口初始化//
buff1=0xff;//SYNC1
buff1=0xff;//SYNC1
buff1=0xff;//SYNC1
buff1=0xfe;//SYNC0
Write_CS5460A(buff1,4);
//写配置寄存器
buff1=WRITE|CONFIG;
buff1=0x00;//GI=0电流通道增益=10
buff1=0x18;//中断形式:00-高电平08-低电平10-下降沿18-上升沿
buff1=0xe1;//DLCK=MCLK/1
Write_CS5460A(buff1,4);
_delay_ms(10);
//清状态寄存器
buff1=WRITE|STATUS;
buff1=0xff;
buff1=0xff;
buff1=0xff;
Write_CS5460A(buff1,4);
//写屏蔽中断寄存器
buff1=WRITE|MASK;
buff1=0x00;
buff1=0x00;
buff1=0x00;
Write_CS5460A(buff1,4);
//写控制寄存器
buff1=WRITE|CTRL;
buff1=0x00;
buff1=0x00;
buff1=0x00;
Write_CS5460A(buff1,4);
//写EOUT脉冲输出寄存器
/*buff1=0x4c;
buff1=0x00;
buff1=0x34;
buff1=0x9c;
Write_CS5460A(buff1,4);
_delay(50);
*/
//写CYCLE COUNT寄存器
buff1=WRITE|CYCLE_COUNT;
buff1=0x00;
buff1=0x01;
buff1=0x90; //每秒计算10次,N=400
Write_CS5460A(buff1,4);
//写电流增益寄存器
/*buff1=0x44;
buff1=0x40;//增益1
buff1=0x00;
buff1=0x00;
Write_CS5460A(buff1,4);
//写电压增益寄存器
buff1=0x48;
buff1=0x40;//增益1
buff1=0x00;
buff1=0x00;
Write_CS5460A(buff1,4);*/
//写AC current offset
/*buff1=WRITE|VOLT_AC_OFFSET;
buff1=0x00;
buff1=0x12;
buff1=0x5c;
Write_CS5460A(buff1,4);*/
//读状态寄存器
Read_CS5460A(0x1e,read);
buff1=WRITE|STATUS;
buff1=read;
buff1=read;
buff1=read;
Write_CS5460A(buff1,4);
//启动Cs5460,执行连续周期计算
buff1=0xe8;
Write_CS5460A(buff1,1);
}
硬件没有问题,是在别的产品上移植的。
我怀疑读的是AC变化数据,
请问,它只有一个寄存器,怎么分AC与DC。 AD采集不是都是瞬时值吗?
采集后再进行有效值计算。。
应该不分AC DC 的吧。 打电话问了原厂,I ,V ,P ,E为瞬时值。 交流瞬时值不应该就是跳动的吗? 学习了! 用CS5463功能强大
页:
[1]