dahai168 发表于 2012-4-2 17:15:27

用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。

qq325600 发表于 2012-8-15 08:13:27

AD采集不是都是瞬时值吗?
采集后再进行有效值计算。。
应该不分AC DC 的吧。

dahai168 发表于 2012-8-15 16:21:21

打电话问了原厂,I ,V ,P ,E为瞬时值。

爱情转移 发表于 2014-5-30 13:48:48

交流瞬时值不应该就是跳动的吗?

legenderwx 发表于 2014-8-24 22:23:40

学习了!

小西北 发表于 2014-8-27 09:28:33

用CS5463功能强大
页: [1]
查看完整版本: 用CS5460作了个电源监测,但读出来的数据乱跳