请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TMS320F28.0025万C 您好,
我是TI C2000 UC的新用户,在使用ePWM模块从PWP-PWM 100 % 占空比生成0 % 时遇到了一些困难。
目前,我甚至无法生成PWM信号,但我还不能弄清楚我做了什么错误。 我想使用PWM7A输出,并按如下所示配置PWM:
初始化(这在MotorControl SDK - UniversalMotor实验室示例中,其中设置了3相PWM):
void HAL_setupPWMs(HAL_MTR_Handle handle)
{
...
//Set the handle for the base
obj->bcHandle = BC_PWM_BASE;
// setup the Time-Base Control Register (TBCTL)
EPWM_setTimeBaseCounterMode(obj->bcHandle,
EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad(obj->bcHandle);
EPWM_setPeriodLoadMode(obj->bcHandle, EPWM_PERIOD_SHADOW_LOAD); //Shadow load
EPWM_setClockPrescaler(obj->bcHandle, EPWM_CLOCK_DIVIDER_1,
EPWM_HSCLOCK_DIVIDER_1);
// setup the Timer-Based Phase Register (TBPHS)
EPWM_setPhaseShift(obj->bcHandle, 0); //No phase shift to the basis timer
// setup the Time-Base Counter Register (TBCTR)
EPWM_setTimeBaseCounter(obj->bcHandle, 0);
// setup the Time-Base Period Register (TBPRD)
// set to zero initially
EPWM_setTimeBasePeriod(obj->bcHandle, 0);
// setup the Counter-Compare Control Register (CMPCTL)
EPWM_setCounterCompareShadowLoadMode(obj->bcHandle,
EPWM_COUNTER_COMPARE_A,
EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode(obj->bcHandle,
EPWM_COUNTER_COMPARE_B,
EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode(obj->bcHandle,
EPWM_COUNTER_COMPARE_C,
EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode(obj->bcHandle,
EPWM_COUNTER_COMPARE_D,
EPWM_COMP_LOAD_ON_CNTR_ZERO);
// setup the Action-Qualifier Output A Register (AQCTLA)
EPWM_setActionQualifierAction(obj->bcHandle,
EPWM_AQ_OUTPUT_A,
EPWM_AQ_OUTPUT_LOW,
EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction(obj->bcHandle,
EPWM_AQ_OUTPUT_A,
EPWM_AQ_OUTPUT_NO_CHANGE,
EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction(obj->bcHandle,
EPWM_AQ_OUTPUT_A,
EPWM_AQ_OUTPUT_NO_CHANGE,
EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction(obj->bcHandle,
EPWM_AQ_OUTPUT_A,
EPWM_AQ_OUTPUT_HIGH,
EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
// setup the PWM-Chopper Control Register (PCCTL)
EPWM_disableChopper(obj->bcHandle);
// PWM frequency
EPWM_setTimeBasePeriod(obj->bcHandle, pwmPeriodCycles);
...
}
现在我激活具有恒定系数的PWM:
HAL_writeBCData(HAL_MTR_Handle handle,HAL_PWMData_t *pPWMData, float32_t duty)
{
HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;
float32_t period = (float32_t)(EPWM_getTimeBasePeriod(obj->bcHandle));
float32_t duty_pu = __fsat(duty, 0.0f, 1.0f);
int16_t duty_time_base = (int16_t)(duty_pu * period); //
// write the PWM data value
EPWM_setCounterCompareValue(obj->bcHandle,
EPWM_COUNTER_COMPARE_A,
duty_time_base);
return;
} // end of HAL_writeBCData() function
我没有使用任何Tripzone设置,我认为这可能是问题所在。 最后,我想让此PWM始终处于激活状态,所以我是否需要为此设置一些Tripzone?