步进电机控制原理及细分控制
步进电机控制原理及细分控制
步进电机是一种将电脉冲信号转换为角位移或线位移的执行元件。每接收到一个脉冲信号,步进电机就会按照设定的方向转动一个固定的角度。本文将详细介绍步进电机的控制原理及细分控制技术。
概要
步进电机(Step Motor):一种将电脉冲信号转换为角位移或线位移的执行元件。每接收到一个脉冲信号,步进电机就会按照设定的方向转动一个固定的角度。给一步动一步,所以称之为步进电机。
下面以最简单的28BYJ-48 – 5V步进电机为例介绍步进电机的控制原理及细分控制。
步进电机结构
这种步进电机一共有5根线,公共端红色为两个绕组的中间抽头相连并引出,2、4为同一绕组,1、3为同一绕组。
根据接线方式和相数可大致分为两种:5线4相单极性和4线双极性。
4线双极性相对5线4相单极性就是没有将中间抽头引出。
步进电机控制逻辑
所有的电机都是有转子和定子区分,一般转子为永磁体,定子为绕组。那么如何让电机旋转呢,对定子绕组通电,电生磁,绕组上有NS极,同性相斥异性相吸就会去吸引或者排斥转子,使得转子转动。即产生定子磁场去吸引转子磁场。
所以为了使步进电机旋转,我们只需要产生定子磁场。AA-和BB-为步进电机的两个定子绕组,NS为转子磁极。
通过对ABA-B-按顺序通电,就会在坐标轴上形成磁场吸引中间磁极旋转。
根据对AA-、BB-的通电顺序我们可以将步进电机分为以下控制方式
- 单4拍控制
每次只选择A、B-、A-、B其中一相通电。
双4拍控制
每次对两相通电,AB-、B-A-、A-B、BA。单双8拍控制
将双4拍和单4拍结合起来就是单双8拍控制
A、AB-、B-、B-A-、A-、A-B、B、BA
另外,将控制的相序反过来就可以使电机反向旋转。
步进电机细分控制
通过上述步进电机的控制逻辑,不难看出其实8拍就算是一种最基本的细分控制。同样是旋转一个步进角,4拍控制只需要控制4下,8拍控制就需要控制8下。所以步进电机的基础控制可以简单分为以下三种。
全步进控制 – 4拍
特点:每次驱动一个相位,电机按固定步距角旋转。
优点:控制简单,扭矩较大。
缺点:振动和噪音较大,低速时可能不平稳。半步进控制-- 8拍
特点:交替驱动一个或两个相位,步距角减半。
优点:步距角更小,运行更平稳。
缺点:扭矩略低,控制稍复杂。微步进控制-- 16拍、32拍等
特点:通过细分电流,实现更小的步距角。
优点:运行非常平稳,振动和噪音小。
缺点:控制复杂,扭矩进一步降低。
微步进控制-16拍
那么如何实现步进电机的16拍控制呢,如上所说,电机的旋转都是根据定子的磁场。只需要我们在控制时对定子产生的磁场形状做进一步细分就能实现微步控制。像4拍控制,一个步距角内定子磁场只分了4下,每次都旋转1/4电角度(可以简单理解成每次旋转360/4=90度)。8拍控制,每次都选择1/8电角度(可以简单理解成每次旋转360/8=45度)。所以16步控制只需要想办法将定子磁场合成矢量每次变化22.5度就行。
为了使得合成力矩指向特定方向,就需要使用PWM调制,16拍细分PWM输出duty如下:
以drduino uno 单片机为例,16拍代码如下:
16步细分正转///
void forward16(){
analogWrite(IN1,0); //A //PWM输出函数:0~255对应0~100%
analogWrite(IN2,0); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,255); //B-
delay(fast_speed); //ms延时
analogWrite(IN1,85); //A //85=255/3 33.3%
analogWrite(IN2,0); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,255); //B-
delay(fast_speed);
analogWrite(IN1,170); //A //170=255*2/3 66.7%
analogWrite(IN2,0); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,170); //B-
delay(fast_speed);
analogWrite(IN1,255); //A
analogWrite(IN2,0); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,85); //B-
delay(fast_speed);
analogWrite(IN1,255); //A
analogWrite(IN2,0); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,255); //A
analogWrite(IN2,0); //A-
analogWrite(IN3,85); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,170); //A
analogWrite(IN2,0); //A-
analogWrite(IN3,170); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,85); //A
analogWrite(IN2,0); //A-
analogWrite(IN3,255); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,0); //A-
analogWrite(IN3,255); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,85); //A-
analogWrite(IN3,255); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,170); //A-
analogWrite(IN3,170); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,255); //A-
analogWrite(IN3,85); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,255); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,0); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,255); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,85); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,170); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,170); //B-
delay(fast_speed);
analogWrite(IN1,0); //A
analogWrite(IN2,85); //A-
analogWrite(IN3,0); //B
analogWrite(IN4,255); //B-
delay(fast_speed);
}
更进一步细分32拍,64拍的原理和16拍原理一致,就不多介绍。虽然细分控制会使得步进电机运行平稳,震动和噪音显著降低,但是过多的细分会带来扭矩的降低,需要注意。
小结
步进电机的细分无非就是对定子磁场的细分,合成多个矢量使得磁场平稳。