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.
工具/软件: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;
}
RealScale[]值大于100,我只想用较小的数据值范围来定位问题。
随机出现不正确的问题。
你(们)好
下面是添加操作的另一个简化测试代码,它可能会重复相同的问题。
您可以将其下载到TMS320F2.8377万D controlCARD,并在 监视窗口中监控iAdResoltx,并可以随机查看异常结果。
您好,Hardy:
感谢您将测试案例汇总在一起。 您如何寻找异常结果? 您是设置监视点还是打开连续刷新并监视表达式窗口? 我已经运行了您的代码,但尚未重现该问题。
您能否发送问题的屏幕截图,以确保我知道我了解我要查找的内容?
谢谢!
Whitney