如何用单片机AT89S52控制直流电机最好有实际电路图和程序

如题所述

  对基于MCS-51系列单片机实现直流电机调速系统进行研究和设计,能够在不同按钮的作用下分别实现电机的启动、停止、正转、反转、加速、减速控制;能够实现对直流电机的PWM的调速设计。增大占空比,增加转速,减小占空比,减小转速。

  通过按键的输入,对控制器发出指令,由此来输出电机的启停、正反转、以及加减速和LED的显示。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-07
这是我以前做的,图上传不了,你给个邮箱,我发PCB或者照片给你

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

void delay(uchar);
/*************位声明函数**************/
sbit in1=P0^1;//控制左边轮子
sbit in2=P0^2;
sbit in3=P0^4;//控制右边轮子
sbit in4=P0^5;
sbit ena=P0^0;//使能左边轮子
sbit enb=P0^3;//使能右边轮子

sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;

uchar pwm1,pwm2,a,b,flag=0;

/*************初始化函数**************/
void init_t0()
{
TMOD=0X01;
TH0=(65536-6000)/256;
TL0=(65536-6000)%256;
EA=1;
ET0=1;
TR0=1;
}

/********前进函数*****/
void qianjin()
{
in1=0;
in2=1;
in3=0;
in4=1;
ena=1;
enb=1;
a=19;
while(1)
{
if(pwm1==a)
{
ena=0;
enb=0;
}
if(pwm1==20)
{
pwm1=0;
ena=1;
enb=1;

}
while(~P0)
// delay(5);
// while(~P0)
return;
}

}

/********后退函数*****/
void houtui()
{
in1=1;
in2=0;
in3=1;
in4=0;
ena=1;
enb=1;
a=19;
while(1)
{
if(pwm1==a)
{
ena=0;
enb=0;
}
if(pwm1==20)
{
pwm1=0;
ena=1;
enb=1;

}
while(~P0)
// delay(5);
// while(~P0)
return;
}

}
/*************控制右转函数**************/
void controlright()
{
in1=0;
in2=1;
in3=0;
in4=1;
ena=1;
enb=1;
while(1)
{
a=19;b=0;
if(pwm1==a)
{
ena=0;
}
if(pwm1==20)
{
pwm1=0;
ena=1;
}

if(pwm2==b)
{
enb=0;
}
if(pwm2==20)
{
pwm2=0;
enb=1;
}
while(~P0)
// delay(5);
// while(~P0)
return;
}
}

/*************控制左转函数**************/
void controlleft()
{
in1=0;
in2=1;
in3=0;
in4=1;
ena=1;
enb=1;
while(1)
{
a=0;b=19;
if(pwm1==a)
{
ena=0;
}
if(pwm1==20)
{
pwm1=0;
ena=1;
}
if(pwm2==b)
{
enb=0;
}
if(pwm2==20)
{
pwm2=0;
enb=1;
}
while(~P0)
// delay(5);
// while(~P0)
return;
}
}

/*************主函数**************/
void main()
{
init_t0();
while(1)
{

if(key1==0)
{
delay(5);
if(key1==0)
{
// while(!key1);
// delay(5);
// while(!key1);
flag=0;
}
}

if(key2==0)
{
delay(5);
if(key2==0)
{
// while(!key2);
// delay(5);
// while(!key2);
flag=1;
}
}

if(key3==0)
flag=2;

if(key4==0)
flag=3;
switch(flag)
{
case 0:qianjin();
break;
case 1:houtui();
break;
case 2: controlright();
break;
case 3: controlleft();
break;
}
}
}

/*************定时器0中断1工作方式**************/
void timer0()interrupt 1
{
TH0=(65536-6000)/256;
TL0=(65536-6000)%256;
pwm1++;
pwm2++;
}

void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}本回答被提问者采纳
第2个回答  2011-06-07
正反转是不
可以联系我

如何用单片机AT89S52控制直流电机最好有实际电路图和程序
对基于MCS-51系列单片机实现直流电机调速系统进行研究和设计,能够在不同按钮的作用下分别实现电机的启动、停止、正转、反转、加速、减速控制;能够实现对直流电机的PWM的调速设计。增大占空比,增加转速,减小占空比,减小转速。通过按键的输入,对控制器发出指令,由此来输出电机的启停、正反转、以及加减速和...

at89s52单片机基础项目教程
一、LED闪烁实验 这个实验非常简单,只需要连接一个LED灯到AT89S52单片机的某个IO口上,然后编写一个程序,让这个IO口输出高电平和低电平,从而使LED灯闪烁。通过这个实验,可以学习如何控制单片机的IO口,以及如何编写简单的程序。二、数码管显示实验 数码管是一种常用的显示器件,可以用来显示数字、字母等...

老兄啊,我要用AT89S52单片机通过S8550D三极管驱动一个12V的电机,这电 ...
8550,是 PNP 型三极管,只能用于驱动 +5V 的负载。驱动大于 +5V 的,必须用 NPN 型的。到我的百度空间看看,有现成的电路。

at89s52单片机(功能、应用及开发指南)
1.准备工作:准备at89s52单片机开发板、电脑、USB转串口模块、编程软件等。2.连接电路:将at89s52单片机开发板与电脑通过USB转串口模块连接,将编程软件通过串口连接到开发板。3.编写程序:使用编程软件编写程序代码,并将程序代码下载到at89s52单片机中。4.调试程序:在开发板上进行程序调试,检查程序是否能够...

大家帮帮忙,AT89S52单片机用一个I\/O口怎么控制40个并联发光二级管,能...
按这个图连接,把P15端接到任意I\/O口上,把并联的40个发光管接到蜂鸣器符号的位置,拿下蜂鸣器。按后按此图编程序即可。

求AT89S52单片机原理图,谢谢。
PORT2(P2.0-P2.7): 端口2是具有内部提升电路的双向I\/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I\/O端日使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8\/ A15,这个时候P2便不能当做...

基于8051单片机,最好是AT89S52单片机制作简易对讲机的具体过程,需要什 ...
1,将语音信号通过转换成电压信号,然后做一个二阶有源滤波,成本大概在5块钱左右 2,关于单片机选型,有如下要求:1,有AD采集功能,采样速率能达到40K以上;2,要有DA功能,能将数字信号转换成模拟信号,然后通过扬声器放出声音。DA速率要求40K以上;3,考虑到后面的通过无线传输,需要至少一个串口。...

怎样用AT89s52单片机控制电调再来控制无刷电机?我设计好程序可怎么也...
这样的:1,定时器中断周期20ms 2,其中开始2ms为高电平,其余时间为低电平。这是中立点的位置。变化范围我记得是1.8ms-2.2ms 3.不要用软件延时,要用硬件延时。

数字电路课程设计,步进电机控制器
本设计采用ATMEL公司DIP-40封装的AT89S52单片机实现对四相步进电机的手动和遥控控制。由单片机产生的脉冲信号经过脉冲分配后分解出对应的四相脉冲,分解出的四相脉冲经驱动电路功率放大后驱动步进电机的转动。转速的调节和状态的改变由按键进行选择。通过键盘扫描把选择的信息反馈给单片机,单片机根据反馈信息做出...

用AT89S52怎么实现PWM信号的输出啊?
256-256(依据定时器设置而定)*占空比,设置定时器溢出值 3 在中断中响应定时器溢出,置端口高电平 4 设置定时器溢出值:256(依据定时器设置而定)*占空比 5 在中断中响应定时器溢出,置端口低电平 6 2-5 循环 PWM输出经滤波后,形成一直流电压,驱动功率输出,可控制直流电机 ...

相似回答