超声波测距课设.docx

上传人:豆**** 文档编号:28553461 上传时间:2022-07-28 格式:DOCX 页数:14 大小:26.83KB
返回 下载 相关 举报
超声波测距课设.docx_第1页
第1页 / 共14页
超声波测距课设.docx_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《超声波测距课设.docx》由会员分享,可在线阅读,更多相关《超声波测距课设.docx(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精品文档,仅供学习与交流,如有侵权请联系网站删除单片机课程设计报告课题名称 超声波测距仪 专 业 班 级 学生姓名 学 号 指导教师 目录摘要 3一、总体方案介绍 3二、硬件设计52.1显示电路 5 2.2超声波发射电路 6 2.3超声波接收电路 7三、软件设计7 3.1主程序设计 8 3.2超声波发射子程序及接收中断子程序 9 3.3关于超声波测距中的盲区问题 10四、系统调试10五、心得体会11六、参考文献12七、附件摘要随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。但就目前技术水平来说,人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业

2、领域。展望未来,超声波测距仪作为一种新型的非常重要有用的工具在各方面都将有很大的发展空间,它将朝着更加高定位高精度的方向发展,以满足日益发展的社会需求,如声纳的发展趋势基本为:研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需要;继续发展采用低频线谱检测的潜艇拖曳线列阵声纳,实现超远程的被动探测和识别;研制更适合于浅海工作的潜艇声纳,特别是解决浅海水中目标识别问题;大力降低潜艇自噪声,改善潜艇声纳的工作环境。无庸置疑,未来的超声波测距仪将与自动化智能化接轨,与其他的测距仪集成和融合,形成多测距仪。随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具

3、有创造力。在新的世纪里,面貌一新的测距仪将发挥更大的作用。本设计采用以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。整个电路采用模块化设计,由主程序、中断程序、发射子程序、接收子程序、显示子程序等模块组成。各探头的信号经单片机综合分析处理,实现超声波测距仪的各种功能。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。一、 总体方案介绍本文所研究的超声波测距仪利用超声波指向性强、能量消耗缓慢、传播距离较远等优点,即用超声波发射器向某一方向发送超声波,同时在发射的时候开始计时,在超声波遇到障碍物的时候反射回来,超声波接收器在接收

4、到反射回来的超声波时,停止计时。设超声波在空气中的传播速度为V,在空气中的传播时间为T,汽车与障碍物的距离为S,S=VT/2,这样可以测出汽车与障碍物之间的距离,然后在LED显示屏上显示出来。其工作机理是依据压电材料的正逆压电效应,利用逆压电效应产生超声波,即逆压电效应是在压电材料上加上某种特定频率的交变正弦信号,材料就会产生随所加电压的变化规律而变化的机械形变,这种机械形变推动周围介质振动,产生疏密相间的机械波,如果其振动频率在超声范围内,这种机械波就是超声波。本文所设计的超声波测距仪主要由AT89C52单片机、超声波发射电路、超声波接收放大电路、显示电路.首先由单片机驱动产生12MHZ晶振

5、,由超声波发射探头发送出去,在遇到障碍物反射回来时由超声波接收探头检测到信号,然后经过滤波、放大、整形之后送入单片机进行计算,把计算结果输出到LED液晶显示屏上。超声波发生器可以分为两大类:一类是用电气方式产生超声波;另一类是用机械方式。产生超声波。电气方式包括压电型、电动型等;机械方式有加尔统笛、液 和气流旋笛等。它们所产生的超声波的频率,功率和声波特性各不相同,因而用途也各不相同。目前在近距离测量方面较为常用的是压电式超声波换能器。综上分析决定采用AT89C51单片机作为主控制器,其中超声波系统设计如图1.1所示超声波接收 单片机控制器超声波发送LED显示扫描驱动图1.1二、硬件设计硬件电

6、路可分为单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。2.1显示电路本系统单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。 超声波测距的硬件示意图如图2.1所示:单片机采用89S52或其兼容系列。采用12MHz高精度的晶振,已获得较稳定的时钟频率,减少测量误差。单片机用P1.0端口输出超声波换能器所需的40KHz的方波信号,利用外中断0口检测超声波接收电路输出的返回信号。图2.1表2.1显示字符共

7、阳极段选码dp gfedcba显示字符共阳极段选码dp gfedcba 0 C0H A 88H 1 F9H B 83H 2 A4H C C6H 3 B0H D A1H 4 99H E 86H 5 92H F 8EH 6 82H P 8CH 7 F8H y 91H 8 80H 8. 00H 9 90H“灭” FFH2.2超声波发射电路超声波发射电路原理图如图2.2所示。发射电路主要有反向器和超声波发生换能器T构成,单片机P1.0的端口输出 40KHz方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极。用这种推挽形式将方波信号加到超声波换能器两端

8、,可以提高超声波的发射强度。输出端采用两个反向器并联,用以提高驱动能力。上拉电阻R10,R11一方面可以提高反向器74lS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由震荡的时间。图2.22.3超声波接收电路集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38KHZ与测距的超声波频率40KHZ较为接近,可以利用它制作超声波检测接收电路(如图3-5)。实验证明用CX20106A接受超声波(无信号时输出高电平),具有很高的灵敏度和较强的抗干扰能力。适当更改电容C4 的大小,可以改变接收电路的灵敏度和抗干扰

9、能力。图2.3三、软件设计超声波测距的原理,即超声波发生器T在某一时刻发出一个超声波信号,当这个超声波信号遇到被测物体后反射回来,就被超声波接收器R所接收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可以计算出超声波发生器与反射物体的距离。距离的计算公式:d=s/2=(c*t)/2其中d为被测物与测距器的距离,s为声波的来回路程,c为声波,t为声波来回所用的时间。其中声速c与温度有关。C=331.5+0.607*T如果要提高测距精确度,则必须考虑温度的影响,也可取室温简化电路设计,将温度传感器作为扩展电路,在力所能及的情况下完成。3.1主程序设计主程序首先是对系统环境初始化,

10、设定定时器T0工作模式为6位定时计数器模式,置位总中断允许位EA并给显示端口P0和P2清0。然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms(这也就是超声波测距器会有一个最小测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用的是12MHz的晶振,计算器每计一个数就是1us,,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(1-2)计算,即可得被测物体与测距器之间的距离,设计时取20时的声速为344m/s。开始系统初始化显示结果0.5s发射超声波脉冲计算距离等待反射超声波主程序

11、流程图测距程序流程图3.2超声波发射子程序及接收中断子程序超声波发生子程序的作用是通过P1.0端口发送2个左右超声波脉冲信号(频率约为40kHz的方波),脉冲宽度为12us左右,同时把计数器T0打开进行计时。超声波发生子程序较简单,但要求程序运行时间准确,所以采用汇编语言编程。超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平)立即进入中断程序。进入该中断程序后立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出是还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示本次测距不成功。3.3

12、关于超声波测距中的盲区问题超声波测距是根据超声波发射到接收经过的时间来测量介质之间的距离,但超声波的发射端和接收端之间可能不经过物体的反射,直接接收到发射的超声波,这时测量的距离就不是物体间的距离,而是超声波发射端与接收端的距离,这段距离就是盲区。超声波盲区是一定要避免的,通常用软件控制,方法如下,单片机控制模组每次发生若干完整的40KHZ的脉冲信号,发射信号前打开计数器T0,进行计时,等计时到一定值后再开启检测回波信号,这个计时时间要大于超声波从发射端传到接收端时间,这样就可避免干扰,而测距的最小距离要大于发射端到接收端的距离。四、系统调试超声波测距仪的制作和调试都比较简单,安装时应保持两换

13、能器中心轴线平行并相距48cm,其余元件无特殊要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.075.5m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。调试注意事项:一、超声波探头表面严禁用手

14、及其它物体触摸以免产生信号滞后性及损坏二、所有IC器件最好拔下烙铁插头再焊接,以免损坏.三、按图安装完毕后接上12V电源,测距部分只要安装正确不必进行调试即可正常工作,同时接收电路应用铁皮屏蔽以增加抗干扰的性能.以上所有芯片采用DIP封装如要缩小体积所有器件可用贴片封装.四、使用注意事项:在测距中应保证测距仪与被测物体距离为定值,要和被测物体成一条直线,使测得距离读数的准确性.五、心得体会为期一周的单片机课程设计结束了,最大的收获是系统的了解的利用单片机制作一个产品的过程,同时巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合的重要性,

15、只有理论知识是远远不够的,只有把所学到理论知识与实践相结合起来,从理论中得出结论才能真正的服务于工作。这次实设计中遇到很多实际性的问题,在实际设计中才发现,书本上理论性的东西在实际运用中还是有一定出入的,所以有些问题不但要深入理解,而且要不断更正自己的错误思维。很多子程序是可以借鉴别人的,但是程序之间的衔接才是关键,因此可以说系统的设计是软件与硬件的结合,二者是密不可分的。这次的课设也激发了我对单片机的学习兴趣,我想这将对我今后的学习产生积极的影响。其次,这次的课设让我充分的认识到团队合作的重要性,只有分工合作才能保证工作的有条不紊。六、参考文献【1】史彦斌,段哲民,高宪军,基于AT89C20

16、51的超声波测距仪设计,新技术新仪器,2007【2】周凯,赵望达,赵迪,刘静,高精度超声波测距系统,测试技术卷,2007【3】常静,贺焕林,减少超声波测距仪盲区的研究,中国棉花加工,2005附件一:程序#include#includeunsigned char intt0;unsigned int x ;unsigned int temper ;float n;float s;float tt;/计算时候温度两位温小数sbit sent=P20; /发射超声波sbit receive=P32;sbit led1=P11; / 成功标志sbit led2=P15; / 报警标志sbit led3

17、=P16;/ 停止sbit led4=P17; / 失败标志sbit begin=P33;/k1开始按钮sbit stop=P36;/k2停止按钮sbit wendu=P37;/k3 温度/sbit H4052B=P12;sbit H4052A=P13;unsigned char set_s=20; unsigned char fail; /*-超声波40khz发射10个,大约200us*/void csb_40k() unsigned char i=30; /8.6cm while(i-) _nop_(); _nop_();_nop_();_nop_(); sent=sent; /*-T0溢

18、出中断-*/void timer0() interrupt 1 TR0=0; /T0停止计数 EX0=0; outseg0=seg20;/显示缓冲区是FAIL outseg1=seg21; outseg2=seg22; outseg3=seg23; void timer1() interrupt 3 TF1=0; TH1=0; TL1=100; led4=led4; /*-外部中断0, -*/ void intr0() interrupt 0 TR0=0; /T0停止计数 EX0=0; /关外部中断 led1=0; /测距成功标志led3=1; led4=1; /灭测距失败标志 n=TH0;

19、/ n=n*256+TL0; /n存放计数intt0=1; /主函数void main() TMOD=0x11; /定时器0计数TH1=0;TL1=100;ET1=1;EA=1; /开总中断H4052B=0;H4052A=1;x=ReadTemperature();while(1) /循环 b:display(); /显示if(begin=0)&(stop=1)&(wendu=1) delay_18B20(1000);/去抖动 if(begin=0)&(stop=1)&(wendu=1)/开始 H4052B=0; H4052A=1; fail=1; delay_18B20(1000); whi

20、le(begin=0);/按键松开之后动作 TH0=0x00; /计数清零 TL0=0x00; /ET0=1; /定时器0中断允许TR0=1; /T0计数计时csb_40k(); /发射 6delay_18B20(20); /14.7避开盲区20cmEX0=1; else if(stop=0)&(begin=1)&(wendu=1) delay_18B20(1000);/去抖动 if(stop=0)&(begin=1)&(wendu=1)/停止 while(stop=0);while(1) if(begin=0) set_s+;while(begin=0); else if(wendu=0)

21、set_s-;while(wendu=0); else if(stop=0) while(stop=0); goto b; buf2=(unsigned char)(set_s/10%10); buf3=(unsigned char)(set_s%10); outseg0=0; outseg1=0; outseg2=seg0buf2; outseg3=seg0buf3;display(); else if(wendu=0)&(begin=1)&(stop=1)/单独测温度 delay_18B20(2000);/去抖动 if(wendu=0)&(begin=1)&(stop=1) while(w

22、endu=0); H4052B=1; H4052A=0;fail=2;delay_18B20(1000);delay_18B20(1000); while(begin=0);/按键松开之后动作 TH0=0x00; /计数清零 TL0=0x00; / ET0=1; /定时器0中断允许 TR0=1; /T0计数计时 csb_40k(); /发射 6 delay_18B20(20); /14.7避开盲区20cm EX0=1;if(intt0=1)s=336*n/20000; /计算距离if(fail=1)s-=5;if(s51) s=0;if(fail=2)s+=18; fail=0;if(sset

23、_s) TR1=1; /s大于设置值报警,响,led4亮 else led4=1; TR1=0; if(s100)/小于100显示*。*x=(unsigned int)(s*100); /取前四位放入x buf0=(unsigned char)(x/1000); /距离前四位放入buf中 buf1=(unsigned char)(x/100%10); buf2=(unsigned char)(x/10%10); buf3=(unsigned char)(x%10); outseg0=seg0buf0; outseg1=seg1buf1; outseg2=seg0buf2; outseg3=se

24、g0buf3;else /大于100显示*。*x=(unsigned int)(s*10); /取前四位放入x buf0=(unsigned char)(x/1000); /距离前四位放入buf中 buf1=(unsigned char)(x/100%10); buf2=(unsigned char)(x/10%10); buf3=(unsigned char)(x%10);outseg0=seg0buf0;outseg1=seg0buf1;outseg2=seg1buf2;outseg3=seg0buf3; intt0=0;display();/显示#include#define out P

25、0unsigned char seg310=0xeb,0x0a,0x67,0x6e,0x8e, 0xec,0xed,0x2a,0xef,0xee, /0-9 0xfb,0x1a,0x77,0x7e,0x9e, 0xfc,0xfd,0x3a,0xff,0xfe, /0-9带小数点 0xa5,0xaf,0x0a,0xc1; /FAILunsigned char buf4=2,0,0,9;unsigned char outseg4= 0x67,0xeb,0xeb,0xee;unsigned char stopp4=0x04,0x04,0x04,0x04;sbit P25=P23;sbit P26=P

26、24;sbit P23=P25;sbit P24=P26;void delay(unsigned int i) /25us+(i-1)*9while(i-);/*-显示-*/void display(void)unsigned char i; for(i=0;i4;i+) if(i=0) P25=0; P26=1; P23=1; P24=1; if(i=1) P25=1; P26=0; P23=1; P24=1; if(i=2) P25=1; P26=1; P23=0; P24=1; if(i=3) P25=1; P26=1; P23=1; P24=0; out=outsegi; delay(

27、200);#includesbit DQ = P34; /定义1820通信端口void delay_18B20(unsigned int i) /25us+(i-1)*9while(i-);/*-DS18B20测温度 -*/初始化函数Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay_18B20(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(4); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则

28、初始化失败 delay_18B20(10);/读一个字节ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); return(dat);/写一个字节WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5);

29、DQ = 1; dat=1;/读取温度ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay_18B20(100);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();/传感器返回值除16得实际温度值/为了得到2位小数位,先乘100,再除16,考虑整型数据长度,/技巧处理后先乘25,再除4,除4用右移实现t = (b*256+a)*25;return(t2); /计算距离使用的温度t【精品文档】第 14 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com