主题中讨论的其他器件: MSP432P401R
测试硬件是 MSP432E401Y Launchpad
我已经设置了 PWM0的第1代和第3代、以使用相同的周期生成三相延迟波形。
所需的最终结果:
a)使用死区功能
b)第2代 pwmA 输出应延迟2/3的周期
c)第3代 pwmA 输出应延迟2/3的周期
我的发生器引脚配置为:
/*发生器1输出引脚*/
MAP_GPIOPinConfigure (GPIO_PF2_M0PWM2);// PF2
MAP_GPIOPinConfigure (GPIO_PF3_M0PWM3);// PF3
/*发生器2输出引脚*/
MAP_GPIOPinConfigure (GPIO_PG0_M0PWM4);// PG0
MAP_GPIOPinConfigure (GPIO_PG1_M0PWM5);// PG1
/*发生器3输出引脚*/
MAP_GPIOPinConfigure (GPIO_PK4_M0PWM6);// PK4
MAP_GPIOPinConfigure (GPIO_PK5_M0PWM7);// PK5
//配置 PF2-PF3和 PG0-PG1和 PK4-PK5引脚供 PWM 外设使用
MAP_GPIOPinTypePWM (GPIO_PORTF_BASE、(GPIO_PIN_2 | GPIO_PIN_3));
MAP_GPIOPinTypePWM (GPIO_PORTG_BASE、(GPIO_PIN_0 | GPIO_PIN_1));
MAP_GPIOPinTypePWM (GPIO_PORTK_base、(GPIO_PIN_4 | GPIO_PIN_5));
-全部3个计数器均在递减计数模式下运行。
-代码使用 driverlib 函数实现。 但是、由于我希望输出在 CMPA 和 CMPB 上切换、
我编写了我的函数"PWMGenConfigure_New(..... )"、实质上取代了"PWMGenConfigure(..)"中的递减计数模式 功能:
HWREG (ui32Gen + PWM_O_X_GENA)= PWM_X_GENA_ACTCMPAD_INV;
HWREG (ui32Gen + PWM_O_X_GENB)= PWM_X_GENB_ACTCMPAD_INV;
函数调用包括:
PWMGenConfigure_New (PWM0_BASE、PWM_GEN_1、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_GEN_SYNC_LOCAL);
PWMGenConfigure_New (PWM0_BASE、PWM_GEN_2、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_GEN_SYNC_LOCAL);
PWMGenConfigure_New (PWM0_BASE、PWM_GEN_3、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_GEN_SYNC_LOCAL);
-由于使用"MAP_PWMPulseWidthSet(.)" 函数将 CMPA/CMPB 设置为"period - entered_pulsewidth"
我使用了以下脉冲宽度:
PWMPulseWidth_1 = 3;
PWMPulseWidth_2 = 2*PWMPeriod/3;
PWMPulseWidth_3 = PWMPeriod / 3;
MAP_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_2、PWMPulseWidth_1);//将比较值设置为接近零
MAP_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_4、PWMPulseWidth2);// 120度相移
MAP_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_6、PWMPulseWidth3);// 60度相移
我的死区设置为:(2us 死区)
MAP_PWMDeadBandEnable (PWM0_BASE、PWM_GEN_1、240);
MAP_PWMDeadBandEnable (PWM0_BASE、PWM_GEN_2、240);
MAP_PWMDeadBandEnable (PWM0_BASE、PWM_GEN_3、240);
要启动生成器,请使用:
MAP_PWMGenEnable (PWM0_BASE、PWM_GEN_1);
MAP_PWMGenEnable (PWM0_BASE、PWM_GEN_2);
MAP_PWMGenEnable (PWM0_BASE、PWM_GEN_3);
for (setDelay = 0;setDelay < 10000;setDelay++);
MAP_PWMSyncTimeBase (PWM0_BASE、(PWM_GEN_1_BIT |PWM_GEN_2_BIT | PWM_GEN_3_BIT);
//启用 PWM2-PWM7输出信号
MAP_PWMOutputState (PWM0_BASE、PWM_OUT_2_BIT | PWM_OUT_3_BIT | PWM_OUT_4_BIT | PWM_OUT_5_BIT | PWM_OUT_6_BIT | PWM_OUT_7_BIT、TRUE);
我已经设置了一个测试、以100Hz 的间隔在7kHz 至15kHz 之间运行、在恢复每个新频率之前禁用 PWM 大约2秒钟。
有时我会得到所需的相移、有时反相版本会满足相位分流器的要求。 我认为 thsi 是使用"togling on CMP match"选项的结果。
是否有办法确保所有3个 PWM 同时以相同的逻辑电平(最好是低电平)和 负载启动、从而保持一致性。
示例示波器图如下所示。
谢谢
David Nyarko