前言
Arduino的最吸引地方之一就是有丰富的库函数。
对于控制步进电机运动,给出脉冲即可,但是自己从底层写起来也不容易。一般会使用到Stepper库或AccelStepper库,但是库函数对于不同的步进电机有个驱动频率不同,所以一般就简化使用库函数。
一、面包板接线?
二、使用步骤
1.引入控制
代码如下(示例):
#include <SoftwareSerial.h>
//这是软串口通讯arduino和esp8266-Mode连接的库函数
SoftwareSerial youSerial(50, 51);
设置接收信号串口,当然也可以使用默认串口0或1。
这边相对应的可以使用蓝牙等串口通讯模块的使用。
2.驱动电机代码(不使用库)
代码如下(示例):
for(int x = 0; x < (10000000000000000 ); x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
现在电机持续运行。
这边可以外接微触开关进行停止只需添加一个break跳出for循环即可。
这边在for循环下再写一个串口判断和读取,就可以用break轻易的解决步进电机运行到某点截止。
全部代码如下
#include <SoftwareSerial.h>
//这是软串口通讯arduino和esp8266-Mode连接的库函数
SoftwareSerial youSerial(50, 51);
// 定义电机控制用常量
char getstr;
// A4988连接Arduino引脚号
const int dirPin = 2; // 方向引脚
const int stepPin = 3; // 步进引脚
// 电机每圈步数
const int STEPS_PER_REV = 20000;
void setup() {
// Arduino控制A4988步进和方向的引脚为输出模式
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
Serial.begin(9600);
youSerial.begin(9600);
}
void loop() {
if(youSerial.available() > 0)
{
getstr=youSerial.read();
}
switch(getstr){
case 'w':
digitalWrite(dirPin,HIGH);
// 电机快速旋转
for(int x = 0; x < (STEPS_PER_REV ); x++) {
if(youSerial.available() > 0)
{
getstr=youSerial.read();
if(getstr=='A'||getstr=='D')
{break;}
}
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
Serial.println("run");
break;
case 'a':
digitalWrite(dirPin,LOW);
// 电机快速旋转
for(int x = 0; x < (STEPS_PER_REV ); x++) {
if(youSerial.available() > 0)
{
getstr=youSerial.read();
if(getstr=='A'||getstr=='D')
{break;}
}
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
Serial.println("left");
break;
}
}
总结
这个主要是对c语言的理解,我们有些机械学生对for循环的理解不是很深刻,在遇到问题时经常需要搜寻帮助,希望对你有所帮助。