☛ 功能说明

利用 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();
}