直流电机的驱动.docx

上传人:b****2 文档编号:12894817 上传时间:2023-04-22 格式:DOCX 页数:15 大小:96.27KB
下载 相关 举报
直流电机的驱动.docx_第1页
第1页 / 共15页
直流电机的驱动.docx_第2页
第2页 / 共15页
直流电机的驱动.docx_第3页
第3页 / 共15页
直流电机的驱动.docx_第4页
第4页 / 共15页
直流电机的驱动.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

直流电机的驱动.docx

《直流电机的驱动.docx》由会员分享,可在线阅读,更多相关《直流电机的驱动.docx(15页珍藏版)》请在冰豆网上搜索。

直流电机的驱动.docx

直流电机的驱动

目录

中文摘要1

英文摘要1

1引言1

1.1设计目的1

1.2设计要求1

1.3设计方法.............................................................................................................................1

2设计方案及原理1

2.1设计方案及组成框图1

2.2设计原理2

3硬件电路设计2

3.1电机驱动设计2

3.2按键设计2

3.3液晶设计3

3.4主电路设计3

4软件设计3

4.1程序流程图3

4.2C语言程序5

5系统仿真结果5

6总结5

参考文献5

附录6

 

 

1引言

1.1设计目的

通过应用单片机系统设计的基本理论,基本知识与基本技能,掌握单片机应用系统各主要环节的设计、调试方法,初步掌握并具备应用单片机进行设备技术改造和产品开发的能力,锻炼系统设计和应用能力,包括单片机系统设计的软件和硬件两部分。

培养创新意识,提高动手能力和分析问题、解决问题的能力。

1.2设计要求

本设计主要是基于AT89C51单片机的直流电动机的控制,通过查阅相关资料,选择适合的整体设计方案,设计出其硬件电路图,在硬件的基础上完成其软件设计,并在proteus环境下完成其仿真调试,最后根据设计过程,完成实验报告。

1.3设计方法

用AT89C51单片机作为控制器,用独立按钮与单片机口相连采用中断的方式对按键进行判断,通过对PWM值的改变控制直流电动机。

2设计方案及原理

2.1设计方案及组成框图

51系列的单片机学习简单,易于理解,它有自己独立的定时系统,可以利用定时器模拟输出PWM对电机进行控制,所以本设计选用AT89C51单片机做控制器。

矩阵键盘按键多且控制与独立键盘相比比较麻烦,本设计中只需要五个按键,故选用独立按键。

查询方式可以对按键信号进行处理,但是查询的控制方法软件设计较为复杂,对信号的采集不够准确,由于51系列的单片机有两个外部中断端口,利用中断的方式控制使软件更加简洁。

虽然可以在proteus看到电机的转动情况,但是观察不方便,不能准确的了解电机的运转速度,故为了方便观测电机的运转情况加入了液晶显示模块,本设计采用LM016L液晶显示器。

系统结构框图如图1所示。

图1系统框图

2.2设计原理

AT89C51单片机芯片中有自己独立的定时系统和中断处理方式,而且定时器有四种工作方式可供使用者选择,本设计采用定时器T0的第二种工作方式,设定定时器的定时周期为1ms,通过定时器来模拟输出PWM对直流电机进行控制,并根据按键的信号来改变PWM的值,实现电机的状态转换控制,AT89C51单片机有两个外部中断端口,利用它的中断处理方式可以对按键输入信号进行实时的处理,控制电机的运转情况。

3硬件电路设计

3.1电机驱动设计

L298是直流电动机和步进电动机两用的驱动芯片。

在其直流工作电压时,信号端电压为4~6V、控制端电压为5~36V,对直流电机进行驱动是可采用PWM信号平滑调速,可实现电机正反转控制,调速范围大而且启动性能好,启动转矩大。

故经常用在直流电动机的驱动中。

L298与电机及单片机的硬件连接如图2所示。

图2L298与电机连接图

3.2按键设计

本设计采用独立按键,电路如图3所示

图3按键连接图

3.3液晶设计

由于液晶的使能、写入端及复位端接在P0口,所以要接上拉电阻,其连接如图4所示。

图4液晶连接电路图

3.4主电路设计

主电路由控制器AT89C51单片机的晶振电路和复位电路、按键、液晶、电机驱动部分组成,总设计电路如图5所示。

图5总设计电路

4软件设计

4.1程序流程图

主程序流程图如图6所示。

图6主程序流程图

子程序流程图如图7所示。

图7子程序流程图

4.2C语言程序

见附录。

5系统仿真结果

根据设计利用仿真软件进行仿真并给出结果,运行结果如图8所示。

图8仿真结果

6总结

本次单片机课程设计我做的是基于单片机的直流电机的调速,用AT89C51单片机作为控制器,用独立按钮与单片机口相连采用中断的方式对按键进行判断,实现用PWM控制直流电动机,在液晶上显示PWM的占空比,在PROTUES仿真中可以清楚地看到电机的旋转。

通过此次单片机课程设计,我学到了很多的东西,对单片机有了更好的认识,我学会了PROTUES的仿真,不仅巩固了以前所学过的知识,而且把所学的理论知识与实践相结合起来,才能提高自己的综合实力。

在此次设计的过程中,也遇到了不少困难,发现了自己的不足之处,如对以前所学过的知识理解得不够深刻,掌握得不够牢固,这次课程设计之后,一定把以前所学过的知识重新温故,提高对知识的实际应用能力。

参考文献

[1]王思明,张金敏等.单片机原理及应用系统设计[M].北京:

科学出版社,2012:

139-168

[2]严天峰.单片机应用系统设计与仿真调试[M].北京:

北京航空航天大学出版社,2005:

10-36

[3]常喜茂,孔英会,付小宁.C51基础与应用实例[M].北京:

电力工业出版社,2008:

925-931

附录

#include

#defineuintunsignedint

#defineucharunsignedchar//宏定义

sbitk1=P3^4;//启动/停止按键

sbitk2=P3^5;//减速按键

sbitk3=P3^6;//加速按键

sbitk4=P3^7;//正反转按键

sbitk5=P3^2;//模式控制

sbitRS=P0^5;

sbitRW=P0^6;

sbitE=P0^7;//液晶D,E的定义

sbitENA=P1^2;//电机驱动IN1,IN2使能信号

sbitIN1=P1^0;//电机输入线

sbitIN2=P1^1;

bitmodel=1;//手动/自动,默认手动

bitdirec=1;//转向标志,默认为正转

intrate=1;//高电平时间常数

intnum=0;//1ms中断记录

intcount=0;//1ms中断记录,自动模式加速时间常数

ucharcodetab1[]="Dire:

Model:

";

ucharcodetab2[]="Rate:

T:

1ms";

/*****************延时子程序*********************************/

voiddelay_xus(uintx)

{

while(x--);

}

voiddelay(uintx)

{

uinty;

for(;x>0;x--)

for(y=110;y>0;y--);

}

/****************LCD********************************/

voidw_com(uintcom)//写命令

{

RS=RW=E=0;

P2=com;

E=1;

delay_xus

(1);

E=0;

}

voidw_data(uintdat)//写数据

{

RS=1;RW=E=0;

P2=dat;

E=1;

delay_xus

(1);

E=0;

}

voidw_shuzu(intaddr,ucharcode*p)//显示字符串

{

inti;

w_com(0x80+addr);

delay_xus

(1);

for(i=0;p[i]!

='\0';i++)

{

w_data(p[i]);

delay_xus

(1);

}

}

voiddisp()//显示速度、转向、模式

{

if(rate<10)

{

w_com(0x80+0x45);

delay_xus

(1);

w_data('');

delay_xus

(1);

w_com(0x80+0x46);

delay_xus

(1);

w_data(rate%10+0x30);//数字转换成ASCII

delay_xus

(1);

}

else

{

w_com(0x80+0x45);

delay_xus

(1);

w_data(rate/10+0x30);

delay_xus

(1);

w_com(0x80+0x46);

delay_xus

(1);

w_data(rate%10+0x30);

delay_xus

(1);

}

if(direc==1)

{

w_shuzu(0x06,"F");

}

else{w_shuzu(0x06,"R");}

if(model==0)w_shuzu(0x0f,"H");

elsew_shuzu(0x0f,"A");

}

/*************主程序初始化**************************************/

voidinit()

{

w_com(0x38);

delay_xus

(1);

w_com(0x0c);//开显示

delay_xus

(1);

delay

(2);

w_shuzu(0x00,tab1);

w_shuzu(0x40,tab2);

disp();

ENA=0;

TMOD=0X01;

TH0=0XFC;//(65536-1000)=FC18(1ms)

TL0=0X18;

ET0=1;

TR0=0;

EX1=1;

IP=0X02;//定时器0为中断最高优先级

EA=1;

}

/****************按键处理程序*********************************/

voidkeyscan()

{

if(k1==0)//启停

{

delay(120);

if(k1==0)

{

TR0=~TR0;

ENA=~ENA;

rate=1;

}

}

if(k2==0&&model==0)//减速

{

delay(120);

if(k2==0&&model==0)

{

rate-=2;

if(rate<=1)rate=1;

}

}

if(k3==0&&model==0)//加速

{

delay(120);

if(k3==0&&model==0)

{

rate+=2;

if(rate>=29)rate=29;

}

}

if(k4==0&&model==0)//转向

{

delay(120);

if(k4==0&&model==0)

{

direc=~direc;

}

}

if(k5==0&&ENA==0)//模式选择

{

delay(120);

if(k5==0&&ENA==0)

{

model=~model;

}

}

disp();//状态改变,及时更新数据

}

/***************主程序***********************************/

voidmain()

{

init();

while

(1);

}

/**************中断服务程序***********************************/

voidextern1()interrupt2//外部中断0

{

keyscan();

}

voidtimer0()interrupt1//定时器0

{

num++;

if(num>=31)num=0;

if(direc==1)//正转

{

if(num<=rate)//高电平持续时间

{

IN1=1;

IN2=0;

}

elseIN1=IN2=0;//低电平持续时间

}

else//反转

{

if(num<=rate)

{

IN1=0;

IN2=1;

}

elseIN1=IN2=0;

}

if(model==1)//自动模式下,执行,加速时间常数

{

count++;

if(count==1500)//1.5s后占空常数增加,加速

{

rate+=2;

if(rate>=29)rate=29;

count=0;

disp();

}

}

TH0=0XFC;//65536-1000=FC18

TL0=0X18;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1