请问大家有谁做过220V通过HT7017检测电压有效值的吗?
我之前在做一个项目,其中有交流220V电源需要检测出有效值,通过串口通信传递到单片机上。设计电路如下图所示:
在焊接完测试时,发现寄存器中读取的220V电压有效值会随着火线零线连接线的摇晃或震动而波动,且波动在20V--30V左右。电压有效值不稳定。
应该怎样改进这种电路呢? 还是我程序有问题?
程序中初始化如下:
while(1){
Write_Reg_1();//软复位HT7017
num0_r=0;
if(rx_buf0[0]==0x54){
state[0] = 1;
rx_buf0[0]=0;
break;
}else if(rx_buf0[0]==0x63){
state[0] = 2;
rx_buf0[0]=0;
break;
}
Usart1_SendBuf(state,5);
Delay_ms(100);
}
Delay_ms(100);
clear0fun();
while(1){
Write_Reg_2();//写保护
num0_r=0;
if(rx_buf0[0]==0x54){
state[1] = 1;
rx_buf0[0]=0;
break;
}else if(rx_buf0[0]==0x63){
state[1] = 2;
rx_buf0[0]=0;
break;
}
Usart1_SendBuf(state,5);
Delay_ms(100);
}
Delay_ms(100);
clear0fun();
while(1){
Write_Reg_3();//0x07 0000 0111表示将ADC的电流两个通道和电压通道打开
num0_r=0;
if(rx_buf0[0]==0x54){
state[2] = 1;
rx_buf0[0]=0;
break;
}else if(rx_buf0[0]==0x63){
state[2] = 2;
rx_buf0[0]=0;
break;
}
Usart1_SendBuf(state,5);
Delay_ms(100);
}
Delay_ms(100);
clear0fun();
while(1){
Write_Reg_4();//电压电流通道高通滤波器打开
num0_r=0;
if(rx_buf0[0]==0x54){
state[3] = 1;
rx_buf0[0]=0;
break;
}else if(rx_buf0[0]==0x63){
state[3] = 2;
rx_buf0[0]=0;
break;
}
Usart1_SendBuf(state,5);
Delay_ms(100);
}
|