看了一些網上講死區時間計算的教程,覺得講述的不是很清楚,所以在此用我自己理解的方式講述一遍,如有錯誤,請讀者賜教。
死區時間的設定:由暫存器「tim1和tim8剎車和死區暫存器timx_bdtr」中,位dtg[7:0]控制(中文資料手冊可能出現錯誤,應當是dtg)。
官方資料手冊的說明不容易看懂,舉的例子與我的應用場合也不一致,我使用的是72mhz的晶振,講一講我的死區時間是怎麼算出來的。
dt死區時間;
tdts為系統時鐘週期時長;
tdtg為系統週期時長乘以倍數,這個值用於計算最終死區時間,也叫作步長。
在72m的定時器時鐘下,tdts = 1/72m = 13.89ns。
這個計算比較複雜,主要思想就是把dtg的八位,掰成兩半用。一半決定步長,另一半是與步長相乘的乘數,乘數可以自行設定,步長*乘數=死區時間。至於步長與乘數從**分開,看下表
專案情況1
情況2情況3
情況4步長位置
dtg[7]
dtg[7:6]
dtg[7:5]
dtg[7:5]
步長值(二進位制)110
110111
步長是週期幾倍12
816乘數字置
dtg[6:0]
dtg[5:0]
dtg[4:0]
dtg[4:0]
乘數最大值
12764+63
63+31
32+31
乘數範圍
0~127
64~127
32~63
34~63
等價幾倍週期
0~127
128~254
256~504
512~1008
週期125ns時,死區範圍ns
0~15875
16000~31750
32000~63000
64000~126000
週期13.89ns時,死區範圍ns
0~1764
1778~3528
3556~7000
7112~14001
接下來舉例說明**怎麼用。
例如72mhz的晶振,需要14us的死區時間,那麼屬於情況4,dtg[7:5] = 0b111,dtg[4:0]=31=0b1111,所以dtg = 0xff。72mh晶振的情況下,最大只能14us的死區。
還是72mhz的晶振,需要3us的死區時間,那麼屬於情況2,dtg[7:6] = 0b10,步長=27.78,需要的乘數 = 3000÷27.78-64=108-64=44=0b101100,dtg[7:0]=0b10101100=0xac。
實際的系統中,死區的時間一般由硬體的響應速度決定。我的系統使用的驅動電路設計參考之前的部落格
使用的電機型號是jgb37-3530b。經過測試,3us的死區時間可以使用。
下邊是電機初始化的函式,主要的功能是用stm32的高階定時器tim1,輸出嵌入死區的互補pwm。
使用兩個通道輸出pwm,通道1 的引腳是pa8和pb13,通道2 的引腳是pa9和pb14。乙個週期是1ms,頻率是1khz,3us的死區時間。預設通道1的占空比是50%,通道2的占空比是0%,讓電機以49.7%(占空比減去死區)的速度正轉。
void pwm_configuration(void)
STM32F103定時器配置
一 什麼是定時器 定時器,顧名思義,就是用於定時或計數,它其實就是乙個加1計數器。二 了解stm32f103定時器 stm32通用暫存器有tim2 tim3 tim4 tim5。功能包括 1 16位向上 向下 向上 向下自動裝載計數器 timx cnt 2 16位可程式設計預分頻器 timx psc...
STM32F103內部定時器TIM
1 stm32f103內部定時器有哪些?stm32一共有8個通用16位timer,其中timer1和timer8是高階定時器,其它的timer2 timer7是普通定時器。此外還有乙個systick 系統滴答定時器 這個定時器通常在作業系統中作為系統的任務切換週期。還有乙個rtc,是乙個毫秒定時器,...
STM32F103常規定時器
首先非常感謝秉火和正點原子兩個團隊為我們提供學習stm32的豐富資料及詳細教程。為加深記憶,也方便同行新手們一同學習進步,略作整理,以備檢視,如有錯誤,歡迎指正,如有侵權,聯絡刪帖!定時器分類 stm32f1 系列微控制器中,除了互聯型的產品,都有 8 個定時器,分為2個基本定時器,4個通用定時器和...