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.

[参考译文] TMS320F28377S:ADC 读数缺少低位 3 位

Guru**** 2534650 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1565733/tms320f28377s-adc-readings-missing-lower-3-bits

器件型号:TMS320F28377S
主题:C2000WARE 中讨论的其他器件

工具/软件:

您好:

我卡在 F28377S 上的问题上、很明显、我的 ADC 读数丢失了 3 位分辨率。 这些值解析为 0x___8 或 0x___0、当我扫描电路的输入电压时、它仅以 16 或 32 为增量进行升压或降压。 (例如,0x0118 -> 0x0128 -> 0x0148)

ADC 配置为 12 位单信号模式、我使用 C2000ware 功能对其进行设置。

我已经尝试减慢 ADCCLK 并尽可能扩大每个样本的采集窗口、但并没有出现任何变化。 如果这是一个稳定时间问题、我仍然可以预期较低的位中会有至少一定量的噪声、即使它们不准确也是如此。

此外、读取的值在明显不同的值之间“闪烁“-例如、当输入信号处于稳定状态时、ADC 结果将在 0x0A58 和 0x0A78 之间跳转、而显然不会达到任何其他值。

在某些方面、它的作用就好像这些值在结果寄存器中左移一样、但它们都接近我的预期、只是缺少精度。

我起初认为这是在 Code Composer 中监控寄存器的伪影、但我读出了调试变量的结果、并使用相同的结果计算出读数的增量。

我没有任何正在进行的后处理。

我是否错过了任何可解释此截断的配置选项? 我已经了解到、精度可能会因输入电路设计不当而损失、但在这种情况下、我仍然希望低位可以有一定的噪声。

任何其他建议也得到赞赏。

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

    您好:

    根据您的观察、这主要是结果对齐、而不是分辨率损失。  在 F28377S 上、16 位 ADCRESULTx 寄存器中的 12 位转换结果是左对齐的:位于[15:4]和[3:0]中的有效 12 位始终为 0。

    如果您在不进行移位的情况下查看原始寄存器值、则代码会以 0x10 (16) 或 0x20 (32) 为步长而变化、而十六进制值通常以…0 结尾(并且根据打印/掩码的方式、当您跨越边界时、可能会注意到…8)。 因此、在读取原始寄存器时、右移 4 以获得真正的 12 位。

    此致、

    Masoud

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

    尊敬的 Masoud:

    我在这一点上感到困惑。 我曾经看到过一些建议、认为 12 位结果在结果寄存器中左对齐、但这与我在调试代码中看到的结果不匹配。 我的结果中未填充 4 个最高有效位、应达到最大值的通道表示为 0x0FFF/4095。

    (我可能缺少一些自动执行换档的较低级别的访问项目。)

    而且,如果这只是一个问题与改变我仍然希望在结果中有某种敏感性。 我们的 ADC 电路在 3.3V 下供电、因此、如果我扫描输入电压、我应该会看到结果以略小于 1mV 的步长变化。 但我看到的是、除了 12.9mV 甚至 25.8mV 的步长外、结果是可以抵抗变化的。

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

    尊敬的 Jeff:

    您所描述的与原始 ADC 结果左对齐且低 4 位始终为零时所看到的完全相同。 在 12 位模式的 F2837x 器件上、转换存储在 ADCRESULTx[15:4]和 ADCRESULTx[3:0]=0 中。 如果读取原始 ADCRESULTx 寄存器、必须右移 4 才能获得真正的 12 位值 (0–4095)。

    为什么看到“maxed"通道“通道使用 0x0FFF (4095):这表明代码路径中的某个层已经为您提供了一个右对齐的 12 位数(例如,一个可读取和移位的帮助程序/API)。 如果随后再次移位(例如,在转换为 mV 之前 val >>=4)、则可以有效地将低 4 位清零、从而得出粗略步长。 换句话说、您可能会出现双移位情况、具体取决于您是通过驱动程序/API 读取还是直接读取寄存器。

    此致、

    Masoud

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

    我很有信心这不是位移错误、我运行了相同的代码、并在其他应用中使用了相同的调试过程;在这些情况下、我在结果寄存器中看到了 12 位精度。 事实上、我测试的相同代码在同一处理器上运行、但被测板的版本不同、并且具有完整的 12 位分辨率。 据我所知、ADC 电路没有相关变化、因此我将解释转换器为什么会表现出这种行为。

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

    如果在右移后仍然看到量化突变大于 1LSB、请分享一个简短的片段、其中显示了如何配置 ADC_setMode (...)、SOC ACQPS 以及如何读取/记录结果;但在几乎所有类似的情况下、>> 4 是缺失的步骤。

    此致、

    Masoud

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

    尊敬的 Masoud:

    弄清楚了 — 我会在这里提及这一点以供将来参考。 最终、问题的根本在于在我们读取读数时基准电压并不完全稳定。 我仍然不完全理解这是如何导致截断效果我看到,但一旦我们改进行,我开始得到完全分辨率再次.

    感谢您的建议!