基于89C51电机转速计设计.docx

上传人:b****1 文档编号:2650943 上传时间:2023-05-04 格式:DOCX 页数:23 大小:201.23KB
下载 相关 举报
基于89C51电机转速计设计.docx_第1页
第1页 / 共23页
基于89C51电机转速计设计.docx_第2页
第2页 / 共23页
基于89C51电机转速计设计.docx_第3页
第3页 / 共23页
基于89C51电机转速计设计.docx_第4页
第4页 / 共23页
基于89C51电机转速计设计.docx_第5页
第5页 / 共23页
基于89C51电机转速计设计.docx_第6页
第6页 / 共23页
基于89C51电机转速计设计.docx_第7页
第7页 / 共23页
基于89C51电机转速计设计.docx_第8页
第8页 / 共23页
基于89C51电机转速计设计.docx_第9页
第9页 / 共23页
基于89C51电机转速计设计.docx_第10页
第10页 / 共23页
基于89C51电机转速计设计.docx_第11页
第11页 / 共23页
基于89C51电机转速计设计.docx_第12页
第12页 / 共23页
基于89C51电机转速计设计.docx_第13页
第13页 / 共23页
基于89C51电机转速计设计.docx_第14页
第14页 / 共23页
基于89C51电机转速计设计.docx_第15页
第15页 / 共23页
基于89C51电机转速计设计.docx_第16页
第16页 / 共23页
基于89C51电机转速计设计.docx_第17页
第17页 / 共23页
基于89C51电机转速计设计.docx_第18页
第18页 / 共23页
基于89C51电机转速计设计.docx_第19页
第19页 / 共23页
基于89C51电机转速计设计.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于89C51电机转速计设计.docx

《基于89C51电机转速计设计.docx》由会员分享,可在线阅读,更多相关《基于89C51电机转速计设计.docx(23页珍藏版)》请在冰点文库上搜索。

基于89C51电机转速计设计.docx

基于89C51电机转速计设计

单片机系统

课程设计

成绩评定表

设计课题:

基于89C51的电机转速计设计

学院名称:

电气工程学院

专业班级:

学生姓名:

安徽人在河南

学号:

指导教师:

设计地点:

31-505

设计时间:

2018-01-01~2018-01-14

指导教师意见:

 

成绩:

签名:

年月日

单片机系统

课程设计

 

课程设计名称:

基于89C51的电机转速计设计

专业班级:

学生姓名:

学号:

指导教师:

课程设计地点:

31-505

课程设计时间:

2018-01-01~2018-01-14

 

单片机系统课程设计任务书

学生姓名

专业班级

自动

学号

题目

基于89C51的电机转速计设计

课题性质

工程设计

课题来源

选题

指导教师

主要内容

(参数)

1.电机起动

2.多级调速,包括提速、减速

3.电机停车

任务要求

(进度)

第1-2天:

熟悉课程设计任务及要求,查阅技术资料,确定设计方案。

第3-4天:

按照确定的方案设计单元电路。

要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。

第5-6天:

软件设计,编写程序。

第7-8天:

实验室调试。

第9-10天:

撰写课程设计报告。

要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。

主要参考

资料

[1]张毅刚彭喜元彭宇单片机原理及应用(第2版)高等教育出版社

[2]程国刚陈跃琴崔荔蒙51单片机典型模块开发查询手册电子工业出版社

[3]程国刚杨后川PROTEUS原理图设计与电路仿真电子工业出版社

审查意见

 

系(教研室)主任签字:

年月日

1引言

在实际应用中,电动机作为把电能转换为机械能的主要设备,一是要具有较高的能量转换效率;二是应能根据生产工艺的要求调整转速。

电动机的调速性能如何对提高产品质量、提高劳动生产率和节省电能有着直接的决定性影响。

因此,调速技术一直是研究的热点。

本次设计采用了普中科技51单片机开发板,配以AT89C51单片机以及ULN2003D芯片驱动直流电机,并在数码管上显示当前级数。

可以实现按键起动、增减速、停车的功能。

调速方面,通过单片机发送不同占空比的PWM波形,从而改变电机的电枢电压,进而实现对直流电机的调速。

关键词:

AT89C51单片机PWM多级调速数码管显示

2总体方案设计

硬件方案:

以AT89C51单片机为核心的直流电机控制系统控制简图如图2.1直流电机调速方案方框图所示,由单片机输出PWM信号,并由I/O口输出,经驱动电路输出给电机,从而控制电机得电、断电以及调整电枢电压。

单片机上电后,系统进入准备状态。

当按动启动按钮后,根据预设值电机进入一级转速工作;根据不同需求的按下加减速按钮,调整I/O口的预定值,从而可以控制PWM波形的占空比,进而控制电压的大小。

控制电机的加减速,并在数码管上显示出当前的预设值。

图2.1直流电机调速方案方框图

AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

AT89C51提供以下标准功能:

4k 字节Flash 闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

软件方案:

PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。

PWM可以应用在许多方面,比如:

电机调速、温度控制、压力控制等等。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。

通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。

也正因为如此,PWM又被称为“开关驱动装置”。

单片机由软件来实现PWM调整:

在PWM调速系统中占空比D是一个重要参数在电源电压Ud不变的情况下,电枢端电压的平均值取决于占空比D的大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。

改变占空比D的值有三种方法:

A、定宽调频法:

保持t1不变,只改变t2,这样使周期也随之改变。

B、调宽调频法:

保持t2不变,只改变t1,这样使周期也随之改变。

C、定频调宽法:

保持周期T(或频率)不变,同时改变t1和t。

前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。

利用单片机的定时计数器外加软件延时等方式来实现脉宽的自由调整,此种方式可简化硬件电路,操作性强等优点。

本次设计中,采用定时器作为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确。

3硬件电路设计

3.1复位电路

复位电路和时钟电路是维持单片机最小系统稳定运行的基本模块和最重要的内部因素之一。

复位电路通常分为两种:

上电复位和手动复位,如图3.1,图3.2所示。

图3.1上电复位电路

图3.2手动复位电路

有时系统在运行过程中出现程序跑飞的情况,在程序开发过程中,需要经常手动复位。

所以本次设计选用手动复位。

3.2振荡电路

振荡电路是单片机系统工作的核心,它提供单片机工作的“动力”,并关系到单片机运行速度的快慢、应用系统稳定性的高低等。

一般可以使用晶体或晶振来搭建,他们的主要区别在于晶体需要外接振荡电路才能够起振,而晶振只需要在相应的引脚上提供电源和地信号既可以发出脉冲信号。

高频率的时钟有利于程序更快的运行,也有可以实现更高的信号采样率,从而实现更多的功能。

但是告诉对系统要求较高,而且功耗大,运行环境苛刻。

考虑到单片机本身用在控制,并非高速信号采样处理,所以选取合适的频率即可。

合适频率的晶振对于选频信号强度准确度都有好处,本次设计选取12.000M无源晶振接入XTAL1和XTAL2引脚。

并联2个30pF陶瓷电容帮助起振。

振荡电路如图3.3所示

图3.3振荡电路

3.3驱动电路

在实际的直流电机驱动电路应用中,可以使用H桥来驱动直流电机,也可以使用相应的驱动芯片来驱动直流电机。

H桥采用4个功率MOSFET管,两两组成一个桥壁,每个三极管旁边有一个续流二极管,当对角线上两个三极管打开时,电机朝一个方向运转;另一条对角线上的三极管打开时,电机反转。

功率MOSFET管可以将微弱的信号放大成幅值较大的电信号,是单片机系统中最常用的功率驱动器件。

除了使用三极管搭建H桥驱动外,还可以使用达林顿管等驱动芯片来驱动直流电机。

达林顿管又称复合管,原理是将两只三极管适当地连接在一起,组成一只等效的新三极管。

放大倍数是两只三极管放大倍数之积,常常用于驱动较大驱动电流的器件。

常见的达林顿集成芯片有ULN2003和ULN2803。

由于本次设计使用的开发板上自带了ULN2003芯片,所以采用ULN2003驱动芯片驱动直流电机。

驱动电路如图3.4所示。

图3.4直流电机驱动电路

3.4键盘电路

起动、停车、加速、减速四个按键分别与单片机的P1.0,P1.1,P1.2,P1.3相连,然后再与地相连。

其电路如图3.5所示。

图3.5电机起动、停车、加速、减速按键电路

3.5显示电路

本次设计中,因需要显示调速等级,故使用一位8段数码管用作显示。

数码管是单片机系统常用的一种外围显示器件,可以显示一些简单的数字或字符。

显示电路如图3.6所示

图3.6一位八段数码管显示电路

4软件设计

4.1软件总流程图

通电开机后,CPU得电,根据软件定义引脚功能,定时器工作方式等。

并进入键盘扫描子程序。

当检测到键盘动作时,经过延时子程序去抖,确定按键按下后,申请中断。

单片机读取键值,并根据软件调节PWM波形,向外输出;同时根据按键次数计算端码,向数码管发送。

起动默认3级,数码管显示3.如图4.1所示

图4.1软件总流程图

4.2中断流程图

中断由键盘申请,当确定键盘有键按下后,根据扫描出的键值进行计算:

若是加速按键则在原来基础上加上按键按动的次数,若是减速按键则减去。

计算出此时的等级,根据软件预设调整PWM波形,并向数码管输送新的段码。

如图4.2所示。

图4.2中断流程图

5功能开发调试及硬件仿真

5.1开发软件介绍

程序开发软件:

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

本次设计使用的版本是KeiluVision4。

硬件仿真软件:

Proteus软件是一种低投资的电子设计自动化软件,多达30多个元件库。

Proteus软件提供多种现实存在的虚拟仪器仪表。

此外,Proteus还提供图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来。

这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗,尽可能减少仪器对测量结果的影响,Proteus软件提供丰富的测试信号用于电路的测试。

Proteus在编译方面支持Keil编译器。

当电路设计完成之后,为了减少在电路板上调试时的难度,保证电路设计的正确性,将Keilc51编译生成的*.HEX文件载入Proteus软件,实现电路仿真。

5.2仿真结果

初始状态,直流电机半速运转。

如图5.1所示

图5.1初始状态下直流电机运行状态

按下停止键,直流电机运行状态如图5.2所示

图5.2电机停转

按下加速键,直流电机运行状态如图5.3所示

图5.3直流电机加速

按下减速按键,直流电机运行状态如图5.4所示

图5.4直流电机减速

6总结

这次课程设计让我收获颇多,查资料,同学交流,到最后写论文,每个过程都是对自己的能力的一次提高。

通过这次设计,增长了自己的实践能力,分析问题的能力也提高不少。

这一次的课程设计,还让我学会了独立思考,独立解决问题。

让我也真正领悟到了“细节决定成败”的道理。

在设计过程中,还锻炼了我冷静思考问题的能力。

在我看来,这不仅仅是一次课程设计,更像是人生中的一堂课,让我学会了很多东西,学会了很多人生道理。

附录A参考文献

[1]张毅刚彭喜元彭宇单片机原理及应用(第2版)高等教育出版社

[2]程国刚陈跃琴崔荔蒙51单片机典型模块开发查询手册电子工业出版社

[3]程国刚杨后川PROTEUS原理图设计与电路仿真电子工业出版社

[4]康华光电子技术基础模拟部分高等教育出版社

[5]夏路易石宗义电路原理图与电路板设计教程Protel99SE北京希望电子出版社

附录B总原理图

本次设计总原理图如图附录B.1所示

附录C部分原程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharled_code[10]=

{

0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x90

};

//段码0,1,2,3,4,5,6,7,8,9

ucharled_bit[4]=

{

1,2,4,8

};//位码

ucharled_buf[4];//显示缓存

ucharkey_buf[4];

intnum=50;//显示数据

intn=0;//当前显示位

inti=4;//位消隐参数

intm=0;//按键次数

ucharkey_code;

sbitMOTOR0=P3^0;

sbitMOTOR1=P3^1;

intMOTORPORT0=0;

uintMOTORPORT1;

intMOTORDIR=0;

intMOTORSTOP=0;

intcounter=0;

sbitp10=P1^0;

sbitp11=P1^1;

sbitp12=P1^2;

sbitp13=P1^3;

/****************************************************************

*名称:

delayms

*说明:

延时子程序

*功能:

产生一定时间的延时

*输入:

ms延时时间1ms的倍数

****************************************************************/

voiddelayms(uintms)

{

uinta,b;

for(a=0;a

{

for(b=0;b<125;b++);

//1ms

}

}

/************************************************************

*名称:

numToBuf

*说明:

数据转换

*********************************************************/

voidnumToBuf(void)

{

led_buf[0]=led_code[num%10];//个位

led_buf[1]=led_code[num/10%10];//十位

led_buf[2]=led_code[num/100%10];//百位

led_buf[3]=led_code[num/1000];//千位

}

/***************************************************************

*名称:

keyToNum

*说明:

数据转换

*功能:

把键盘缓存转换为数据

*输入:

*返回值:

****************************************************************/

voidkeyToNum(void)

{

num=key_buf[0]+key_buf[1]*10+key_buf[2]*100+key_buf[3]*1000;

}

/****************************************************************

*名称:

int_0

*说明:

定时器0中断服务程序

*功能:

数码管动态扫描程序

*输入:

*返回值:

**************************************************************/

voidint_0(void)interrupt1

{

TH0=0xD8;

TL0=0xf0;//定时器0赋初值

/*消隐位*/

if(num>=1000)

{

//数据在于等于10000

i=4;//显示4位

}

elseif(num<1000&&num>=100)

{

//数所小于1000大于100

i=3;//显示3位

}

elseif(num<100&&num>=10)

{

//数据小于100大于10

i=2;//显示两位

}

elseif(num<10)

{

//数据小10

i=1;//显示1位

}

/*显示输出*/

numToBuf();

P2=~led_bit[n];//调用位码

P0=~led_buf[n];//调用段码

n++;//移位

n=n%i;

}

/****************************************************************

*名称:

int_1

*说明:

定时器1中断服务程序

*功能:

键盘扫描

****************************************************************/

voidint_1(void)interrupt3

{

TH1=0xfe;

TL1=0x0c;//定时器0赋初值

if(counter<=num){

MOTORPORT1=1;

}elseif(counter<=100&&counter>num){

MOTORPORT1=0;

}

counter++;

counter=counter%100;

}

/*****************************************************************

*名称:

Key_Scan

*说明:

*功能:

键盘扫描

*返回值:

按键对应值(0~15);无键按下返回0x7f

*****************************************************************/

unsignedcharKey_Scan(void)//

{

unsignedchari,n;

unsignedcharkey_temp;

P1=0xf0;

if((P1&0xf0)!

=0xf0)

{

if((P1&0xf0)!

=0xf0)

{

delayms(100);

for(i=0;i<4;i++)

{

P1=~(1<

n=P1;

n&=0xf0;

if(n!

=0xf0)

{

switch(n)

{

case(0xe0):

key_temp=i*4;

break;

case(0xd0):

key_temp=1+i*4;

break;

case(0xb0):

key_temp=2+i*4;

break;

case(0x70):

key_temp=3+i*4;

break;

default:

key_temp=0x7f;

}

returnkey_temp;

}

}

}

}

return0x7f;//如果未按任何键

}

/*****************************************************************

*名称:

key_dectde

*说明:

*功能:

按键释放检测

*****************************************************************/

unsignedcharkey_dectde(void)

{

unsignedchartemp1,temp2;

temp1=Key_Scan();

if(temp1==0x7f)

return0x7f;

do

{

temp2=Key_Scan();

}

while(temp1==temp2);

returntemp1;

}

/*主程序*/

voidmain()

{

TMOD=0x11;

TH0=0xD8;//定时器T0为方式1

TL0=0xf0;//定时器0的时间常数(10ms,12MHZ)

TR0=1;//启动定时器0

TH1=0xff;//定时器T0为方式1

TL1=0x9c;//启动定时器0

TR1=1;

IE=0x8a;//允许定时器0/1中断

/*键盘程序*/

while

(1)

//循环

{

if(p10==0){

delayms(100);

if(p10==0)

num+=5;

}

if(p11==0){

delayms(100);

if(p11==0)

num-=5;

}

if(p12==0){

delayms(100);

if(p12==0)

MOTORDIR=!

MOTORDIR;

}

if(p13==0){

delayms(100);

if(p13==0)

num=0;

}

if(MOTORDIR==0){

MOTOR0=MOTORPORT0;

MOTOR1=MOTORPORT1;

}elseif(MOTORDIR==1){

MOTOR0=MOTORPORT1;

MOTOR1=MOTORPORT0;

}

}

}

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2