步进电机控制与驱动详解
(网络配图 请勿当真)
1. 概述
在日常应用中,我们常接触到多种类型的进电机电机,其中步进电机、进电机无刷直流电机以及有刷直流电机是进电机最为常见的。这几种电机尽管结构和功能各异,进电机但其工作原理相似,进电机均是进电机通过电流产生磁场来驱动内部的转子旋转。这也是进电机为什么某些电机驱动芯片能够兼容驱动步进电机与直流电机的原因。本文将深入探讨步进电机的进电机概念、驱动方式及定时器的进电机设置。如有疑问欢迎随时讨论。进电机
2. 所需电子元件
本项目所需的进电机主要电子元件包括:
· Arduino 控制单元
· A4988 电机驱动芯片
· NEMA 17HS16-2004S1 步进电机
· 合适的电源
以下是相应的电路图(摘自Pololu A4988):
所搭建电路的外观如下:
3. 步进电机与驱动技术
3.1 资料分析
首先,需要深入研究步进电机及其驱动的进电机技术文档(datasheet)。
3.1.1 步进电机工作原理
以第一张图为基础,进电机简述步进电机的进电机工作机制:引脚2A与2B构成一条导线的两端,而1A与1B又是一条导线的两端。透过对这两条导线的缠绕,电流通入时每条导线能产生相应的磁场。磁场方向的变化遵循洛伦兹法则,与电流方向和绕线方向密切相关。这种连续变化的磁场实现了对转子的周期性吸引,使其产生转动。更多信息可进一步查阅相关资料。
接下来的图示为NEMA 17HS16-2004S1的datasheet,其中的额定电压为2V,额定电流为每相2A。这里的“相”是指前文提到的2A/2B或1A/1B导线。当在2A和2B、或1A和1B端施加2V时,就会产生2A的电流流动,依据欧姆定律,导线的电阻为1Ω(datasheet上标明Resistance/Phase为1Ω)。
因此,我们可以认为通过交替施加2V电压于导线2A/2B和1A/1B,可以使步进电机转动。然而,需要注意的是,这样做可能无法提供足够的转速和扭矩。因为根据法拉第电磁感应定律,除了电压产生的电流外,还会由于电磁感应而产生相反方向的电流。初期时由于反向电流的存在,实际电流远低于额定值。如果电流不足,磁场的生成无法有效推动转子。为此,我们需要增加施加在导线端的电压,以抵消反向电流,电机驱动便是这样一种手段;通常电压可以提高到额定电压的10倍,但需要控制电流,以免损坏电机。后文将对此进行详细探讨。
3.1.2 步进电机驱动特性
市场上有多种步进电机驱动芯片可供选择,除了使用的A4988外,还有A3988、DRV8871等。这些驱动的工作原理基本相似,均是对电机的每个相施加高于额定电压数倍的电压,并控制最大电流,以此被称为“切换驱动”(chopper driver)。如图所示,若电流超出上限I,驱动将停止供电,因磁场的存在,电流不会立即归零,而是逐渐减小(时间常数=LR)。当电流低于设定上限时,驱动重新供电。通过这样的方式,实现了对电机每个相的高电压供给,同时控制了电流。根据电机的datasheet,需确保每个相的电流不超过2A。
接下来查看A4988的datasheet,需了解Arduino如何控制驱动器,使步进电机工作。下图展示了相关连接方式:
STEP引脚需输入脉冲信号(最上方的RESET信号似乎标识错误,因其不属于正常工作状态)。每个STEP脉冲的上升沿对应Phase1或Phase2的状态改变,每次上升沿仅一个相的方向改变。例如,第二次上升沿中,Phase 1电流仍为70.71%,而Phase 2电流则由-70.71%变为+70.71%,正负号表示电流方向,与步进电机的机械结构有关,转动一般是分阶段进行的:0度到90度,再到180度。要加快电机的转速,需要缩短每个脉冲宽度,但每个脉冲具有最小脉冲宽度限制;若在转子未到设定位置时产生下一个脉冲,将造成机械响应不足。Phase1和Phase2的电流组合可以有如下一些情况:(+70.71%, +70.71%), (+70.71%, -70.71%), (-70.71%, -70.71%), (-70.71%, +70.71%);分别代表转子的旋转位置,从某种组合过渡到下一个组合,转子随之旋转。
循此思路,我们需向驱动器发送PWM信号,使其产生适配的电流,控制电机运作。同时,还需设定最大电流上限,结合电机的数据手册,每个相的最大电流不可超过2A。基于datasheet得出约等于的公式:Imax = Vref / (8 * Rs)。
A4988的电路图展示如下,其中Rcs为68mΩ,Vref需要通过一个可调电阻来保证不超过1.088V。具体调节方法可参考相关资料,实现电压调节。
4. 硬件定时器的调控
接下来探讨Arduino如何产生PWM脉冲。硬件定时器是嵌入式系统中的重要模块,许多功能基于定时器的操作,操作系统便是其中一例。Arduino所使用的Atmel328P芯片配备三组定时器,其中包含两个8位定时器以及一个16位定时器。我选择了8位的TIMER2。欲了解定时器功能及寄存器,请参考Atmel328P数据手册。我将重点介绍TIMER2的不同计数模式,包括TCCR2A内的WGM21和WGM20,以及TCCR2B内的WGM22。通过TIMER2可以控制两个GPIO产生PWM输出,分别是OC2A和OC2B。
在正常工作模式下,8位计数寄存器将从0计数到255,之后重置为0重新计数。我设置计数器为正常模式,每62.5ns计数一次。在每次比较匹配事件时,OC2A和OC2B引脚改变状态,OCR2A = 64,OCR2B = 192,因此当计数器计数到64时,OC2A引脚翻转,而计数到192时,OC2B引脚翻转。
期望生成的波形如下图所示,展示了OC2A和OC2B引脚的电压变化。测量点A到测量点B的变化时间(32us)即可捕捉波形的起伏。
在PWM相位修正模式中,计数方式为先从0计数到255再从255复归,这种模式允许脉冲宽度的灵活控制。波形变化如图所示,对于OCR2A = OCR2B = 32,一个引脚在compare match时高电平,另一个在最高值时低电平。测量周期的计算显示出合理的波形生成过程。
在CTC模式下,与正常模式不同,计数范围是固定的,直到OCRA的值为止,其周期可以动态调整。这一模式适合生成固定的50%占空比的波形,通过改变OCRA的值,可以实现动态变化。
在快速PWM模式中,计数从0到255,相似性体现在计数途径和状态复位。当计数器清零后,通过configure match信号调控OC2A与OC2B的电平,生成稳定的PWM信号波形,其周期变动较为简单和灵活。
5. 使用PWM驱动电机
到此为止,我们已掌握如何进行硬件连接、最大电流设定和Atmel328P的PWM设置。我选择使用Timer2的快速PWM模式,以实现周期可调的PWM信号,这使得电机在起步时可以逐渐加速,并在停止时亦能甜美地减速至全静止,从而提升扭矩及稳定性。
整体控制步进电机的代码可以在GitHub上下载,具体链接如下:
有效建议与应对措施
1、当调试步进电机时,请确保连接稳定,避免因电气接触不良导致的误操作或故障。
2、在施加电压时,不要超过电机的额定范围,以免影响电机寿命,谨慎选择电源。
3、定期查看组件的Datasheet,关注工作电流和状态变化,以确保电机在最佳工况下运行。