在本次的文章中,我們將會(huì)介紹如何使用 Arduino 控制直流有刷電機(jī)。
直流有刷電機(jī)上生活中最為常見的電動(dòng)機(jī)之一。小時(shí)候玩的四驅(qū)車采用的就是直流有刷電機(jī)。這種直流電機(jī)的驅(qū)動(dòng)也是非常簡(jiǎn)單 ,只要給它接上直流電,電機(jī)就能轉(zhuǎn)動(dòng),改變電源正負(fù)極,電機(jī)就能反轉(zhuǎn)。那么我們?cè)趺磳?duì)電機(jī)進(jìn)行調(diào)速并且更方便地切換電機(jī)的旋轉(zhuǎn)方向呢?
我們知道,一個(gè)電機(jī)接兩節(jié)干電池時(shí)的轉(zhuǎn)速要比只接一節(jié)干電池要快得多。因此我們可以通過簡(jiǎn)單地控制電機(jī)的輸入電壓來控制直流電機(jī)的轉(zhuǎn)速。最常用的方法是使用 PWM 信號(hào)控制電機(jī)。
PWM 脈沖寬度調(diào)制(Pulse width modulation,PWM)是一種模擬控制方式,根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管基極或MOS管柵極的偏置,來實(shí)現(xiàn)晶體管或MOS管導(dǎo)通時(shí)間的改變,從而實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定,是利用微處理器的數(shù)字信號(hào)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。它相當(dāng)于我們通過快速打開和關(guān)閉電源來調(diào)整輸入電子設(shè)備的電壓的平均值。 平均電壓取決于占空比,或者信號(hào)開啟的時(shí)間與信號(hào)在一個(gè)周期內(nèi)關(guān)閉的時(shí)間的比值。
PWM原理圖
因此,根據(jù)電機(jī)的大小,我們可以簡(jiǎn)單地將 Arduino PWM 輸出連接到晶體管的基極或 MOS管的柵極,并通過控制 PWM 輸出來控制電機(jī)的速度。 低功率 Arduino PWM 信號(hào)打開和關(guān)閉 MOS管上的柵極,通過該柵極驅(qū)動(dòng)高功率電機(jī)。
Arduino驅(qū)動(dòng)直流電機(jī)接線圖
注意:Arduino與電機(jī)電源需共地。
我們已經(jīng)學(xué)會(huì)了控制電機(jī)的速度,下一步就是控制電機(jī)的正反轉(zhuǎn)。為了控制旋轉(zhuǎn)方向,我們只需要反轉(zhuǎn)通過電機(jī)的電流方向,最常用的方法是使用H橋。 H橋電路包含四個(gè)開關(guān)元件、晶體管或MOS管,中間的電機(jī)形成類似H型的電路。通過同時(shí)激活兩個(gè)特定的開關(guān),我們就可以改變電流的方向,從而改變電機(jī)的旋轉(zhuǎn)方向。比如只接通開關(guān)1,3電機(jī)正轉(zhuǎn),只接通2,4開關(guān)電機(jī)就會(huì)反轉(zhuǎn)。
因此,如果我們將PWM和H橋這兩種方法結(jié)合起來,我們就自如地控制直流電機(jī)了。實(shí)際上我們有許多具有這種功能的直流電機(jī)驅(qū)動(dòng)器,L298N 就是其中最常用的模塊之一。
L298N 是雙H橋電機(jī)驅(qū)動(dòng)器,可同時(shí)控制兩個(gè)直流電機(jī)的速度和方向。該模塊可以驅(qū)動(dòng)電壓在5-35V之間的直流電機(jī),峰值電流可達(dá)2A。
該模塊左右各有兩個(gè)螺釘接線端子用于連接電機(jī)A和B。中間的螺釘接線端子包括一個(gè)接地端,一個(gè)電機(jī)5-35V的供電端VCC以及一個(gè)5V接線端,它可以是輸入或輸出。這取決于電機(jī) VCC 上使用的電壓。 該模塊具有板載5V穩(wěn)壓器,可使用跳線啟用或禁用該穩(wěn)壓器。 如果電機(jī)電源電壓高達(dá) 12V,我們可以啟用5V穩(wěn)壓器,并且 5V 引腳可以用作輸出,并為我們的 Arduino 板供電。 但如果電機(jī)電壓大于 12V,我們必須斷開跳線,因?yàn)檫^高的電壓會(huì)損壞板載 5V 穩(wěn)壓芯片。 在這種情況下,5V 引腳將用作輸入,因?yàn)槲覀冃枰獙⑵溥B接到 5V 電源才能使 IC 正常工作。
接下來是信號(hào)端的接線。使能A(EnableA)和使能B(EnableB)引腳用于啟用和控制電機(jī)速度。如果該引腳上存在跳線,電機(jī)將啟動(dòng)并以最大速度工作。我們也拆下跳線帽,將PWM輸入此引腳,就可以控制電機(jī)的速度。如果我們將此針腳接地,電機(jī)將被禁用。
接下來,IN1和IN2引腳用于控制馬達(dá)A的旋轉(zhuǎn)方向,IN3和IN4用于馬達(dá)B。我們通過這些引腳,來L298N IC內(nèi)部H橋的開關(guān)。如果IN1輸入低電平而IN2輸入高電平,電機(jī)將正轉(zhuǎn),如果N1輸入高電平而IN2輸入低電平,電機(jī)將反轉(zhuǎn)。如果兩個(gè)引腳輸入相同,電機(jī)將停止。這同樣適用于IN3和IN4以及電機(jī)B。
現(xiàn)在讓我們連接上Arduino 做一個(gè)實(shí)際應(yīng)用。我們將使用電位計(jì)控制電機(jī)的速度,并使用按鈕改變旋轉(zhuǎn)方向。下面是電路圖。
硬件設(shè)備:
/* Arduino 直流電機(jī)控制 - PWM | H-Bridge | L298N */
#define enA 9 //定義電機(jī)控制端和使能端
#define in1 6
#define in2 7
#define button 4 //定義按鍵
int rotDirection=0; //定義旋轉(zhuǎn)方向
int pressed=false;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(button, INPUT);
// 設(shè)置初始旋轉(zhuǎn)方向
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
void loop() {
int potValue=analogRead(A0); // 讀取電位計(jì)值
int pwmOutput=map(potValue, 0, 1023, 0 , 255); //將電位計(jì)值映射到 0- 255
analogWrite(enA, pwmOutput); // PWM信號(hào)輸出
// 讀取按鍵值
if (digitalRead(button)==true) {
pressed=!pressed;
}
while (digitalRead(button)==true);
delay(20);
// 如果按鍵被按下,改變電機(jī)旋轉(zhuǎn)方向
if (pressed==true & rotDirection==0) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
rotDirection=1;
delay(20);
}
// 如果按鍵被按下,改變電機(jī)旋轉(zhuǎn)方向
if (pressed==false & rotDirection==1) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
rotDirection=0;
delay(20);
}
}
該實(shí)例程序中,我們需要先定義程序所需的管腳和變量。在setup中,我們需要設(shè)置引腳模式和電機(jī)的初始旋轉(zhuǎn)方向。在loop中,我們首先讀取電位計(jì)值,然后將從中獲得的值(從0到1023)映射為PWM信號(hào)的0到255的值,或者是PWM信號(hào)的0到100%占空比。然后使用analogWrite()函數(shù)將PWM信號(hào)發(fā)送到L298N板的啟用引腳,該引腳實(shí)際驅(qū)動(dòng)電機(jī)。
接下來,我們檢查是否按下了按鈕,如果是值是真的,通過反向設(shè)置in1和in2狀態(tài)來改變電機(jī)的旋轉(zhuǎn)方向。該按鈕將作為電機(jī)換向按鈕,每次我們按下它,電機(jī)的旋轉(zhuǎn)方向就會(huì)改變。
前言
現(xiàn)如今網(wǎng)絡(luò)上關(guān)于Arduino開發(fā)的環(huán)境安裝教程已經(jīng)很多了,為什么我還會(huì)出一篇關(guān)于環(huán)境配置的文章?
1、為了完成本次系列的完整性;
2、給看到此筆記的新手快速的上手。
Arduino是一套便捷、靈活、容易上手的硬件開發(fā)平臺(tái),它包括多種型號(hào)的Arduino控制電路板,和專用編程開發(fā)軟件。Arduino省略了很多繁瑣的底層開發(fā),讓人們可以專注在功能實(shí)現(xiàn),快速的開發(fā)出智能硬件原型。Arduino的硬件價(jià)格也相對(duì)便宜,所以,Arduino可以說是適合每個(gè)人的硬件開發(fā)平臺(tái)。
在開始使用Arduino之前,需要在電腦上安裝Arduino的集成開發(fā)環(huán)境(此后簡(jiǎn)稱IDE)。打開資料中的官方軟件(親也可以自己到官網(wǎng)下載https://www.arduino.cc/en/Main/Software),如下圖所示,按照安裝以下步驟安裝到熟悉的文件位置(后面經(jīng)常會(huì)用到的哦)。
在這里插入圖片描述
進(jìn)入頁(yè)面以后,連續(xù)點(diǎn)擊 Just download,下載軟件安裝包。下載后打開安裝包,按照以下步驟安裝。
安裝好官方的IDE以后電腦桌面或出現(xiàn)這個(gè)圖標(biāo),以后編寫代碼都是打開這個(gè)圖標(biāo)進(jìn)行的哦。
雙擊桌面的軟件圖標(biāo),進(jìn)入Arduino IDE之后。第一次啟動(dòng)會(huì)自動(dòng)下載一些包,會(huì)比較慢,耐心等待。
在這里插入圖片描述
在工具欄上, Arduino IDE提供了常用功能的快捷鍵:
校驗(yàn)(Verify),驗(yàn)證程序是否編寫無誤,若無誤則編譯該項(xiàng)目。
下載(Upload),下載程序到Arduino控制器上。
新建(New),新建一個(gè)項(xiàng)目。
打開(Open),打開一個(gè)項(xiàng)目。
保存(Save),保存當(dāng)前項(xiàng)目。
串口監(jiān)視器(Serial Monitor),IDE自帶的一個(gè)簡(jiǎn)單的串口監(jiān)視器程序,用它可以查看串口發(fā)送或接收到的數(shù)據(jù)。相對(duì)于IAR、Keil等專業(yè)的硬件開發(fā)環(huán)境,Arduino的開發(fā)環(huán)境給人以簡(jiǎn)單明了的感覺,但正是這種簡(jiǎn)單,省去了很多不常用的功能,使得基礎(chǔ)知識(shí)不多的使用者更容易上手。
先把a(bǔ)rduino 開發(fā)板連接上PC USB口,打開驅(qū)動(dòng)軟件
點(diǎn)擊安裝即可,安裝成功以后設(shè)備管理器中能看到對(duì)應(yīng)端口和驅(qū)動(dòng)型號(hào)。
?