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.

[参考译文] TMS320F2808:使 ADC 模块正确读取电压

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/741095/tms320f2808-getting-adc-module-to-read-voltages-correctly

器件型号:TMS320F2808

ADC 采样涉及400Hz 三相交流电流监控以及压力和温度。

两个压力传感器(液体输入和输出)均已安装、但目前仅安装了五个温度传感器中的前四个。

定制电路板上提供了测试点、这些测试点连接到上述六个 ADC 输入引脚。  另外三个引脚连接到交流相电流(带有测试点)、这些引脚是有符号值、大约2048个 ADC 单元。

对于两个压力传感器、DVM 上读取的稳定值均为~0.53V。  这将转换为大约14.7 PSI、并且接近预期看到的低端值(冷却系统应用程序在运行时加压)。

针对两个压力读取的 ADC 值看起来相当稳定、大约100个 ADC 单元+/-~6 (应用了 ADC 采样平滑处理、给出了源代码(在"AdcSnips.txt"中)。  不过、对于测量的稳定电压、ADC 值太低、连接到 ADC 引脚。

相反、对于温度传感器、DVM 上读取的稳定值为~2.185V。  这将转换为大约25摄氏度(在 SoCal 中为温环境)、并且将接近预期看到的温度的顶端。  当冷却系统运行时、我们需要测量低于-55摄氏度的温度。  F2808在仅以20MHz 运行时不会变得如此冷、即使只启用 ADC 和 SCI-A 模块时钟也是如此。  我们将使用 SM 变体进行生产。

一个或两个温度(取决于引脚映射到的 ADCBUFFER)以类似的方式读取大约100个 ADC 单元+/-~6。  同样、应用了 ADC 采样平滑处理。  这是一个非常低的环境值;当冷却系统启动时、所有温度都会快速下降。  应接近最大值。

两个或三个温度(取决于引脚映射到的 ADCBUFFER)在周围波动很大、甚至高于满量程 ADC!  如果读取有效的 ADC 值(高达4095)、则应用的平滑处理将完全在 uint16可变大小范围内。

因此、看起来没有任何 ADC 转换是有效的。  可能是由于初始化故障或 SEQ1启动可能无效?

压力和温度值(目前采用 ADC 单位、具有平滑处理功能)会通过 RS-422链路以 ASCII 格式自动报告、每秒一次。

代码(提供完整的"main.c")。 和"AdcInput.c"("AdcSnips.txt")和"SYSCTRL.c/h"模块("SysSnips.txt")中的相关片段位于随附的 Zip 文件("AdcCode.zip")中。

我们目前无法监控任何交流电流值、但也会发现这些值不正确。  由于电源是数字电源(与正弦波形完全不同、噪声非常大)、因此跟踪这些波形尤其具有挑战性。

要关闭冷却系统(并通过 RS-422双工链路发出警报消息、需要对反向相位、缺失(半)相位以及任何相位消耗的低电流进行全面监控。

仅在20MHz CPU 时钟下的 CPU 负载似乎超过50%、尽管状态机交流峰到谷峰转换跟踪几乎没有激活。  所选的 ADC 采样率应在峰值或半波形式下提供8个采样。  对于一个体面的平均水平来说足够了(我希望)。  没有足够的分流器以更快的速度进行采样。

"AdcSnips.txt"文件中提供了一些交流相位跟踪提示。  CPU 时钟受电源电压降至23V (28V 直流电源电压至5V)的热限制。

之前、执行了半个 ADC 缓冲器(在读取的 ADC 值中看到的问题完全相同)。  对于级联 ADC、几乎将交流相位跟踪状态机的代码大小减半、CAN 也是如此。  它目前从 Timer1中断路径调用、 它在下一个 Timer1中断之前完成、所以不用担心(尚未)。  后台任务运行正常(如 SCI-A 消息传输、轮询字节)。

如果您需要更多信息、请告知。  我已经将很多"spru716d.pdf"(ADC 参考指南)复制到了注释中、因为我一直在引用它!  这些注释应解释实施的许多设计决策。

此致

Andrew Coles

e2e.ti.com/.../AdcCode.zip

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

    您是否正在从 AdcMirror.ADCRESULTn 寄存器读取数据? 我看不到 AdcRegs.ADCRESULTn 值发生>4位移位的位置。

    您能否提供一个表格来显示几个采样点 ADC 引脚上的测量电压与数字化 ADC 值的关系?

    您是否有一个 EVM、您可以在其中尝试相同的 ADC 初始化设置、以查看其他平台上的行为是否不同?

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

    你(们)好

    感谢您的回复。

    你说得对、我应该已经指定了'AdcMirror'而不是'AdcRegs'、以便读取 ADCRESULTn 缓冲器。

    当然可以在没有额外的2周期读取开销的情况下执行、并且需要涉及4位向右移位以获得正确的理由!

    让新的软件工程师立即开始工作、加快进度。  但是、一旦我有机会重新编码并重新测试、我会立即提出建议。

    这也会导致 ADC 值大于4095!

    此致、

    Andrew

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

    感谢您的观看。 我希望它能清除。

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

    你(们)好

    今天早上、我从 ADC 压力/温度读数中删除了平滑处理。  它是前一个平均值加上最近 ADC 采样的7倍除以8。  在中断路径内执行、执行乘法、加法和移位非常快。

    每 μ s 312.5µs 一次 ADC 采样(几乎是满缓冲器)。  通过 RS-422链路对所有这些项目进行自动报告的选项进行后台调度、每秒一次输出(如果选择多个输出、则循环)(3、200个 CPU 定时器1间隔)。

    在采集新的 ADC 采集后、还采集了连接到 ADC 引脚的测试点上的 DMV 测量值。 结果如下:

    ADC 引脚     项读取         ADC 值范围   测试点上的电压  预期的 ADC 值

    ADCINB0   温度1    1950 2667              2.183                          ~2980 (TP Volts / 3 * 4095)

    ADCINB1   温度2    1861 2454              2.184                          ~2981

    ADCINB2   温度3      006. 010                2.186                          ~2984

    ADCINB3   温度4      002. 008                2.185                          ~2983

    ADCINB4    演示1           005. 010                0.53                              ~723

    ADCINB5    压力2           005. 008                0.53                              ~723

    四个 RTD 器件完全相同、均处于环境温度下。  泵运行时温度会降低。

    对于压力传感器、读数应为~14.7 PSI。  泵运行时压力增加。

    我已将"AdcSnips.txt"文件更新为"AdcSnip2.txt"。  它现在包含 ADC 引脚映射、并反映右对齐镜像 ADC 读取。

    ADC 时钟可降低至5µs μ s、外加一个额外的采样时钟。  15个级联 ADC 样本应以 μ 225µs 收集。  允许为312.5µs Timer1间隔(为调度目的选择)。

    顺便说一下、我从未在早期版本的电路板上使用 PIE 中断。  因此、精心设计 SCI-A RX 和 TX 的计划轮询间隔、以便仅基于 CPU 定时器1中断获得可靠的 RS-422通信(保持运行、自动报告、持续8天)。

    此致

    Andrew

    e2e.ti.com/.../AdcSnip2.txt

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

    您能否检查 ADCIN_B 通道分配? 通道枚举的有效范围是0到15、但#define pragma 会分配大于15的值。

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

    很棒的地方——刚刚尝试了 ADCINB Offsets、重新刷新了和
    已在系统上运行板。

    设置 B3以访问 ADCINB0..7的注释是正确的、
    但应为通道 B 添加的8个偏移是
    编码为16。

    不管被读了什么,都是这个地方!

    作为唯一的嵌入式软件、我一直独自工作
    近四年的时间。 不想让任何人来这里,来这里看看吧
    检查我做什么(更不用说代码评论!)。 就像看到他人一样
    拼写错误、但不是一个人自己的错误...

    现在可以将平滑处理重新放入、并将转换为 PSI
    和摄氏度。

    讽刺的是、我无法在电机所在的位置测试 ADCINA0..2引脚
    电流是输入。 正在重建电机/泵总成
    目前。

    电流本来可以从 Get-Go 正常工作(证明了
    ADC 模块、否则编程为正常、并且工作正常)。


    此致、

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

    我很高兴 ADC 现在能更好地工作。 不要放弃 PIE 中断!

    Tommy