“线程:sysconfig, C2000WARE”中讨论的其它部件
我之前打开 了一条线程 ,但当时无法解决问题。 我们已将一些 PWM 配置为20 KHz 频率和中心对齐模式。 设置代码如下所示:
// Set-up TBCLK
//Device clock is 100 MHz
EPWM_setTimeBasePeriod(base, 2500);
EPWM_setPhaseShift(base, 0U);
EPWM_setTimeBaseCounter(base, 0U);
EPWM_setTimeBaseCounterMode(base, EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad(base);
//
// Set ePWM clock pre-scaler
//
EPWM_setClockPrescaler(base, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
//
// Set up shadowing
//
EPWM_setCounterCompareShadowLoadMode(base, EPWM_COUNTER_COMPARE_A,
EPWM_COMP_LOAD_ON_CNTR_ZERO);
//
// Set actions
//
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,
EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,
EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_A,
EPWM_AQ_OUTPUT_NO_CHANGE,
EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,
EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_B,
EPWM_AQ_OUTPUT_LOW,
EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_B,
EPWM_AQ_OUTPUT_HIGH,
EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_B,
EPWM_AQ_OUTPUT_NO_CHANGE,
EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(base, EPWM_AQ_OUTPUT_B,
EPWM_AQ_OUTPUT_LOW,
EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
我们已经观察到,只要 PWM 的占空比发生变化,其占空比周期就会有中间过渡。 请参考下图:

初始占空比设置为50%。 然后,当蓝色线条显示某个瞬间时,占空比为28%,我们正在使用以下功能:
ePWM_setCounterCompareValue (基本值,ePWM_counter_compare_A,
占空比计数);
然而,你可以看到,中间时期的工作周期为37%。 我们按照我们的理解进行了设置 ,新的计数器值将从下一个 PWM 周期开始生效。
ePWM_setCounterCompareShadowImage LoadMode (基本,ePWM_counter_compare_a,
ePWM_COMP_load_on_CNTR_zero);
但是,我们怀疑这种情况是因为新的计数器值在该期间中期生效。 我们如何确保工作周期从该期间开始生效,以便直接过渡到我们下一个预定的工作周期。


