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.

[参考译文] TMS320F28386D:PWM 与定时器之间的异步

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1198822/tms320f28386d-asynchronism-between-pwm-and-timer

器件型号:TMS320F28386D

您好!

有关我们的设计的一些信息、以了解该问题:

  • CPU 运行@ 200MHz
  • CPU 定时器0生成一个10kHz 的中断、所以 TBPRD 被设定为20000
  • ePWM 实例配置为在计数器处于向上/向下计数模式时生成20kHz PWM、因此 TBPRD 设置为5000

为了检查实时中断和 PWM 之间的同步性、我们每个周期切换 GPIO。

我们期望 PWM 信号与 GPIO 同步、即两者之间的固定偏移显然只有一点点抖动。

但是、在该配置中、我们观察到这两个器件随着时间的推移相互移位。

如果我们将 CPU 定时器0 TBPRD 寄存器设置为19999、此移位操作就会消失、这并不能完全实现逻辑关断。 TRM。

我们在帖子顶部的设计假设是否正确? 或者我们是否错过了 TRM 中的某个内容。

谢谢、

克莱蒙特

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

     您好、Cl é ment、

    您是否有示波器读数的图像或显示此行为的类似图像?

    此致、

    Jason Osborn

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

    您好 Jason、

    图像不会显示问题、视频会出现问题、但由于安全限制、我要做的事情很复杂。

    我的解释中有什么不清楚的地方?

    我们基本上看到的是、在顶部指定的配置中、由于计时器和 PWM 周期是倍数、我们期望 PWM 和生成的信号是同步的、但当在一个上触发时、另一个上的信号是移动的。 然而、在定时器周期上的-1为负 (并非根据 TRM 获得所需频率的逻辑)时、这两个都是同步的。

    因此、可能是 TBPRD 寄存器的配置问题、但我们按照 TRM 指令操作、不明白为什么我们需要在定时器 TBPRD 中放置一个减号、以便信号彼此同步。

    克莱蒙特

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

    您好!

    您能告诉我 PWM 中断是如何触发的? 即事件触发器设置、尤其是 ETSEL[INTSEL]寄存器。

    忽略此帖子、请参阅下面的。

    此致、

    Jason Osborn

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

    实际上、抱歉-我认为我有更好的方法来解释我认为引起混淆的原因。

    本质上、CPU 定时器可以被视为一个简单的递增计数定时器-它们从0递增到目标值、然后复位回0。 请看26.4.3部分中的图26-6计算器件 TRM 的 PWM 周期和频率:

    如果我们想象这里的 ePWM 递增计数器是 CPU 计时器、那么让我们将其与递增-递减计数器进行比较、然后让我们看看每个计时器的 TPWM 计算结果。 这是否会使您看到的内容更加清晰?

    此致、

    Jason Osborn

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

    您好 Jason、

    是的、这确实更清楚了、这是我们从调查中想到的、但我们希望确保。

    无论如何、对于计时器 Ttimer =(PRD + 1) x Tsysclk 没有任何说明(不在 TRM 中、也不在 driverlib CPUTimer_setPeriod 函数文档中)、因此这可能是值得说明的事情。

    此致、

    克莱蒙特