YFROBOT创客社区

标题: Arduino入门教程—拓展实验篇十 驱动步进电机 [打印本页]

作者: AllBlue    时间: 2013-8-29 09:57
标题: Arduino入门教程—拓展实验篇十 驱动步进电机
本帖最后由 AllBlue 于 2013-8-29 16:17 编辑

驱动步进电机

步进电机英文为(stepper motor),它是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。它由一组缠绕在电机固定部件--定子齿槽上的线圈驱动的;通常情况下,一根绕成圈状的金属丝叫做螺线管,而在电机中,绕在齿上的金属丝则叫做绕组、线圈、或相。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

下面为我们实验用的步进电机及驱动板,如图:

[attach]531[/attach]

励磁方式分两种:

1、1相励磁方式:即A-B-C-D每相依次通电。当A相通电时,由于NS相吸引的原因,转子上离A相最近的磁极转动到A相位置,然后B相通电,离B相最近的转子磁极转到B相位置,然后C相D相依次通电,这样转子就一步一步的转动起来通过ABCD依次通电就可以实现转子不停的转动。

2、1-2相励磁方式:即通电方式变为了A-AB-B-BC-C-CA,原理和1相励磁方式相同,不同点当AB相通电时转子转动到AB相之间磁拉力最强的地方。

:定子:电机中固定的部分叫做定子,如ABCD 四个磁极。 转子:转动的部分
驱动方式及技术参数:
[attach]524[/attach]
:歩距角为步进电机每次能转动的最小角度,1-2相励磁方式使转子每步转动的角度才是步距角;1相励磁方式转子每步转动的角度除以2才是步距角

我们看下电路实物连接图(其中电位器3个引脚分别接GND、+5V、模拟口A0):
[attach]530[/attach]
实物图中的驱动板引脚连接我们看不清楚,下面我们帮大家列出UNO与驱动板引脚的对应关系表格:
arduino引脚
驱动板引脚
8
In1
9
In3
10
In2
11
In4
+
+5v
-
Gnd
注意UNO引脚9、10和驱动板引脚In3、In2的对应关系!(这是因为官方的库文件写法和我们的驱动方式不一样,有兴趣的可以自己改下官方的库文件)

下面我们来看下官方例程MotorKnob
  1. /*
  2. * MotorKnob
  3. *
  4. * A stepper motor follows the turns of a potentiometer
  5. * (or other sensor) on analog input 0.
  6. *
  7. * http://www.arduino.cc/en/Reference/Stepper
  8. * This example code is in the public domain.
  9. */

  10. #include <Stepper.h>

  11. // change this to the number of steps on your motor
  12. #define STEPS 100

  13. // create an instance of the stepper class, specifying
  14. // the number of steps of the motor and the pins it's
  15. // attached to
  16. Stepper stepper(STEPS, 8, 9, 10, 11);

  17. // the previous reading from the analog input
  18. int previous = 0;

  19. void setup()
  20. {
  21.   // set the speed of the motor to 30 RPMs
  22.   stepper.setSpeed(30);
  23. }

  24. void loop()
  25. {
  26.   // get the sensor value
  27.   int val = analogRead(0);

  28.   // move a number of steps equal to the change in the
  29.   // sensor reading
  30.   stepper.step(val - previous);

  31.   // remember the previous value of the sensor
  32.   previous = val;
  33. }
复制代码

将例程烧写入UNO中后,我们调节电位器,会发现步进电机会随着电位器的调节而转动!

例程中还有3个实验,在这里就不一一介绍了,下面我们介绍下,官方库文件的相关语法。


官方步进电机库文件Stepper:

1、Stepper():创建一个Stepper类型变量
语法

Stepper(steps, pin1, pin2)

Stepper(steps, pin1, pin2, pin3, pin4)

参数

steps:设定步进电机的转一圈的步数

pin1, pin2, pin3, pin4:arduino UNO 的引脚编号(分两线、四线;pin3, pin4为可选)。


2、setSpeed():设定步进电机的转速(每分钟转数)

这个函数不会使电机转动,只是设定转速,当调用step()函数才能转动

语法

Stepper: setSpeed(rpms)

参数

Stepper:一个Stepper类型变量rpms:电机在一分钟内的转数(正数)

3、step() :给电机一个特定的步数使其转动,该速度由最近一次调用的 setSpeed​​() 函数来确定。

(这个函数会产生祖塞 ,也就是说,它会等待,直到电机完成转动并把控制权传递给下一行程序。例如,你对速度进行设置,比如给步进电机设置1 RPM的转速和设置step(100) ,即步进电机以1rpm的转速转100步,此功能将需要整整一分钟来运转。为了更好地控制,保持高速,推荐每一个step()只走几步。 )

语法

Stepper: step(steps)

参数

Stepper:一个Stepper类型变量

steps:电机依据这个步数进行转动,正数为一个方向,负数为反方向(整数)


以上为步进电机的库文件语法,相信几个语法看完,你对上面的程序更加了解,对步进电机的使用更加熟练。

这是官网教程地址:
http://arduino.cc/en/Tutorial/MotorKnob


下面为一下资料,大家下载了解:
驱动板原理图:

[attach]523[/attach]

驱动板用芯片ULN2003英文手册:

[attach]521[/attach]

驱动板用芯片ULN2003中文手册:

[attach]522[/attach]

步进电机原理讲述:

[attach]525[/attach]




作者: active    时间: 2013-9-11 13:33
顶下,想用步进电机拼个自平衡车。
作者: AllBlue    时间: 2013-9-12 09:19
active 发表于 2013-9-11 13:33
顶下,想用步进电机拼个自平衡车。

祝你成功···········做好可以展示出来
作者: yuailong    时间: 2013-9-21 00:53
顶下,想用步进电机拼个自平衡车
作者: devwei095    时间: 2018-6-13 17:43

学习学习,很好的资料
作者: tiantianyouyou    时间: 2019-5-2 08:05
不错不错,学习一下
作者: tiantianyouyou    时间: 2019-5-2 08:06
步进电机的使用更加熟练
作者: tiantianyouyou    时间: 2019-5-4 20:23
学习学习,很好的资料
作者: tiantianyouyou    时间: 2019-5-4 20:31
好资料啊,谢谢分享
作者: lucq7896    时间: 2019-7-17 06:24
正要做这个实验
作者: qqoo    时间: 2021-9-27 20:55
找了好久,终于在这里找到了资料,谢谢楼主
作者: UNO    时间: 2021-9-28 08:16
qqoo 发表于 2021-9-27 20:55
找了好久,终于在这里找到了资料,谢谢楼主

可以收藏我们论坛,方便后续找资料




欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) Powered by Discuz! X3.1