上接原理:https://blog.csdn.net/qq_35629563/article/details/94003498
硬件电路图:

实验记录:

计算:

算法:
/*************************************************************************
*程序名称 : VoltageConversion
*功能 : 电压转换,将ADC的结果转换成真实的电压有效值
*输入参数 : adcValue:采样数组,sampleTimes:采样次数
*返回值 : ADCResult:;测量的有效值
*注释 : 减去均值的原因:在硬件上,输入端加了一个1.25V——为了将缩小后的
交流电的峰值限制在参考电压的0-2.5V之内
*************************************************************************/
u16 VoltageConversion(int16 adcValue[SAMPLE_NUM],u8 sampleTimes)
{
u8 i=0;
u16 ADCResult=0;
u32 ADCSum=0,ADCTemp=0,ADCAverage=0;
if(sampleTimes>=SAMPLE_NUM){
return 0xff ;//指示有错误
}
//ADC数据处理,求有效值,使用方均根算法
//求均值
for(i=0,ADCSum=0;i<sampleTimes;i++){//求均值
ADCSum=ADCSum+adcValue[i]; //先求和
}
ADCAverage=ADCSum/sampleTimes;//均值
//求RMS
for(i=0,ADCTemp=0;i<sampleTimes;i++){//RMS,求和,减去的零点——均值
ADCTemp=ADCTemp+pow(abs(adcValue[i]-ADCAverage),2);
}
ADCTemp=sqrt(ADCTemp/sampleTimes);//求均值,开方
ADCResult=(u16)(ADCTemp*313/819);
return ADCResult;
}
#define SAMPLE_NUM 24//表示采集24个点
我的定时中断是0.833 ms,24*0.833=19.992,交流电的频率是50Hz,周期20ms,所以一个周期内采集了24个点
版权声明:本文为qq_35629563原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。