我在启动前,采一个工频周期的数据点然后求和再取平均值。最好在正常运行的时候将采样得到的数据减去平均值。但是这修正却导致输出电压由原来1V左右的偏置变成了5V左右偏置。
启动前修正程序:
// DC Vin
ADC_result_convB0 = *Flash_ZONE0;
SD_TEMP[0] = ADC_result_convB0;
// DC Iin
ADC_result_convB1 = *Flash_ZONE0;
SD_TEMP[1] = ADC_result_convB1;
// Vo Voltage of Cap
ADC_result_convB2 = *Flash_ZONE0;
SD_TEMP[2] = ADC_result_convB2;
// Vg Voltage of Grid or AC Bus
ADC_result_convB3 = *Flash_ZONE0;
SD_TEMP[3] = ADC_result_convB3;
// IL
ADC_result_convB4 = *Flash_ZONE0;
SD_TEMP[4] = ADC_result_convB4;
// Io Output Current
ADC_result_convB5 = *Flash_ZONE0;
SD_TEMP[5] = ADC_result_convB5;
ADC_result_convB6 = *Flash_ZONE0;
ADC_result_convB7 = *Flash_ZONE0;
ADC_Result[0] = SD_TEMP[0] ;
ADC_Result[1] = SD_TEMP[1] ;
ADC_Result[2] = SD_TEMP[2] ;
ADC_Result[3] = SD_TEMP[3] ;
ADC_Result[4] = SD_TEMP[4] ;
ADC_Result[5] = SD_TEMP[5] ;
if(ADC_Result[2]> -500 && ADC_Result[2]< 500 )
{
if(SelfDetect_flag[0]<SD_N)
{
ADC_offset_iq5[2] = ADC_offset_iq5[2] + ADC_Result[2] ;
SelfDetect_flag[0]++;
}
else
{
SelfDetect_flag[0]=SD_N;
}
}
if(ADC_Result[4]> -500 && ADC_Result[4]< 500)
{
if(SelfDetect_flag[1]<SD_N)
{
ADC_offset_iq5[4] = ADC_offset_iq5[4] + ADC_Result[4] ;
SelfDetect_flag[1]++;
}
else
{
SelfDetect_flag[1]=SD_N;
}
}
if(ADC_Result[5]> -500 && ADC_Result[5]< 500)
{
if(SelfDetect_flag[2]<SD_N)
{
ADC_offset_iq5[5] = ADC_offset_iq5[5] + ADC_Result[5] ;
SelfDetect_flag[2]++;
}
else
{
SelfDetect_flag[2]=SD_N;
}
}
数据读取修正:
// DC Vin
ADC_result_convB0 = *Flash_ZONE0;
ADC_out[0] = ADC_result_convB0*ADC_coefficient[0];
// DC Iin
ADC_result_convB1 = *Flash_ZONE0;
ADC_out[1] = ADC_result_convB1*ADC_coefficient[1];
// Vo Voltage of Cap
ADC_result_convB2 = *Flash_ZONE0;
ADC_out[2] = (ADC_result_convB2-ADC_offset_iq5[2])*ADC_coefficient[2];;//(ADC_result_convB2-ADC_offset_iq5[2])*ADC_coefficient[2];
// Vg Voltage of Grid or AC Bus
ADC_result_convB3 = *Flash_ZONE0;
ADC_out[3] = ADC_result_convB3*ADC_coefficient[3];
// IL
ADC_result_convB4 = *Flash_ZONE0;
ADC_out[4] = (ADC_result_convB4-ADC_offset_iq5[4])*ADC_coefficient[4];//(ADC_result_convB4-ADC_offset_iq5[4])*ADC_coefficient[4];
// Io Output Current
ADC_result_convB5 = *Flash_ZONE0;
ADC_out[5] = (ADC_result_convB5-ADC_offset_iq5[5])*ADC_coefficient[5];//(ADC_result_convB5-ADC_offset_iq5[5])*ADC_coefficient[5];
ADC_result_convB6 = *Flash_ZONE0;
ADC_out[6] = ADC_result_convB6*ADC_coefficient[6];
ADC_result_convB7 = *Flash_ZONE0;
ADC_out[7] = ADC_result_convB7*ADC_coefficient[7];
只用Vo、IL、Io
|