kpffq 发表于 2025-11-10 22:36:02

请教大家关于交流电流采样中碰到的算法问题[已解决]

      调试一个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;
    请问这是什么原因呢?

已解决:变量没有进行初始化,优化后程序运行正常。感谢二楼的解答。

wangxiangtan 发表于 2025-11-11 09:19:14

神奇的问题,{:4_164:}

青穗三三 发表于 2025-11-11 16:04:38

sum未初始化,不能参与计算,所以 sum += 的使用是不可以的。

kpffq 发表于 2025-11-12 13:39:28

青穗三三 发表于 2025-11-11 16:04
sum未初始化,不能参与计算,所以 sum += 的使用是不可以的。

初始化后也不行呢。谢谢!
页: [1]
查看完整版本: 请教大家关于交流电流采样中碰到的算法问题[已解决]