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.

[参考译文] TMS320F28379D:我能否在 CPU 中读取 ADC 结果"恰好在时间&quot 中?

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/612597/tms320f28379d-can-i-read-the-adc-result-just-in-time-in-cpu

器件型号:TMS320F28379D

CLA 的一个重要特性是、它可以"及时"读取 ADC 结果以最大限度地减小电流环路延迟、CPU 的延迟如何? 是否有任何示例?

谢谢。

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

    您好 Howard、

    对于"及时"控制循环更新、有几种方法需要考虑。

    1. 在我们的大多数器件系列(F2802x 和更新版本)上、ADC 具有早期中断功能。  当 ADC 配置为此模式时、这意味着 ADC 将在采样完成后(但在开始转换之前)触发中断。  这意味着大部分转换过程将在 CPU 更改中断的上下文时发生。  这可以是进行"及时"更新的一种方法。  下图描述了这一想法。

    2. 在许多情况下、ePWM 模块会生成 ADC SOC 触发器、ePWM 可能会生成控制环路的中断、而不是 ADC。  如果已经完成、它提供了一种方法来在正确利用控制环路延迟时将其最小化-用户需要确保在使用 ADC 结果之前完成任何 ADC 转换。  
      1. 在许多情况下、用于生成 ADC SOC 的 EPWM 比较事件也会生成 ISR。
      2. 在 F2837*等较新的器件上,ePWM 模块包含额外的计数器比较寄存器。  CMPC 和 CMPD 主要用于使客户能够更灵活地生成相对于 ADC SOC 触发器的 EPWM 中断、以便更及时地进行优化(以及其他事项)。


    2a 描述的方法在许多基于系统的评估套件示例中完成、但我不相信我们确实记录了这种方法。

    希望这对您有所帮助!

    谢谢、
    Brett

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

    您好 Howard、

    只需添加几位信息即可添加到 Brett 的回答中:

    您可以在此处获取确切的 ISR 上下文切换延迟时序(内部中断为14个周期):

    processors.wiki.ti.com/.../Interrupt_FAQ_for_C2000

    您可以从表5-51中获取 F2837xD 数据表中的确切 ADC 时序。 "12位模式下的 ADC 时序(SYSCLK 周期)"和 表5-52。 " 16位模式下的 ADC 时序"。  还有随附的图表。  由此、您将注意到、在 SYSCLK = 200MHz 和 ADCCLK = 50MHz 的正常使用情况下、时序如下:  

    12位模式:早期 INT 在1个周期发生、结果在44个周期锁存。  因此、如果您使用早期中断模式、您将需要等待或执行设置操作、时间为44-1-14 = 29个周期。  

    16位模式: 早期 INT 在1个周期内发生、结果在120个周期内锁存。  因此、如果您使用早期中断模式、则需要等待或执行设置操作、时间为120-1-14 = 105个周期。  

     对于这两种模式、如果使用延迟中断模式、则在结果锁存后的14个周期内进入 ISR。

    现在、在 F28004x 器件系列上、我们添加了一项附加功能、可让您在早期中断模式下将 ISR 生成延迟任意数量的周期。  为此、您需要将器件置于早期中断模式、然后向 ADCINTCYCLE.DELAY 写入一个值。  在上面的12位情况下、你可以向这个寄存器写入29、然后准确地进入 ISR。  如果在需要读取结果之前有6个设置周期、则可以写入29-6 = 23、并且仍然准确准时到达读取操作。