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