Login
A   A   A  
welcome

 Album 

米Teen唔鐘意玩現成品,喜歡由零件開始砌。99次失敗唔係問題,最緊要係有1次成功!

米Teen總部設在聖公會白約翰會督中學506室,在午膳後和放學後集會。有興趣參與的同學,請與會長或導師聯絡。

米Teen專頁

506室內 2020-11-04 21:43:57
溫度 26℃ 濕度 95%
街景 2020-11-04 21:41:52
街景
5樓室外 2020-11-04 21:43:43
溫度 22℃ 濕度 95%
街景 2020-11-04 21:34:34
街景

步進馬達28BYJ-48拆解研究

icon

Matthew Li

STEM製作經常用到步進馬達(步進電機,stepper motor,stepping motor,step motor)來驅動機械裝置。其中一款價錢平體積細的28BYJ-48步進馬達最受初學者歡迎。這裏會拆解整個步進馬達,由機械、ULN2003接線到控制程式皆有詳細的講解。

可謂步進馬達stepper motor?

一般玩具當中的直流馬達DC motor只會不斷地轉,如能改變輸入電流的方向,馬達就可以反方向地旋轉,但始終只會不斷地轉。使用者不會採用這類馬達來控制需要轉動指定角度的裝置。顧名思義,步進馬達(不是進步馬達啊!哈!)的設計和用途就是要馬達的轉軸按照控制訊號一格一格地(step by step)移動。在很多需要控制準確位置的裝置中,都可以發現步進馬達的存在。對Arduino的新手來說,步進馬達28BYJ-48連ULN2003驅動板是十分容易購買得到和容易使用的。如果能明白步進馬達28BYJ-48的結構,對理解控制步進馬達的編程一定有幫助。

28BYJ-48 5V DC

28BYJ-48的規格

減速齒輪reduction gear

齒輪組由馬達的主軸至輸出軸共有5個齒輪。
輸出軸轉速 = 主軸轉速 x 9/32 x 11/22 x 9/27 x 8/24
= 主軸轉速 x 1/64

28BYJ-48減速齒輪
打開面蓋就可以見到整個減速齒輪組。

28BYJ-48減速齒輪
共有5個齒輪。

28BYJ-48減速齒輪

28BYJ-48減速齒輪
減速64倍

定子stator和轉子rotor

步進馬達28BYJ-48採用can stack的設計。定子由上下兩層線圈加上抓狀的齒組成。

28BYJ-48定子和轉子

28BYJ-48定子和轉子

28BYJ-48定子的線圈

1=轉子rotor
2=上層線圈的軟鐵蓋及上排抓齒
3=下層線圈的軟鐵蓋及下排抓齒
4=上層線圈及下排抓齒
5=下層線圈及上排抓齒
6=(紅線)上下兩層線圈的中心抽頭(center tap)

28BYJ-48 5V定子線圈的電阻
半個下層線圈的電阻21Ω

28BYJ-48 5V定子線圈的電阻
全個下層線圈的電阻42Ω

28BYJ-48定子的齒
每層線圈有8+8=16個抓狀的齒,兩層共有32個

28BYJ-48轉子永久磁鐵的磁力線
轉子有16個磁極

28BYJ-48轉子的永久磁鐵
圓形的永久磁鐵包圍整個轉子的齒輪

定子線圈通電後產生的磁極

28BYJ-48 5V定子線圈通電後產生的磁極
定子線圈通電後產生的磁極

28BYJ-48 5V定子線圈通電後產生的磁極
下層線圈的藍線(pin 1 blue)接通負極,電流由中心抽頭紅線(center tap)(正極)逆時鐘流入線圈,下層線圈的頂部形成北極。

step 1: pin 1 blue -- lower can upper claw teeth = North
step 2: pin 2 pink -- upper can upper claw teeth = North
step 3: pin 3 yellow -- lower can lower claw teeth = North
step 4: pin 4 orange -- upper can lower claw teeth = North
當這4條線順序接通到負極,北極(和南極)就會順著方向轉動位置。

step 1 - - - - - - - - - - - - - - - -
        S N S N S N S N S N S N S N S N
step 2 S N S N S N S N S N S N S N S N
        - - - - - - - - - - - - - - - -
step 3 - - - - - - - - - - - - - - - -
        N S N S N S N S N S N S N S N S
step 4 N S N S N S N S N S N S N S N S
        - - - - - - - - - - - - - - - -

上圖是full step的描述。轉子對應的磁極會停留在抓齒的位置。28BYJ-48上下兩層共有32個抓齒,所以轉動一圈共有32個full steps。

如要更精準地控制步進馬達的位置,可以用half step方法。轉子由一個抓齒位置可轉去兩個抓齒中間(半個抓齒的距離)停留的。留意用half step會使用更多的電流的,而轉一圈的步驟是full step的雙倍。

step 1 - - - - - - - - - - - - - - - -
        S N S N S N S N S N S N S N S N
step 2 S N S N S N S N S N S N S N S N
        S N S N S N S N S N S N S N S N
step 3 S N S N S N S N S N S N S N S N
        - - - - - - - - - - - - - - - -

以上的step 1和step 3是原本full step的step 1 和 step 2。以上的step 2令到轉子停在step 1 和 step 3之間。

使用步進馬達時要留意轉速的設定。如果太快,每步之間的時間太短,轉子無法跟上轉到下一個抓齒的位置,而下一個新的控制訊號又發了出來,那麼就會出現跳步(skip step)了。另一個出現跳步的原因是電壓(電流)不足,定子無法產生足夠的磁力去轉動轉子。還有一個原因,就是馬達的負荷太重,根本無法轉動。

ULN2003A驅動器

28BYJ-48 5V DC半個線圈的電阻=21Ω
如接駁5V電源,電流=5/21=238mA
這電流遠超Arduino Mega I/O pin的能力(max 20mA)。所以必須加裝外置的驅動IC來控制步進馬達。28BYJ-48普遍會配搭ULN2003A驅動器來用。

ULN2003A
High-Voltage, High-Current Darlington Transistor Arrays

ULN2003A
配有ULN2003A的驅動板,方便接駁步進馬達28BYJ-48

ULN2003A內含7組NPN Darlington pairs(common emitter通常接地),每組最高輸出電流可達500mA。Darlington pair只需細小的輸入電流訊號(接5V約1mA),即可驅動輸出接腳。每組Darlington pair還包括續流二極體(flyback diode)(common cathode通常接電源),可應付電感性負載(inductive loads)如線圈、繼電器和馬達之類的開關,非常方便。輸入腳內置2.7kΩ電阻,可直接接到TTL輸出,即可直接接駁到Arduino Mega的輸出腳。

ULN2003A output pin voltage drop
驅動半個線圈VCE(sat)約有0.9V
電流=(5-0.9)V/21Ω=195mA

Arduino程式

Arduino有個Library Stepper Built-in by Arduino v1.1.3.
請留意這個Library並不適合用來驅動配搭ULN2003A驅動板的28BYJ-48步進馬達套裝。當你嘗試使用這Library控制28BYJ-48步進馬達,你會發現步進馬達只會向一個方向轉,不能反向旋轉。

#include 
// 2048 full steps
const int stepsPerRevolution = 2048;
// initialize the stepper library on pins
Stepper myStepper(stepsPerRevolution, 28, 26, 24, 22);
void setup() {
  // set the speed well below the maximum speed (rpm):
  myStepper.setSpeed(2);
  // initialize the serial port:
  Serial.begin(115200);
}
void loop() {
  // step in one direction
  Serial.println("forward");
  myStepper.step(stepsPerRevolution/4);
  delay(2000);
  // step in the other direction
  Serial.println("backward");
  myStepper.step(-stepsPerRevolution/4);
  delay(2000);
}

用Arduino內置stepper library不能反向旋轉28BYJ-48步進馬達

原因是這個library的驅動步驟並不配合ULN2003A驅動板的接線和28BYJ-48步進馬達的設計。C:\Program Files (x86)\Arduino\libraries\Stepper\src\stepper.h對4線步進馬達的編碼如下:

The sequence of control signals for 4 control wires is as follows:
Step C0 C1 C2 C3
   1  1  0  1  0
   2  0  1  1  0
   3  0  1  0  1
   4  1  0  0  1

這個次序既不是28BYJ-48步進馬達的full step,也不是half step。能巧合轉動已是很好的了。

配合28BYJ-48步進馬達的full step control signals

Steps Per Revolution = 2048
Step C0 C1 C2 C3
  1  0  0  0  1
  2  0  0  1  0
  3  0  1  0  0
  4  1  0  0  0

配合28BYJ-48步進馬達的half step control signals

Steps Per Revolution = 4096
Step C0 C1 C2 C3
  1  0  0  0  1
  2  0  0  1  1
  3  0  0  1  0
  4  0  1  1  0
  5  0  1  0  0
  6  1  1  0  0
  7  1  0  0  0
  8  1  0  0  1

8次half steps向前和8次half steps向後的示範,8次half steps主軸轉動8/64圈=45度

welcome

 Album 

米Teen唔鐘意玩現成品,喜歡由零件開始砌。99次失敗唔係問題,最緊要係有1次成功!

米Teen總部設在聖公會白約翰會督中學506室,在午膳後和放學後集會。有興趣參與的同學,請與會長或導師聯絡。

米Teen專頁

506室內 2020-11-04 21:43:57
溫度 26℃ 濕度 95%
街景 2020-11-04 21:41:52
街景
5樓室外 2020-11-04 21:43:43
溫度 22℃ 濕度 95%
街景 2020-11-04 21:34:34
街景
 ⇧