步进电机控制

作者: iotboy | 来源:发表于2017-01-08 22:18 被阅读375次

一、工具

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中文社区

电工学习网

相关文章

  • 步进电机与伺服电机有什么相同与不同的地方

    步进电机与伺服电机都是通过控制驱动电流来控制。所以1:步进电机和伺服电机都属于脉冲控制驱动型电机。步进电机和伺服电...

  • 2020-03-22/步进电机与蜂鸣器

    步进电机电机一般有两种:驱动电机:直流电机控制电机:步进电机步进电机由转子和定子构成: 4拍步骤:1.起始闭合b,...

  • 2017-11-22

    今天我们学习了伺服电机和步进电机,步进电机和伺服电机的区别在于:1、控制精度不同。步进电机的相数和拍数越多,它的精...

  • 步进电机控制

    一、工具 1、Arduino UNO 2、ULN2003步进电机驱动板 3、步进电机 二、参数(数据来自七星虫官网...

  • 【arduino实验记录23】步进电机

    Arduino入门教程14(步进电机):Arduino Uno R3+ULN2003驱动 实现步进电机正反转控制 的教程

  • 3.12 嵌入式

    今天学习了步进电机的控制,上午老师讲解了步进电机的工作原理和程序思路,完成编写程序控制IO口,通过改变高低电平实现...

  • Arduino基础入门篇27—步进电机驱动库的使用

    本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度。 Stepper库是官方提供的驱动库,...

  • 2019-03-30

    快速了解L297/1 描述 L297/1步进电机控制器IC为微机控制应用中的两相双极和四相单极步进电机生成...

  • 2017.11.22学习总结

    今天学习了电机,伺服电机和步进电机,伺服电机是随机的转,有反馈,可以转任意角度。步进电机分为单极步进电机和双极步...

  • 步进电机的后期维护

    步进电机作为一种数字式执行元件,在运动控制系统中得到广泛的应用。许多用户朋友在使用步进电机的时候,发现电机工作时有...

网友评论

    本文标题:步进电机控制

    本文链接:https://www.haomeiwen.com/subject/nkqcbttx.html