ESP32驱动ULN2003步进电机驱动板带动28BYJ48五线四相步进电机
ESP32驱动ULN2003步进电机驱动板带动28BYJ48五线四相步进电机简介步进电机分类步进电机内部结构示意图工作原理ULN2003五线四相步进电机驱动板ESP32与ULN2003、28BYJ48步进电机接线Arduino驱动代码总结简介电机可划分为驱动类电机和控制类电机。直流电机属于驱动类电机这种电机是将电能转换成机械能主要应用在电钻、小车轮子、电风扇、洗衣机等设备上。步进电机属于控制类电机是一种无刷直流电动机它是将脉冲信号转换成一个转动角度的电机它将一整圈的旋转动作分解成多个步骤来执行。电机会逐个步骤移动且每个步骤的位移大小都是相同的。这样一来我们就可以让电机以精确的角度转动到特定的位置在非超载的情况下电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数主要应用在自动化仪表、机器人、自动生产流水线等设备。步进电机分类步进电机可以分为反应式永磁式和混合式三种目前反应式的步进电机效率低发热大从而被淘汰了混合式因为结合了反应式和永磁式的优点从而有力矩大动态性能好精度高但是结构复杂而一般用于工业方面本文主要介绍永磁式步进电机28BYJ48。命名说明28步进电机最大有效外径28mmB表示步进电机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 *864个节拍。关于32个节拍时一个节拍转动角度为360/3211.25°64个节拍转动角度为360/645.625°。此时更加提升了转动的精度。不过该电机的输出轴是通过64:1的齿轮传动比来驱动的。也就是说当电机内部旋转64圈时位于电机外部的输出轴才会旋转一圈。因此要让输出轴完成一次完整旋转电机需要移动64×644096步。这样一来其精度则为360º/4096步即每步约0.09º。逆时针转动时的励磁顺序为下图参数图ULN2003五线四相步进电机驱动板ULN2003 是一款高耐压、大电流的达林顿晶体管阵列驱动芯片它的核心功能就是充当一个“功率放大器”——可以用小信号去控制需要较大电流和电压的负载。它内部集成了7组独立的达林顿管一种高增益的三极管组合每一路都能提供高达500mA的灌电流电流从负载流向芯片并承受50V的电压-1-2-9。这使得像单片机这样的微控制器其I/O口通常只能提供几毫安的电流可以通过它来驱动继电器、电机等大功率器件。内部集成有续流二极管钳位二极管。当驱动像继电器线圈、电机绕组这类感性负载时在关断瞬间会产生反向感应电压。这个二极管能为感应电流提供通路从而保护前级的控制电路和驱动芯片不被损坏。它是一个反相驱动器意味着当输入端为高电平时对应的输出端会导通相当于对地接通即输出低电平反之输入低电平时输出关断-4-5。在设计电路时需要记住这一点。插上跳线帽步进电机的供电引脚VM和 ULN2003芯片的VCC共一个电源VCCESP32与ULN2003、28BYJ48步进电机接线ESP32ULN20035VGND-19IN118IN25IN317IN4Arduino驱动代码安装AccelStepper库#includeAccelStepper.hconstint stepsPerRevolution2048;// change this to fit the number of steps per revolution// ULN2003 Motor Driver Pins#defineIN15#defineIN24#defineIN314#defineIN412// initialize the stepper libraryAccelStepperstepper(AccelStepper::HALF4WIRE,IN1,IN3,IN2,IN4);voidsetup(){// initialize the serial portSerial.begin(115200);// set the speed and accelerationstepper.setMaxSpeed(500);stepper.setAcceleration(100);// set target positionstepper.moveTo(stepsPerRevolution);}voidloop(){// check current stepper motor position to invert directionif(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开发板驱动步进电机实现正反转。