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。
非常感谢你的帮助。
