基于单片机的超声波测距设计.doc
《基于单片机的超声波测距设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的超声波测距设计.doc(23页珍藏版)》请在冰点文库上搜索。
![基于单片机的超声波测距设计.doc](https://file1.bingdoc.com/fileroot1/2023-5/15/a2083e1f-06d3-4eab-86e0-c932b7dd4c73/a2083e1f-06d3-4eab-86e0-c932b7dd4c731.gif)
单片机课程设计
题目基于单片机的超声波测距设计
目录
1课程设计的目的 1
2课程设计任务与要求 1
3方案论证 2
4设计原理及功能说明 3
4.1超声波测距原理 3
4.2STC89C52RC单片机原理 4
4.3超声波测距系统框图 5
5单元电路的设计 5
5.1超声波模块电路 6
5.2数码管显示电路 6
5.3单片机最小电路 7
5.4键盘连接 7
6硬件的制作与调试 8
6.1硬件的制作 8
6.2调试 8
7总结 9
参考文献 10
附录1:
总体电路原理图 11
附录2:
实物图 12
附录3:
元器件清单 13
附录4:
编程程序 14
1课程设计的目的
1)单片机课程设计是在教学及实验基础上,对课程所学理论知识的深化和提高。
因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的小型单片机系统,并在实践的基本技能方面进行一次系统的训练。
能够较全面地巩固和应用“单片机”课程中所学的基本理论和基本方法,并初步掌握小型单片机系统设计的基本方法。
2)通过课程设计,培养综合运用本门课程及有关先修课程的基本知识去解决某一实际问题的实际本领,加深对该课程知识的理解。
主要培养以下能力:
查阅资料:
搜集与本设计有关部门的资料(包括从已发表的文献中和从生产现场中搜集)的能力;方案的选择:
树立既考虑技术上的先进性与可行性,又考虑经济上的合理性,并注意提高分析和解决实际问题的能力;迅速准确的进行工程计算的能力,计算机应用能力;用简洁的文字,清晰的图表来表达自己设计思想的能力。
3)培养学生正确的设计思想,理论联系实际的工作作风,严肃认真、实事求是的科学态度和勇于探索的创新精神。
培养学生综合运用所学知识分析和解决工程实际问题的能力。
培养学生独立思考、独立收集资料、独立设计规定功能的单片机系统的能力;培养分析、总结及撰写技术报告的能力。
通过课程设计,使学生在理论计算、结构设计、仿真绘图、查阅设计资料、标准与规范的运用和计算机应用方面的能力得到训练和提高。
巩固、深化和扩展学生的理论知识与初步的专业技能。
2课程设计任务与要求
1)使用51系列单片机、超声波模块等设计超声波测距系统;
2)利用超声波模块进行测量系统到前方障碍物之间的距离;
3)通过数码管显示出测距的距离。
3方案论证
在当代工业生产中,普遍应用的高科技测距方式有红外测距、激光测距及超声波测距三种。
1)红外线测距技术:
红外线测距的优点是成本便宜、仪器易制、安全性高,但其缺点较多,主要在于测量距离近、精度低、方向性差。
自然界红外光分布比较广泛,容易引起测量误差。
市场上的红外线测距器一般的测距范围在20cm-150cm之间,只适合于近距离的测量,而其测量的精度就更不值得一提了,只有1cm左右。
2)激光测距方式激光测距的优点是精确、距离远,缺点是需要注意人体安全,且制作的难度较大,成本较高,而且光学系统需要保持干净,否则将影响测量结果。
3)超声波测距方式 声音是与人类生活紧密相关的一种自然现象。
当声的频率高到超过人耳听觉的频率极限(根据大量实验数据统计,取整数为2000HZ)时,人们就会觉察不出周围声的存在,因而称这种高频率的声为“超”声。
超声波作为一种特殊的声波,同样具有声波传输的基本物理特性——反射、折射、干涉等等。
超声波测距就是利用其反射的特性。
超声波反射器不断发出某一频率的超声波,遇到被测物体后反射回反射波,然后超声波接收器接收到反射回来的信号,并将其转换为电讯号,测出发射波和反射波的时差,根据光速及计算公式,即可求出待测的距离,超声波测距的优点是比较耐脏污,即使传感器上有尘土,只要没有堵死就可以测量,测距范围比激光近,比红外远,一般为3cm-5cm,精度一般在1cm,有的达到1mm级,超声波测距的缺点是一定距离内有一定的束角,受周围障碍物影响大,适合于室内测量,且测量精度受到温度的一定影响。
所以在这里我们选用超声波模块HC-SR04进行测距。
-
4设计原理及功能说明
本章主要介绍单片机超声波测距的主要原理,包括超声波测距的原理和STC89C52单片机的原理。
4.1超声波测距原理
谐振频率高于20kHz的声波被称为超声波。
超声波为直线传播频率越高、绕射能力越弱、但反射能力越强。
利用超声波的这种性能就可制成超声传感器、或称为超声换能器、它是一种既可以把电能转化为机械能、又可以把机械能转化为电能的器件或装置。
换能器在电脉冲激励下可将电能转换为机械能、向外发送超声波、反之,当换能器处在接收状态时它可将声能(机械能)转换为电能。
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超声波发生器内部结构,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
超声波发射器向某一方向发射超声波在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离S=Ct/2,式中的C为超声波波速。
图4-1超声波测距原理框图
由于超声波也是一种声波,其声速C与温度有关,察出了几种不同温度下的声速。
在使用时,如果温度变化不大,则可认为声速是基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返的时间,即可求得距离。
这就是超声波测距仪的机理。
其系统框图如图4-1所示。
4.2STC89C52RC单片机原理
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
图4-2STC89C52引脚图
4.3超声波测距系统框图
图4-3超声波测距系统框图
本系统以单片机控制为核心元件,单片机控制超声波发送,经过超声波测距模块处理后有一段高电平脉冲发送到单片机。
经过单片机的运算将时间系数转化为距离,最后通过处理将距离信息输出到数码管显示。
5单元电路的设计
硬件是一个机器的基础,没有硬件,所有机器都不存在,本章主要介绍单片机超声波测距的硬件原理。
5.1超声波模块电路
图5-1超声波模块电路
超声波模块如图4-1所示。
从P2.6口给Trig口送一个10us的脉冲,超声波模块自动发出40Khz的超声波,单片机中断计时。
当遇到障碍物时超声波返回,并将一个高平信号送入单片机,中断关闭。
5.2数码管显示电路
图5-2数码管显示电路
显示电路采用采用LED数码管显示。
本系统采用动态显示方式。
该组数码管位共阳极数码管。
当有低电平驱动时,数码管亮。
5.3单片机最小电路
图5-3最小单片机电路
单片机最小电路是单片机能正常工作的最小外接电路单元。
是设计电路的核心部分,也是整个作品最关键,最重要的部分。
单片机最小电路包括:
复位电路,晶振电路。
5.4键盘连接
图5-4矩阵键盘电路
该矩阵键盘采用扫描式工作读入方式,扫描式键盘接口是一个输入输出接口,行是输入接口,而列式输出接口,输入接口主要功能是解决数据输入的缓冲问题,而列输出接口主要功能是进行数据保持能力。
系统扫描键盘是若有键按下,则执行主程序相应程序,实现相应功能。
6硬件的制作与调试
6.1硬件的制作
当设计好硬件电路之后,在Protues中画好电路图,然后进行调试。
在进行调试之前,先与设计的硬件电路图对照一下,看有没有画错,都确定之后调试,调试无误之后,即可在万能板上焊接。
当焊接的时候,仔细对照仿真图,焊接完了之后再检查一遍,看有没有多焊、漏焊、错焊和虚焊等情况。
在电路焊接中,先把单片机的最小系统焊接完成;在慢慢的把其它模块的外接电路焊接完成。
我在这焊接的过程中,主要遵守能不用条线的地方尽量不用条线,在元器件上先小的元器件开始焊接,在焊接高的元器件。
6.2调试
在Keil软件中输入软件程序,当软件程序的主程序以及各部分子程序都编完之后,进行软件编译。
在编译的过程中,下面提示框中提示有几个错误,找到相应的错误区域之后,再对比之前的程序,发现在输入程序的时候出现了错误,对比改正之后再进行编译,发现没有错误。
之后用烧录软件将生成的.hex文件烧写单片机中,按下独立按键1,数码管开始显示测量的距离;按下独立按键2时,数码管会保持前一秒所采集的数据;按下独立按键3时,会复位数码管。
7总结
为期一周的单片机课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,使我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
通过这次课程设计,本人在多方面都有所提高。
通过这次课程设计,综合运用本专业所学课程的理论和生产实际知识进行一次超声波测距设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了单片机的一些内容与编程的技巧。
提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
在这次设计过程中,体现出自己单独设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平
时学习的不足和薄弱环节,从而加以弥补。
参考文献
[1] 余发山,王福忠.单片机原理及应用技术 [M].徐州:
中国矿业大学出版社,2008.
[2] 蔡振江.单片机原理及应用[M].北京:
电子工业出版社,2007.
[3] 吴黎明.单片机原理及应用技术[M].北京:
科学出版社,2003.
[4] 刘乐善.微型计算机接口技术及应用[M].北京:
华中科技大学出版社,2004.
[5] 李伯成.基于MCS-51单片机的嵌入式系统的设计[M].北京:
电子工业出版社,2004.
[6] 吴黎明, 王桂棠, 洪添胜.单片机原理及应用技术[ M ] .北京:
科学出版社,2005.
附录1:
总体电路原理图
附录2:
实物图
附录3:
元器件清单
序号
名称
型号规格
数量
1
单片机
STC89C52
1
2
四位一体数码管
S530-A2
1
3
三极管
S9012
4
4
电阻
1K
16
5
独立按键
3
6
电解电容
22uf
1
7
晶振
11.0592MHZ
1
8
电容
22PF
2
9
超声波测距模块
HC-SR04
10
导线
若干
附录4:
编程程序
#include
#include
#defineRXp26
#defineTXp27
sbitRX=P2^6;
sbitTX=P2^7;
sbitp20=P2^0;
sbitp21=P2^1;
sbitp22=P2^2;
sbitp23=P2^3;
sbitp10=P1^0;
sbitp11=P1^1;
sbitp12=P1^2;
unsignedinttime=0,timer=0;
unsignedcharposit=0,a=0;
unsignedlongS=0;
bitflag=0;
unsignedcharconstdiscode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
unsignedchardisbuff[4] ={0,0,0,0,};
voidkey_scanf(void);
voidDelayUs2x(unsignedchart)
{ while(--t);}
voidDelayMs(unsignedchart)
{ while(t--) //大致延时1mS
{ DelayUs2x(245);
DelayUs2x(245);
}
}
voidDisplay(void) //扫描数码管
{
p20=0;p21=1;p22=1;p23=1;
P0=discode[disbuff[0]];
DelayUs2x(20);
P0=0xff;
p20=1;p21=0;p22=1;p23=1;
P0=discode[disbuff[1]];
DelayUs2x(20);
P0=0xff;
p20=1;p22=0;p21=1;p23=1;
P0=(discode[disbuff[2]])&0x7f;
DelayUs2x(20);
P0=0xff;
p20=1;p23=0;p21=1;p22=1;
P0=discode[disbuff[3]];
DelayUs2x(20);
P0=0xff;
}
/********************************************************/
voidConut(void)
{
floatS1;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S1=(time*1.7)/100;//算出来是CM
S=S1*10;
if((S>=7000)||flag==1)//超出测量范围显示“-”
{ flag=0;
disbuff[0]=10; //“-”
disbuff[1]=10; //“-”
disbuff[2]=10; //“-”
disbuff[3]=10; //“-”
}else{ disbuff[0]=S/1000;
disbuff[1]=S/100%10;
disbuff[2]=S/10%10;
disbuff[3]=S%10;
}
}
/********************************************************/
voidzd0()interrupt1 //T0中断用来计数器溢出,超过测距范围
{ flag=1; } //中断溢出标志
/********************************************************/
voidzd3()interrupt3 //T1中断用来扫描数码管和计800MS启动模块
{ key_scanf();
TH1=0xf8;
TL1=0x30;
Display();
timer++;
if(timer>=400)
{ timer=0;
TX=1; //800MS启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;}
}
/*********************************************************/
voidmain(void)
{TMOD=0x11; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8; //2MS定时
TL1=0x30;
ET0=1;//允许T0中断
ET1=1; //允许T1中断
TR1=1; //开启定时器
EA=1; //开启总中断
while
(1)
{ while(!
RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0;
key_scanf();
if(a==1) //关闭计数
Conut();} //计算
}
voidkey_scanf(void)
{ if(p10==0)
{ DelayMs(10);
if(p10==0)
a=1;
}if(p11==0)
{ DelayMs(10);
if(p11==0)
a=0;
}if(p12==0)
{ DelayMs(10);
if(p12==0)
{ a=0;
disbuff[0]=0;
disbuff[1]=0;
disbuff[2]=0;
disbuff[3]=0;}
}}
20