如何使用8051单片机控制双向直流电机

2023-10-26  

如何将直流电机连接到8051单片机?在本文中,主要有8051单片机+DC电机系统两个部分。首先是带有控制电机所需程序的8051单片机,其次是合适的驱动电路。


大多数直流电机的功率要求远远超出了单片机的范围,而且在反转旋转方向时产生的电压尖峰更容易损坏单片机。因此将直流电机直接连接到单片机是不明智的,完美的解决方案是在单片机和直流电机之间使用电机驱动电路。


一、L293电机驱动芯片

L293是一款专用的H桥电机驱动器IC,采用16引脚封装。L293的电流容量为600mA/通道,电源电压范围为4.5至36VDC。它们配有内部高速钳位二极管,用于电感尖峰保护。L293的其他优点包括高抗噪性、内部ESD保护、热关断、每个通道的独立输入电源等。L293电机驱动器的引脚排列和真值表如下图所示:

L293-pinout.png

二、使用8051单片机控制双向直流电机

这里的双向直流电机,它在预设时间(约1秒)后自动改变方向。AT89S51是这里使用的单片机,L293构成电机驱动器。电路图如下所示:

interfacing-dc-motor-8051.png

在电路元件R1、S1和C3中形成去抖动复位电路。C1、C2和X1与振荡器有关。端口引脚P1.0和P1.1连接到L293电机驱动器的相应输入引脚。电机连接在L293的输出引脚3和6之间。软件是这样写的,P1.0和P1.1的逻辑组合控制电机的方向。最初接通电源时,P1.0为高电平,P1.1为低电平。该状态保持预设时间(约1S),此时电机将沿顺时针方向运行(参见L293的功能表)。然后P1.0和P1.1的逻辑被交换并且这个条件也保持相同的持续时间。


控制程序1:

ORG 00H

MAIN: MOV P1,#00000001B

ACALL DELAY

MOV P1,#00000010B

ACALL DELAY

SJMP MAIN

DELAY: MOV R4,#0FH

WAIT1: MOV R3,#00H

WAIT2: MOV R2,#00H

WAIT3: DJNZ R2,WAIT3

DJNZ R3,WAIT2

DJNZ R4,WAIT1

RET

END


三、带按钮控制的双向电机

下面显示的电路是基于8051单片机的双向电机,其方向可以使用2个按钮开关控制。除了两个按钮开关之外,该电路与前一个电路非常相似。这些按钮开关连接到单片机的P0rt3。电阻R2和R3分别是P3.0和3.1的下拉电阻。

interfacing-dc-motor-8051-push-button.png

上述项目的代码是这样编写的,最初当电源打开时,电机保持关闭。当按下按钮开关S2时,P1.0变为高电平,而P1.1保持低电平。电机按顺时针方向运行,此状态一直保持到按下S3。当按下按钮开关S3时,P1.0和P1.1的逻辑切换,使电机以相反方向运行,这种状态一直保持到下一次按下S2。


控制程序2:

ORG 00H

MOV P3,#00000000B

MOV P1,#00000000B

MAIN:MOV A,P3

CJNE A,#00000001B,LABEL1

MOV P1,#00000001B

LABEL1:CJNE A,#00000010B,LABEL2

MOV P1,#00000010B

LABEL2:SJMP MAIN

END


检查特定按钮是否被按下是使用CJNE(如果不相等则比较并跳转)指令完成的。简而言之,CJNE指令比较两个操作数,如果操作数不相等,则跳转到预定义的LABEL。如果两个操作数相等,则不会发生任何事情并执行下一条指令。每当按下按钮S2时,P3的状态将是00000001B。该状态被移动到累加器A并使用CJNE指令与00000001B进行比较。两个操作数相等表示按下S2,执行下一条使电机顺时针转动的指令(MOV P1,#00000001B)。如果操作数不相等,则表示没有按下S2,控制器跳转到LABEL1以检查S3。要检查S3,P3的状态再次移动到A,并使用CJNE指令与00000010B进行比较。两个操作数相等表示按下S3,执行下一条使电机逆时针运行的指令(MOV P1,#00000010B)。两个操作数不相等意味着S3未被按下,控制器再次检查S2并重复此循环。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。