目录
死区简介
定时器相关时钟系统
STM32中配置死区时间
明确自己定时器系统时钟
TIMx_BDTR寄存器
死区简介
通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥,每个桥的上半桥和下半桥是是绝对不能同时导通的。但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。
PWM输出时的Dead Zone(死区)作用是在电平翻转时插入一个时间间隔,避免关闭前一个设备和打开后一个设备时因为开关速度的问题出现同时开启状态而增加负荷的情况(在没有彻底关闭前打开了后一个设备),尤其是电流过大时容易造成短路等损坏设备。
文章来源地址https://www.toymoban.com/news/detail-705736.html
当比较单元的比较操作被使能,就会产生波形PHx。PHx经过死区单元,就会输出两路互补的带有死区的PWM波形DTPHx和DTPHx_。PHx、DTPHx、DTPHx_之间的关系如上图,如果没有死区,那么DTPHx和DTPHx_应该是完全互补的。DTPHx的导通时刻是在PHx的基础上延时了1个死区时间,而关闭时刻未变。DTPHx_是在PHx取反的基础上,也将导通时间延迟了1个死区时间,而关断的时间没有发生改变。
高级定时器的才带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能(同时保持高电平),从这些看来高级定时器的pwm天生就是用来控制电机的。STM32H7系列芯片中,TIM1、TIM8、TIM12和TIM15是高级别定时器,支持死区控制功能。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。
定时器相关时钟系统
高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1和APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。通用定时器时钟信号完整的路线应该是下面这样的:
AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟信号CK_INT(72mhz)。定时器接下来还有一个分频寄存器:TIMX_PSC(输入时钟频率CK_PSC一般等于CK_INT)经过他的分频后,才是定时器计数的频率CK_CNT。所以真正的计时器时钟频率CK_CNT应该是72mhz/(TIMX_PSC-1)。pwm主要就是控制频率和占空比的:这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样pwm的频率就是tim_frequency/(TIMX_ARR-1)。在计数时会不停的和CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于CCRX值的话电平极性反相。所以这也就控制了占空比。
在STM32H7系列芯片中,PWM死区时间的设定是通过TIM_BreakDeadTimeConfigTypeDef结构体中的DeadTime参数来实现的,DeadTime参数的单位是计数器时钟周期。
STM32中配置死区时间
明确自己定时器系统时钟
AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟频率CK_INT(CK_PSC)(72mhz)。
TIMx_BDTR寄存器
STM32的TIM高级定时器支持互补PWM波形发生,同时它支持插入死区时间和刹车的配置。直接看参考手册里的寄存器TIMx_BDTR,这是配置刹车和死区时间的寄存器;
DTG寄存器为死区时间存储值。设DTG[7:0] = k;
DT:死区时间;为系统时钟周期时长;Tdtg为系统周期时长乘以倍数,这个值用于计算最终死区时间,也叫作步长。
在72M的定时器时钟下, = 1/72M = 13.89ns。
这个计算比较复杂,主要思想就是把DTG的八位,掰成两部分用。一部分决定步长(DTG[7:5],决定步长Tdtg是·的几倍,另一部分是与步长相乘的乘数(不同的步长对应不同的公式),乘数可以自行设定,步长*乘数=死区时间。至于步长与乘数从哪里分开,看上表。
周期13.89ns时,死区范围ns 0~1764 1778~3528 3556~7000 7112~14001
可以看到死区时间DT由DTG[7:0]决定,这里还有一个问题是·是什么?在TIMx_CR1的寄存器可以得知,由TIMx_CR1寄存器的CKD决定;
接下来举例说明表格怎么用。
定时器时钟为72MHz,时钟分频因子为1分频。定时器的时钟周期:TDTS=1/tDTS=1/tCK_INT=1/72MHz=13.89ns.
根据公式可算出可能的死区时间范围如下四种情况:
1.DT=DTG[7:0]×Tdtg,Tdtg=TDTS
DT=(0~127)×13.89ns=0~1763.89ns
2.DT=(64+DTG[5:0])×Tdtg =(64+DTG[7:0] -128)×Tdtg , Tdtg=2×TDTS
DT=(64+(0~63))×2×13.89ns=1777.92ns~3528.06ns
3.DT=(32+DTG[4:0])×Tdtg = (32+DTG[7:0]-192)×Tdtg, Tdtg=8×TDTS
DT=(32+(0~31))×8×13.89ns=3555.84ns~7000.56ns=3.56us~7us
4.DT = (32+DTG[4:0])×Tdtg =(32+DTG[7:0] - 224)×Tdtg ,Tdtg=16×TDTS
DT=(32+(0~31))×16×13.89ns=7111.68ns~14001.12ns=7.11168us~14us
假如 定时器的工作时钟频率72MHz,时钟分频因子1分频,死区时间设置为2us。则DTG寄存器值为多少?
因为:死区时间2us属于情况2,DTG[7:6] = 0b10,DTG[5:0]寄存器值=2000ns÷(13.89ns*2)-64=7.994240460763139≈8. 二进制为:0x001000.综上所述:DTG[7:0] = 0b10001000 = 0x88=136
假如3us的死区时间,那么属于情况2,DTG[7:6] = 0b10,步长=27.78,需要的乘数 = 3000÷27.78-64=108-64=44=0b101100,DTG[7:0]=0b10101100=0xAC=172。DTG寄存器为死区时间存储值。
实际的系统中,死区的时间一般由硬件的响应速度决定文章来源:https://www.toymoban.com/news/detail-705736.html
到了这里,关于STM32死区计算和配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!