一份很用心的H橋驅(qū)動(dòng)掃盲教程
什么是H橋?
H橋是一個(gè)比較簡單的電路,通常它會(huì)包含四個(gè)獨(dú)立控制的開關(guān)元器件(例如MOS-FET),它們通常用于驅(qū)動(dòng)電流較大的負(fù)載,比如電機(jī),至于為什么要叫H橋(H-Bridge),因?yàn)殚L得比較像字母H,具體如下圖所示;
這里有四個(gè)開關(guān)元器件Q1,
Q2,
Q3,
Q4,另外還有一個(gè)直流電機(jī)M,
D1,
D2,
D3,
D4是MOS-FET的續(xù)流二極管;
開關(guān)狀態(tài)
開關(guān)狀態(tài)
下面以控制一個(gè)直流電機(jī)為例,對H橋的幾種開關(guān)狀態(tài)進(jìn)行簡單的介紹,其中正轉(zhuǎn)和反轉(zhuǎn)是人為規(guī)定的方向,實(shí)際工程中按照實(shí)際情況進(jìn)行劃分即可;
正轉(zhuǎn)
正轉(zhuǎn)
通常H橋用來驅(qū)動(dòng)感性負(fù)載,這里我們來驅(qū)動(dòng)一個(gè)直流電機(jī);
-
打開
Q1和
Q4;
-
關(guān)閉
Q2和
Q3;
此時(shí)假設(shè)電機(jī)正轉(zhuǎn),這電流依次經(jīng)過
Q1,
M,
Q4,在圖中使用黃色線段進(jìn)行標(biāo)注,具體如下圖所示;
正轉(zhuǎn)
反轉(zhuǎn)
另外一種狀態(tài)則是電機(jī)反轉(zhuǎn);此時(shí)四個(gè)開關(guān)元器件的狀態(tài)如下;
-
關(guān)閉
Q1和
Q4;
-
打開
Q2和
Q3;
此時(shí)電機(jī)反轉(zhuǎn)(與前面介紹的情況相反),這電流依次經(jīng)過Q2,M,Q3,在圖中使用黃色線段進(jìn)行標(biāo)注,具體如下圖所示;
反轉(zhuǎn)
調(diào)速
如果要對直流電機(jī)調(diào)速,其中的一種方案就是;
-
關(guān)閉
Q2,
Q3;
-
打開
Q1,
Q4上給它輸入
50%占空比的PWM波形,這樣就達(dá)到了降低轉(zhuǎn)速的效果,如果需要增加轉(zhuǎn)速,則將輸入PWM的占空比設(shè)置為100%;
具體如下所示;
停止?fàn)顟B(tài)
這里以電機(jī)從正轉(zhuǎn)切換到停止?fàn)顟B(tài)為例;
-
正轉(zhuǎn)情況下;
Q1和
Q4是打開狀態(tài);
-
這時(shí)候如果關(guān)閉
Q1和
Q4,直流電機(jī)內(nèi)部可以 等效成電感,也就是感性負(fù)載,電流不會(huì)突變,那么電流將繼續(xù)保持原來的方向進(jìn)行流動(dòng),這時(shí)候我們希望電機(jī)里的電流可以快速衰減;
這里有兩種辦法:
第一種:關(guān)閉Q1和Q4,這時(shí)候電流仍然會(huì)通過反向續(xù)流二極管進(jìn)行流動(dòng),此時(shí)短暫打開Q1和Q3從而達(dá)到快速衰減電流的目的;
第二種:準(zhǔn)備停止的時(shí)候,關(guān)閉Q1,打開Q2,這時(shí)候電流并不會(huì)衰減地很快,電流循環(huán)在Q2,M,Q4之間流動(dòng),通過MOS-FET的內(nèi)阻將電能消耗掉;
應(yīng)用
實(shí)際使用的時(shí)候,用分立元件制作H橋是很麻煩的,市面上已經(jīng)有很多比較常用的IC方案,比如常用的L293D、L298N、TA7257P、SN754410等。接上電源、電機(jī),通過輸入控制信號(hào)就可以驅(qū)動(dòng)電機(jī)了;
下面是某寶上的L298N模塊,比較常見,對于新手玩家非常友好,接線也十分簡單;
L298N模塊這個(gè)模塊有一個(gè)板載5V穩(wěn)壓器,該穩(wěn)壓器可使用跳線的方式進(jìn)行使能。
如果電機(jī)電源電壓高達(dá)12V,我們可以啟用5V穩(wěn)壓器,并且5V引腳可以用作輸出,例如給Arduino板供電。
但是,如果電動(dòng)機(jī)電壓大于12V,則必須斷開跳線,因?yàn)檫@些電壓會(huì)損壞板載5V穩(wěn)壓器。
在這種情況下,5V引腳將用作輸入,因?yàn)槲覀冃枰獙⑵溥B接到5V電源,以使IC正常工作。
我們在這里可以注意到,該IC的電壓降約為2V。因此,如果使用12V電源,則電動(dòng)機(jī)端子上的電壓約為10V,這意味著我們將無法從12V直流電動(dòng)機(jī)中獲得最大速度。
這里使用Arduino為例,這是網(wǎng)上找的一個(gè)Demo整體的框架如下圖所示;
架構(gòu)
#define enA?9 #define in1?6 #define in2?7 #define button?4 int rotDirection?= 0; int pressed?= false; void setup() {
??pinMode(enA,?OUTPUT);
??pinMode(in1,?OUTPUT);
??pinMode(in2,?OUTPUT);
??pinMode(button,?INPUT); //?Set?initial?rotation?direction digitalWrite(in1,?LOW);
??digitalWrite(in2,?HIGH);
} void loop() { //?Read?potentiometer?value int potValue?=?analogRead(A0); //?Map?the?potentiometer?value?from?0?to?255 int pwmOutput?= map(potValue, 0, 1023, 0 , 255); //?Send?PWM?signal?to?L298N?Enable?pin analogWrite(enA,?pwmOutput); //?Read?button?-?Debounce if (digitalRead(button)?== true)?{
????pressed?=?!pressed;
??} while (digitalRead(button)?== true);
??delay(20); //?If?button?is?pressed?-?change?rotation?direction if (pressed?== true &?rotDirection?== 0)?{
????digitalWrite(in1,?HIGH);
????digitalWrite(in2,?LOW);
????rotDirection?= 1;
????delay(20);
??} //?If?button?is?pressed?-?change?rotation?direction if (pressed?== false &?rotDirection?== 1)?{
????digitalWrite(in1,?LOW);
????digitalWrite(in2,?HIGH);
????rotDirection?= 0;
????delay(20);
??}
}
簡單描述一下:首先我們需要定義程序所需的引腳和變量。
在setup()中,我們需要設(shè)置引腳模式和電機(jī)的初始旋轉(zhuǎn)方向。
在loop()中,我們先讀取電位器值,然后將從中獲得的值從0到1023變化,線性映射到PWM信號(hào)的0到255的值,將其從0到100%的占空比。
然后使用analogWrite()函數(shù)將PWM信號(hào)發(fā)送到L298N板的Enable引腳,該引腳實(shí)際上驅(qū)動(dòng)電動(dòng)機(jī)。
接下來,我們檢查是否按下了按鈕,如果是的話,我們將輸入1和輸入2的狀態(tài)反置,從而改變電動(dòng)機(jī)的旋轉(zhuǎn)方向。該按鈕將用作切換按鈕,每次按下該按鈕都會(huì)改變電動(dòng)機(jī)的旋轉(zhuǎn)方向。
某寶上這種小車很多,如下圖所示;主控可以換成51單片機(jī)或者STM32,當(dāng)然Arduino也沒問題,使用L298N就可以快速搭建一個(gè)小車了;
某寶的小車
總結(jié)
本文簡單介紹了H橋的原理,并以直流電機(jī)為例簡單介紹了驅(qū)動(dòng)的狀態(tài),整體比較簡單,適合新手玩家,最后給出了基于Arduino和L298N的驅(qū)動(dòng)示例,僅供參考,感興趣可以去某寶逛逛,enjoy。
由于作者能力和水平有限,文中難免存在錯(cuò)誤和紕漏,請不吝賜教。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!