1. 輸出比較簡介
OC(Output Compare)輸出比較。
輸出比較可以通過CNT(CNT計數器)與CCR寄存器值的關系,來對輸出電平進行置1、置0或翻轉的操作,用于輸出一定頻率和占空比的PWM波形。
:::tip
CNT計數器是正向計數器。它只能正向累加。
CCR是捕獲/比較寄存器,通常是我們給的一個固定值,正如其名,捕獲數值后比較數值,這樣就可以捕獲CNT的數值并進行比較,看是大了、等于還是小了。
TIM輸出比較就是這樣來決定置1、置0或翻轉輸出電平。
:::
每個高級定時器和通用定時器都擁有4個輸出比較通道。
高級定時器的前三個通道額外擁有死區生成和互補輸出的功能。
2. 通用定時器
使用輸入捕獲時,CCR是作為捕獲寄存器;使用輸出比較時,CCR是作為比較寄存器。
3. PWM簡介
PWM(Pulse Width Modulation)是脈沖寬度調制。
在具有慣性的系統中,可以通過對一系列脈沖的寬度進行調制,來等效地獲得所需要的模擬參量,常應用于電機控速等領域。
PWM參數:
- 頻率 = 1 T s = \frac{1}{T_s} =Ts?1?
- 占空比 = T o n T s \frac{T_{on}}{T_s} Ts?Ton??
- 分辨率 = 占空比變化步距
當上面電平時間長一點,下面的短一點的時候,上面的模擬量占主導;反之則是下面的模擬量占主導。
T o n T_{on} Ton?是高電平的時間, T S T_S TS?是一個時鐘周期的時間。 T o n T S \frac{T_on}{T_S} TS?To?n?為占空比,指的是高電平時間占整個周期的比例。用百分比表示。
占空比決定了等效的模擬電壓的大小。占空比越大,等效的模擬電壓就趨近于高電平;越小,等效的模擬電壓就趨近于低電平。
電機工作也是一個慣性系統。所以直流電機也是可以用PWM調速的。
下圖是
輸入是CNT(CNT計數器)與CCR寄存器值的關系,輸出是REF的高低電平。
4. 輸出比較模式
模式 | 描述 |
---|---|
凍結 | CNT=CCR時,REF保持為原狀態(可用于定速巡航) |
匹配時置有效電平 | CNT=CCR時,REF置有效電平 |
匹配時置無效電平 | CNT=CCR時,REF置無效電平 |
匹配時電平翻轉 | CNT=CCR時,REF電平翻轉 |
強制為無效電平 | CNT與CCR無效,REF強制為無效電平(可用于暫停波形輸出) |
強制為有效電平 | CNT與CCR無效,REF強制為有效電平(可用于暫停波形輸出) |
PWM模式1 | 向上計數:CNT<CCR時,REF置有效電平, CN>=CCR時,REF置無效電平;向下計數:CNT>CCR時,REF置無效電平, CN<=CCR時,REF置有效電平 |
PWM模式2 | 向下計數:CNT<CCR時,REF置無效電平, CN>=CCR時,REF置有效電平;向下計數:CNT>CCR時,REF置有效電平, CN<=CCR時,REF置無效電平 |
改變PWM模式1和2,只是改變了REF電平的極性。使用PWM1的正極性和PWM2的反極性是一樣的效果。
5. PWM基本結構
藍色線是CNT的值,黃色線是ARR的值,藍色線從0開始自增,一直增到ARR,也就是99,之后清零繼續自增。
紅色線就是CCR,是我們預設的值。綠色線是電平大小。
當CNT<CCR時,置高電平;CNT>=CCR時,置低電平。CNT溢出時,清零,重新置高電平。
進一步分析,我們發現,電平的占空比是受CCR的值影響的。如果我們的CCR設置的低一些,占空比就小一些;如果CCR設置的高一些,占空比就大一些。
REF是一個頻率可調,占空比也可調的PWM波形。最終經過極性選擇、輸出使能,通向GPIO口。
6. 參數計算
我們回到節5的圖。
- PWM頻率: F r e q = C K P S C / ( P S C + 1 ) / ( A R R + 1 ) Freq = CK_PSC / (PSC+1) / (ARR+1) Freq=CKP?SC/(PSC+1)/(ARR+1)
- 占空比: D u t y = C C R / ( A R R + 1 ) Duty = CCR / (ARR+1) Duty=CCR/(ARR+1)
- 占空比變化步距: D u t y S t e p = 1 / ( A R R + 1 ) DutyStep = 1 / (ARR+1) DutyStep=1/(ARR+1)
我們按高電平第一次回落的點算,此時占空比為 $30 /(99+1) \times 100 % = 30% $
CCR的范圍取決于ARR,因為CCR去到和ARR差不多甚至相等的時候,占空比就是百分之百,這樣便失去了意義。所以CCR需要始終小于ARR。
變化步距是越小越好的,CCR越大越好。這樣代表其變化越細膩。
7. 輸出比較通道(高級)
為了更好地切換MOS管開關狀態,有了死區生成電路。
8. 舵機簡介
舵機是一種根據輸入PWM信號占空比來控制輸出角度的裝置。
輸入PWM信號要求:周期為20ms,高電平寬度為0.5ms-2.5ms。
PWM在此圖中是當一個通信協議來用。
9. 舵機硬件電路
PWM信號線直接接到STM32引腳上就可以,比如PA0。舵機內部有驅動電路。
10. 直流電機及驅動簡介
直流電機是一種將電能轉換為機械能的裝置,有兩個電極,當電極正接時,電機正轉,當電極反接時,電機反轉。
直流電機屬于大功率器件,GPIO口無法直接驅動,需要配合電機驅動電路來操作。
TB6612是一款雙路H橋(一路四個開關管)型的直流電機驅動芯片,可以驅動兩個直流電機并且控制其轉速及方向。
ULN2003則一路只有一個開關管,只能控制電機在一個方向轉。
右邊的電路即是H橋電路的基本結構,它是由兩路推挽電路組成的。上管導通,下管斷開,左邊輸出就是接在VM的電機電源正極。下管導通,上管斷開,那就是PGND的電源負極。
如果有兩路推挽電路,中間O1和O2接一個電機,左上右下導通,電流就是從左流向右邊;右上和左下導通,電流方向就反過來,從右流向左。H橋可以控制電流流過的方向,從而控制電機正反轉。
11. 電機硬件電路
左邊就是這個電機驅動模塊的硬件電路。
右下角的表中,輸入是IN1、IN2、PWM和STBY。STBY低電平就待機,高電平就正常工作。右邊是輸出,O1、O2和模式狀態。有電壓差電機才會轉,否則就是制動狀態。此外還有正反轉狀態之分,取決于O1和O2的高低電平相對狀態。
要接一個可以輸出大電流的電源.
VM是驅動電壓輸入端,輸入電壓一般和額定電壓保持一致。
VCC不需要大功率,可以和控制器共用一個電源。
GND接系統的負極。隨便一個GND就可以。
AO1和AO2是A路的兩個輸出,其控制端是上面的PWMA、AIN2、AIN1。
PWMA引腳接PWM的信號輸出端,其他兩個引腳可以任意接兩個普通的GPIO口。
三個引腳給一個低功率的控制信號,驅動電路就會從VM汲取電流,輸出到電機。從而就能完成低功率控制大功率電路的目的。
BO1和BO2是B路的兩個輸出,其控制端是上面的PWMB、BIN2、BIN1。
STBY如果不需要待機模式的話,可以直接接VCC(3.3V)。