请问下大家 Vrms 和Irms读取的值, 怎么转换成实际电压和电流啊。
我分别查了 5W,11W,60W的白炽灯,节能灯。
读取的Irms数据如下
5W: 03BC36
11W: 03C198
60W: 0475BC
Vrms:74e44e(后16位也在一个范围内变动)
后16为会一直小范围变动,没有做过校准。
读取的一些配置信息和我设置的都一样, 读取0x04和0x08(电压电流增益)为0x400000
读取Vrms和Irms的时候 状态寄存器返回的是0x900081 表示DRDY CRDY FUP都已经更新了,并且命令是对的 。
初始化函数如下
- void cs5463init(void)
- {
- unsigned char statue[4]={0x5e,0x80,0x00,0x00};
- unsigned char config[4]={0x40,0x00,0x00,0x01};
- unsigned char count[4] ={0x4a,0x00,0x0f,0xa0};
- unsigned char mask[4] ={0x74,0x00,0x00,0x00};
- unsigned char smode[4] ={0x64,0x00,0x00,0x01};
- unsigned char start[4] ={0xe8,0x00,0x00,0x00};
-
- goio_init();
- cs5463_reset();
- SpiInit();
- SdiWrite(statue);
- SdiWrite(config);
- SdiWrite(count);
- SdiWrite(mask);
- SdiWrite(smode);
- SdiWriteByte(start[0]);
-
- delay(100000);
- SdoRead(read_count);
- SdoRead(read_config);
- SdoRead(read_temp);
- SdoRead(read_dcvoff);
- SdoRead(read_dcioff);
- SdoRead(read_state);
-
- }
复制代码
读取函数如下
- void cs5463_read_Vrms(unsigned char *p)
- {
- unsigned char vrms[4]={0x18,0x00,0x00,0x00};
-
- SdoRead(read_state);
- while(read_state[1]&0x80 != 0x80)
- {
- SdoRead(read_state);
- }
- SdoRead(vrms);
- memcpy(p,vrms+1,3);
- }
- void cs5463_read_Irms(unsigned char *p)
- {
- unsigned char irms[4]={0x16,0x00,0x00,0x00};
-
- SdoRead(read_state);
- while(read_state[1]&0x80 != 0x80)
- {
- SdoRead(read_state);
- }
-
- SdoRead(irms);
- memcpy(p,irms+1,3);
- }
复制代码
电压 电流 通道 使用的都是150mv的信号。
电流是通过互感器或是分流器,转换成了150mV信号。
电压是通过电压互感器或是分压器转转换成了150mV信号
最理想的校准方式是 给满量程信号进行校准,而不是给150mV信号校准
因为满量程信号校准,把互感器和采样电阻的误差都给消除了。
只给150mV信号校准,其中互感器和电阻的累计误差对精度有一定影响。
比如 你校准5A电流。需要给一个5A的标准信号,芯片通过互感器和电阻将5A转成150mV.进行校准。
一周热门 更多>