☛ 功能說明

利用 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);              //馬達正轉
}