本文作者:Miler Shao ST MCU各系列中的高級定時器都帶有死區(qū)控制和剎車功能,一般來說死區(qū)和剎車控制主要用于馬達或類似控制中。這里主要聊聊基于STM32高級定時器死區(qū)控制相關(guān)話題,分三個話題來談。何謂死區(qū)?為什么要設(shè)計死區(qū)? STM32高級定時器中的死區(qū)的計算。 STM32高級定時器配置死區(qū)參數(shù)不合適時的問題。
一、何謂死區(qū)?為什么要設(shè)計死區(qū)? 單說死區(qū)這個概念其實范圍很廣,很多地方都會談及到,個人理解為某個處于相對無效狀態(tài)的時間或空間。下面要談的死區(qū)是針對STM32高級定時器輸出PWM驅(qū)動馬達時的某個無效狀態(tài)時段。 先看一副逆變器電機驅(qū)動原理示意圖。這里有三組橋臂,每組橋臂又分上下橋臂。
 各個橋臂由功率器件組成,比如IGBT,在驅(qū)動三相馬達時,各個橋臂是按照一定的規(guī)律輸出一系列PWM方波來驅(qū)動馬達的運轉(zhuǎn)。從PWM控制技術(shù)的應(yīng)用上可能有不同的實現(xiàn)方法,但你不論用什么實現(xiàn)方法,每一相的上下兩個橋臂不可以同時導(dǎo)通,否則電源會通過上下兩個橋臂形成短路出現(xiàn)燒毀及其它異常。 理論上講,每組橋臂的上下臂呈互補關(guān)驅(qū)動系,即上臂導(dǎo)通,下臂截止,反之亦然。實際上那些晶體管的開關(guān)動作本身一定有時延問題、而且不同晶體管動作的延時還有差異。鑒于此,為了避免上下臂同時導(dǎo)通的隱患,就額外設(shè)置一個時段,保證讓上下臂都呈截止狀態(tài),這個時段就是死區(qū)。 以STM32芯片為例,下面是某通道的內(nèi)部中間參考信號【OCXREF】及其互補輸出PWM信號OCX和OCXN插入了死區(qū)后的時序圖。假設(shè)OCX和OCXN互補通道極性都是高有效,且上下臂均是高電平有效導(dǎo)通。
 本來OCX信號與OCXREF時序同相同步,OCXN信號與OCXREF時序反相同步。但為了安全考慮,以OCXREF為參考基準,OCXN和OCX通道將理論上本該導(dǎo)通的時間點往后延時一下,即做從截止切換到導(dǎo)通狀態(tài)的延時。這樣做的目的就是為了避開上下臂出現(xiàn)同時導(dǎo)通的情況。請注意紅色字,理解死區(qū)插入的延時參考是什么,在什么時刻插入,OCXREF就是參考基準。不管你怎么調(diào)整死區(qū),OCXREF是不會變的。導(dǎo)通電平可能是高也可能是低,所以不能簡單地說死區(qū)插入是在上升沿或下降沿之前,而應(yīng)該說死區(qū)插入是在有效電平前。
二、STM32高級定時器中的死區(qū)如何計算 以STM32高級定時器的死區(qū)設(shè)置為例,我們只需簡單配置下寄存器就好,其它硬件負責(zé)搞定。這里以STM32F407芯片的TIM1為例來看看死區(qū)時間如何計算。 計算公式就在TIMX_BDTR里有給出,其中那個CK_INT時鐘就是來自RCC供給TIMX外設(shè)的時鐘,Fdts可以通過TIMX_CR1相關(guān)寄存器位選擇配置。DT即為死區(qū)時間。

計算時,先確定Tdts,然后結(jié)合你需要的死區(qū)時間選擇相應(yīng)的計算檔位,最后確定DTG[7:0]。假設(shè)STM32f407的TIM1工作在168M,設(shè)置Tdts=1/168 us,死區(qū)設(shè)置 為4us,經(jīng)過估算該死區(qū)時間落在DTG[7:5]=111段。 先算得DTG[4:0]=01010B,再跟DTG[7:5]組合在一起,最后算得DTG[7:0]=11101010B,即0xEA. 需要注意的是,死區(qū)時間的計算是分段計算的,各段的時間步長和計算方式有差別,不可隨便填寫數(shù)據(jù)。 三、死區(qū)參數(shù)設(shè)置不合適出現(xiàn)的問題 經(jīng)常遇到有人在使用STM32高級定時器的死區(qū)控制時,反映說沒加死區(qū)前好好的,加死區(qū)后PWM輸出就異常了。問及死區(qū)時間及定時器相關(guān)參數(shù)設(shè)置時,往往不是很清楚。 其實死區(qū)不能隨便配置的,必須合適、合理。死區(qū)時間不能比嵌入死區(qū)前的互補通道的有效脈沖還寬,否則相應(yīng)通道的輸出呈無效狀態(tài)。這也不難理解,當死區(qū)時間比它本該進入有效狀態(tài)的脈沖還長的話,自然整個周期都處于無效狀態(tài)了。 下面是STM32高級定時器死區(qū)設(shè)置不合理時的互補通道輸出時序圖。【這里假設(shè)CCXP=CCXNP=0,CCXE=CCXNE=1,MOE=1】 
根據(jù)上面假設(shè)前提,Figure121中OCXREF的低電平對應(yīng)著OCXN的有效電平,現(xiàn)在死區(qū)延時比它有效電平本身還長,沒辦法OCXN只能一路無效輸出,即呈現(xiàn)低電平。同樣,Figure 122中OCXREF的高電平對應(yīng)著OCX的有效電平,但現(xiàn)在死區(qū)延時比它有效電平本身還長,OCX也只能一路無效輸出,即呈現(xiàn)低電平。換句說,當死區(qū)時間比有效電平還長時,就沒有機會輸出有效電平了。 從上面的分析我們了解到,插入死區(qū)是出于對馬達控制系統(tǒng)的安全考慮,但死區(qū)又是以犧牲有效驅(qū)動脈沖時間為代價的。可以想象,另一方面講死區(qū)也會帶來一些不利因素,有興趣的可以找相關(guān)專著閱讀。 |