1、 230 第 10章 步进电机控制 10.1 概述 步进电机( stepping motor) ,顾名思义,就是一步一步行进的电机 , 是一种将电脉冲转化为角位移的执行元件 。 当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角) , 它的旋转是以 步进角 一步一步运行的 。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位 的 目的 ;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 对 于 转动方向, 是 沿 顺时针还是 沿 逆时针,则由输入脉冲的 先后顺序 决定 。由此可见,步进电机非常适合 用数字或微型计算机来控制,
2、用单片机控制步进电机自然 就 顺理成章了。 10.2步进电机 10.2.1 步进电机 步进电机 的实物图如图 10-1所示。 图 10-1 步进电机的实物图 10.2.2步进电机的分类 目前 比较常用的步进电机 , 包括 反应式步进电机 ( VR)、 永磁式步进电机 ( PM)、混合式步进电机 ( HB)和单相式步进电机等。永磁式步进电机一般为两相,步进角一般为 7.5度或 15度 ,特点是 输出力矩大,动态性能好,但步距角大。反应式步进电机一般为三相,步进角一般为 1.5度 , 可实现大转矩输出,但噪声和振动都很大。混合式步进电动机综合了反应式、永磁式步进电动机两者的优点,它的步距角小, 输
3、出力矩大 ,动态性能好,是目前性能最高的步进电动机 ,其中 两相步进角一般为 1.8度 。 这种步进电机的应用最为广泛。 10.2.3步进电机的工作原理 在结构方面, 步进电机 与其它类型的电机类似,主要构件依然是定子和转子 ,且定子和转子上有许多细小的齿。 其中,转子是永久性磁铁,定子上绕有励磁线圈。 步进电机的工作原理简言之就是 : 脉冲电流流过 定子上的 励磁线圈后产生的磁场 ,将 转子上 邻近的 相异 磁极 吸引过来, 使转子 绕轴 转动 。 给步进电机 通入 一个脉冲 电流 ,步进电机 就转 动 一步,再 通入 一个脉冲,它会再转 动 一步 ,因此 ,只要依照特定顺序连续不断地给 励
4、磁线圈通入脉冲电流,步进电机就会按照要求连续 不断 地转动起来。步进电机转过的角 位移量 (角度) 与输入的脉冲个数成正比, 通过控制脉冲个数 就 可以控制角位移量。步进电机的 转速是由 脉冲频率控制 的 ,两个 相邻 脉冲 电流之间 的 时间 间隔越短 ,单位时间内 通入 到步进电机的脉冲 电流 个 数就越多,则转子转过的角位移量就越大,也就是角速度越大 , 步进电机就转得越快 。 给 多个 励磁线圈 依次 通电的次序将决定转子转动 的 方向。 10.2.4步进电机的 步进角和励磁 线圈通电 方式 231 1、 步进电机的相线数 依据步进电机定子上励磁线圈的配置不同,步进电机可分为 2 相
5、、 3 相、 4 相、 5相等,比较常见的是 2相和 4相步进电机。 图 10-2是 2相 4线步进电机电路示意图。图中,红绿为 1相,黄蓝为另外 1相。有四根线,所以是 2相 4线。 图 10-3 是 4 相 6 线步进电机电路示意图。 图中, 4 相分别是红、黄、绿 、 蓝 。红白构成 1相, 绿白 构成 1相,黄黑、 蓝 黑 也各构成 1相, 即 4相,外加白和黑两根线,便构成 4相 6线。 图 10-2 2相 4线步进电机电路示意图 图 10-3 4相 6线步进电机电路示意图 2、步进角 若转子上有 N 个齿,则相邻 两个齿之间的距离(齿间距) 为: =360 N;步进角为齿间距 (
6、2 相数)。 对于 4 相 50 齿的步进电机而言,齿间距 =36050=7.2 ; 步进角 =7.2 ( 2 4) =0.9 ,即该步进电机 每 行进一步,转子转过 0.9 。而对于 2 相 50 齿的步进电机而言,步进角 =7.2 ( 2 2) =1.8 ,即该步进电机 每行进一步,转子转过 1.8 。 3、励磁线圈通电方式 对于步进 电机 而言,其励磁线圈的排列顺序 , 以及通入的脉冲电流的次序 , 不仅决定了转子的转动方向,还与步进电机的转动力矩、动态特性 等 紧密相关,所以非常重要。以下以 2相 4线步进电机为例 (步进角 1.8 ) ,说明其励磁线圈通电方式。 1相通电 1 相通电
7、方式是在任意时刻,只有一个励磁线圈通有脉冲电流 , 每通入一个脉冲电流,步进电机转过 1.8 。这种通电方式最简单,且步进精度高,但输出的转动力矩较小,振动较大。 这种通电方式一般 以 四步为一个周期,周而复始 地循环 。表 10-1具体说明了 2相4线步进电机 1相通电方式时 , 各 励磁线圈的 通电次序。 表 10-1 1相通电方式时各励磁线圈的通电次序 如表 10-1所示,从第 1步开始, 再 依次 是 第 2步、第 3步,第 4步, 并 按表中所示 给具体励磁线圈 通入脉冲电流 ( 1代表高电平 , 表示通入脉冲电流; 0代表低电平 ,表示不通入脉冲电流) ,步进电机 转子就转过了 7
8、.2度(假设是 顺时针 )。 如果需要继续顺时针转动,则 又 从第 1步开始 ,即步数依照 1 2 3 4 1 2 的顺序。 如果 要顺时针转一圈,则需要 50次从第 1步到第 4步这样的 循环( 50 7.2=360) 。 如果要逆步数 红( A) 黄( B) 绿( A) 蓝( B) 16进制值 1 1 0 0 0 0x08 2 0 1 0 0 0x04 3 0 0 1 0 0x02 4 0 0 0 1 0x01 232 时针转一圈,同样需要循环 50次,但是通电次序与顺时针转动相反,即 步数依照 4 3 2 1 4 3 的顺序。 2相通电 2 相通电方式是在任意时刻,有两个励磁线圈通有脉冲
9、电流,每通入一个脉冲电流,步进电机转过 1.8 。 这种通电方式下,步进电机的输出力矩大且振动较小,所以这种通电方式被较多使用。 表 10-2具体说明了 2相 4线步进电机在 2相通电方式时 ,各励磁线圈的通电次序。 表 10-2 2相通电方式时各励磁线圈的通电次序 2 相通电方式下的正反转 控制、转动一圈所需循环次数 , 与 1 相通电方式相同。此处不再重 述 。 1-2相通电 1-2相通电方式 , 是 1相通电方式与 2相通电方式交替通电的方式,每通入一个脉冲电流,步进电机转过 0.9 。 这种通电方式下,步进电机的步进角小且振动小,所以在需要精确控制的场合使用较多。表 10-3具体说明了
10、 2相 4线步进电机在 1-2相通电方式时 , 各励磁线圈的通电次序。 其步数是 8步,且转动一圈依旧 需要 50次循环( 0.9 8 50=360)。 表 10-3 1-2相通电方式时各励磁线圈的通电次序 10.2.5步进电机的驱动 由于单片机的输出电流太小,远不能 满足 步进电 机 转动的需要,所以步进电机必须要有驱动电路的驱动,才能正常转动。以下介绍 三 种常用的驱动电路。 1、基于 ULN2803的步进电机驱动电路 对于电流小于 0.5A的步进电机,可以使用基于 ULN2803的驱动电路。 ULN2803芯片简介 ULN2803的 PDIP16封装的实物图如图 10-4所示,其引脚图如
11、图 10-5所示。 步数 红( A) 黄( B) 绿( A) 蓝( B) 16进制值 1 1 1 0 0 0x0C 2 0 1 1 0 0x06 3 0 0 1 1 0x03 4 1 0 0 1 0x09 步数 红( A) 黄( B) 绿( A) 蓝( B) 16进制值 1 1 0 0 0 0x08 2 1 1 0 0 0x0C 3 0 1 0 0 0x04 4 0 1 1 0 0x06 5 0 0 1 0 0x02 6 0 0 1 1 0x03 7 0 0 0 1 0x01 8 1 0 0 1 0x09 233 图 10-4 ULN2803的 PDIP16封装的实物图 图 10-5 ULN2
12、803的 PDIP16封装 引脚 图 从 ULN2803 的 内部结构可见, ULN2803 从本质而言是一个八 路非门,内部集成有续流二极管。 输入引脚有 I1I8,对应的输出引脚为 O1O8, GND接地, COMMON端一般接电源 ,被用作 电机驱动时不用外接 续流二极管 。 为了防止 外加 12V电压经 三极管的 基极进入单片机,一般都采用光耦进行隔离,此处选用的是 4N35 光耦进行隔离。 4N35 的实物图如图 10-6 所示,引脚图如图 10-7所示。 图 10-6 光耦 4N35实物图 图 10-7光耦 4N35引脚 图 基于 ULN2803的步进电机驱动电路图 以 4 相 6
13、 线 步进电机为例 。当单片机 51 的 I/O 管脚输出高电平时,对应的隔离光耦不导通,其集电极输出为高电平,此高电平再经 ULN2803取反后 , 自然呈现低电平,而中间抽头(白和黑) 是 共同连接到 12V电源端 的 , 此时此相励磁 线圈 通电,步进电机转动。相反,当单片机 51的 I/O 管脚输出低电平时,励磁线圈未通电,步进电机不转动。所以,在此条件下,单片机 I/O 口输出高电平可以使步进电机转动。 具体电路图如图 10-8所示。 234 图 10-8 基于 ULN2803的小功率步进电机驱动电路 程序清单如下: #include #define uchar unsigned c
14、har #define uint unsigned int sbit IN1=P23; sbit IN2=P22; sbit IN3=P21; sbit IN4=P20; void delay(void) uint i,j; for(i=1;i #define uchar unsigned char #define uint unsigned int sbit IN1=P23; sbit IN2=P22; sbit IN3=P21; sbit IN4=P20; void delay(void) uint i,j; for(i=1;i #define uchar unsigned char #d
15、efine uint unsigned int sbit IN4=P20; sbit IN3=P21; sbit IN2=P22; sbit IN1=P23; 239 sbit ENA=P24; sbit ENB=P25; void delay(uchar m) uint i,j; for(i=1;i=m;i+) for(j=0;j=150;j+); /* void cw12p(uchar nquan) /1-2相顺时针 uchar n,i; for(n=1;n=nquan;n+) for(i=1;i=50;i+) IN1=1;IN2=0;IN3=0;IN4=0; delay(2); IN1=
16、1;IN2=1;IN3=0;IN4=0; delay(2); IN1=0;IN2=1;IN3=0;IN4=0; delay(2); IN1=0;IN2=1;IN3=1;IN4=0; delay(2); IN1=0;IN2=0;IN3=1;IN4=0; delay(2); IN1=0;IN2=0;IN3=1;IN4=1; delay(2); IN1=0;IN2=0;IN3=0;IN4=1; delay(2); IN1=1;IN2=0;IN3=0;IN4=1; delay(2); /* void ccw12p(uchar nquan) /1-2相逆时针 uchar n,i; for(n=1;n=n
17、quan;n+) for(i=1;i=50;i+) IN1=1;IN2=0;IN3=0;IN4=1; delay(2); IN1=0;IN2=0;IN3=0;IN4=1; delay(2); IN1=0;IN2=0;IN3=1;IN4=1; delay(2); IN1=0;IN2=0;IN3=1;IN4=0; delay(2); IN1=0;IN2=1;IN3=1;IN4=0; delay(2); IN1=0;IN2=1;IN3=0;IN4=0; delay(2); IN1=1;IN2=1;IN3=0;IN4=0; delay(2); IN1=1;IN2=0;IN3=0;IN4=0; delay(2);