用51单片机控制H桥电路来实现直流电机正反转(按下开关正3秒停1秒反3秒循环)
- 资格考试
- 2023-04-03 12:59:23
51单片机实现电动机正反转控制如何实现?
51单片机的IO口一般不能直接输出控制电机,必须加装电机驱动电路,常见的如L298N等,电机正反转驱动采用H桥电路。你的要求使用很简单的代码就能实现。51单片机怎么控制直流电机左转,右转,加速,停止?
直流电机怎么左转右转,单片机输出PWM波就能控制电机转动的速度,要想控制电机正反转就需要一个H桥,H桥对角导通就可以控制电机正反转了,至于H桥就参考百科里面的http://baike.baidu.com/view/2009952.htm哪位大神有51单片机控制H桥中的直流电机正反转及调速的电路原理
正反转不就是电流流向的问题,调速就是输出电压大小的问题。用51单片机控制直流电机的转动
电路图就简单了,只要按照程序去连接就不会有问题。这里需要用到一个H桥电路,注意桥电路中Q1和Q3是PNP型三极管,负电导通。Q2和Q4是NPN型三极管,正电导通。Q1和Q4导通是正传,Q3和Q2导通是反转。
#include
#defineucharunsigndechar
#defineuintunsigndeint
sbitzheng=P3^0;//按键正转
sbitfan=P3^1; //按键反转
sbitting=P3^2;//按键停
sbitQ1=P3^4;//定义4个IO控制桥电路
sbitQ2=P3^5;
sbitQ3=P3^6;
sbutQ4=P3^7;
sbitled1=P0^0; //定义3个LED灯
sbitled2=P0^1;
sbitled3=P0^2;
voiddaley(ucharz);//延时函数
voidmain()
{
while()
{
if(zheng==0) //电机正转
{
delay(10);
if(zheng==0);
{
Q2=0;
Q3=1;//这两句是把反转关掉
Q1=0;
Q4=1;//这两句是打开正转
led1=0;//红灯亮
led2=1;//其他等关闭
led3=1;//其他等关闭
}
}
if(fan==0) //电机反转
{
delay(10);
if(fan==0)
{
Q1=1;
Q4=0;//把正转关掉
Q2=1;
Q3=0;//开反转
led1=1;//其他等关闭
led2=0;//绿灯亮
led3=1;//其他等关闭
}
}
if(ting==0) //关掉电机
{
delay(10);
if(ting==0)
{
Q1=1;
Q2=0;
Q3=1;
Q4=0;
led1=1;//其他等关闭
led2=1;//其他等关闭
led3=0;//黄灯亮
}
}
}
}
voiddaley(ucharz) //延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}