调试一个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[20]; //AD采样数值的存放数组,配置到XDATA区。AD采样程序采用了官方例程。
在测试时,电流传感器_ACS712ELCTR-05B-T输入电流为0,其输出端为2.5V,该电压输入到MCU的P1.7脚,由于电压不变,ADC采样的每个值均接近2056。
问题:计算程序中使用for 语句累加ADC_Buffer数组时,累加结果不正确,但将ADC_Buffer数组逐个相加时验证结果正确
以下计算程序的sum变量结果不正确:
- Calculation_ADC_rms ( )
- {
- u8 i;
- u32 sum; // 累加值存放变量
- u16 sum1; // 测试累加值临时变量1
- u16 sum2; // 测试累加值临时变量2
- u16 rms; // 返回值
-
- for(i=0;i<20;i++)
- {
- sum += ADC_Buffer[i];
- }
- rms = sum;
- return rms;
- }
复制代码 但如果将for循环语句换成以下代码,ADC_Buffer数组的数值逐个进行相加,则结果就正确:
sum1 = ADC_Buffer[0]+ADC_Buffer[1]+ADC_Buffer[2]+ADC_Buffer[3]+ADC_Buffer[4]+ADC_Buffer[5]+ADC_Buffer[6]+ADC_Buffer[7]+ADC_Buffer[8]+ADC_Buffer[9];
sum2 = ADC_Buffer[10]+ADC_Buffer[11]+ADC_Buffer[12]+ADC_Buffer[13]+ADC_Buffer[14]+ADC_Buffer[15]+ADC_Buffer[16]+ADC_Buffer[17]+ADC_Buffer[18]+ADC_Buffer[19];
sum=sum1+sum2;
请问这是什么原因呢?
已解决:变量没有进行初始化,优化后程序运行正常。感谢二楼的解答。
|