Arduino範例講解(八)

驅動馬達

直流電動機

若使用上一篇Arduino範例講解(七)-驅動更多LED或其他負載中說明的技術,您只能沿一個方向旋轉馬達。要更改方向,您需要一個H橋。它由2個NPN和2個PNP電晶體,或2個N通道和2個P通道FETs組成。

請看典型的MOSFET H橋電路的圖像。

注意:您不能只用電晶體代替此原理圖中的MOSFETs:電晶體需要基極電流,FETs需要閘極電壓。

讓我們來解出這個電路是如何工作的:

我們命名左輸入為”輸入A”,右輸入為右”輸入B”。

當輸入A為低電位時,電晶體Q1不導電。這意味著Q2和Q3的閘極為高電位(它們通過R1 連接到V SS)。Q3是一個N通道MOSFET,因此它開始導電(因為它具有正的閘極電壓)。Q2是一個P通道MOSFET,因此不導電(因為它的閘極和源極之間沒有電壓差,兩者都連接到V SS)。
現在,電動機的左側端子通過Q3接地。

當輸入B為高電位時,Q4導電。這意味著Q5和Q6的閘極為低電位(它們通過Q4接地,R2在這種情況下無關緊要)。Q6是一個N通道MOSFET,因此不導電(因為它的閘極和源極之間沒有電壓差,都接地了)。Q5是一個P通道MOSFET,因此它開始導電(因為它相對於源極具有負閘極電壓)。馬達的右側端子現在通過Q5 連接到V SS。在這種情況下,馬達將逆時針旋轉。

下面圖片是這種情況的等效電路。

你可以猜到,如果輸入A為高,而輸入B為低,則電動機將順時針旋轉。如果A和B都為高或都為低,則電動機將不會旋轉,因為兩個端子都連接至V SS或接地。(所以沒有電壓差)

你可以自己建構該電路讓使用IC的方法更簡單。例如,我從舊印表機中取出了一些L6202晶片。另一個H橋晶片是L298或L293。
它們直接連接到Arduino上的2個數字引腳,並且大多數還具有”啟用”的引腳,您可以將其與第三個pwm引腳一起使用,以控制馬達的速度。

Adafruit有一個非常好的關於如何使用它們的課程:https://learn.adafruit.com/adafruit-arduino-lesson …

步進馬達

另一個常用的馬達是步進馬達。

普通的直流馬達在兩個永磁體內部有一個旋轉的線圈。另一方面,步進馬達具有運動的磁體(轉子)和一些固定的線圈(定子)。通過特定順序激活線圈,轉子將旋轉。

下面影片可以幫助你了解其工作原理:

為了驅動單極步進器,您只需要4個NPN電晶體或4個N通道MOSFETs。(見圖片)

要找出步進器的引腳,請查一下規格表,或使用萬用表測量電路之間的電阻。某些導線組合的電阻是其他導線的2倍,這是原理圖中的外部兩條導線。

將兩條中心電路連接到電源的正極,將外部電路連接到驅動電晶體的集極(參考上面示意圖)。再計算適當的基極電阻,並將其連接至Arduino的引腳8、9、10、11。不要忘記將電源的地線連接到Arduino的地線。

為了驅動雙極步進器,您需要2個H橋。將每個H橋的輸出連接到步進器的一個線圈。將H橋的輸入連接到Arduino的引腳8、9、10、11。不要忘記將電源的地線連接到Arduino的地線。將啟用線連接到V SS

注意:步進馬達會消耗大量電流,因此您無法使用Arduino的控電板電源。應該使用大功率電晶體或MOSFETs。檢查電晶體的溫度,並在必要時增加散熱器。

現在打開stepper_oneRevolution範例(”檔案”>”範例”>”stepper”),並更改旋轉的步數以匹配你的馬達。

在程式碼的上面,有一行

#include Stepper.>

這是將代碼或Stepper.h檔案加到程式碼中,因此你可以使用其功能。這個檔案稱為匯入stepper

在第24行,我們建立Stepper 的實例該實例稱為” myStepper”(此名稱可以是任意名稱),有5個參數:第一個參數代表轉一圈(360°)的步數,以及連接到電晶體基極的4個接腳。

在class中定義的函式,要實作執行該函式的程式寫法,我們可以樣下面的程式碼來實現。instance.function(arguments);

myStepper.setSpeed 60 ;

還記得Serial.print(…)嗎?這以類似的方式工作。

setSpeed(RPM) 設定setSpeed方法的速度,在每分鐘轉數(因此它取決於每轉的步數)。

步進器class的另一個功能是step(steps),它是將馬達旋轉給定數量的步數。如果該數字為正數,它將順時針移動;如果為負數,它將逆時針移動。

將範例上傳到Arduino,電機應順時針旋轉360°,然後逆時針旋轉360°,依此類推。如果它沒有轉動,而只是振動,請嘗試交換2個輸出引腳,直到它起作用為止。您可以將物理引腳交換到Arduino,或者僅更改第24行的引腳順序。(例如,用9、8、10、11代替8、9、10、11)

使用class可以很輕鬆地建立多個Stepper實例。可以參考一下範例_2steppers_oneRevolution。

另外,當步進器不移動時,它將保持一個線圈閉合以阻止馬達,因此它不會移動。但是,這會吸收大量電流,並且步進器本身和電晶體可能會變得很熱。
要停止此操作,您只需在步進器的4個引腳上執行digitalWrite(pin,LOW)

如果您使用驅動器IC(例如H橋或達林頓陣列),則還可以啟用連接到Arduino的接腳。如果將其設置為高電位,則馬達將被激活,而如果將其設置為低電位,則馬達兩端將完全沒有電壓。

您可以建立自己的函數來轉動步進器,就像下面範例Stepper_stop中所做的那樣

void stepperOff {
digitalWrite LOW ;
digitalWrite LOW ;
digitalWrite 10 LOW ;
digitalWrite 11 LOW ;
}

您可以使函數執行幾乎所有操作,例如,如果您必須在程序中多次執行某些命令系列。

下面提供一個關於class,function和libraries的一個很好的教學課程網頁,在Arduino網站上的Library Tutorial:https : //www.arduino.cc/en/Hacking/LibraryTutorial

Arduino參考:Stepper

發佈留言