1.步进电机图片
2.步进电机介绍
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。虽然步进电机应用广泛,但它并不像普通的直流和交流电机那样在常规状态下使用,它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用.因此.用好步进电机也非易事,它涉及机械、电机、电子及计算机等许多专业知识。
3.步进电机分类
(1)永磁式(PM)。一般为二相,转矩和体积较小,步距角一般为7.5°或15°。
(2)反应式(VR)。一般为三相,可实现大转矩输出.步距角一般为1.5°,但噪声和振动都很大。在欧美等发达国家20世纪80年代已经淘汰。
(3)混合式(HB)。指混合了永磁式和反应式的优点。它又分为二相和五相,二相步距角一般为180°,而五相步距角一般为0.72°。这种步进电机的应用最为广泛。
4.技术指标
(1)步进电机的静态指标
①相数—电机内部的线圈组数。目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同。一般二相电机的步距角为0.9°/1.8°,三相为0.75°/1.5°、五相为0.36°/0.72°。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求.如果使用细分驱动器,则“相数”将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。
②步距角—表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这个步距角可称为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。
③拍数—完成一个磁场周期性变化所需脉冲数或导电状态.或指电机转过一个步距角所需脉冲数。以四相电机为例,有四相四拍运行方式,即AB-BC-CD-DA-AB:四相八拍运行方式,即A-AB-B-BC-C-CD-D-DA-A
④定位转矩—电机在不通电状态下,转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成).
⑥保持转矩—步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成了衡量步进电机最重要参数之一。比如,当人们说2N·m的步进电机时,在没有特殊说明的情况下,是指保持转矩为2N·m的步进电机。
(2)步进电机的动态指标
①步距角精度—步进电机每转过一个步距角的实际值与理论值的误差,用百分比表示:误差/步距角X100%。不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。
②失步—电机运转时运转的步数不等于理论上的步数,称为失步。
③失调角—转子齿轴线偏移定子齿轴线的角度.电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。
最大空载起动频率—电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。
最大空载运行频率—电机在某种驱动形式、电压及额定电流下,电机不带负载的最高转速频率。
运行矩频特性—电机在某种测试条件下,测得运行中输出力矩与频率关系的曲线称为运行矩频特性。它是电机诸多动态曲线中最重要的,也是电机选择的根本依据,如图所示。
电机一但选定,电机的静力矩确定,而动态力矩却不然.电机的动态力矩取决于电机运行时的平均电流(而非静态电流),平均电流越大,电机输出力矩越大.即电机的频率特性越硬。
其中.曲线3电流最大或电压最高;曲线I电流最小或电压最低,曲线与负载的交点为负载的最大速度点。要使平均电流大,尽可能提高驱动电压,或采用小电感大电流的电机。
④电机的共振点—步进电机均有固定的共振区域,其共振区一般在50r/min-80r/min或在180r/min左右。电机驱动电压越高,电机电流越大,负载越轻,电机体积越小。则共振区向上偏移,反之亦然。为使电机输出电矩大、不失步且整个系统的噪声降低,一般工作点均应偏移共振区较多。因此,在使用步进电机时应避开此共振区。
5.步进电机工作原理
步进电机是一种将电脉冲转换成相应角位移或线位移的电磁机械装置。它具有快速启、停能力,在电机的负荷不超过它能提供的动态转矩时,可以通过输入脉冲来控制它在一瞬间的启动或停止。步进电机的步距角和转速只和输入的脉冲频率有关,和环境温度、气压、振动无关,也不受电网电压的波动和负载变化的影响。因此,步进电机多应用在需要精确定位的场合。
(1)工作原理
步进电机有三线式、五线式和六线式,但其控制方式均相同,都要以脉冲信号电流来驱动.假设每旋转一圈需要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电机前进1.8°。其旋转角度与脉冲的个数成正比。步进电动机的正、反转由励磁脉冲产生的顺序来控制。六线式四相步进电机是比较常见的,它的控制等效电路如下图所示。它有4条励磁信号引线A,/A,B,/B 通过控制这4条引线上励磁脉冲产生的时刻,即可控制步进电机的转动.每出现一个脉冲信号,步进电机只走一步。因此,只要依序不断送出脉冲信号,步进电机就能实现连续转动。
(2)励磁方式
步进电机的励磁方式分为全步励磁和半步励磁两种。其中全步励磁又有一相励磁和二相励磁之分;半步励磁又称一二相励磁。假设每旋转一圈需要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电动机前进1.8°。简要介绍如下。
①一相励磁—在每一瞬间,步进电机只有一个线圈导通.每送一个励磁信号,步进电机旋转1.8,这是三种励磁方式中最简单的一种。
其特点是:精确度好、消耗电力小,但输出转矩最小,振动较大。如果以该方式控制步进电机正转,对应的励磁顺序如下表所示。若励磁信号反向传送,则步进电机反转。表中的1和0表示送给电机的高电平和低电平。
②二相励磁—在每一瞬间,步进电动机有两个线圈同时导通。每送一个励磁信号,步进电机旋转1.8。
其特点是:输出转矩大,振动小,因而成为目前使用最多的励磁方式。如果以该方式控制步进电机正转,对应的励磁顺序见下表。若励磁信号反向传送,则步进电机反转。
③一二相励磁—为一相励磁与二相励磁交替导通的方式。每送一个励磁信号,步进电机旋转0.9。
其特点是:分辨率高,运转平滑,故应用也很广泛。如果以该方式控制步进电机正转,对应的励磁顺序见下表。若励磁信号反向传送,则步进电机反转。
6.步进电机的驱动
步进电机的驱动可以选用专用的电机驱动模块,如L298, FF5754等,这类驱动模块接口简单,操作方便,它们既可驱动步进电机,也可驱动直流电机。除此之外,还可利用三极管自己搭建驭动电路。不过这样会非常麻烦,可靠性也会降低。另外,还有一种方法就是使用达林顿驱动器ULN2003,该芯片单片最多可一次驱动八线步进电机,当然如果只有四线或六线制的也是没有问题的。
首先我们看一下电路原理图
本实验采用四线双极性步进电机,该电机与TC1117连接如上图所示,M_IN为单片机控制口,M_OUT为电机接入口,其中M_IN分别控制步进电机的相序A,B.
TC1117芯片工作逻辑真值表:
开发板上使用的 4线双极性步进电机,其有两相A,B,每个绕组有两根线,A+和A-B+和 B-,运行方式可以是A+ —A-—B+—B-,如果想换个方向运行,可以是 A- —A+—B—B+。
步进电机的四个引脚A+、A-、B+、B-分别连接到OUA、OUTB、OUTC、OUTD四个引脚
实际物理连接图如下:
示例程序为:
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit MOTOA = P1^0; //A+引脚 sbit MOTOB = P1^1; //A-引脚 sbit MOTOC = P1^2; //B+引脚 sbit MOTOD = P1^3; //B-引脚 #define SPEED 60000 void delay(u16 i) //延时函数 { while(i --); } void main() { P1 = 0x00; //电机处于待机状态 while(1) { MOTOA = 1; //A+状态 MOTOB = 0; MOTOC = 1; MOTOD = 1; delay(SPEED); //延时 MOTOA = 0; //A-状态 MOTOB = 1; MOTOC = 1; MOTOD = 1; delay(SPEED); //延时 MOTOA = 1; //B+状态 MOTOB = 1; MOTOC = 1; MOTOD = 0; delay(SPEED); //延时 MOTOA = 1; //B-状态 MOTOB = 1; MOTOC = 0; MOTOD = 1; delay(SPEED); //延时 } }
上例程序驱动步进电机的方向为: A+ —A-—B+—B-,
如果想换个方向运行,也就是 A- —A+—B—B+,可以使用以下程序:
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit MOTOA = P1^0; //A+引脚 sbit MOTOB = P1^1; //A-引脚 sbit MOTOC = P1^2; //B+引脚 sbit MOTOD = P1^3; //B-引脚 #define SPEED 60000 void delay(u16 i) //延时函数 { while(i --); } void main() { P1 = 0x00; //电机处于待机状态 while(1) { MOTOA = 0; //A-状态 MOTOB = 1; MOTOC = 1; MOTOD = 1; delay(SPEED); //延时 MOTOA = 1; //A+状态 MOTOB = 0; MOTOC = 1; MOTOD = 1; delay(SPEED); //延时 MOTOA = 1; //B-状态 MOTOB = 1; MOTOC = 0; MOTOD = 1; delay(SPEED); //延时 MOTOA = 1; //B+状态 MOTOB = 1; MOTOC = 1; MOTOD = 0; delay(SPEED); //延时 } }
如果想两个方向轮流运行,可以将上面两个程序结合在一块使用。