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:以与 ADC SOC 不同的频率生成 PWM

Guru**** 2452390 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1159039/tms320f28386d-generate-pwm-at-different-freq-than-adc-soc

器件型号:TMS320F28386D
Thread 中讨论的其他器件:SysConfigC2000WARE

大家好、我已经了解了多轴电机示例。 在每个 PWM 周期的中间有一个中断。 这对于以20kHz 的频率运行是可以的。

但是、我希望 PWM 以80KHz 的频率运行、但中断和 ADC SOC 应仅为20kHz。

我已经能够对中断进行计数、并且每4次只运行我的代码、但这并不理想。

您能否给我指出一个示例或功能、让我更好地做到这一点?  

谢谢。

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

    您好 Ken、

    我们的专家将在今天再次讨论这个问题。

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

    Ken 您好、

    好消息! 4类 ePWM 内置了此功能、配置相对简单。 事件触发器子模块能够在 n 介于1和15之间的 n 个事件中执行一次 SOC 或中断。 如果您使用的是 SysConfig、则在 ePWM->事件触发->ADC SOC 触发器中、"SOCx 触发事件计数"以干净、快速且简单的方式完全符合您的需求。

    如果您想手动调整寄存器、请使用"ePWM_setADCTriggerEventPrescale (...)" C2000Ware driverlib 中的函 数允许直接控制事件触发器预分频:SoC 预分频选择(ETPS[SOCPSSEL])寄存器和事件触发器转换启动预分频:SOCx Period2 (ETSOCPS[SOCxPRD2])寄存器。 名称较长、但基本而言;

    • ETPS[SOCPSSEL]= 1使 ET 能够触发1到15个事件(ETPS[SOCPSSEL]= 0仍然允许 ET 每1-3个事件触发一次、但这对于您的实现来说还不够)
    • ETSOCPS[SOCxPRD2]= x 将 ET SOC 触发器的周期设置为 x。在您的情况下、您希望该周期为4!
    • 假设您已启用 SOC、上面提到的函数会为您处理这两个问题。

    请注意、这些功能也适用于 ET 的常规中断、而不仅仅是 SOC。

    总是很乐意提供帮助、

    Jason Osborn

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

    感谢您的回复。

    这是有道理的、但设置  EPWM_setADCTriggerEventPrescale  似乎没有任何变化。 我的 PWM 输出上有一个示波器、ISR 中有一个 GPIO 切换。 我可以看到每个 PWM 周期中的 GPIO 切换。

    但是如果我更改这个值、它看起来确实起作用   了 ePWM_setInterruptEventCount (obj->pwmHandle[0]、4);

    这有道理吗? 这是我遇到其他问题的迹象吗?

    谢谢

    Ken

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

    Ken 您好、

    不、你可以-我误解了你在做什么、这就是全部! ET 具有单独的 ADC SOC 专用中断功能和通用中断功能、我误读了您使用的是前者。 对于常规中断,ePWM_setInterruptEventCount()是等效函数,如您所见!

    此致、

    Jason Osborn