为什么要用步进电机?
步进电机是一种带有许多内齿的无刷DC电机,通过周围的铜线圈磁性锁定在适当的位置。与无刷电机不同,给步进电源供电的电机不旋转。相反,它锁定到给定输入指定的位置,并顺时针或逆时针转动一小步。
虽然这使得步进电机的驱动更加复杂,但它比无刷DC电机有一个主要优势:它们的角位置可以非常精确地指定。例如,如果您希望电机精确旋转270度,使用普通的DC无刷电机(没有某种形式的反馈)几乎是不可能的,但使用步进电机将会很容易。
步进电机需要多个步进脉冲才能到达你想要的位置。另外,步进电机的线圈一直通电,大大增加了保持力矩,但很难强制其旋转。这些优势解释了为什么步进电机通常用于许多应用,包括数控机床和CD/DVD驱动器。
步进电机分为两个阶段:单极和双极。单极电机包含一个连接所有线圈的公共电源,而双极电机有单独的线圈。
本文只介绍单极电机,因为双极电机需要以不同的方式驱动。
由Digikey提供(原理图)
单极性输入和步进
单极电机通常有五条输入线,两对线控制线圈,第五条线连接到为每个线圈提供的公共抽头。
尽管不同电机的线路颜色不同,但本文中使用的连接如下:
下表显示了如何驱动每个输入来旋转电机。向前移动(即从步骤1到2)使电机顺时针旋转,向后移动使电机逆时针旋转。
表1。电机的旋转状态
步进电机所需的电流可能远远超过微控制器的极限,这就是为什么微控制器绝对不能直接连接到电机。电机还可能产生反电动势,可能损坏I/O口,使用箝位二极管是绝对必要的。
然而,用四个分立晶体管驱动步进电机既浪费又麻烦,这就是为什么必须使用ULN2003步进驱动器IC的原因。这个IC包含七个达林顿晶体管,每个都有二极管保护,可以提供500mA,50V的输出(实际上超过了Arduino Uno可以处理的)。
编码步进电机
步进电机的编码步骤可以通过switch语句和一些I/O位来完成,但是有一个更简单的方法:使用内置的步进器库!
虽然Arduino是一个方便简单的平台,但它的库支持使它成为最好的平台之一。市面上的模块都是通过Arduino库兼容的。对于步进电机,我们可以通过使用步进器库轻松控制,无需对每一步都进行编码。
#包括
#定义步骤_PER_REV 513
//创建我们的步进电机对象
步进电机(STEPS_PER_REV,2,3,4,5);
void setup() {
motor . set speed(10);//电机转速为10转/分
}
无效循环()
{
motor.step(步数每转);//顺时针旋转一整圈
motor . step(STEPS _ PER _ REV/2);//顺时针走半圈
motor . step(-STEPS _ PER _ REV);//逆时针旋转一整圈
}
要使用步进电机库,我们必须首先包括步进电机库头:
#包括
下一步(可选但推荐)是定义电机旋转一整圈的步数。本教程使用的电机有32步,以1:16的比例与减速齿轮相连,所以一次旋转的步数是513。
#定义步骤_PER_REV 513
现在我们已经定义了步数,我们需要创建一个步进电机对象。这个对象被初始化为五个变量:每转的步数和连接到步进电机的四个引脚。
步进电机(STEPS_PER_REV,2,3,4,5);
在设置功能中,我们可以定义速度(单位为RPM)并希望电机旋转。对于本例,我们将RPM设置为10。
void setup() {
motor . set speed(10);//电机转速为10转/分
}
主循环包含转动电机所需的代码。正数表示电机前进的次数相等,负数表示电机反方向旋转。
本例中的三行代码展示了如何使用STEPS_PER_RPM使电机旋转一个已知的量。
马达.步进(步数每转);//顺时针旋转一整圈
马达。步骤(STEPS _ PER _ REV/2);//顺时针走半圈
马达。step(-STEPS _ PER _ REV);//逆时针旋转一整圈
标签:电机步骤线圈