馬達的正式名稱為電動機,英文是 Motor,在日常生活中是很常見的裝置。像是由電池驅動的玩具汽車、電腦內部的散熱風扇、掃地機器人,可都有馬達的存在。而馬達也不都只是這些小玩意,電梯、機械式停車場的起降架、電動門,也都是利用馬達才能順利運作的。也許是因為太常見,也有可能是因為外觀看起來很簡單,所以馬達乍看之下往往被誤以為是一個很容易使用的元件。然而在實際上,馬達可能是我們所碰到的元件中種類最多、最複雜、需要考量的事情也最多的一種元件。在這篇文章中,我將 Raspberry Pi (或其他的微控制板) 應用上常碰到的馬達種類、以及相關的驅動、接線方式作一概要性的介紹。而在後續的文章中,將針對各種不同的類型的馬達進行相關實作。

馬達的分類

之前我們曾提到如何利用軟體式 PWM硬體式 PWM 來控制伺服馬達。伺服馬達雖然可以控制旋轉的角度,但是通常無法旋轉 360 度,此外也無法 (高速地) 連續轉動。可想而知,如果用伺服馬達當作車子移動的動力來源,這台車子將只能在原地前後嚕來嚕去,永遠到不了遠方。既然伺服馬達無法當作車子前進的動力來源,那又該用哪種元件呢?

在 Raspberry Pi 或其他微控制板應用中,常見的馬達可分為三類,分別是直流 (DC) 馬達、伺服馬達與步進馬達,整理如下:

主要特性控制方式旋轉方向
直流馬達 (DC Motor)可高速連續旋轉,但不可控制旋轉或前進角度。改變工作電壓與電流可以影響旋轉速度,通常透過 PWM 機制改變電流大小來控制轉速。改變電壓的方向即可反向旋轉。
步進馬達 (Stepping Motor)可連續旋轉與控制前進角度,但無法直接控制旋轉角度。透過控制腳位的變化速度與次數來控制前進的角度。將控制腳位的變化順序倒反即可反向旋轉。
伺服馬達 (Servo Motor)不可連續旋轉,可直接控制旋轉角度。透過 PWM 的工作週期來改變旋轉角度。非直接控制旋轉方向,而是旋轉角度。

既然有直流馬達,當然也有交流 (AC) 馬達。不過因為一般微控制板比較少直接控制交流馬達,所以在此先跳過不提。

減速馬達

根據上面的分類,讓我們先動動腦,思考一下哪種馬達適合用來當作遙控車的主要動力來源?答案應該不難猜,就是直流馬達。因為它才可以快速地不斷旋轉,而當我們在控制車子前進後退時,通常也不需要指定輪子的旋轉角度。

不過如果我們尋找遙控車的相關套件或範例,會發現很多資料寫的是減速馬達,而非直流馬達。這又是怎麼一回事?嚴格來說,減速馬達並不是馬達的一種分類,這裡說的減速馬達其實是具備減速箱的直流馬達。顧名思義,減速箱會減低馬達所輸出的轉速,也因此使得車子前進後退的速度變慢。這麼說來,減速箱的用途是甚麼,難道是怕車子跑太快發生翻車意外?遙控車跑太快確實會增加操作的困難度,容易導致撞車的意外發生。但是主要原因並不只是如此,減速箱的主要目的是增加馬達的扭距 (或稱扭力),也就是讓馬達更加有力,這樣才能使得車子移動更加地順暢。如果不想要減速又想要有足夠的扭力,那就只好使用更大功率的馬達,不過如此一來就會更加耗電,而一般常見的驅動板或 IC 甚至可能無法加以驅動。減速箱有時候還提供了一個額外的功能,那就是改變轉動的方向,這點我們將在之後的範例中看到。

除了直流馬達外,其他種類的馬達其實也是可以使用減速箱的。我們之前提到的 SG90 伺服馬達以及之後要介紹的 28BYJ-48 步進馬達,同樣都具備減速箱。而對這些馬達而言,減速箱除了可以增加出力外,也可以提升控制旋轉角度的解析度。

以下圖中的 SG90 伺服馬達而言,上方具有多個齒輪的空間即為減速箱。

Tower Pro SG90 伺服馬達與減速箱

Tower Pro SG90 伺服馬達與減速箱

減速箱的規格有所謂的減速比,就是轉速降低的比值。舉例來說,一個原始轉速為 20 RPM (每秒 20 轉) 的馬達,如果搭配減速比為 1:10 的減速箱,實際輸出的轉速就只剩下 2 (20/10) RPM 了。

來不來電很重要

跟我們之前所接觸過的大多數感測器相比,馬達是一種很吃電的怪物。即使是一個小型的馬達,其吃電能力,都有可能使得微控制板吃不消。一旦發生吃不消的情況,運氣好只是馬達無法正常動作,運氣不好就是板子或元件直接燒毀,所以在使用馬達前務必看清楚規格並小心接線,以免發生慘案。

在馬達的規格中,最重要的當然就是工作電壓。一些很小型的馬達的工作電壓包含 5V,所以理論上可以直接接在 Raspberry Pi 的 GPIO 5V 電壓上。但是除了作為範例外,其餘時候千萬別這樣接,原因之一在於馬達的另一項規格,也就是電流。Raspberry Pi 的 5V 電流來自 USB,如果使用可輸出 2A 以上的充電器,理論上 5V 輸出至少還有 1A 可以使用,確實可以用來驅動很小型的伺服馬達 (如 SG90)。但是如果換成其他比較大型的伺服馬達,可就無法順利驅動了。此外,直流馬達或步進馬達的屬性與伺服馬達不同,通常需要透過直接改變電力來控制馬達的行為,而不像伺服馬達僅需改變控制訊號的 PWM 工作週期。

舉例來說,直流馬達只要通電就會開始轉動。如果我們想要控制馬達的轉動與否,很直覺的想法就是把馬達的一端接地,另外一端則接到 GPIO 的控制腳位。當腳位為低電位時,馬達靜止不動。而當腳位變為高電位時,馬達就會通電開始轉動。如下圖所示:

Raspberry Pi 與直流馬達 (錯誤接線圖)

Raspberry Pi 與直流馬達 (錯誤接線圖)

這樣的接法首先會面臨電壓的問題。Raspberry Pi GPIO 控制腳位的高電位只有 3.3V,並不是 5V,所以可能不符合直流馬達的工作電壓需求。既然如此,換成可使用 3.3V 當作工作電壓的馬達就沒問題了吧?我們前面提到 Raspberry Pi 的 5V 輸出至少還有 1A 的電流可以用來供給馬達使用,但是對 GPIO 控制腳位來說可就完全不是這麼一回事了。Raspberry Pi 的控制腳位並無法提供這麼大的電流,所以這種接法是萬萬不可行的。不只是 Raspberry Pi 無法這樣接,就算是 GPIO 能力很強的 Arduino,也無法這樣使用。因為 GPIO 控制接腳就是用來作為控制用,而不是作為電流的輸出。

針對 Raspberry Pi GPIO 控制腳位可以輸出的電流限制,能夠找到的確切資料不多且眾說紛紜,比較可信的說法是數 mA 到十來 mA 之間。不論為何,小馬達隨便也有數百 mA 以上的電流需求,絕不是 GPIO 控制腳位能夠直接駕馭的接腳。

直流馬達的開與關

前面提到直流馬達最簡單的應用,就是利用電流來控制馬達的轉或不轉。我們之前介紹過的按鈕,正是一種可用來控制電路的開關。所以只要串連一個按鈕,就可以利用這個按鈕來控制馬達的轉動與否,如下圖所示:

利用按鈕控制直流馬達

利用按鈕控制直流馬達

這樣接線確實可以達成控制直流馬達的目的,不過卻有一個大問題,那就是 Raspberry Pi 並沒辦法直接控制這樣的實體按鈕。所以如果我們想要透過 Raspberry Pi 來控制電路開通與否,就必須使用其他類型的開關。這個需求有很多不同的解法,最簡單的作法就是使用名為 BJT (雙極性接面電晶體) 或 MOSFET (場效電晶體) 這兩種半導體元件來當作可控制的開關。前者如相關範例中很常見的 2N2222/PN2222,後者如 FQP30N06L,都可以用來驅動小功率的馬達。

BJT (雙極性接面電晶體) - 2N2222

BJT (雙極性接面電晶體) – 2N2222

MOSFET (場效電晶體) - FQP30N06L

MOSFET (場效電晶體) – FQP30N06L

BJT 與 MOSFET 兩者雖然都有三隻接腳,但是除了外觀不盡相同之外,其電子特性也完全不一樣。簡單來說,BJT 是靠電流來驅動的開關,而 MOSFET 則是依靠電壓來驅動。所以一般而言,MOSFET 會比較省電。那 MOSFET 的缺點呢?最大的缺點就是比驅動能力相當的 BJT 貴上許多。

因為兩者各自擁有很多不同的型號,所以如果你看到的範例使用的是不同型號的元件,倒也不用太緊張。只要記得幾個原則:

  • BJT 與 MOSFET 特性不同,所以 BJT 與 MOSFET 的接線也有所不同,兩者範例不可混淆。舉例來說,BJT 為電流驅動的開關,所以 GPIO 控制腳位需要串聯一個電阻以控制電流。而 MOSFET 則無此需求。
  • BJT 又分為 NPN 與 PNP 兩種,一般使用 NPN 類型,如 2N2222。
  • MOSFET 又分為 N 通道與 P 通道兩種,一般使用 N 通道類型,如 FQP30N06L。
  • 即使同為 BJT,但三支接腳的順序不一定都一樣,實際接線時需確認清楚。同樣的,MOSFET 亦須注意接腳的順序。
  • 你手邊的 BJT / MOSFET 是否可以取代範例中的元件,只要比對手邊馬達的規格即可。當電壓、電流符合馬達的需求即可替換使用。
  • BJT 為電流驅動的開關,所以一樣需要 GPIO 控制腳位的輸出電流。如果驅動所需的電流超過 GPIO 控制腳位能夠提供的電流範圍,將導致馬達無法獲得足夠的電流而不正常運作。

儘管 BJT 與 MOSFET 價格便宜 (尤其是 BJT),但是用來控制馬達仍有一些缺點:

  1. 一個 BJT 或 MOSFET 只能用來驅動一個直流馬達。對於遙控車或其他類似的東西來說,通常至少需要驅動兩個以上的直流馬達。當需要直流驅動的馬達一多時,接線的複雜度與占用面積就會大幅增加。
  2. BJT 或 MOSFET 無法提供不同方向的電壓,也就是說馬達只能往一個方向旋轉,而無法反向旋轉。只能前進而無法後退的車子,聽起來多令人失望啊。
  3. BJT 是靠電流驅動的開關,而當驅動功率越大的馬達就必須使用功率更大的 BJT,需要的驅動電流通常也越大。對於本身就不以輸出為主的 GPIO 控制腳位來說,往往顯得無能為力。這個問題的解法是使用一種稱為達靈頓電路 (英文為 Darlington Circuit、Darlington Transistor 或 Darlington Pair Transistor) 的設計,簡單來說就是把兩個 BJT 串在一起,可以大幅減少控制接腳所使用的電流需求,讓一般 GPIO 控制接腳也可以輕鬆加以駕馭。

達靈頓電路與 H 橋式電路

前面提到透過達靈頓電路的設計,可以大幅減少用來控制用的電流需求,讓一般 GPIO 控制接腳也可以輕鬆加以駕馭。不過我們並不需要自己設計達靈頓電路,而是透過現成的 IC,像是 ULN2003A 只要一個 IC 就可以提供 7 組的輸出。

ULN2003A

ULN2003A

ULN2003A 之類的 IC 解決了前面所提的第一個與第三個問題,但是第二個問題仍舊存在著。要解決電壓反轉的問題,可以利用 H 橋式電路 (H-Bridge),如下圖所示:

H bridge

H bridge operating

H 橋式電路利用四個開關的組合,可以製造出兩個不同方向的電壓,以達到電壓反轉的目的。在左下方的圖式中,S1/S4 閉合、S2/S3 斷開,馬達左方的電位高於右方的電位。而在右下方的圖式中,S1/S4 斷開、S2/S3 閉合,則馬達右方的電位高於左方的電位。幸運的是,我們同樣不需要自行設計 H 橋式電路,L293/L293D 就是具備 H 橋式電路的達靈頓電路 IC,不但可以用來驅動直流馬達,而且還可以控制馬達旋轉的方向。

L293D

L293D

步進馬達的驅動

步進馬達需要供電的控制接腳有四隻,所以不適合使用單一的 BJT 或 MOSFET 加以驅動,而是使用如  ULN2003A 或 L293D 之類的驅動 IC。而步進馬達又可分為單極性 (Unipolar) 與雙極性 (Bipolar) 兩種,差別在於雙極性需要反向的電壓,所以 L293D 適合用於雙極性的步進馬達,而 ULN2003A 則適合單極性的步進馬達。不過單極性馬達又可以當作雙極性馬達來使用,所以就會變成搭配 L293D 當作驅動 IC,而非 ULN2003A。

此外,市面上還可以看到 ULN2003A 的擴展電路板 (如下圖),方便我們用來控制單一個單極性步進馬達。

ULN2003A 擴展電路板

ULN2003A 擴展電路板

馬達驅動擴展板

雖然 L293/L293D 解決了驅動直流馬達與步進馬達的問題,但是仍有一些使用上不便利的地方,所以就有了馬達驅動擴展板的出現。這類擴展板的功能千變萬化,以下是一些可能具有的特性:

  • 以 L293 或 L298 系列當作主要的驅動 IC。
  • 同時提供直流馬達、伺服馬達、步進馬達的驅動需求。伺服馬達方面,使用硬體式的 PWM 訊號來提供穩定的控制能力。
  • 可提供多組馬達的接腳與驅動能力。
  • 可提供微控制板所需電源。這樣的好處是遙控車僅需使用一組外部電源,而不必為驅動板及微控制板分別提供兩組不同的電源。除了可以簡化接線,同時也減少遙控車的體積與重量。
  • 提供保護電路與其他必要之配合電路。

在這篇文章中,我們提到有關馬達的分類以及各種馬達的基本特性,也列出了常見用來驅動馬達的方式,從 BJT、MOSFET、達靈頓電路、H 橋式電路、一路延伸到馬達驅動擴展板。越後面的驅動方式,通常使用上越是方便,不過費用也愈高。所以你手邊預計進行的專案適合使用哪一種方式,是事先必須考慮清楚的。不管使用哪一種驅動方式,電壓與電流的限制永遠都是最重要的考量。即使使用馬達驅動擴展板,單一接腳能夠提供的電流依舊受限於上面所使用的驅動 IC (如 L293D) ,與直接使用驅動 IC 時並無差別。並不是擴展板比較貴、看起來比較威就可以驅動更大的馬達。

話說如此,如果是跟專門銷售微控制板周邊元件的商家購買,通常是不太需要擔心這些事情,因為賣的都是相容性高的小功率 (也就是價格低) 元件與馬達。不過如果想要使用其他來源或規格的馬達,除了驅動方式之外,驅動能力是否足夠可也是疏忽不得的重要考量。

雖然本篇文章主要針對的是馬達這類元件,但是對於驅動其它需要大電流的元件 (如大功率的 LED 燈泡) 也是適用的。

在後續的文章中,我們將針對直流馬達與步進馬達進行使用範例的說明,敬請期待。

如果對文章的內容有任何疑問或建議,歡迎與我聯絡。

Facebook 留言
Print Friendly, PDF & Email
Summary
Raspberry Pi 3 Model B 與馬達
Article Name
Raspberry Pi 3 Model B 與馬達
Description
馬達又稱電動機,英文是 Motor,在日常生活中是很常見的裝置。馬達可能是我們所碰到的元件中種類最多、最複雜、需要考量的事情也最多的一種元件。在這篇文章中,我將 Raspberry Pi (或其他的微控制板) 應用上常碰到的馬達種類、以及相關的驅動、接線方式作一概要性的介紹。
Author
Publisher Name
Everlearn Studio
Publisher Logo