|
步进电机
Jan 28, 2021 1:36:15 GMT
Post by 邱老师 on Jan 28, 2021 1:36:15 GMT
云笔记链接
以下是比较重要的代码,没有用库,用高低电平,把电机一步一步地驱动,了解这个程序,就了解了步进电机的原理。 void setup()
{
for(int i=8;i<12;i++) //用一个循环,把8到11四个连接步进电机的数字口的工作方式设置为输出
{
pinMode(i,OUTPUT);
}
}
void loop()
{
for(int j=0;j<200;j++) //执行多少步就执行多少次循环,这个循环执行的是正转函数
{
zheng();
}
delay(1000);
for(int j=0;j<200;j++) ////执行多少步就执行多少次循环,这个循环执行的是逆转函数
{
ni();
}
}
void zheng(){
for(int i=8;i<12;i++) //正转函数,利用循环程序,把四根连接步进电机的信号口,依次写高电平,延迟5毫秒,再写低电平,每一次高低电平的变化,都能驱动电机转过一
//定的角度,连续进行,电机就转动起来了。
{
digitalWrite(i,1);
delay(500);
digitalWrite(i,0);
}
}
void ni(){
for(int i=11;i>7;i--) //逆转函数,利用循环程序,把四根连接步进电机的信号口,按11到8的顺序,依次写高电平,延迟5毫秒,再写低电平,每一次高低电平的变化,都能驱动电机转过一
//定的角度,连续进行,电机就逆向转动起来了。
{
digitalWrite(i,1);
delay(500);
digitalWrite(i,0);
}
}
|
|
|
步进电机
Feb 12, 2021 5:33:02 GMT
Post by 邱老师 on Feb 12, 2021 5:33:02 GMT
步进电机进阶学习,让两个步进电机同步运行,利用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号电机运行
}
|
|