STM32F103高階定時器死區時間的計算詳細講解

2021-10-09 20:50:02 字數 1876 閱讀 1196

看了一些網上講死區時間計算的教程,覺得講述的不是很清楚,所以在此用我自己理解的方式講述一遍,如有錯誤,請讀者賜教。

死區時間的設定:由暫存器「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個通用定時器和...