本文最初發佈在deviceplus.jp網站上,而後被翻譯成英語。
Device Plus網站中介紹了有關Arduino的各種應用和作品範例,但無論創作任何作品,基礎知識都很重要!這就是為什麼在這篇文章中,我們會探討Arduino的關鍵基礎知識。今天的分享嘉賓是《始於Arduino 基礎的電子工藝品入門》的作者福田和宏先生。
在本文中,將為大家介紹大電流馬達的控制方法。
馬達可用來驅動各種設備,例如無人機和汽車。馬達是一種電子產品,當連接到電源時可以產生旋轉運動。透過給輪胎和螺旋槳安裝馬達,可以利用馬達的旋轉來完成移動和上升等動作。
使用Arduino也可以控制馬達。與LED一樣,您可以透過接通和關斷提供給馬達的電源來控制馬達旋轉或停止。透過與其他感測器等元件結合使用,還可以實現比如當障礙物接近時馬達停動這樣的自動控制。
當電源方向反接時,馬達會向相反的方向旋轉。也可以透過調整流過的電流量來改變轉速。基於這些原理,可以實現很多複雜的動作,比如在馬達高速旋轉時移動,在逐漸減速時停止在期望的目標位置,在遇到障礙物時回頭向另一個方向移動。所以在本文中,我們將一起來瞭解使用Arduino控制馬達的方法。
[目錄]
・驅動馬達需要驅動器
・將馬達連接到Arduino
・透過程式控制馬達
・改變馬達的轉速
透過Arduino的數位輸出,可以在High和Low之間切換,我們曾用來控制LED的閃爍。使用該功能,應該還可以為馬達供電。但是,實際上,即使您將馬達直接連接到Arduino,馬達還是無法運行的。
使馬達運行需要大電流。例如,在本次使用的馬達“RE-280RA”的情況下,可能會流過1A以上的電流。但是,Arduino的數位輸出引腳最多只能承受20mA的電流。如果施加比這更多的電流,Arduino本身可能會損壞。因此,我們需要將馬達連接到Arduino的輸出引腳並對其進行控制。
這裡我們使用的是“馬達驅動器”。馬達驅動器是用來控制馬達的電子器件。我們需要準備一個將馬達連接到電源以使馬達運行的電路,並在其中插入馬達驅動器。馬達驅動器可透過外部訊號導通和關斷馬達運行電路,並可控制馬達的旋轉和停止。由於控制信號中幾乎不會流過電流,因此即使連接Arduino,也可以毫無問題地控制馬達。
另外,透過馬達驅動器,還可以利用控制訊號切換旋轉方向。馬達驅動器配有兩個控制引腳,一個設置為High時正轉,另一個設置為High時反轉。這使得馬達驅動器可以控制馬達的正轉、反轉和停止。
現在讓我們嘗試利用Arduino來控制馬達。這部分操作將使用以下電子元件,因此請確保您已經準備好它們。
這是馬達本體。其中,可以用乾電池等的直流電控制的馬達稱為“直流馬達”。這次,我們將使用“RE-280RA”。RE-280RA可施加高達4.5V的電壓。
我們將使用馬達驅動器來控制馬達。驅動器具有根據來自Arduino的信號給馬達供電並控制馬達轉向等功能。我們將使用ROHM的“BA6956AN”。從帶有切口的連接器(圖片左側)開始,引腳分別按照“引腳1”和“引腳2”等命名。
電容是可以儲存少量電能的電子元件。馬達在工作過程中會產生雜訊。雜訊可能會對其他電子元件的工作產生不利影響。因此,可以透過在馬達的兩個引腳上連接電容來降低雜訊。
為了防止流過突發大電流損壞電子元件,可以使用電阻來抑制電流。此次,為了能給馬達提供指定的電壓,我們在Arduino的3.3V引腳上連接了馬達驅動器。通常情況下,幾乎沒有電流流過,但由於在某些情況下可能會有流過大電流的風險,因此連接了一個10kΩ的電阻以防止流過大電流。這個10kΩ電阻器上印有“棕黑橙金”四色顏色代碼。
我們將使用乾電池作為驅動馬達的動力源。在這裡使用的是可提供9V電壓的006P。另外,還會使用電池扣將電池連接到麵包板上。
馬達有引腳,需要連接到麵包板。通常是將導線焊接到引腳上。但是如果您使用鱷魚夾線,只需將鱷魚夾夾住馬達的引腳即可實現接線,可以省去焊接的麻煩。
準備好所需元件後,如下所示進行連接。
用鱷魚夾夾住馬達引腳,將馬達連接到馬達驅動器的引腳2和4。注意,在馬達工作期間可能會產生雜訊,雜訊可能會影響其他設備工作,因此,需要將電容器連接到馬達的兩個引腳來降低雜訊。
馬達可以由單獨準備的電池供電。因此,可以透過將電池連接到馬達驅動器的引腳5和3來實現電池供電。
此外,本次使用的馬達的供電電壓範圍為4.5V以內。因此,使用9V電池時,電壓過高,可能會損壞馬達。因此,請在馬達驅動器的引腳1處指定輸出至馬達的最大電壓。本次我們為馬達提供3.3V的電壓。將Arduino 3.3V電源連接到引腳1並指定最大電壓值。馬達旋轉可以透過馬達驅動器的引腳7和9來控制。這意味著需要分別連接到Arduino的引腳5和6,透過Arduino的輸出對其進行控制。
完成連接後,讓我們實際嘗試使用程式來控制馬達。馬達的旋轉可以透過Arduino引腳5和6的輸出來控制。旋轉、停止和旋轉方向都可以透過將這兩個引腳設置為High或Low來控制。在BA6956AN的情況下,可以進行如下控制:
要正轉時,使引腳5輸出High,使引腳6輸出Low。將以下程式寫入Arduino,馬達將開始正轉。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const int MT_F = 5; const int MT_R = 6; void setup(){ pinMode( MT_F, OUTPUT ); pinMode( MT_R, OUTPUT ); } void loop(){ degitalWrite( MT_F, HIGH ); degitalWrite( MT_R, LOW ); delay( 1000 ); } |
在第10行設置了引腳5輸出High,在第11行設置了引腳6輸出Low。
如果要反轉,則需要使引腳5輸出Low,使引腳6輸出High。
程式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const int MT_F = 5; const int MT_R = 6; void setup(){ pinMode( MT_F, OUTPUT ); pinMode( MT_R, OUTPUT ); } void loop(){ degitalWrite( MT_F, LOW ); degitalWrite( MT_R, HIGH ); delay( 1000 ); } |
在第10行設置了引腳5輸出Low,在第11行設置了引腳6輸出High。如果要使馬達停止運轉,則需要讓引腳5和6都輸出Low。
程式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const int MT_F = 5; const int MT_R = 6; void setup(){ pinMode( MT_F, OUTPUT ); pinMode( MT_R, OUTPUT ); } void loop(){ degitalWrite( MT_F, LOW ); degitalWrite( MT_R, LOW ); delay( 1000 ); } |
另外,如果引腳5和6都輸出High,則會啟動制動器,可以讓馬達在比兩個引腳都置Low時更短的時間內停止運轉。
上次,我們透過使用“PWM”這種輸出方法成功地改變了LED的亮度。在馬達上,也可以透過使用PWM控制來改變轉速。透過在短時間內切換High和Low,馬達在旋轉和停止之間交替切換,轉速實際上比正常速度慢。High的時間越長,轉速越快;反之High的時間越短,轉速越慢。
對於馬達而言,透過PWM來輸出想要旋轉的方向的控制引腳,並使另一個引腳始終保持在Low的狀態。正轉時,透過PWM輸出引腳5 並使引腳6保持在Low狀態。反轉時,透過PWM輸出引腳6,並使引腳5保持在Low狀態。下面是控制正轉速度的程式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const int MT_F = 5; const int MT_R = 6; void setup(){ pinMode( MT_F, OUTPUT ); pinMode( MT_R, OUTPUT ); } void loop(){ analogWrite( MT_F, 128 ); analogWrite( MT_R, 0 ); delay( 1000 ); } |
在程式中,在第10行設置為向引腳5輸出PWM比率的一半(最大為255),在第11行使引腳6保持在Low狀態。當您改變第10行的數位時,速度也會隨之改變。但是,如果High小於某個特定的比率,馬達將不會旋轉。如果減小該值馬達不旋轉,就請嘗試指定更高的值。您可以透過逐漸增加或減少引腳5輸出的值來逐漸改變速度。在接下來的程式中,轉速將從停止狀態逐漸提高,當達到最大值時,速度將會逐漸降低並最終停止運轉。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
const int MT_F = 5; const int MT_R = 6; void setup(){ pinMode( MT_F, OUTPUT ); pinMode( MT_R, OUTPUT ); } void loop(){ int speed; analogWrite( MT_F, 0 ); analogWrite( MT_R, 0 ); speed = 0; while( speed <= 255 ){ analogWrite( MT_F, speed ); delay( 100 ); speed = speed + 5; } delay( 5000 ); speed = 255; while( speed >= 0 ){ analogWrite( MT_F, speed ); delay( 100 ); speed = speed - 5; } delay( 5000 ); } |
在本文中,我們瞭解了透過Arduino控制LED和馬達等電子產品的方法。下一篇將介紹如何透過Arduino確認開關的狀態。