步进电机是一种在输入脉冲信号时,转子会按照一定角度或步长前进的电机。转子输出的角度与输入的脉冲数成正比,转速与脉冲频率成正比。与普通的有刷直流电机相比,步进电机的驱动方式更为复杂。
本节将介绍步进电机最基础的驱动方式。
1)步进电机的内部结构
步进电机主要有两种类型:单极性和双极性。
以下图为例,左侧为单极性电机,右侧为双极性电机。单极性电机的线圈内电流方向只有一个,而双极性电机的线圈内电流可正可负:
(图片无法深度伪原创,请直接参考原文。)
在这两种类型中,分别有两个线圈(A和B)协同工作以产生旋转。通过适当的电流顺序和频率输入到线圈,可以实现步进电机的转动。线圈中电流的变化会产生磁场,从而影响转子的位置和运动。
以上是对步进电机的内部结构的简要介绍。接下来,我们将讨论步进电机的驱动方式。
而相数,则是内部线圈的组数;一般的步进电机都可以看作是两相电机变化而来的。
本文我们使用最简单的五线四相制的电机(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延时)一拍。
一般情况下,系统最好设计成,启动时慢转速,之后逐渐加快到需要的转速。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !