STMCU定时器应用中的死区控制话题 ST MCU各系列中的高级定时器都带有死区控制和刹车功能,一般来说死区和刹车控制主要用于马达或类似控制中。这里主要聊聊基于STM32高级定时器死区控制相关话题,分三个话题来谈。 何谓死区?为什么要设计死区? STM32高级定时器中的死区的计算。 STM32高级定时器配置死区参数不合适时的问题。 一、何谓死区?为什么要设计死区? 单说死区这个概念其实范围很广,很多地方都会谈及到,个人理解为某个处于相对无效状态的时间或空间。下面要谈的死区是针对STM32高级定时器输出PWM驱动马达时的某个无效状态时段。 先看一副逆变器电机驱动原理示意图。这里有三组桥臂,每组桥臂又分上下桥臂。 各个桥臂由功率器件组成,比如IGBT,在驱动三相马达时,各个桥臂是按照一定的规律输出一系列PWM方波来驱动马达的运转。从PWM控制技术的应用上可能有不同的实现方法,但你不论用什么实现方法,每一相的上下两个桥臂不可以同时导通,否则电源会通过上下两个桥臂形成短路出现烧毁及其它异常。 理论上讲,每组桥臂的上下臂呈互补关驱动系,即上臂导通,下臂截止,反之亦然。实际上那些晶体管的开关动作本身一定有时延问题、而且不同晶体管动作的延时还有差异。鉴于此,为了避免上下臂同时导通的隐患,就额外设置一个时段,保证让上下臂都呈截止状态,这个时段就是死区。 以STM32芯片为例,下面是某通道的内部中间参考信号【OCXREF】及其互补输出PWM信号OCX和OCXN插入了死区后的时序图。假设OCX和OCXN互补通道极性都是高有效,且上下臂均是高电平有效导通。 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步。但为了安全考虑,以OCXREF为参考基准,OCXN和OCX通道将理论上本该导通的时间点往后延时一下,即做从截止切换到导通状态的延时。这样做的目的就是为了避开上下臂出现同时导通的情况。请注意红色字,理解死区插入的延时参考是什么,在什么时刻插入,OCXREF就是参考基准。不管你怎么调整死区,OCXREF是不会变的。导通电平可能是高也可能是低,所以不能简单地说死区插入是在上升沿或下降沿之前,而应该说死区插入是在有效电平前。 二、STM32高级定时器中的死区如何计算 以STM32高级定时器的死区设置为例,我们只需简单配置下寄存器就好,其它硬件负责搞定。这里以STM32F407芯片的TIM1为例来看看死区时间如何计算。 计算公式就在TIMX_BDTR里有给出,其中那个CK_INT时钟就是来自RCC供给TIMX外设的时钟,Fdts可以通过TIMX_CR1相关寄存器位选择配置。DT即为死区时间。 计算时,先确定Tdts,然后结合你需要的死区时间选择相应的计算档位,最后确定DTG[7:0]。假设STM32f407的TIM1工作在168M,设置Tdts=1/168 us,死区设置 为4us,经过估算该死区时间落在DTG[7:5]=111段。 先算得DTG[4:0]=01010B,再跟DTG[7:5]组合在一起,最后算得DTG[7:0]=11101010B,即0xEA. 需要注意的是,死区时间的计算是分段计算的,各段的时间步长和计算方式有差别,不可随便填写数据。 三、死区参数设置不合适出现的问题 经常遇到有人在使用STM32高级定时器的死区控制时,反映说没加死区前好好的,加死区后PWM输出就异常了。问及死区时间及定时器相关参数设置时,往往不是很清楚。 其实死区不能随便配置的,必须合适、合理。死区时间不能比嵌入死区前的互补通道的有效脉冲还宽,否则相应通道的输出呈无效状态。这也不难理解,当死区时间比它本该进入有效状态的脉冲还长的话,自然整个周期都处于无效状态了。 下面是STM32高级定时器死区设置不合理时的互补通道输出时序图。【这里假设CCXP=CCXNP=0,CCXE=CCXNE=1,MOE=1】 根据上面假设前提,Figure121中OCXREF的低电平对应着OCXN的有效电平,现在死区延时比它有效电平本身还长,没办法OCXN只能一路无效输出,即呈现低电平。同样,Figure 122中OCXREF的高电平对应着OCX的有效电平,但现在死区延时比它有效电平本身还长,OCX也只能一路无效输出,即呈现低电平。换句说,当死区时间比有效电平还长时,就没有机会输出有效电平了。 从上面的分析我们了解到,插入死区是出于对马达控制系统的安全考虑,但死区又是以牺牲有效驱动脉冲时间为代价的。可以想象,另一方面讲死区也会带来一些不利因素,有兴趣的可以找相关专著阅读。 文章出处: 茶话MCU |