工具/软件:Code Composer Studio
您好!
我正在测试电机驱动器应用。
PWM1A 为顺时针、PWM1B 为逆时针。
当我想用 CW 移动电机时、我关闭 PWM1B 并打开 PWM1A。 对于 CCW、关闭 PWM1A、打开 PWM1B
PWM 初始化部分如下所示。
----
GPIO_setPadConfig (m->PWM.GPIO_num_a、GPIO_PIN_TYPE_STD);
GPIO_setPadConfig (m->PWM.GPIO_num_b、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (m->PWM.PIN_cfg_PWM_A);
GPIO_setPinConfig (m->PWM.PIN_cfg_PWM_b);
//
//禁用同步(也冻结 PWM 的时钟)
//
SYSCTL_DisablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
//
//设置 TBCLK
//
ePWM_setTimeBasePeriod (m->PWM.base、ePWM_TIMER_TBPRD);// 50kHz。 与 EPOS2相同
ePWM_setPhaseShift (m->PWM.base、0U);
ePWM_setTimeBaseCounter (m->PWM.base、0U);
//
//设置计数器模式
//
ePWM_setTimeBaseCounterMode (m->PWM.base、ePWM_COUNTER_MODE_UP);
ePWM_disablePhaseShiftLoad (m->PWM.base);
ePWM_setClockPrescaler (m->PWM.base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
//
//设置隐藏
//
ePWM_setCounterCompareShadowImage LoadMode (m->PWM.base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO);
ePWM_setCounterCompareShadowImage LoadMode (m->PWM.base、ePWM_COUNTER_COMPARE_B、ePWM_COMP_LOAD_ON_CNTR_ZERO);
//
//设置操作
//在零时为高电平、在 COMP a/b 时为低电平
//
ePWM_setActionQualifierAction (m->PWM.base、ePWM_AQ_output_a、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (m->PWM.base、ePWM_AQ_output_a、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPA);
// PWMB 关闭
ePWM_setActionQualifierAction (m->PWM.base、ePWM_AQ_output_B、ePWM_AQ_output_low、//关闭
ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (m->PWM.base、ePWM_AQ_output_B、ePWM_AQ_output_low、
ePWM_AQ_output_on_timebase_up_CMPA);
//
//设置比较值
//
ePWM_setCounterCompareValue (m->PWM.base、ePWM_COUNTER_COMPARE_A、ePWM_MIN_CMP);
ePWM_setCounterCompareValue (m->PWM.base、ePWM_COUNTER_COMPARE_B、ePWM_MIN_CMP);
//
//启用到 PWM 的同步和时钟
//
SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
----
电机运动控制部分如下所示。
//运行 PID 控制器
M0_UK = DCL_runPID_C2 (&M0_pid1、M0_rk、M0_YK、M0_lk);
占空比= ABS (M0_UK)% 1001;
DBG ("%f、%f、%d、%ld、%d\n"、M0_YK、M0_UK、dir、Duty、 M[0].CURRENT_ADC);
如果(M0_UK < 0)
{
ePWM_setActionQualifierAction (EPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM1_base、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setCounterCompareValue (EPWM1_base、ePWM_COUNTER_COMPARE_A、(uint16_t) Duty); //工作正常
DIR = 0;
}
其他
{
ePWM_setActionQualifierAction (EPWM1_base、ePWM_AQ_output_a、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (EPWM1_base、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
ePWM_setCounterCompareValue (EPWM1_base、 ePWM_COUNTER_COMPARE_B、(uint16_t)占空比);//不工作
Dir = 1;
}
PWM1A 工作正常、但 PWM1B 不工作、无论占空比高、都会生成非常短的宽度脉冲。
当我首先启动 PWM1B 时、它运行良好。
如何将 PWM1A 更改为 PWM1B 或其他方面、不能即时更改?
我使用 H 桥、因此 PWM1A 和1B 应该是唯一工作的。
BR
Paul