在我们的项目中,经常使用到低电压小功率的步进电机,此类步进电机若采用驱动器控制不断成本高也过于复杂,我们可以直接使用场效应管或者达林顿管来实现对其的驱动。在本篇中,我们就来讨论一下基于ULN2003A达林顿管实现对步进电机的驱动。
1、功能概述
我们先来了解一下基本的功能。ULN2003A达林顿管为7个输出通道,当导通时该通道连接到负端,所以非常适合于驱动4相5线步进电机。
1.1、ULN2003A达林顿管
ULN2003A 器件是高电压大电流达林顿晶体管阵列。每 款器件均由7个NPN 达林顿对组成,这些达林顿对具有高压输出,带有用于开关感性负载的共阴极钳位二极管。 单个达林顿对的集电极电流额定值为500mA。将达林 顿对并联可以提供更高的电流。应用包括继电器驱动器、电锤驱动器、灯驱动器、显示驱动器(LED 和气体放电)、线路驱动器和逻辑缓冲器。其基本结构图如下:

1.2、步进电机基本原理
在我们的测试中,我们使用4相5线步进电机。所谓4相5线步进电机就是该电机具有4组线圈5根连接线,实际上可能不只5根线,但公共端不管抽出多少根线,实际状态与1根无异。
我们一般将这4组线圈记为A相、B相、C相和D相,当然,也可以用别的称呼,只要便于标记分别就好。4相5线步进电机一般采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。一般电机都会提供控制表,具体如下所示:

结合ULN2003A结构和4相5线步进电机的驱动要求,我们可以设计ULN2003A达林顿管驱动4相5线步进电机的驱动电路。

1.3、步进电机驱动模式
步进电机的驱动虽然按照电机的驱动表就可以实现,但实际的驱动方式有多种,常见的如单波驱动方式、全步驱动方式、半步驱动方式以及微步驱动方式等。这里我们可以看一看前面三种比较简单的驱动方式。
单波驱动方式又称之为单四拍工作方式。此种方式按固定次序依次驱动每一个线圈以达到使电机转动的目的。其波形如下:

全步驱动方式又称之为双四拍工作方式。此种方式按固定次序依次驱动两组线圈以达到使电机转动的目的。其波形如下:

半步驱动方式又称之为八拍工作方式。此种模式实际上是前两种模式的组合,以固定的次序依次激励一组或两组线圈以达到驱动电机的目的。其波形如下:

上述波形即是在单波驱动方式、全步驱动方式以及半步驱动方式下使用示波器抓取的A相和C相的波形图,基本可以展示这几种驱动工作方式波形特征。
2、驱动设计与实现
我们已经了解了ULN2003A驱动4相5线步进电机的基本工作情况,接下来我们就需要据此来实现ULN2003A驱动4相5线步进电机驱动程序的设计与实现。
2.1、对象定义
我们依然是基于对象来实现相关的操作。所以我们首先要定义对象,出于适用性考虑,我们要定义对象的类型并将具体的对象实例化,接下来我们就来抽象对象类型和实例化对象的操作。
2.1.1、对象的抽象
对于一个对象最主要包括属性与方法两方面内容,所以我们先来考虑驱动一个步进电机对象具有哪些属性和方法,并抽象出较为通用的步进电机的对象类型。
首先,我们来考虑对象的属性情况。对电机的操作包括启停命令、方向命令、运行状态、实际运转方向、节拍数、周期等,这些信息控制电机的运转并表征其具体工作状态,所以我们将其作为对象的属性。驱动模式和运行模式用以配置电机的具体工作方式,所以我们也将其作为对象的属性,以完成对象的配置。
其次我们再来考虑对象的方法问题。对相位的具体操作与具体的硬件平台有关,根据对应的引脚定义相应的相位引脚。这依赖于具体的硬件和软件操作平台,所以我们将其定义为对象的方法。为了控制操作时序,我们需要延时处理,而延时操作函数同样依赖于具体的软硬件平台,所以我们也将其定义为对象的方法,通过回调函数的方式来实现。
根据上述对对象属性和方法的分析,我们可以定义步进电机对象的类型如下:
/*定义步进电机对象类型*/
typedef struct StepperObject {
uint8_t startStop; //启动停止命令
uint8_t runStatus; //运行状态
uint8_t directSet; //方向设定
uint8_t directRun; //当前方向
uint8_t beat; //当前节拍
uint8_t period; //速度控制周期
DriveModeType driveMode; //驱动模式
StepperModeType runMode; //运行模式
void

本文介绍了如何利用ULN2003A达林顿管驱动4相5线步进电机,涉及功能概述、驱动设计、对象操作及实例应用。重点讲解了单波、全步和半步驱动方式,并给出了对象模型和驱动程序实现细节。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



