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.

[参考译文] TMS320F28335:AdcRegs.ADCRESULT0 (读取 ADC 值)问题。。。ADC 模块

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1256533/tms320f28335-adcregs-adcresult0-reading-adc-values-issue-adc-module

器件型号:TMS320F28335

您好、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的值。

    谢谢

    此致

    阿尔萨兰