This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F2.8377万S:运行的TMS320F2.8377万S中的过滤器计算错误

Guru**** 2050740 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/604024/ccs-tms320f28377s-filter-calculation-error-in-tms320f28377s-running

部件号:TMS320F2.8377万S
线程中讨论的其他部件: TMS320F2.8377万D

工具/软件:Code Composer Studio

你(们)好

C以下语句是用于简单平均计算的函数

RealScale[0],RealScale[1],RealScale[2]记录  来自TMS320F2.8377万S ADC转换结果的数据,该ADC对三个电流信号进行了采样。

当前输入较小,但在  CCS监视窗口中,Sum1,sume,sum3可能意外具有较大的值(+6.5535万,-6.5534万或邻居值)。

但 RealScale[0], RealScale[1], RealScale[3]在CCS监视窗口中始终显示为较小。

CCS版本6.1 .0.0.0104万

我尝试了编译器版本TI 6.4 v.2 和TI v.14.12 .3,但 问题仍然存在

优化级别关闭。

我认为 在Int16 和Int32之间的类型更改过程中可能会出现错误,然后导致总和和平均值的结果输出如此大。

另一个奇怪的问题是,我们尝试验证系统是否可以 看到 大值输出,我使用下面的陈述 来检查SUMX,

并将断点设置为h[2]++; 但当 我们在CCS监视窗口中看到大值时,MCU无法运行到断点。

我还使用SCI将SUMX发送到PC进行检查,PC也可以获得大值输出。

请帮助解决此问题。谢谢。

如果(  labs (sum1)> 6000)
    ||(实验室(sum2)> 6000)
    ||(实验室(sum3)> 6000)
  )
  {
   hhhh[2]++;
   如果(hhh[2]> 1200)hh[2]= 0;
  }

请您提供有关此问题的建议吗? 谢谢。


volatile Int32 sum1,sum2,sum3;
外部内部16 RealScale[];

IF (iCurrentCnt == 0)
  {
   stInvCurrentVector.phaseA                  =(Int16)(Sum1 >> 2);
   stInvCurrentVector.phaseB                  =(Int16)(sum2 >> 2);
   stInvCurrentVector.phasec                  =(Int16)(sum3 >> 2);
   strAverFlL/InvCurrentphaseASum = 0;
   strAverFlL.InvCurrentphaseBsum = 0;
   strAverFlL.InvCurrentphaseCSum = 0;
   相扑1 = 0;
   相扑2 = 0;
   相扑3=0;
  }

//饱和度

  IF (RealScale[0]>100)
  {
   RealScale[0]=100;
  }
  否则IF (RealScale[0]<-100)
  {
   RealScale[0]=-100;
  }
  IF (RealScale[1]>100)
  {
   RealScale[1]=100;
  }
  否则IF (RealScale[1]<-100)
  {
   RealScale[1]=-100;
  }

  Sum1         += (Int32)RealScale[0];
  Sum2         += (Int32)RealScale[1];
  Sum3         +=(Int32)RealScale[2];

iCurrentCnt++;

IF (iCurrentCnt == 4)

   iCurrentCnt = 0;

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Hardy:

    如果您逐步浏览代码或放置断点,您可以看到它们最初对数字求和是正确的,但它们超出范围,还是它们从一开始就不正确?

    RealScale[]值的范围是什么? 100到100?之间

    谢谢!
    Whitney
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    RealScale[]值大于100,我只想用较小的数据值范围来定位问题。

    随机出现不正确的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    奇怪的是,您的IF语句(IF ((labs (sum1)...) one)似乎没有输入。 您是否能够在其开头放置一个断点,并在遇到它时逐步完成反汇编,而SUMX似乎超出范围,以确保将相同的值放在您在监视窗口中看到的ACC中?

    谢谢!
    Whitney
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    下面是添加操作的另一个简化测试代码,它可能会重复相同的问题。

    您可以将其下载到TMS320F2.8377万D controlCARD,并在  监视窗口中监控iAdResoltx,并可以随机查看异常结果。  

    /cfs/file/__key/communityserver-discussions-组件文件/81/U1_2D00_1000_2D002D00_14_2D00_EA1.25MW_5F00_U1_5F00_V004.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Hardy:

    感谢您将测试案例汇总在一起。 您如何寻找异常结果? 您是设置监视点还是打开连续刷新并监视表达式窗口? 我已经运行了您的代码,但尚未重现该问题。

    您能否发送问题的屏幕截图,以确保我知道我了解我要查找的内容?

    谢谢!

    Whitney