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.

TMS320F280025C: 配置pwm后进行调试,输出的波形经过一段时间后会恒低或恒高

Part Number: TMS320F280025C
Other Parts Discussed in Thread: LAUNCHXL-F280025C

将PWM进行如下配置后,输出的波形开始正常输出大概10s,然后就保持恒定不变了:

EPWM_setActionQualifierAction(base3, EPWM_AQ_OUTPUT_A ,
EPWM_AQ_OUTPUT_TOGGLE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction(base3, EPWM_AQ_OUTPUT_B ,
EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);

//
//AQCSFRC Active Register Reload From Shadow Options
//
EPWM_setActionQualifierContSWForceShadowMode(base1,
EPWM_AQ_SW_SH_LOAD_ON_CNTR_ZERO);
EPWM_setActionQualifierContSWForceShadowMode(base3,
EPWM_AQ_SW_SH_LOAD_ON_CNTR_ZERO);

为什么会出现这样的问题?有什么修改的建议吗?

  • 你好,如果只是设置AQ模块的话我觉得不应该出现运行10秒才无输出的情况。

    出现恒低或恒高的情况时,程序还是正常运行的吗?

    你的程序中有没有设置TZ模块?

  • 你好,程序是正常运行的,TZ模块没有设置。程序最开始执行的时候是没有输出的,修改了AQ模块后才有输出。

  • 额,所以你的程序是一开始没有输出,设置AQ模块后有输出了,但是执行大概10秒后又会没有输出?

    你的程序是自己编写的?还是根据TI例程修改的?基于例程的话具体是修改了些什么?

  • 程序是根据Ti例程改的,只是修改了一些周期,时钟的配置,还有设置了死区时间。

  • 我的周期和死区时间配置如下,我这样配置有问题吗,我的代码在TI的LAUNCHXL-F280025c上的输出是正常的,但是在自己的板子上输出异常。

    EPWM_setPeriodLoadMode(base1, EPWM_PERIOD_SHADOW_LOAD);
    EPWM_setTimeBasePeriod(base1, pwm_period_ticks >> 1);
    EPWM_setTimeBaseCounter(base1, 0);
    EPWM_setPhaseShift(base1, 0);
    EPWM_setTimeBaseCounterMode(base1, EPWM_COUNTER_MODE_UP_DOWN);
    EPWM_setClockPrescaler(base1, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

    EPWM_setDeadBandCounterClock(base3, EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
    EPWM_setRisingEdgeDelayCount(base3, pwm_db_ticks_hs);
    EPWM_setFallingEdgeDelayCount(base3, pwm_db_ticks_hs);
    EPWM_setDeadBandDelayMode(base3, EPWM_DB_RED, true);
    EPWM_setDeadBandDelayMode(base3, EPWM_DB_FED, true);
    EPWM_setRisingEdgeDeadBandDelayInput(base3, EPWM_DB_INPUT_EPWMA);
    EPWM_setFallingEdgeDeadBandDelayInput(base3, EPWM_DB_INPUT_EPWMA);
    EPWM_setDeadBandDelayPolarity(base3, EPWM_DB_FED,
    EPWM_DB_POLARITY_ACTIVE_LOW);
    EPWM_setDeadBandDelayPolarity(base3, EPWM_DB_RED,
    EPWM_DB_POLARITY_ACTIVE_HIGH);

  • 额,所以是同样的代码,在launchPAD上运行正常,但是在自己的板子上会出现运行10秒之后变恒低或恒高?

    我怎么觉得是你的程序在自己的板子上运行10秒后就不运行了?

    你是如何判断PWM出现恒低或恒高后板子还是在运行的?

  • 我在PWM模块后面修改了一个GPIO的值,通过测量这个GPIO的值是在变化的,因此我判断板子还在运行。

  • 你提到的是在TI开发板上能正常运行,但在自己板子上运行不正常。自己的板子PWM引脚是否有外接其他电路?

  • 没有外接其他电路

  • 有没有测试过TI例程会不会出现这个问题?如果用TI例程也有同样的问题,那基本可以判断是硬件问题。如果例程没问题,那可能要看一下具体程序的编写了。