1、本例运行时,按下相应的按键,电机即可产生正转、反转、停止的效果。同时相应的LED指示灯也会点亮。
当P1.0输出低电平时:Q3,Q2截止,Q7,Q1导通,电机左端输出高电平;P1.1输出高电平时:Q8,Q4截止,Q6,Q5导通,电机右端输出低电平,此时,电机正转。
反之,
当P1.0输出高电平时:Q3,Q2导通,Q7,Q1截止,电机左端输出低电平;P1.1输出低电平时:Q8,Q4导通,Q6,Q5截止,电机右端输出高电平,此时,电机反转。
当P1.0输出低电平时;P1.1输出同时也输出低电平:电机两端均为高电平,电机停止转动。
2、需要注意的是,本例仅仅只是演示电机的正反转和停止的控制。在实际应用中,这种电路是不能稳定可靠的工作的。具体实际应用电路,请参考相关资料。
3、在keil c51中新建工程ex73,编写如下程序代码,编译并生成ex73.hex文件
// 直流电机模拟演示
#include <reg51.h>
#include <intrins.h>
sbit K1 = P3^0;//定义3个按键对应的引脚,正转
sbit K2 = P3^1;//反转
sbit K3 = P3^2; //停止
sbit LED1 = P0^0;//定义3个LED对应的引脚
sbit LED2 = P0^1; //
sbit LED3 = P0^2; //
//
sbit MA = P1^0; //定义电机的两个引脚
sbit MB = P1^1;//
//
void main(void)
{
LED1 = 1; //开始3个LED全部熄灭
LED2 = 1;
LED3 = 1;
while(1)
{
if(K1 == 0)//判断那个按键按下
{
while(K1 == 0); //直到按键松开才进入下一步处理
LED1 = 0;
LED2 = 1;
LED3 = 1;
MA = 0; //正转
MB = 1;
}
if(K2 == 0)
{
while(K2 == 0); //
LED1 = 1;
LED2 = 0;
LED3 = 1;
MA = 1; //反转
MB = 0;
}
if(K3 == 0)
{
while(K3 == 0); //
LED1 = 1;
LED2 = 1;
LED3 = 0;
MA = 0;//停止
MB = 0;
}
}
}
4、在proteus中新建仿真文件ex73.dsn,电路原理图如下所示
5、将ex73.hex文件载入at89c51中,启动仿真,观察运行结果。下图是程序运行时,电机正转结果