在电机控制系统中,定时器常用于生成宽度可调的PWM信号,用于控制驱动器或者控制器的输出信号。但是,定时器输出的PWM信号在切换电平的过程中存在一定的切换时间,这个时间被称为死区时间。
定时器死区是指定时器在输出PWM信号时两路反向电平的切换间隔时间。
在电机控制系统中,死区时间的长度对于电机控制周期稳定性及其工作效率影响很大,因为过短的死区会导致开关管同时工作,从而产生短路。过长的死区时间会导致电机转速不均匀、振荡等不稳定现象,这些现象都会降低电机的效能。
在stm32系列单片机中通过设置定时器来调节死区的长度,通过调节死区时间,可以使得电机的转速达到最佳状态。
stm32定时器提供了两种死区时间的设置方法:硬件设置和软件设置。
硬件设置方法:寄存器通过设置死区时间、死区时序和同步使能控制来实现硬件死区。通过该方法配置死区时间时需要考虑输入时钟的影响,因为死区时间单位为定时器的时钟周期。
软件设置方法:利用stm32库函数中提供的死区控制模式对死区加以控制,可以控制死区来源、死区时间及死区序号。
下面给出一个实际的定时器死区应用示例:
```
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //设置占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
/* 设置死区时间和死区时间2 */
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
/***************************死区时间和死区时间2是2个可设置参数*******************************/
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStructure.TIM_DeadTime = 0x02; //死区时间,这里设为2个定时器时钟周期(大约100ns)
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 7199;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
```
通过以上的stm32定时器代码片段,可以看出死区时间的设置非常简单。在这个例子中,我们设置死区时间为2个定时器时钟周期,最终结果可根据实际的使用需求来设定。