极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 239599|回复: 84

arduino学习笔记17 - 步进电机试验

  [复制链接]
发表于 2011-9-5 13:35:17 | 显示全部楼层 |阅读模式
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。你可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时你也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

下面这个就是本次实验使用的步进电机




工业使用的步进电机与本次实验使用的不同,下面图式两种不同款式的工业用步进电机



使用步进电机前一定要仔细查看说明书,确认是四相还是两相,各个线怎样连接,本次实验使用的步进电机是四相的,不同颜色的线定义如下图:



下面是电机的端口结构图,1,3为一组,2,4为一组,5号是共用的VCC。



因本次使用的步进电机功率很小,所以可以直接使用一个ULN2003芯片进行驱动,如果是大功率的步进电机,是需要对应的驱动板的。



ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。可以用来驱动步进电机。

其结构图如下




硬件连接图如下





把代码下载到arduino控制板中看看效果
  1. /*
  2. * 步进电机跟随电位器旋转
  3. * (或者其他传感器)使用0号模拟口输入
  4. * 使用arduino IDE自带的Stepper.h库文件
  5. */

  6. #include <Stepper.h>

  7. // 这里设置步进电机旋转一圈是多少步
  8. #define STEPS 100

  9. // attached to设置步进电机的步数和引脚
  10. Stepper stepper(STEPS, 8, 9, 10, 11);

  11. // 定义变量用来存储历史读数
  12. int previous = 0;

  13. void setup()
  14. {
  15.   // 设置电机每分钟的转速为90步
  16.   stepper.setSpeed(90);
  17. }

  18. void loop()
  19. {
  20.   // 获取传感器读数
  21.   int val = analogRead(0);

  22.   // 移动步数为当前读数减去历史读数
  23.   stepper.step(val - previous);

  24.   // 保存历史读数
  25.   previous = val;
  26. }
复制代码
实验效果如下


附件为ULN2003A说明文档

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2011-11-30 10:00:49 | 显示全部楼层
前几天我也试验了一下,用的是28BYJ-48 Stepper Motor 12V+ULN2003APG
改了改一个代码,现在的效果是电位计控制正反转
  1. /*
  2. This program drives a unipolar or bipolar stepper motor.
  3. The motor is attached to digital pins 8 - 11 of the Arduino.

  4. Created 11 Mar. 2007
  5. Modified 30 Nov. 2009
  6. by Tom Igoe

  7. */
  8. #include <Stepper.h>

  9. const int stepsPerRevolution = 64;  // change this to fit the number of steps per revolution for your motor
  10. // initialize the stepper library on pins 8 through 11:
  11. Stepper myStepper(stepsPerRevolution, 8,9,10,11);   
  12. const int aInPin=A0;
  13. int val;

  14. void setup() {
  15.   // set the speed at 60 rpm:
  16.   myStepper.setSpeed(200);
  17.   // initialize the serial port:
  18.   Serial.begin(9600);
  19. }

  20. void loop() {
  21.   val=analogRead(aInPin);
  22.   val=map(val,0,1023,0,99);
  23.   Serial.println(val);
  24.   // step one revolution  in two direction:
  25.   if(val>50){
  26.     Serial.println("clockwise");
  27.     //原library是整步,整步走的角度是半步走的角度的两倍,半步走的声音比较小,平稳些,启动时最好是半步的走比较稳定
  28.     //022中library修改为半步模式不成功???FUCK
  29.     //四拍运行时步距角为θ=360度/(revolution*4)(俗称整步),八拍运行时步距角为θ=360度/(revolution*8)(俗称半步)
  30.     myStepper.step(stepsPerRevolution/2);//
  31.     delay(500);
  32.   }
  33.   else{
  34.     // step one revolution in the other direction:
  35.     Serial.println("counterclockwise");
  36.     myStepper.step(-stepsPerRevolution/2);
  37.     delay(500);
  38.   }
  39. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2012-1-18 12:25:57 | 显示全部楼层
老师求助!为什么我按您的代码原原本本地敲进去。它始终编译错误,提示“  'Stepper‘ dose not name a type"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-1-18 19:48:30 | 显示全部楼层
陈冬冬 发表于 2012-1-18 12:25
老师求助!为什么我按您的代码原原本本地敲进去。它始终编译错误,提示“  'Stepper‘ dose not name a typ ...

是不是使用的1.0编译器?

使用0022编译器试试看
回复 支持 反对

使用道具 举报

发表于 2012-1-21 13:13:22 | 显示全部楼层
弘毅 发表于 2012-1-18 19:48
是不是使用的1.0编译器?

使用0022编译器试试看

对对~换了0023也是一样  这是什么问题呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-1-21 13:46:45 | 显示全部楼层
陈冬冬 发表于 2012-1-21 13:13
对对~换了0023也是一样  这是什么问题呀

=.=这个。。换0022试试,学习笔记里所有实验。。目前都是0022下编译的,其他版本的编译器还没有测试过。。1.0出问题是公认的,0022和0023有啥区别。。还没研究
回复 支持 反对

使用道具 举报

发表于 2012-1-21 19:44:34 | 显示全部楼层
打开官方自带的stepper.h后发现他的步进形式是
Step C0 C1 C2 C3
     1  1  0  1  0
     2  0  1  1  0
     3  0  1  0  1
     4  1  0  0  1酱紫滴
所以自己改了库,现在是d:\My Documents\My Pictures\230651taa6zr8am22eteoa.jpg
的形式
下载

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-1-21 19:46:37 | 显示全部楼层
形式如之前的楼主给出的图一样
回复 支持 反对

使用道具 举报

发表于 2012-2-10 16:01:20 | 显示全部楼层
这种方式能不能控制几个电机同时以不同速度转动?
回复 支持 反对

使用道具 举报

发表于 2012-4-23 10:58:27 | 显示全部楼层
弘毅老师,为什么我按这个接好后,步进电机嗡嗡响,但是不转呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-23 11:22:31 | 显示全部楼层
keen 发表于 2012-4-23 10:58
弘毅老师,为什么我按这个接好后,步进电机嗡嗡响,但是不转呢?

线序没有接对。。。。这个步进电机生产厂家众多,所以线序不一定和笔记中一样,你把线序换换测试下~~~
回复 支持 反对

使用道具 举报

发表于 2012-4-23 17:34:39 | 显示全部楼层
弘毅 发表于 2012-4-23 11:22
线序没有接对。。。。这个步进电机生产厂家众多,所以线序不一定和笔记中一样,你把线序换换测试下~~~

好的,谢谢弘毅老师
回复 支持 反对

使用道具 举报

发表于 2012-5-2 13:35:08 | 显示全部楼层
请问一下老师,两相四线步进电机用什么芯片驱动好呢???
回复 支持 反对

使用道具 举报

发表于 2012-5-2 16:09:59 | 显示全部楼层
sheldon 发表于 2012-5-2 13:35
请问一下老师,两相四线步进电机用什么芯片驱动好呢???

可以使用最便宜的大约17元的L298N驱动器,缺点是没有细分,而且没有半流控制,电机很容易发热。适合入门了解一下。
进一步可以使用50元左右的TB6560驱动器,带细分和半流,基本应用足够了。
当然还有其他100元以上的选择。
回复 支持 反对

使用道具 举报

发表于 2012-5-3 12:59:53 | 显示全部楼层
MicroCao 发表于 2012-5-2 16:09
可以使用最便宜的大约17元的L298N驱动器,缺点是没有细分,而且没有半流控制,电机很容易发热。适合入门了 ...

谢谢老师
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 20:40 , Processed in 0.051673 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表