互补PWM:占空比互补,加和为1的PWM。
死区时间:死区时间内,互补的PWM都不会有电平输出。
PWM and Buck-Boost-CSDN博客,在这篇博客中,我通过timer3分别设置timer3计数器的数值,实现了PWM互补输出,该方案没有加死区时间,烧了MOS管,我吸取教训,了解到了死区时间与高级定时器互补PWM功能。
互补PWM
按照下图的配置,可以完成高级定时器的互补PWM设置。
在代码中,可以通过__HAL_TIM_SET_COMPARE函数,设定互补输出PWM的占空比,相关代码如下。互补输出开启PWM功能的代码与普通PWM功能开启的函数不同,分别调用HAL_TIMEx_PWMN_Start,HAL_TIM_PWM_Start,互补输出时,设置一个通道的占空比,STM32F103会自动设置互补通道的占空比。普通定时器,需要分别设置两个通道的占空比。
TIM_HandleTypeDef htim1;
MX_TIM1_Init();
//HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
//ch1 duty 25%, ch2 duty 75%
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,periodCount*0.25);
死区时间
STM32F103高级定时器死区时间的计算详细讲解-CSDN博客,死区时间计算可以参考这篇博客。
在STM32CubeIDE中,我将deadtime设置为3,实际死区时间计算,参考上图红框标注的数据,实际死区时间为(1s/64M)15.625ns*3=45.875ns,我这个数值是从200ns不断减小得出的具体数据。
无死区时间,互补的PWM波形如下。
加入死区时间后,互补PWM波形如下图,可以看出两个PWM波不会在同一时刻发生沿跳变,
两个PWM波沿跳变时刻间的间隔即为死区时间。我目前正在通过延时和不完全互补PWM实现死区时间,后续再进行记录。