Album
米Teen唔鐘意玩現成品,喜歡由零件開始砌。99次失敗唔係問題,最緊要係有1次成功!
米Teen總部設在聖公會白約翰會督中學506室,在午膳後和放學後集會。有興趣參與的同學,請與會長或導師聯絡。
溫度 26℃ 濕度 95%
街景 2020-11-04 21:41:52
溫度 22℃ 濕度 95%
街景 2020-11-04 21:34:34
步進馬達28BYJ-48拆解研究
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的規格
- Can stack (2 phases)
- Unipolar (center tap per phase)
- Two types: DC 5V/12V (this page shows the 5V type)
- 28mm diameter (24mm diameter for 24BYJ-48)
- Gear reduction ratio (gearbox): 1/64
- Number of poles of stator: upper can (8+8), lower can (8+8)
- Number of poles of rotor: 16
- Step angle: 360/(8x4x2) x 1/64 = 0.087890625 (half step mode)
- DC resistance between the center tap (red line) and an input pin:21Ω
- Output shaft steps/revolution = (8x4x2)x64= 4096 (half step mode)
- Maximum speed = 15-20rpm
減速齒輪reduction gear
齒輪組由馬達的主軸至輸出軸共有5個齒輪。
輸出軸轉速 = 主軸轉速 x 9/32 x 11/22 x 9/27 x 8/24
= 主軸轉速 x 1/64
打開面蓋就可以見到整個減速齒輪組。
共有5個齒輪。
減速64倍
定子stator和轉子rotor
步進馬達28BYJ-48採用can stack的設計。定子由上下兩層線圈加上抓狀的齒組成。
1=轉子rotor
2=上層線圈的軟鐵蓋及上排抓齒
3=下層線圈的軟鐵蓋及下排抓齒
4=上層線圈及下排抓齒
5=下層線圈及上排抓齒
6=(紅線)上下兩層線圈的中心抽頭(center tap)
半個下層線圈的電阻21Ω
全個下層線圈的電阻42Ω
每層線圈有8+8=16個抓狀的齒,兩層共有32個
轉子有16個磁極
圓形的永久磁鐵包圍整個轉子的齒輪
定子線圈通電後產生的磁極
定子線圈通電後產生的磁極
下層線圈的藍線(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驅動器來用。
High-Voltage, High-Current Darlington Transistor Arrays
配有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的輸出腳。
驅動半個線圈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度
Album
米Teen唔鐘意玩現成品,喜歡由零件開始砌。99次失敗唔係問題,最緊要係有1次成功!
米Teen總部設在聖公會白約翰會督中學506室,在午膳後和放學後集會。有興趣參與的同學,請與會長或導師聯絡。
溫度 26℃ 濕度 95%
街景 2020-11-04 21:41:52
溫度 22℃ 濕度 95%
街景 2020-11-04 21:34:34