☛ 功能說明
利用 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(); }