简介

电机可划分为驱动类电机和控制类电机。直流电机属于驱动类电机,这种电机是将电能转换成机械能,主要应用在电钻、小车轮子、电风扇、洗衣机等设备上。步进电机属于控制类电机,是一种无刷直流电动机,它是将脉冲信号转换成一个转动角度的电机,它将一整圈的旋转动作分解成多个步骤来执行。电机会逐个步骤移动,且每个步骤的位移大小都是相同的。这样一来,我们就可以让电机以精确的角度转动到特定的位置,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,主要应用在自动化仪表、机器人、自动生产流水线等设备。
在这里插入图片描述

步进电机分类

步进电机可以分为反应式,永磁式和混合式三种,目前反应式的步进电机效率低发热大从而被淘汰了,混合式因为结合了反应式和永磁式的优点从而有力矩大,动态性能好,精度高但是结构复杂而一般用于工业方面,本文主要介绍永磁式步进电机28BYJ48。

命名 说明
28 步进电机最大有效外径28mm
B 表示步进电机
Y 代表永磁式
J 代表减速型
48 表示四相八拍

在这里插入图片描述

步进电机内部结构示意图

在这里插入图片描述

图中中间有6个齿,分别标号为0-5,也就是步进电机的转子,其中转子的每个齿都是带有永久的磁性,也就是所谓的永磁体,外圈有八个定子,他们分别缠上了一个线圈绕组,随后两个相对的齿上的绕组又是串联在一起,也就是他们可以导通或者关断,导通一个相后由右手螺旋定则可以产生一个电磁体,从而由磁场改变定子的转向。

工作原理

上图中,首先给B相通电此时由右手螺旋定则可知上下两个定子此时可形成两个磁极,从而对中间转子起到一个上下两个力的吸引作用,此时可保持一个平衡转子0和3,此时再断开B相,导通C相,这个时候C相的两个定子会对转子14产生一个吸引力从而维持平衡,由此可以推出档A相导通时此时转子0和3在A相的两个定子之间维持平衡状态,此时转子转了八分之一,转一圈就需要8*4 =32个节拍。此时为4个节拍8次与电机名字不吻合,于是有另外一种更优性能的方法,在给B相和C相通电中间加一个节拍,也就是B相不断开的同时加上C相,此时由平行四边形法则可以得知在C相和B相中间有一个中间里也就是在CB之间存在一个吸引力从而让转子1逆时针旋转一定角度,此时转一圈需要8 *8=64个节拍。关于32个节拍时一个节拍转动角度为360/32=11.25°,64个节拍转动角度为360/64=5.625°。此时更加提升了转动的精度。不过,该电机的输出轴是通过64:1的齿轮传动比来驱动的。也就是说,当电机内部旋转64圈时,位于电机外部的输出轴才会旋转一圈。因此,要让输出轴完成一次完整旋转,电机需要移动64×64=4096步。这样一来,其精度则为360º/4096步,即每步约0.09º。

逆时针转动时的励磁顺序为下图:
在这里插入图片描述
参数图:
图中5.625即为64个节拍一圈所算角度

ULN2003五线四相步进电机驱动板

ULN2003 是一款高耐压、大电流的达林顿晶体管阵列驱动芯片,它的核心功能就是充当一个“功率放大器”——可以用小信号去控制需要较大电流和电压的负载。它内部集成了7组独立的达林顿管(一种高增益的三极管组合),每一路都能提供高达500mA的灌电流(电流从负载流向芯片)并承受50V的电压-1-2-9。这使得像单片机这样的微控制器(其I/O口通常只能提供几毫安的电流),可以通过它来驱动继电器、电机等大功率器件。内部集成有续流二极管(钳位二极管)。当驱动像继电器线圈、电机绕组这类感性负载时,在关断瞬间会产生反向感应电压。这个二极管能为感应电流提供通路,从而保护前级的控制电路和驱动芯片不被损坏。它是一个反相驱动器,意味着当输入端为高电平时,对应的输出端会导通(相当于对地接通,即输出低电平);反之,输入低电平时,输出关断-4-5。在设计电路时需要记住这一点。
在这里插入图片描述
在这里插入图片描述
插上跳线帽,步进电机的供电引脚VM和 ULN2003芯片的VCC共一个电源VCC

ESP32与ULN2003、28BYJ48步进电机接线

在这里插入图片描述

ESP32 ULN2003
5V +
GND -
19 IN1
18 IN2
5 IN3
17 IN4

Arduino驱动代码

安装AccelStepper库
在这里插入图片描述

#include <AccelStepper.h>

const int stepsPerRevolution = 2048;  // change this to fit the number of steps per revolution

// ULN2003 Motor Driver Pins
#define IN1 5
#define IN2 4
#define IN3 14
#define IN4 12

// initialize the stepper library
AccelStepper stepper(AccelStepper::HALF4WIRE, IN1, IN3, IN2, IN4);

void setup() {
  // initialize the serial port
  Serial.begin(115200);
  
  // set the speed and acceleration
  stepper.setMaxSpeed(500);
  stepper.setAcceleration(100);
  // set target position
  stepper.moveTo(stepsPerRevolution);
}

void loop() {
  // check current stepper motor position to invert direction
  if (stepper.distanceToGo() == 0){
    stepper.moveTo(-stepper.currentPosition());
    Serial.println("Changing direction");
  }
  // move the stepper motor (one step at a time)
  stepper.run();
}

此例程实现了让步进电机逐步加速旋正转一圈快速停下后,紧接着也逐步加速反转一圈快速停下,如此循环下去。

总结

本文介绍了28BYJ48步进电机的内部原理、ULN2003驱动模块的特点。简化了外部驱动电路连接,最后用ESP32开发板驱动步进电机实现正反转。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐