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.
您好、TI 社区成员、
请解释我的代码中的第305行和第309行、并请通过 CCS 进行验证。 如果分别应用了输入0伏和3伏,则变量 YD 不会显示为1或-1。 在第309行使用断点后、我不知道这个问题。 请查看表达式窗口,查看下图中的 YK 结果。
由于
第305->Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >> 4;
行309给出 YK->YK= ((float) AdcRegs.ADCRESULT0 - 2048.0f)/ 2047.0f;
如305行所知。 Voltage1是一个 阵列[0-9] 在施加0伏输入(ADCINA0)时变为等于0。 同样、如果 在 施加3V 输入(ADCINA0)时 Voltage1 [0-9]将等于4095。
这样,第309行通过计算必须有两个极值 YK=+/-1,这在表达式窗口中是看不到的。 请提供此问题的答案。
(请记住、当我每次使用断点设置和调试时、Voltage1会按位更新结果0-9)
图片如下:
图片1:
图2:
谢谢
此致
阿尔萨兰
Arsalan,
ADCRegs 是左对齐的、也可以将其定义为 Q4值、但这就是为什么在将它们写入数组时会看到>>4的原因。
如果将 ADCRegs 转换为浮点值、在公式中使用寄存器中的数据之前、仍然需要考虑该数据的 Q4性质。 还有一组 ADC 结果寄存器、ADCMirrorRegs、如果您想避免上述情况、它已经将 ADC 结果右对齐。
如果您将代码更改为分配 Yk =((float) AdcRegs.ADCRESULT0>>4;或 Yk =((float) AdcRegs.ADCMirrRegs.ADCRESULT0;在控制循环中使用编译器之前、我们能否验证编译器是否能够正确转换?
此致!
马修
大家好、MatthewRate:
感谢您的答复。 当我看到系统出现故障时、 AdcRegs.ADCRESULT0 以十进制表示的值为63320、我应将其除以2^4 =16以获得4095。
因此,YK 表达式应该是这样的: YK= ((((float) AdcRegs.ADCRESULT0)/ 16.0f - 2048.0f)/ 2047.0f
然后我得到了 Yk =+/-1的值。
谢谢
此致
阿尔萨兰