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 配置和一些问题

Guru**** 2482225 points
Other Parts Discussed in Thread: TMS320F28377S, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/637580/tms320f28377s-configuration-of-the-adc-and-some-problems

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

我正在尝试使用 TMS320F28377S 处理器上的 ADC。 我似乎找不到有关 ADC 寄存器的文档。  我尝试了 C2000ware、但它在 html 中列出了寄存器、但并未说明它们的功能或设置方法。  我查看了处理器页面上的技术手册链接、但唯一的 ADC 文档与具有不同寄存器的 F2833x 处理器有关。  

  • 是否有文档描述了该处理器的 ADC 的详细信息?
  • 我想了解转换时间与 AdcaRegs.ADCSOC0CTL.bit.ACQPS 寄存器之间的关系。  如果我将此转换时间设置为非常长以获得平均电压(8us)、是否存在问题?  
  • 一种替代方法是在我的 ISR 期间收集8个或16个 ADC 样本并对其求平均值。  我已经使用 F28335处理器上的 DMA 和 PWM 时钟完成了这一操作、但我似乎无法弄清楚如何在 F28377上实现这一操作。  F28377处理器的示例代码显示了如何突发 ADC、但我似乎无法知道如何控制时序(除了更改我更喜欢单独保留的转换时间)。  理想情况下、我希望主 ISR 以固定频率运行、并让 ADC 对其进行8倍过采样、获取8个样本、求平均值并在下一个周期使用它们。  我更喜欢一种不涉及使用处理器和第二个 ISR 的方法。  我能否手动触发 ADC 在 ISR 开始时和 ISR 结束时(或在下一个 ISR 开始时)将8个值突发到存储器中、获取这些值并使用它们?  这是如何设置的?
  • 如何检测手动转换是否已完成?  我应该检查哪个寄存器?
  • 我还注意到、如果我在使用 DAC (以检查我的 ISR 速率)时切换 GPIO0、我会在 DAC 输出上获得明显的噪声。  为什么是这样?  如何解决此问题、以便可以同时使用 DAC 和 GPIO 引脚(噪声与示波器上的 GPIO 转换保持线)?

感谢你的帮助。

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

    [引用 USER="Neil 歌手"]。  是否有文档描述了该处理器的 ADC 的详细信息?[/quot]

    你(们)尼尔

    您可以参阅 TMS320F2837XS 技术参考手册中的 ADC 部分 以了解有关 ADC 及其寄存器的详细信息。

    谢谢

    Vasudha

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

    [引用用户="Neil 歌手"]

    • 一种替代方法是在我的 ISR 期间收集8个或16个 ADC 样本并对其求平均值。  我已经使用 F28335处理器上的 DMA 和 PWM 时钟完成了这一操作、但我似乎无法弄清楚如何在 F28377上实现这一操作。  F28377处理器的示例代码显示了如何突发 ADC、但我似乎无法知道如何控制时序(除了更改我更喜欢单独保留的转换时间)。  理想情况下、我希望主 ISR 以固定频率运行、并让 ADC 对其进行8倍过采样、获取8个样本、求平均值并在下一个周期使用它们。  我更喜欢一种不涉及使用处理器和第二个 ISR 的方法。  我能否手动触发 ADC 在 ISR 开始时和 ISR 结束时(或在下一个 ISR 开始时)将8个值突发到存储器中、获取这些值并使用它们?  这是如何设置的?
    • 如何检测手动转换是否已完成?  我应该检查哪个寄存器? [/报价]

    我认为 一种方法是 将8/16 SOC 配置为对单个通道进行过采样。  所有 SOC 都可以具有与软件/计时器/ADCINT1/2相同/不同的触发器。 SOC8/16可配置为中断源、只 能在外设级别启用中断。  可以手动检查中断标志寄存器以检测上一次 SOC 转换的完成情况(ADCINTFLG 寄存器)。 一旦设置了该标志、就可以读取所有 SOC 寄存器。 清除下一次迭代的中断状态。

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

    谢谢,Vasudha!

    我错过了手册中的该部分。 您的回答太棒了!

    如果我使用8个 SOC 来收集8个应起作用的样本。 是否有任何方法来指定每次 SOC 触发之间的延迟?  从您指向我的手册中可以看出、它们在 PWM 的循环中触发。 理想情况下,我希望触发它们,并使它们在整个 ISR 中间隔,以很好地表示 ISR 上的平均电压。 我可以通过延长 ACQ 时间和增加 ADC 预分频器来实现这一点、但这会让我感到困扰。 或者、我可以使用多个 PWM 来触发不同的 SOC 异相。 您会建议什么? 是否有更好的方法?

    再次感谢

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

    您好、Neil、

    您可能希望在 TRM 中研究的一个部分是"突发模式"。  

    这将使您使用一个全局触发源来触发下一个 N 转换、其中每个转换由 SOC 的循环集中的 SOC 定义。   

    例如、如果 N 为2、则第一个触发器将对 SOC0和 SOC1、第二个触发器 SOC2和 SOC3等进行采样   

    这实际上与 F28335的序列发生器非常相似。

    您可以将另一个 ePWM 配置为突发触发源、其运行速度比主 ePWM 快8倍、并将突发大小设置为1。  这将在结果寄存器0至7中产生8个均匀间隔的转换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。 这很有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Devin、这正是我需要的。

    我得到了您的建议、但我看到了一个奇怪的问题。 我注意到、所有16个 SOC 都在突发模式下更新。 "未使用" SOC 具有垃圾信息、因为它们使用 ACQPS=0、但它们仍然被激活。 这是正常的吗? 是否可以禁用它们? 我假设他们使用的是我的 PWM 时钟周期、这将关闭我的采样。 我只希望 ePWM 以1的猝发方式触发 SOC0到 SOC7。

    我用一个递增计数、0 CMP 和125计数器(= 1250 ns)来配置 ePWM。

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

    当使用突发模式时、每次触发都会导致 n 个采样发生、其中 n 由 BURSTSIZE 位域置位。

    默认情况下、此过程将贯穿所有16个 SOC。 每个 SOC 将根据其通道选择和 acqps 生成输出。 如果 acqps 小于最小值、或者如果它对于驱动阻抗太小、它将产生不良/垃圾输出。 同样、如果通道选择选择选择的通道未输出引脚、则会得到不可预测的结果。

    如果您不想处理全部16个 SOC、则可以通过更改 SOC 优先级来控制此操作。 只有循环(低优先级) SOC 将通过突发触发器进行遍历。 因此、如果您将 SOC0-SOC6设置为高优先级、且突发大小= 3次转换、则第一个突发触发器将通过触发 SOC7、SOC8和 SOC9开始...第二个触发 SOC10、SOC11和 SOC12 ...第三个触发 SOC13、SOC14和 SOC15。 SOC0-SOC6将能够通过其正常的 SOC 触发选择配置(而不是突发触发选择)进行触发。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正是我所需要的 谢谢你。