电机入门和 L293D 四路半桥驱动器






4.96/5 (41投票s)
学习使用微控制器控制直流电机和步进电机
引言
有很多方法可以驱动小电流电机,那些电流需求在 500mA 或以下的电机,但 L293H 四路半桥驱动器是一款多功能芯片,专为电机设计,可以非常轻松地通过微控制器进行控制,并且可以在[此处]购买。使用这款芯片,我们可以驱动 2 个直流电机或 1 个步进电机,在本教程中我们将学习如何实现这两种功能。完成本练习所需的组件包括一个 ATMega328p 微控制器,用于与 L293D 器件进行接口和控制,但可以使用任何控制器,L293D 器件和一个直流电机。
直流电机

这不是一篇关于电机理论的文章,有很多教程可供参考[1],但对其工作原理的基本理解将有助于我们稍后编程控制它们。大多数爱好者使用的小型直流电机是无刷电机,主要由两部分组成——转子(移动部分)和定子(静止部分),通常有 3 个极,如右侧动画所示。固定的永磁体放置在相对两侧,转子通过以动画所示的方式将电流施加到极的绕组上与磁体相互作用,从而驱动电机。电机的方向由输入电压的极性决定,旋转方向由右手定则定义。[2] 在使用直流电机时,有两个额定电流需要注意。第一个是工作电流,这是电机在正常运行条件下消耗的平均电流。下一个是堵转电流,当你用手指抓住电机轴使其无法转动并施加电源时,可以最好地演示这一点。L293 可以处理 650mA 的连续峰值输出电流,因此无论你选择哪种电机,在最恶劣的条件下也不应超过此值。
在这个练习中,我从一个旧的 CD 驱动器里拆了一个小电机,并且惊讶地发现了关于这个电机的一些数据,因为它的驱动器非常老旧。下面是找到的这个电机的规格,你会注意到,这个电机的堵转电流远低于 L293D 的电流限制,我们完全在工作范围内。

另一个需要注意的因素是,由于电感和惯性,在电机运行时反转方向会导致短暂的电压尖峰,有效地使工作电压加倍,并导致电流上升到接近堵转电流。
一旦电机开始运行,它就会产生电压,类似于移动导线穿过磁场以产生所谓的反电动势。抵消这种现象的方法是在电机的引线上放置一个通用二极管,允许电流单向流动,从而抵消反电动势。但 L293D 芯片独特之处在于它内置了这些二极管,这样我们就少了一个需要担心的东西。
好了,理论讲够了。让我们开始接线并观看它运转。下面的原理图显示了如何将不同组件连接在一起,可以看到,这是一个非常简单的过程,只涉及控制器、驱动芯片和你选择的电机。该芯片需要两种供电电压;一种是标准的 5V 供电,用于驱动芯片逻辑,另一种是电机供电电压,根据你的电机规格,可以从 4.5V 到 36V 不等。在原理图中,只显示了一个电机,但可以使用第二组输入、使能和输出以类似的方式连接另一个电机。

从上面的原理图可以看出,用于驱动电机的端口是 PC0-PC2,其中 PC0 和 PC1 是输入控制引脚,P2 是使能引脚。因此,要驱动电机,我们需要参考以下表格,该表格描述了各种可能的组合。
启用 | In1 | In2 | 结果 |
H | L | H | 电机顺时针转动 |
H | H | L | 电机逆时针转动 |
H | 低电平或高电平 | 低电平或高电平 | 快速停止 |
L | 低电平或高电平 | 低电平或高电平 | 快速停止 |
除了控制电机的方向外,还可以使用 ATMega328p 定时器和脉冲宽度调制(PWM)功能来控制速度,但这超出了本文的范围。值得注意的是,在使用 PWM 驱动电机时,通过 10K 上拉电阻将使能引脚连接到 VCC1,因为它比输入引脚慢。
结束我们对直流电机的讨论,并利用我们所学的知识,接下来的列表演示了如何对直流电机进行编程。
void DCMotor_cmd(DC_MOTOR_CMDS cmd)
{
switch(cmd)
{
case forward:
DATA_PORT = _BV(ENABLE1) | ~_BV(IN1) | _BV(IN2);
break;
case reverse:
DATA_PORT = _BV(ENABLE1) | _BV(IN1) | ~_BV(IN2);
break;
case stop:
DATA_PORT = ~_BV(ENABLE1) | ~_BV(IN1) | ~_BV(IN2);
break;
}
}
步进电机
“理论上,步进电机是一种结构简单的奇迹。它没有刷子或触点。基本上,它是一种同步电机,通过电子切换磁场来使电枢磁体旋转。”[3]
步进电机用于需要比上一节讨论的直流电机更高精度的场合。与直流电机相比,使用步进电机的一些优点是:
- 速度可以通过步进速率控制。
- 相对定位非常精确:对于单步,你知道轴在每一步会转动多少。如果你购买电机,规格之一是每转步数,如果你是拆卸下来的,也很容易确定。
- 通电且不步进时,电机保持位置。
在本练习中,我将使用一个从[此处]购买的单相步进电机。下表列出了该步进电机部分规格,这是步进电机信息的典型内容,如果你的设备有数据,应该看起来差不多。

即使我正在使用的设备有关于此设备的信息,很多时候你使用的设备可能是从旧的打印机、扫描仪或其他设备上拆卸下来的,很可能没有信息可用。这也不是问题,我们现在将进行识别过程。有两种类型的步进电机可用,单相和双相。单相电机有 5 或 6 根线,而双相电机有 4、6 或 8 根线。有关识别不同类型步进电机的更多信息,可以在 wimb.net 上找到出色的参考资料。[4]
现在我们需要确定哪些线是做什么用的,为此我们需要一个万用表来测量线圈之间的电阻。首先画一个如下表所示的表格。然后使用万用表测量每对线之间的电阻,并在进行时记录结果。完成后,你应该得到与下表中所示类似的结果。


如果我们对照我们收集的信息和我们对单相电机的了解,我们可以看到红色和绿色的线是公共中心抽头,其他引线连接到线圈的端点。因为这个电机为每个绕组都有独立的中心抽头,所以我们可以将其配置为单相或双相设备,在这种情况下,我们将将其配置为双相[5] [6],这样我们就无需使用另一个电源。为此,我们只需使用橙色、黄色、黑色和棕色线,而让红色和绿色线悬空。控制电机的代码与单相或双相配置相同,所以这不成问题。
我们还必须克服另一个问题,那就是找到正确的接线顺序。要做到这一点,我们需要将组件接好线并使软件正常工作。这并不难。我们只需先以任意顺序连接电线,然后切换端对和中间对,直到电机平稳运行。
步进电机的接线与直流电机类似,除了我们将使用两个通道而不是一个,正如下面的原理图所示。在本练习中,我使用了两个 10K 上拉电阻来连接使能线,因为我懒惰,而且在这个实例中它们确实没有必要。

步进电机工作模式
在对步进电机进行编程时,我们可以根据我们的需求使用几种选项。以下部分分为三个部分,每个部分都有一个逻辑表,显示了线圈激活的顺序,以及一个动画,显示了电机内部发生情况的表示。还有一种称为微步进的第四种工作模式[7],它需要驱动器控制每个绕组中的电流大小,但这超出了本教程的范围。
波驱动模式
波驱动模式是单相工作模式,提供低扭矩。这意味着一次只有一个线圈通电,因此它不是最佳模式,因为它只利用了电机绕组的 25%。
|
![]() |
全步进模式
在全步进模式下,任何时候都有两个线圈通电,从而产生更高的扭矩,并更好地利用可用绕组。对于单相电机,此模式利用 50% 的可用绕组,而双相电机则为 100% 有效。另一个区别是,与波模式相比,每一步将偏移半个全步。
|
![]() |
半步进模式
半驱动模式结合了波驱动和全步进模式,并提供比其他两种模式多一倍的步数。
|
![]() |
摘要
当我开始为这篇文章做研究时,我认为我对电机以及如何使用 L293D 芯片驱动它们了解很多,但事实证明,研究揭示了许多我不知道的信息,所以这次对我来说也是一次学习经历。