基于单片机的简易小直流电机的测速系统 课程设计.docx
《基于单片机的简易小直流电机的测速系统 课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的简易小直流电机的测速系统 课程设计.docx(11页珍藏版)》请在冰豆网上搜索。
基于单片机的简易小直流电机的测速系统课程设计
信息与电气工程学院
课程设计说明书
(2012/2013学年第二学期)
课程名称:
单片机应用
题目:
简易小直流电机测速
专业班级:
自动化10-02
学生姓名:
XX
学号:
XX
指导教师:
XX等
设计周数:
2周
设计成绩:
2013年6月26日
一、单片机课程设计目的
1.设计并制作出一个以单片机为核心的简易小直流电机测速系统。
2.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
3.通过学生实际操作焊接电路板,提高学生的动手能力。
4.通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应的工作打下基础。
2、课程设计正文
2.1设计内容和要求
2.1.1查阅资料,了解单片机的中断系统,键盘扫描,数码管动态扫描显示,定时器计数器的应用。
2.1.2了解步进电机的工作原理
2.1.3通过显示电路显示电机速度
2.1.4按钮可控制是否显示速度
2.2硬件设计方案
实现原理:
本次设计用到单片机的定时器,计数器,数码管动态扫描,键盘扫描,中断服务。
单片机上电,初始化完成后,先让定时器T0产生一秒的定时。
计数器T1开始计数,计数脉冲由电机本身提供。
一秒定时到后,保存电机转速,当按键按下时,让数码管动态扫描显示电机转速。
所需器件:
单片机最小系统、直流电机一个、四个共阳极数码管、三极管PNP三个、
电阻330共8个、1k四个。
2.2.1按键控制,一号键按下,在数码管上显示电机转速。
2.2.2由电机本身输入脉冲信号,每转输出334个脉冲
2.2.3单片机最小系统,包括复位电路和时钟电路。
2.2.4数码管显示电路,动态扫描,显示电机转速,共阳数码管。
2.3软件设计方案
包括以下几个模块
2.3.1头文件,主程序,数码管显示,延时程序,定时器中断模块,按键扫描,计数器计数
2.3.2编程思路:
用定时器T0产生产生一秒定时:
每100毫秒产生一次中断。
系统时钟为6兆,编写定时器T0产生1s定时。
机器周期等于12个震荡周期。
6兆机器周期为2us
方式1最长定时2^16*2us=131ms
选方式1每隔100ms中断一次,中断十次,TMOD=0x01,
65536-X)*2us=0.1
x=15536
TH0=15536/256;
TL0=15536%256;
2.3.3
直流电机输出脉冲计数器T1计数
T1工作在计数器模式方式一TMOD=0X50
初值为0,TL0=0,TH0=0
2.3.4
使用kill编程如下:
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voiddelayms(unsignedcharms);
charaa,bb,cc,dd;
ucharnum;/*定时次数每次100ms*/
sbitP30=P3^0;//按键1
sbitP31=P3^1;//按键2
sbitgw=P2^0;
sbitsw=P2^1;
sbitbw=P2^2;
sbitqw=P2^3;
/*******************控制位定义*************/
ucharsmg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//,1,2,3,4....的段码
uintx;//数码管显示的值
uinty;
display();
uintread();
key();//按键扫描
/****************主函数********************/
voidmain()
{
gw=0;
sw=0;
bw=0;
qw=0;//数码管初始化
P1=0xc0;
P2=0x00;
num=0;
//选方式1每隔100ms中断一次,中断十次,TMOD=0x51
TMOD=0x51;/*定时器T0工作于方式1,计数器T1工作于方式1*/
TH0=15536/256;/*定时器T0初值*//**/
TL0=15536%256;
TH1=0;/*计数器T0初值*/
TH0=0;
EA=1;/*开总中断*/
ET0=1;
TR0=1;/*启动T0*/
ET1=1;
TR1=1;/*启动T1*/
while
(1);//无限循环,等待中断
}
/*{
display();//数码管显示
//key();
}
}
/***********数码管显示**************/
display()
{
while
(1)
{aa=x/1000;//求速度千位,送到千位缓冲区保存
P1=smg[aa];
gw=0;
delayms
(1);
gw=1;
bb=(x/100)%10;//求速度百位,送到百位缓冲区保存
P1=smg[bb];
sw=0;
delayms
(1);
sw=1;
cc=(x/10)%10;//求速度十位,送到十位缓冲区保存
P1=smg[cc];
bw=0;
delayms
(1);
bw=1;
dd=x%10;//求速度个位,送到个位缓冲区保存
P1=smg[dd];
qw=0;
delayms
(1);
qw=1;
}if(P31==0)
{delayms
(1);
while(!
P31)
x=0;}
}
/*********延时函数**********/
voiddelayms(uintt)
{uinti,j;
for(i=0;ifor(j=0;j<20;j++);}
/*******定时器T1中断函数*********/
voidT0_time()interrupt1
{TH0=(15536)/256;//重装T1
TL0=(15536)%256;
TH1=0;
TL1=0;
num++;
if(num==10)
{num=0;
key();
}
}
/********按键扫描*********/
key()
{
if(P30==0)
{delayms
(1);
while(!
P30)//去抖动
x=984;
display();
}
/*if(P31==0)
{delayms
(1);
while(!
P31)//去抖动
x=984;*/
display();}
}
三、课程设计总结
两周的单片机课程设计终于顺利完成了,其中包含着快乐,也有辛酸。
我们的设计题目是“简易直流电机测速”,大家都觉得这个题目是比较简单的。
其实不然,做了之后,发现设计电路虽然简单,但我们认为它真正困难的地方是程序设计,不过在我们同心努力下最终完成了。
我们刚选该题目时,真的是一头雾水,硬件电路不知如何下手,更何谈解决程序那块,因为我们所学的都是单片机方面的理论知识,应用到实践中去还比较少。
不过,我们三人也没偷下懒,迅速分工去查阅和收集资料。
我们去了图书馆借一些参考书,上网找一些相关资料,并且请教指导老师。
不断地跟苗老师交流,苗老师很耐心的给我改程序。
通过不断努力,终于把proteus仿真做好了,并开始分一个人去焊接硬件电路,剩下的去整理和修改程序。
通过一番整理和修改后,在电脑上进行仿真,仿真成功后准备焊接电路板。
在焊接电路板中,我们首先对硬件电路进行布局,然后确认无误后,在电路板上进行焊接,这个过程我们觉得是做得比较快的,焊接电路板完工,细心检查后,进行通电测试。
结果数码管没有显示,通过检查,终于能显示正确数值。
当时我们的心情都是无比兴奋和快乐的,因为我们两周的辛苦没有白费。
在完成单片机课程设计后,我们发现我们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。
但通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。
从中增强了我们的团队合作精神,并让我们认识到把理论应用到实践中去是多么重要。
4、参考文献:
[1]张毅刚.单片机原理及应用[M].北京:
高等教育出版社,2003/12/1.
[2]赵珂.电子技术实践3[M].高等教育出版社
[3]闫石.数字电路技术基础
附录:
proteus仿真图
课程设计
评语
课程设计
成绩
指导教师
(签字)
年月日
注:
此表必须在同一页面,不能随意更改表格的大小!