- void BLDC_PWM_Init(void)
- {
- ///Init PWM Channel
- //如果上半桥高有效,则PWM需设为PWM_PWM_HIGHTRUEPULSE,如果上半桥低有效,则PWM需设为PWM_PWM_LOWTRUEPULSE
- PWM_PWMInit(PWM2, PWM_PWMMODE_COMBINE, PWM_PWM_HIGHTRUEPULSE);
- PWM_SetModValue(PWM2, BLDC_PWM_PERIOD);
- /*
- PWM禁止输出时,单独配置上下桥臂极性。0:高电平有效,1:低电平有效。
- 在接电机前,先check默认时,PWM输出电平是否会让MOS管导通,如果会则需要check配置是否与硬件不符。
- */
- //CH0,CH2,CH4为上桥臂,CH1,CH3,CH5为下桥臂。极性值设为0表示高有效,设为1表示低有效。
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL0, 0);//High Bridge Active level: High
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL2, 0);
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL4, 0);
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL1, 0); //Low Bridge Active Level: High
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL3, 0);
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL5, 0);
- /*
- 设置死区插入时间
- 设置死区时间=prescalerValue对应寄存器的分频值*deadtimeValue/BUS_CLK
- 注意prescalerValue设置的寄存器DTSET[TPSC]值,需转成分频值。
- 对应分频值:0b0x为1分频;0b10为4分频,0b11为16分频
- deadtimeValue值范围为0-63
- */
- PWM_PWMDeadtimeSet(PWM2, 2, 12);// Deadtime = 4*12/48000000 = 1us
- //打开组合通道互补模式(可不设置,默认为打开)
- PWM_ComplementaryModeConfig(PWM2, 1);
- //配置FALUT相关
- PWM_SetFaultPirority(PWM2, PWM_EXTERNAL_FAULT2,0); //故障输入极性为高电平有效
- PWM_FaultEnable(PWM2, PWM_EXTERNAL_FAULT2);//使能FAULT2
- PWM_FaultIntEnable(PWM2);
- PWM_FaultModeSel(PWM2, PWM_FAULT_MANUAL_CLEAR); //手动清除故障
- PWM_SetCallback(PWM2, BLDC_PWM_FaultCallback);
- NVIC_EnableIRQ(PWM2_IRQn);
- //使能初始化触发器,当PWM计数器等于CNTIN寄存器时,允许产生触发。
- PWM_SetExternalTrigger(PWM2, 1 << 6); //set PWM2 Init Trigger Source
- ///PWM Start
- PWM_ClockSet(PWM2, PWM_CLOCK_SYSTEMCLOCK, 0);
组合模式+同相输出- void BLDC_PWM_Init(void)
- {
- ///Init PWM Channel
- //如果上半桥高有效,则PWM需设为PWM_PWM_HIGHTRUEPULSE,如果上半桥低有效,则PWM需设为PWM_PWM_LOWTRUEPULSE
- PWM_PWMInit(PWM2, PWM_PWMMODE_COMBINE, PWM_PWM_HIGHTRUEPULSE);
- PWM_SetModValue(PWM2, BLDC_PWM_PERIOD);
- /*
- PWM禁止输出时,单独配置上下桥臂极性。0:高电平有效,1:低电平有效。
- 在接电机前,先check默认时,PWM输出电平是否会让MOS管导通,如果会则需要check配置是否与硬件不符。
- */
- //CH0,CH2,CH4为上桥臂,CH1,CH3,CH5为下桥臂。极性值设为0表示高有效,设为1表示低有效。
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL0, 0);//High Bridge Active level: High
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL2, 0);
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL4, 0);
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL1, 1); //Low Bridge Active Level: Low
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL3, 1);
- PWM_OutputPolaritySet(PWM2, PWM_CHANNEL_CHANNEL5, 1);
- /*
- 设置死区插入时间
- 设置死区时间=prescalerValue对应寄存器的分频值*deadtimeValue/BUS_CLK
- 注意prescalerValue设置的寄存器DTSET[TPSC]值,需转成分频值。
- 对应分频值:0b0x为1分频;0b10为4分频,0b11为16分频
- deadtimeValue值范围为0-63
- */
- PWM_PWMDeadtimeSet(PWM2, 2, 12);// Deadtime = 4*12/48000000 = 1us
- //关闭组合通道互补模式(默认为打开)
- PWM_ComplementaryModeConfig(PWM2, 0);
- //配置FALUT相关
- PWM_SetFaultPirority(PWM2, PWM_EXTERNAL_FAULT2,0); //故障输入极性为高电平有效
- PWM_FaultEnable(PWM2, PWM_EXTERNAL_FAULT2);//使能FAULT2
- PWM_FaultIntEnable(PWM2);
- PWM_FaultModeSel(PWM2, PWM_FAULT_MANUAL_CLEAR); //手动清除故障
- PWM_SetCallback(PWM2, BLDC_PWM_FaultCallback);
- NVIC_EnableIRQ(PWM2_IRQn);
- //使能初始化触发器,当PWM计数器等于CNTIN寄存器时,允许产生触发。
- PWM_SetExternalTrigger(PWM2, 1 << 6); //set PWM2 Init Trigger Source
- ///PWM Start
- PWM_ClockSet(PWM2, PWM_CLOCK_SYSTEMCLOCK, 0);
- }
划重点:
在配置PWM时,PWM互补输出和极性需要同时进行配置。
如果是互补输出,上下桥MOS管有效极性是相同的(都是高有效或低有效)。
如果是同相输出,上下桥MOS管有效极性是相反的(上桥臂高有效,则下桥臂是低有效。反之)。
如果PWM同相输出,有效极性也配成相同,是不带死区的,配置了死区也不会生效。