步进电机控制

一、工具

1、Arduino UNO

图片来自网络

2、ULN2003步进电机驱动板


图片来自网络

3、步进电机


步进电机

二、参数(数据来自七星虫官网):

直径:28mm

电压:5V

步进角度:5.625 x 1/16

减速比:1/16

注:5线4相可以用普通uln2003芯片驱动,也可以接成2相使用,可以配套开发板使用。

三、接线

1、步进电机可以直接插入驱动板接口


电机接线

2、驱动板正极、负极、IN1、IN2、IN3、IN4分别接Arduino VCC、GND、引脚8、9、10、11,然后通过专门的数据线将Arduino与电脑连在一起

三、程序功能

1、通过调用步进电机库文件控制步进电机正反转

2、代码

//初始化

#include<Stepper.h>

const int stepsPerRevolution = 200;  //定义200步/转

Stepper myStepper(stepsPerRevolution, 8,9,10,11);

//定义引脚为8,9,10,11(可根据实际情况自行改变)

void setup() {

myStepper.setSpeed(60);// 设置速度为60转/分钟

Serial.begin(9600);//初始化串口

}

//循环

void loop() {

Serial.println("clockwise");//顺时针旋转

myStepper.step(stepsPerRevolution);//控制步进电机开始旋转

delay(500);//延时500ms

Serial.println("counterclockwise");//逆时针旋转

myStepper.step(-stepsPerRevolution);//stepsPerRevolution取反

delay(500);

}

四、扩展

身为一名技术宅,岂能简简单单就满足了,下面开始介绍步进电机另一种玩法

1、功能:通过串口控制步进电机正反转

2、代码

//初始化

int val;//定义变量

int Pin0 = 8;//定义数字接口

int Pin1 = 9;

int Pin2 =10;

int Pin3 = 11;

int t=1;

void setup() {

pinMode(Pin0, OUTPUT);//设置输出

pinMode(Pin1, OUTPUT);

pinMode(Pin2, OUTPUT);

pinMode(Pin3, OUTPUT);

Serial.begin(9600); // 初始化串口

}

//循环

void loop() {

char val;

while(1)

{

val = Serial.read();//读取串口

if(val!=-1)

{

switch(val)

{

case 'Z'://即如果在串口输入Z,步进电机正转,后期介绍手机通过蓝牙控制Arduino我会详细介绍

zheng();

delay(50);

break;

case 'F'://即如果在串口输入F,步进电机反转

fan();

delay(50);

break;

case 'T'://即如果在串口输入T,步进电机停止转动

ting();

delay(50);

break;

}

}

}}

void ting()

{//定义停止函数

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, LOW);

Serial.println("stop");//显示“stop”字符串

}

void fan()

{

//定义反转函数

for(int i=100;i>0;i--)//通过循环控制旋转步数,“i”值可以自定义

{

digitalWrite(Pin0, HIGH);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, HIGH);

digitalWrite(Pin1, HIGH);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, HIGH);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, HIGH);

digitalWrite(Pin2, HIGH);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, HIGH);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, HIGH);

digitalWrite(Pin3, HIGH);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, HIGH);

delay(t);

digitalWrite(Pin0, HIGH);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, HIGH);

delay(t);

}

Serial.println("counterclockwise");//显示“counterclockwise”字符串

}

void zheng()

{

//定义正转函数

for(int i=100;i>0;i--)

{

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, HIGH);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, HIGH);

digitalWrite(Pin3, HIGH);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, HIGH);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, HIGH);

digitalWrite(Pin2, HIGH);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, LOW);

digitalWrite(Pin1, HIGH);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, HIGH);

digitalWrite(Pin1, HIGH);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, HIGH);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, LOW);

delay(t);

digitalWrite(Pin0, HIGH);

digitalWrite(Pin1, LOW);

digitalWrite(Pin2, LOW);

digitalWrite(Pin3, HIGH);

delay(t);

}

Serial.println("clockwise");//显示“clockwise”字符串

}

五、步进电机实际应用

1、用于一些有定位要求的场合,例如:线切割的工作台拖动,植毛机工作台(毛孔定位)等

2、广泛应用于ATM机、喷绘机、刻字机等设备

六、总结

通过前后代码对比你会发现,实现同样的功能,前面的代码要比后面的代码简洁的多,从这里我们可以看出Arduino库的强大之处,明天请跟随我一起走进Arduino库的世界,揭开其神秘的面纱。


参考来源:

1.Arduino官方网站

2.Arduino中文社区

电工学习网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Arduino Due有14个数字I/O,6个模拟I/O,一个复位开关,一个ICSP下载口,7-12v电源供电。 ...
    麦牛2013阅读 3,389评论 0 8
  • The Arduino Yún is an Arduino board unlike any other. Whi...
    justin_pan阅读 659评论 0 2
  • 时隔多日,我又来更新文章了。在大致系统地学习完Arduino后,终于腾出时间来。这一次是简单介绍超声波工作原理和示...
    之玖阅读 8,337评论 1 5
  • 有时候,美好的心情很容易被别人影响,而我现在要做的是被别人影响的程度降到最低。今天郁闷了一会儿,做了下运动就好了,...
    a3a353c8d9da阅读 185评论 0 0
  • 开始做督导时(开始社协督导班实习和机构内部督导),很多人说不知道自己可以被督导些什么,所以希望督导可以给自己带...
    玲儿2007阅读 618评论 2 1