☛ 功能說明
利用 Arduino UNO 開發板控制步進馬達 28BYJ-48 轉動方向。步進馬達的轉動方向可以由 step() 函式來控制,當 steps 參數爲負值時,馬達正轉,反之當 steps 爲正值時,馬達反轉。本實習先使步進馬達正轉 50 步後,再使步進馬達反轉 50 步,然後步進馬達停止轉動。
步進馬達 28BYJ-48 介紹
28BYJ-48 是一款 5 線單極步進電機,運行電壓爲 5V。它非常適合需要精確定位的項目,例如打開和關閉通風口。
由於電機不使用接觸電刷,所以運動比較精確,相當可靠。
儘管尺寸較小,但該電機在 15 RPM 左右的速度下,可提供 34.3 mN.m 的不錯扭矩。即使在靜止狀態下,它也能提供良好的扭矩,並在電機通電時,保持扭矩。
唯一的缺點是它有點耗電,即使靜止也會消耗能量。
引腳排列
28BYJ-48 步進電機有 5 根線,引腳排列如下:
28BYJ-48 有兩個線圈,每個線圈都有個中心抽頭。這兩個中心抽頭在內部連接並作爲第五根線 ( 紅線 ) 引出。
線圈的一端和中心抽頭一起形成一相。因此,28BYJ-48 共有 4 相。
紅線始終拉高,因此當另一根線拉低時,該相通電。
僅當各相按稱爲步進順序的邏輯順序通電時,步進電機纔會旋轉。
齒輪減速比
根據數據表,28BYJ-48 電機以全步模式運行時,每步對應 11.25° 的旋轉,這意味着每轉有 32 步 ( 360° / 11.25° = 32 )。
此外,該電機還具有 1/64 減速齒輪組 ( 實際上是 1/63.68395 ,但 1/64 對於大多數用途來說已經足夠近似 )。
這意味着實際上有 2038 步 ( 每轉 32 × 63.68395 步 = 2037.8864 大約 2038 步 )。
步進電機 28BYJ-48 的步進角爲 5.625°,即一個脈衝信號轉 5.625°,64 個信號轉 360°。減速比:1/64,即 電機殼裏的電機轉 64 圈,電機殼外邊的部分轉 1 圈。
能量消耗
28BYJ-48 通常消耗約 240 mA 的電流。
由於電機消耗大量電力,因此最好直接從外部 5V 電源供電,而不是從 Arduino 開發板上供電。
值得注意的是,即使在靜止狀態下,電機也會消耗功率以保持其位置。
技術規格
FT5754M 接腳圖
☛ 使用材料
Arduino UNO R3 開發板 × 1、FT5754M 達林頓電晶體 × 1、步進馬達 28BYJ-48 × 1。
☛ 電路圖及麪包板接線圖
☛ 程式碼
#include <Stepper.h> //使用 Stepper.h 函式庫 #define STEPS 2038 //步進馬達轉動一圈步進數 Stepper stepper(STEPS, 2, 3, 4, 5); //建立 Steeper 資料形態的物件 int motoStep = 63.68395; //步進馬達 28BYJ-48 每一步步進值 int i = 1; //步進馬達動作索引值 void setup() { stepper.setSpeed(10); //設定步進馬達的轉速爲 10 RPM } void loop() { switch(i) { case 1:stepper.step(-50*motoStep); //馬達正轉 50 步 i++; delay(500); //延遲 500ms break; case 2:stepper.step(50*motoStep); //馬達反轉 50 步 i++; delay(500); //延遲 500ms break; case 3:stepper.step(0*motoStep); //馬達停止轉動 break; } }
☛ 練習
⑴ 設計 Arduino 程式。控制步進馬達 28BYJ-48 正轉一圈,再反轉一圈,然後馬達停止轉動。
#include <Stepper.h> //使用 Stepper.h 函式庫 #define STEPS 2038 //步進馬達轉動一圈步進數 Stepper stepper(STEPS, 2, 3, 4, 5); //建立 Steeper 資料形態的物件 int motoStep = 63.68395; //步進馬達 28BYJ-48 每一步步進值 int i = 1; //步進馬達動作索引值 void setup() { stepper.setSpeed(10); //设定步进马达的转速为 10 RPM } void loop() { switch(i) { case 1:stepper.step(-32*motoStep); //馬達正轉一圈 i++; delay(500); //延遲 500ms break; case 2:stepper.step(32*motoStep); //馬達反轉一圈 i++; delay(500); //延遲 500ms break; case 3:stepper.step(0*motoStep); //馬達停止轉動 break; } }
⑵ 設計 Arduino 程式。控制步進馬達 28BYJ-48 連續正轉。
#include <Stepper.h> //使用 Stepper.h 函式庫 #define STEPS 2038 //步進馬達轉動一圈步進數 Stepper stepper(STEPS, 2, 3, 4, 5); //建立 Steeper 資料形態的物件 int motoStep = 63.68395; //步進馬達 28BYJ-48 每一步步進值 void setup() { stepper.setSpeed(10); //設定步進馬達的轉速爲 10 RPM } void loop() { stepper.step(-32*motoStep); //馬達正轉 }