单片机课程设计基于C5的直流电机调速系统的设计Word文档下载推荐.docx
- 文档编号:16350553
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:20
- 大小:200.02KB
单片机课程设计基于C5的直流电机调速系统的设计Word文档下载推荐.docx
《单片机课程设计基于C5的直流电机调速系统的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课程设计基于C5的直流电机调速系统的设计Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
3.电机停车
任务要求
(进度)
第1-2天:
熟悉课程设计任务及要求,查阅技术资料,确定设计方案。
第3-4天:
按照确定的方案设计单元电路。
要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。
第5-6天:
软件设计,编写程序。
第7-8天:
实验室调试。
第9-10天:
撰写课程设计报告。
要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。
主要参考
资料
[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)
[2]程国刚陈跃琴崔荔蒙51单片机典型模块开发查询手册电子工业出版社
[3]程国刚杨后川PROTEUS原理图设计与电路仿真电子工业出版社
审查意见
系(教研室)主任签字:
年月日
基于89C51的直流电机调速系统的设计
目录
1引言1
2总体方案设计1
3硬件电路设计3
3.1复位电路3
3.2振荡电路4
3.3驱动电路4
3.4键盘电路5
3.5显示电路6
4软件设计7
4.1软件总流程图7
4.2中断流程图8
5功能开发调试及硬件仿真8
5.1开发软件介绍8
5.2仿真结果9
6总结10
附录A总原理图11
附录B部分原程序12
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总原理图
本次设计总原理图如图附录A.1所示
附录B部分原程序
#include<
reg51.h>
intrins.h>
#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<
ms;
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位
100&
=10)
//数据小于100大于10
i=2;
//显示两位
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;
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)
delayms(100);
for(i=0;
i<
4;
i++)
P1=~(1<
<
i);
n=P1;
n&
=0xf0;
if(n!
switch(n)
case(0xe0):
key_temp=i*4;
break;
case(0xd0):
key_temp=1+i*4;
case(0xb0):
key_temp=2+i*4;
case(0x70):
key_temp=3+i*4;
default:
key_temp=0x7f;
returnkey_temp;
return0x7f;
//如果未按任何键
key_dectde
按键释放检测
unsignedcharkey_dectde(void)
unsignedchartemp1,temp2;
temp1=Key_Scan();
if(temp1==0x7f)
do
temp2=Key_Scan();
while(temp1==temp2);
returntemp1;
/*主程序*/
voidmain()
TMOD=0x11;
//定时器T0为方式1
//定时器0的时间常数(10ms,12MHZ)
TR0=1;
//启动定时器0
TH1=0xff;
TL1=0x9c;
//启动定时器0
TR1=1;
IE=0x8a;
//允许定时器0/1中断
/*键盘程序*/
while
(1)
//循环
if(p10==0){
if(p10==0)
num+=5;
if(p11==0){
if(p11==0)
num-=5;
if(p12==0){
if(p12==0)
MOTORDIR=!
MOTORDIR;
if(p13==0){
if(p13==0)
num=0;
if(MOTORDIR==0){
MOTOR0=MOTORPORT0;
MOTOR1=MOTORPORT1;
}elseif(MOTORDIR==1){
MOTOR0=MOTORPORT1;
MOTOR1=MOTORPORT0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 基于 C5 直流电机 调速 系统 设计