本文作者:Miler Shao 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也只能一路無效輸出,即呈現低電平。換句說,當死區時間比有效電平還長時,就沒有機會輸出有效電平了。 從上面的分析我們了解到,插入死區是出于對馬達控制系統的安全考慮,但死區又是以犧牲有效驅動脈沖時間為代價的。可以想象,另一方面講死區也會帶來一些不利因素,有興趣的可以找相關專著閱讀。 |