写了一个arduino控制28byj48步进电机的程序。
主要用于下面这种五线四相步进电机:
代码:
#include <Stepper.h>
// 这里设置步进电机旋转一圈是多少步
#define STEPS1 100
#define STEPS2 100
#define STEPS3 100
//定义限位开关引脚
//swit1为齿条触碰的限位开关
#define swit1 14
//swit2为升降平台触碰的限位开关
#define swit2 15
//设置步进电机的步数和引脚(就是注意点2里面说的驱动板上IN1~IN4连接的四个数字口)。
//引脚要互换,电机A
Stepper stepper1(STEPS1, 2, 3, 4, 5);
//引脚要互换,电机B
Stepper stepper2(STEPS2, 6, 7, 8, 9);
//引脚要互换,电机C
Stepper stepper3(STEPS3, 10, 11, 12, 13);
//限位开关判断按钮,如果未触发,返回true,如果触发,返回false
bool swit1_jc(){
if(digitalRead(swit1)==HIGH)
{
delay(3);
if(digitalRead(swit1)==HIGH)
{
Serial.println("swit 1 on");
return true;
}
else
return false;
}
return false;
}
bool swit2_jc(){
if(digitalRead(swit2)==HIGH)
{
delay(3);
if(digitalRead(swit2)==HIGH)
{
Serial.println("swit 2 on");
return true;
}
else
return false;
}
return false;
}
void setup()
{
// 初始化串口,用于调试输出信息
Serial.begin(9600);
for(int i=2;i<=13;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
pinMode(swit1,INPUT);
pinMode(swit2,INPUT);
// 设置电机的转速:每分钟为90转
stepper1.setSpeed(90);
stepper2.setSpeed(90);
stepper3.setSpeed(90);
//齿条复位回去,首先把X放到B
while(!(swit2_jc()))
{
stepper2.step(1);
stepper3.step(-1);
delay(10);
}
//步进电机A复位,C跑到最底层
while(!(swit1_jc()))
{
stepper1.step(-1);
delay(10);
}
Serial.println("Init successful!");
}
void loop()
{
//电机A正转2048步,使得电机C跑到跟B一个平面
Serial.println("step 1");
stepper1.step(2048);
delay(500);
Serial.println("step 2");
//电机BC同时旋转,把齿条移出来放到C上
for(int i=0;i<=2048;i++)
{
stepper2.step(-1);
stepper3.step(1);
delay(10);
}
delay(500);
Serial.println("step 3");
//C跑到顶层
stepper1.step(2048);
//在顶层停留3秒
delay(3000);
//把C回来
stepper1.step(-2048);
Serial.println("step 4");
//齿条复位回去,首先把X送回B
while(!(swit2_jc()))
{
stepper2.step(-1);
stepper3.step(1);
delay(10);
}
Serial.println("step 5");
//步进电机A复位,回去
while(!(swit1_jc()))
{
stepper1.step(-1);
delay(10);
}
delay(500);
}