AccelStepper 是一款功能强大,简单易用的控制步进电机的第三方库。 目前零知开源内置的stepper库只能控制一台步进电机,如果您需要控制两台及以上的的步进电机,那么AccelStepper库是一个非常好的选择。同时在使用零知开源官方stepper库时,开发板在控制步进电机的过程中是无法进行其它工作的。在这一点上,使用AccelStepper库可以在控制步进电机的同时完成其它工作。
我是一个开发者,但却是一个电子小白,再做任何实验之前,都想要了解每一个元件的原理以及工作模式,如果不了解工作原理,只会使用,那将会有很大的限制,因此,再讲解之前,我要好好说说步进电机到底是如何工作的!
先说什么是“4相永磁式”的概念,28BYJ-48 的内部结构示意图如下所示。先看里圈,它上面有6个齿,分别标注为0~5,这个叫做转子,顾名思义,它是要转动的,转子的每个齿上都带有永久的磁性,是一块永磁体,这就是“永磁式”的概念。再看外圈,这个就是定子,它是保持不动的,实际上它是跟电机的外壳固定在一起的,它上面有8个齿,而每个齿上都缠上了一个线圈绕组,正对着的2个齿上的绕组又是串联在一起的,也就是说正对着的2个绕组总是会同时导通或关断的,如此就形成了4相,在图中分别标注为 A-B-C-D,这就是“4相”的概念。
28BYJ-48步进电机内部拆解图
回头看一下电机参数表中的减速比这个参数吧——1:64,转子转64圈,最终输出轴才会转一圈,也就是需要64×64=4096个节拍输出轴才转过一圈。4096个节拍转动一圈,那么一个节拍转动的角度——步进角度就是360/4096,看一下表中的步进角度参数5.625/64,算一下就知道这两个值是相等的,一切都已吻合了。 通俗来讲,输出轴要想转一圈,转子理论上要转64圈才可以,关于步进电机就讲到这里,详细请大家自己百度!!!
电脑,windows系统
零知开发板
micro-usb线
28BYJ-48步进电机一个
步进电机驱动板一个
面包板一个+若干跳线
setMaxSpeed -设置步进电机最大运行速度
setAcceleration -设置步进电机加速度
setSpeed -设置步进电机运行速度
targetPosition -获取步进电机运行目标位置
currentPosition -获取步进电机运行当前位置
setCurrentPosition -复位步进电机初始位置
move – 设置步进电机运动的相对目标位置
moveTo -设置步进电机运动的绝对目标位置
run -步进电机运行(先加速后减速模式)
runSpeed -步进电机运行(匀速模式)
runToNewPosition – 电机运行到用户指定位置值,目标位置为绝对位置。此函数将“block”程序运行。即电机没有到达目标位置前,Arduino将不会继续执行后续程序内容。这一点很像Arduino官方Stepper库中的step函数。
更多函数请自行查看源码或打开英文官方网站查阅:官网
简单示例如下:
/*
零知主板通过AccelStepper库控制28BYJ-48步进电机测试程序
本示例程序旨在演示如何通过AccelStepper库控制两个28BYJ-48步进电机。
*/
//本示例程序使用AccelStepper库
#include "AccelStepper.h"
// 电机步进方式定义
#define FULLSTEP 4 //全步进参数
#define HALFSTEP 8 //半步进参数
// 定义步进电机引脚
#define motor1Pin1 8 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in1
#define motor1Pin2 9 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in2
#define motor1Pin3 10 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in3
#define motor1Pin4 11 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in4
#define motor2Pin1 4 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in1
#define motor2Pin2 5 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in2
#define motor2Pin3 6 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in3
#define motor2Pin4 7 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in4
// 定义两个步进电机对象
// 1号电机设置为半步进运行,2号电机设置为全步进运行
AccelStepper stepper1(HALFSTEP, motor1Pin1, motor1Pin3, motor1Pin2, motor1Pin4);
AccelStepper stepper2(FULLSTEP, motor2Pin1, motor2Pin3, motor2Pin2, motor2Pin4);
void setup() {
stepper1.setMaxSpeed(500.0); // 1号电机最大速度500
stepper1.setAcceleration(50.0); // 1号电机加速度50.0
stepper2.setMaxSpeed(500.0); // 2号电机最大速度500
stepper2.setAcceleration(50.0); // 2号电机加速度50.0
}
void loop() {
if ( stepper1.currentPosition() == 0 && stepper2.currentPosition() == 0 ){
// 1号电机转动半周
stepper1.moveTo(2048);
// 2号电机转动一周
stepper2.moveTo(2048);
} else if ( stepper1.currentPosition() == 2048 && stepper2.currentPosition() == 2048 ){
// 1号电机转动半周
stepper1.moveTo(0);
// 2号电机转动一周
stepper2.moveTo(0);
}
stepper1.run(); // 1号电机运行
stepper2.run(); // 2号电机运行
}
AccellStepper库是从Arduino移植过来的,可通过零知开发工具直接导入使用,亲测可用! 下载链接如下: AccelStepper-1.58.0.zip(点击下载)