步进电机控制

一、工具

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

电工学习网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

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