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:使用中断和触发区事件创建单个 ePWM 脉冲

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1134317/tms320f28379d-creating-single-epwm-pulses-using-interrupts-and-trip-zone-events

器件型号:TMS320F28379D

e2e.ti.com/.../PulsatingCurrentSource.zip

您好!

我目前正在实施一种可能性、 即从 MATLAB GUI 发送特定命令时仅触发单个 PWM 脉冲。 命令前后、PWM 单元应输出0。 对于该情况、强制执行跳闸区域事件、其中 ePWM 的输出强制为低电平。 为了检测单个脉冲、我想利用 ePWM 中断来检测 CMPA 计数器何时递减。 我验证了这个中断确实被触发并且处于正确的位置。 但是、当我启动 ePWM 时、当我清除跳闸区域标志时、我始终会收到两个意外的中断触发器。 为了进行测试、我始终切换 GPIO 引脚、这是下图中的黄线。 蓝色线是脉冲。 您可以看到、在中断的前两个意外触发后、中断始终在 脉冲的下降沿触发、这是正确的。 现在、我取消了中断中的强制触发区事件的注释、因此永远不会被中断强制为低电平、因为我首先想了解意外 触发中断的原因。 您还可以在下面找到我的代码。

在 menu.c 中、当启动 PWM 单元时调用特定的命令。 在启动 ePWM 之前、在调用 RUNPWMSINGLE 之后、switch 语句中会触发 PWMFREQ 和 PWMDUTY 两种情况。 可以在 PWM.C 中找到相应的函数调用以及中断实现 请注意、我只使用 EPWM1、因此可以忽略其他 ePWM 单元的所有初始化。 我最初认为 runPWMSINGLE 函数中的两个 while 循环可能会导致该问题、但从代码中删除这些 while 循环时、有关中断的行为仍然相同。  

我还连接了可发送所有命令的 Matlab GUI。 您可能需要为系统调整 COM 端口。 您首先必须将代码闪存到 C2000、然后启动 Matlab 脚本、按连接按钮进入所需的频率/占空比、然后单击开始。 再次按下 START 可终止 ePWM。  

非常感谢你的帮助。

请访问 Nikitae2e.ti.com/.../delfino_5F00_cpu1.zip

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

    您好 Nikita、

    您的初始化一瞥、我相信我已经解决了您的问题。 基本上、除了发送跳闸信号外、您正在正确地强制 ePWM 的输出始终为低电平、但这实际上并不是用于控制系统输出的结果。 当您正确设置 OST 时、我认为您 还 设置了事件触发器子模块、以便在递减计数时计数器达到 CMPA 时运行相同的中断。 (ePWM_setInterruptSource()控制 ET 子模块,它不会接触实际的 ePWM 输出信号!)

    下面是我想说的内容的一个可视化图:

    这有道理吗? 因此、您的系统仍在响应 CTR=CMPA 信号。

    我希望这对您有所帮助、

    Jason Osborn

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

    是的、感谢您的帮助。