☛ 功能說明

利用 Arduino UNO 開發板與 AccelStepper 函式庫來控制一個步進馬達 28BYJ-48 轉動。

AccelStepper 函式庫簡介

Arduino 的 Stepper 函式庫非常適合簡單的電機應用。但是,若想控制多個步進馬達,則需要更強大的函式庫。

因此,我們將使用先進的步進電機函式庫 AccelStepper。它在以下方面優於 Stepper 函式庫:

⑴ 它支持加速和減速。

⑵ 支持半步驅動。

⑶ 它同時支持多個步進器,每個步進器上具有獨立的併發步進。

安裝函式庫

AccelStepper 函式庫並不包含在 Arduino IDE 中。因此,必須先安裝它,才能在程序碼中調用該函式庫。安裝該函式庫,請點選 Sketch > Include Library > Manage Libraries … 等待函式庫管理器下載函式庫索引並更新已安裝函式庫列表。

輸入 AccelStepper 來過濾您的搜索,單擊第一個條目,然後選擇安裝。

☛ 使用材料

Arduino UNO R3  開發板 × 1、ULN2003 步進馬達控制模塊 × 1、步進馬達 28BYJ-48 × 1。

☛ 電路圖及麪包板接線圖

☛ 程式碼

#include<AccelStepper.h>                                //調用 AccelStepper.h 函式庫
#define MotoInterfaceType 4                             //定義步進馬達以全步模式啓動 ( 半步模式則設定爲 8 )

AccelStepper myStepper(MotoInterfaceType,2,4,3,5);      //創建 myStepper 物件

void setup()
{
     myStepper.setMaxSpeed(1000.0);                     //設定步進馬達最大速度爲 1000
     myStepper.setAcceleration(50.0);
     myStepper.setSpeed(200);                           //設定步進馬達恆定速度爲 200
     myStepper.moveTo(2038);                            //步進馬達每轉需 2038 步,目標位置設爲 2038
}

void loop()
{
     if(myStepper.distanceToGo()==0)                    //是否到達目標位置?
        myStepper.moveTo(-myStepper.currentPosition()); //將當前位置設爲負值,使步進馬達反向轉動
     myStepper.run();
}

 

☛ 練習

⑴ 利用 Arduino UNO 開發板與 AccelStepper 函式庫來控制二個步進馬達 28BYJ-48 轉動。其中步進馬達 1 以全步模式轉動,步進馬達 2 以半步模式轉動。步進馬達 1 的目標位置爲 2038,步進馬達 2 的目標位置爲 1024。

#include<AccelStepper.h>                                  //調用 AccelStepper.h 函式庫
#define MotoInterfaceType1 4                              //定義步進馬達 1 以全步模式啓動
#define MotoInterfaceType2 8                              //定義步進馬達 2 以半步模式啓動

AccelStepper myStepper1(MotoInterfaceType1,2,4,3,5);      //創建步進馬達 1 物件
AccelStepper myStepper2(MotoInterfaceType2,6,8,7,9);      //創建步進馬達 2 物件

void setup()
{
     myStepper1.setMaxSpeed(1000.0);                      //設定步進馬達 1 最大速度爲 1000
     myStepper1.setAcceleration(50.0);
     myStepper1.setSpeed(200);                            //設定步進馬達 1 恆定速度爲 200
     myStepper1.moveTo(2038);                             //設定步進馬達 1 目標位置設爲 2038

     myStepper2.setMaxSpeed(1000.0);                      //設定步進馬達 2 最大速度爲 1000
     myStepper2.setAcceleration(50.0);
     myStepper2.setSpeed(200);                            //設定步進馬達 2 恆定速度爲 200
     myStepper2.moveTo(1024);                             //設定步進馬達 2 目標位置設爲 1024
}

void loop()
{
     if(myStepper1.distanceToGo()==0)                     //步進馬達 1 是否到達目標位置?
        myStepper1.moveTo(-myStepper1.currentPosition()); //將當前位置設爲負值,使步進馬達 1 反向轉動

     if(myStepper2.distanceToGo()==0)                     //步進馬達 2 是否到達目標位置?
        myStepper2.moveTo(-myStepper2.currentPosition()); //將當前位置設爲負值,使步進馬達 2 反向轉動

     myStepper1.run();
     myStepper2.run();
}