如何将直流电机连接到8051单片机?在本文中,主要有8051单片机+DC电机系统两个部分。首先是带有控制电机所需程序的8051单片机,其次是合适的驱动电路。
大多数直流电机的功率要求远远超出了单片机的范围,而且在反转旋转方向时产生的电压尖峰更容易损坏单片机。因此将直流电机直接连接到单片机是不明智的,完美的解决方案是在单片机和直流电机之间使用电机驱动电路。
一、L293电机驱动芯片
L293是一款专用的H桥电机驱动器IC,采用16引脚封装。L293的电流容量为600mA/通道,电源电压范围为4.5至36VDC。它们配有内部高速钳位二极管,用于电感尖峰保护。L293的其他优点包括高抗噪性、内部ESD保护、热关断、每个通道的独立输入电源等。L293电机驱动器的引脚排列和真值表如下图所示:
二、使用8051单片机控制双向直流电机
这里的双向直流电机,它在预设时间(约1秒)后自动改变方向。AT89S51是这里使用的单片机,L293构成电机驱动器。电路图如下所示:
在电路元件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的下拉电阻。
上述项目的代码是这样编写的,最初当电源打开时,电机保持关闭。当按下按钮开关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并重复此循环。
以上就是金沙js5线路单片机开发工程师分享的“8051单片机:如何用单片机控制直流电动机”。金沙js5线路专注单片机应用方案设计与开发,提供8位单片机、16位单片机、32位单片机。