请教大家关于交流电流采样中碰到的算法问题[已解决]
调试一个ai8051u+电流传感器_ACS712ELCTR-05B-T程序,使用P1.7脚对ACS712ELCTR-05B-T的输出电压进行AD转换后计算电流。程序采用8bit。根据ACS712ELCTR-05B-T手册,电流在0-5A时,其输出电压:2.5V+-0.925V,输出灵敏度:185mV/A。
程序主要检测方法是20MS的时间内连续对ACS712ELCTR-05B-T的输出电压进行20次采样,再计算有效值。但是在调试过程中发现每次AD采样的值都正常,但通过计算得出的有效值不正确,问题出现在计算程序部分,于是重点对计算程序部分进行测试,为了简单验证,将有效值计算换为平均值来处理。
程序的相关部分变量
u16 idata ADC_Buffer; //AD采样数值的存放数组,配置到XDATA区。AD采样程序采用了官方例程。
在测试时,电流传感器_ACS712ELCTR-05B-T输入电流为0,其输出端为2.5V,该电压输入到MCU的P1.7脚,由于电压不变,ADC采样的每个值均接近2056。
问题:计算程序中使用for 语句累加ADC_Buffer数组时,累加结果不正确,但将ADC_Buffer数组逐个相加时验证结果正确
以下计算程序的sum变量结果不正确:
Calculation_ADC_rms ( )
{
u8i;
u32 sum; // 累加值存放变量
u16 sum1; //测试累加值临时变量1
u16 sum2; //测试累加值临时变量2
u16 rms; //返回值
for(i=0;i<20;i++)
{
sum += ADC_Buffer;
}
rms = sum;
return rms;
} 但如果将for循环语句换成以下代码,ADC_Buffer数组的数值逐个进行相加,则结果就正确:
sum1 = ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer;
sum2 = ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer+ADC_Buffer;
sum=sum1+sum2;
请问这是什么原因呢?
已解决:变量没有进行初始化,优化后程序运行正常。感谢二楼的解答。
神奇的问题,{:4_164:} sum未初始化,不能参与计算,所以 sum += 的使用是不可以的。 青穗三三 发表于 2025-11-11 16:04
sum未初始化,不能参与计算,所以 sum += 的使用是不可以的。
初始化后也不行呢。谢谢!
页:
[1]