步进电机每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角度输入的脉冲数成正比,转速与脉冲频率成正比。它的驱动方式也比普通的有刷直流电机复杂。
本节我们就来讲讲步进电机最基础的驱动方式。
1)步进电机的内部结构
先简单介绍一下主要的两种步进电机:单极性和双极性。
如下图所示,左边是单极性电机;右边是双极性电机。单极性电机线圈内的电流只有一个方向,双极性电机线圈内的电流是双向的:
而相数,则是内部线圈的组数;一般的步进电机都可以看作是两相电机变化而来的。
本文我们使用最简单的五线四相制的电机(28BYJ-48),驱动方法也都是以它来讲的,其他种类的大同小异。就是如下图这种步进电机,以及驱动板:
它内部的接线关系如下图所示,正极是公共的,其他四个端口各对应一组线圈的负极:
驱动板的原理图如下,就是一个nln2003的达林顿管驱动器(忽略右下角的灯,基本毫无用处⊙﹏⊙b汗),IN1~IN4处输入高电平,对应的OUT1~OUT4会输出低电平:
2)步进电机的驱动方法
最基本的方法有3种,单4拍法、双4拍法、单双8拍法。
a)单4拍法驱动
驱动过程如下图所示,4个步骤一个周期,每个时刻只有一相通电:
先给A相通电,其他相断电,则转子的对应极被吸引到A相处,如步骤1;
后续依次给B、C、D相通电,则转子会转到B、C、D处,如步骤2、3、4;
最后再给A相通电,其他相断电,转子又回到A处;周而复始,使得转子不断旋转。
各相的导通过程如下图所示:
这种方法每次都只有一相通电,所以称为单4拍法。
b)双4拍法驱动
驱动过程如下图所示,也是4个步骤一个周期,不同的是每个时刻都有相邻的两相通电:
先给A相、B相通电,其他相断电,则转子的对应极被吸引到A、B相中间处,如步骤1;
后续依次给BC、CD、DA相通电,如步骤2、3、4;
最后再给A、B相通电,其他相断电,转子又回到AB相之间;周而复始,使得转子不断旋转。
双4拍法每个时刻会有两组线圈导通,所以电机的输出力矩比单4拍法更大。
各相的导通过程如下图所示:
c)单双8拍法驱动
驱动过程如下图所示,8个步骤一个周期:
这种方法类似于单4拍和双4拍的组合。
先给A相通电,其他相断电,转子在A处;
再给A、B相通电,其他相断电,则转子来到AB之间;
然后给B相通电,其他相断电,转子来到B处;
再给B、C相通电,其他相断电,转子来到BC之间;
之后类似,一共8个步骤可以完成一个周期的运动。
8拍法驱动时,转子的位置比4拍法多两个中间态,所以转动时的位置控制更加精确一些,但是由于它有时是一相通电,有时是两相通电,所以在不同位置的力矩是不同的。
各相的导通过程如下图所示:
3)使用stm32编程驱动电机
先看连接方式,使用PA0、PA1、PA2、PA3驱动A、B、C、D四相。PA0~3连接到驱动板的IN1~IN4;驱动板使用5V供电。
经过上一节了解了上述三种驱动方法后,就很容易写出驱动代码了。
如下是单4拍驱动的主要代码:
定义两个常量数组,F_Rotation存正向旋转的各相导通值,B_Rotation存反向旋转的值;
主循环中,每隔一个周期,去改变接通的相,4个拍一循环,就能实现电机转动了。
双四拍只要将定义的数组值更改一下就可以实现。
如下是8拍驱动的代码,原理是一样的,就不多解释了:
4)注意事项
对于确定的驱动方式,步进电机每拍转过的角度是相同的,所以,如果想要改变转速,只要改变每拍的延时就可以了,也就是改变周期。
但是要注意,不能超过电机参数要求,如我们使用的这个电机(28BYJ-48)的参数:
最大空载牵出频率>900pps,最大空载牵入频率>500pps。
也就是说空载转动时,最快的驱动拍频率最好不要超过900Hz;空载启动时,最快的驱动拍频率最好不要超过500Hz,因为启动时初始转速从零开始,驱动拍太快的话会失步,可能无法转动起来。所以程序里也设计成了500Hz(2ms延时)一拍。
一般情况下,系统最好设计成,启动时慢转速,之后逐渐加快到需要的转速。