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:当 PWM 在向上-向下计数模式中向下计数时、不触发 PWM ISR

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1424599/tms320f28379d-pwm-isr-not-triggered-when-pwm-is-counting-down-in-up-down-mode

器件型号:TMS320F28379D

工具与软件:

专家们、您好!

我 已将 ePWM11配置为向上/向下模式、并 通过将 INTSEL 位写入011来尝试在 TCBR 为零或周期时启用 PWM 中断  

EPWM_setInterruptSource (EPWM11_BASE、EPWM_INT_TBCTR_ZERO_OR_PERIOD);

我是否 正确假设每个 PWM 周期(以红色标记)都将产生2个中断、一个在 TCBR = 0时产生、另一个在 TCBR =周期时产生?

现在、当 TCBR 为0时、如果我检查方向(TBSTS. CTRDIR)、假设计数器将递增计数、我是否正确? 当  TCBR 等于周期时、计数器将会递减计数?

我试图验证上述,通过检查的方向在 PWM ISR ,但它总是显示为它是向上计数,它从不向下计数,我试图切换一个 GPIO 来验证这一点,但总是低!  

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
__interrupt void pwm11_ISR(void)
{
pwm_CounterDIR = EPWM_getTimeBaseCounterDirection(EPWM11_BASE);
testTCBR1 = EPWM_getTimeBaseCounterValue(EPWM11_BASE);
if(EPWM_getTimeBaseCounterDirection(EPWM11_BASE))
{
GPIO_writePin(46,0);
}
else
{
GPIO_writePin(46,1);
}
testTCBR2 = EPWM_getTimeBaseCounterValue(EPWM11_BASE);
EPWM_clearEventTriggerInterruptFlag(EPWM11_BASE);
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
Interrupt_clearACKGroup( INTERRUPT_ACK_GROUP3 |
INTERRUPT_ACK_GROUP11 );
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我在这里遗漏了什么配置?

如果我将中断源设置为:

EPWM_setInterruptSource (EPWM11_BASE、 EPWM_INT_TBCTR_ZERO );、则 GPIO 始终为低电平。

类似地、将中断源设置为  

EPWM_setInterruptSource (EPWM11_BASE、 EPWM_INT_TBCTR_PERIOD );、 则 GPIO 始终为高电平。

但当我将中断源设置为时  

EPWM_setInterruptSource (EPWM11_BASE、 EPWM_INT_TBCTR_ZERO_OR_PERIOD );、GPIO 始终为低电平!!、  

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

    您好、AK、

     正确的是假设将为每个 PWM 周期产生2个中断、一个是 TCBR =0时、另一个是 TCBR =周期时、(标记为红色)?

    有。

    [quote userid="521194" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1424599/tms320f28379d-pwm-isr-not-triggered-when-pwm-is-counting-down-in-up-down-mode 现在,当 TCBR 为0时,如果我检查方向(TBSTS. CTRDIR)、假设计数器将递增计数、我是否正确? 当  TCBR 等于周期时、计数器将向下计数?[/QUOT]

    此外、是的。

    我的第一个问题是:如果你在 ISR 中设定一个断点、那么断点到底被击中了吗? 如果没有、我们可以确认 ISR 未被调用、并进一步研究配置。 您还可以提供 ePWM init 的片段吗?

    此致、

    Allison

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

    您好、Allison、

    我找到了这个问题,在我的 PWM 初始化器,即使我设置 ePWM 源  EPWM_INT_TBCTR_ZERO_OR_PERIOD、 我也用相同的 PWM 触发 ADC SOC ,但 ADC 触发源被 配置为  ePWM_SOC_TBCTR_ZERO 而变化。

    EPWM_setADCTriggerSource (EPWM11_BASE、EPWM_SOC_A、EPWM_SOC_TBCTR_ZERO);

    它变为后的样子  

    EPWM_setADCTriggerSource (EPWM11_BASE、EPWM_SOC_A、 EPWM_SOC_TBCTR_ZERO_OR_PERIOD );、现在我能够检测向上计数和向下计数方向。

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

    很高兴听到您已经解决了它! 感谢您发布解决方案