找回密码
 立即注册
查看: 103|回复: 3

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:108
  • 最近打卡:2025-12-18 09:07:02
已绑定手机

13

主题

25

回帖

139

积分

注册会员

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

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:728
  • 最近打卡:2025-12-18 08:23:04
已绑定手机

22

主题

591

回帖

3610

积分

论坛元老

积分
3610
发表于 2025-11-11 09:19:14 | 显示全部楼层
神奇的问题,
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-12-16 08:39:56

8

主题

37

回帖

798

积分

高级会员

积分
798
发表于 2025-11-11 16:04:38 | 显示全部楼层
sum未初始化,不能参与计算,所以 sum += 的使用是不可以的。
微信qsssuv
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:108
  • 最近打卡:2025-12-18 09:07:02
已绑定手机

13

主题

25

回帖

139

积分

注册会员

积分
139
发表于 2025-11-12 13:39:28 | 显示全部楼层
青穗*** 发表于 2025-11-11 16:04
sum未初始化,不能参与计算,所以 sum += 的使用是不可以的。

初始化后也不行呢。谢谢!
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-18 19:03 , Processed in 0.118280 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表