超声波测距课设.docx
- 文档编号:11099928
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:21
- 大小:116.50KB
超声波测距课设.docx
《超声波测距课设.docx》由会员分享,可在线阅读,更多相关《超声波测距课设.docx(21页珍藏版)》请在冰点文库上搜索。
超声波测距课设
单片机课程设计报告
课题名称超声波测距仪
专业
班级
学生姓名
学号
指导教师
摘要───────────────────────────3
一、总体方案介绍───────────────────────3
二、硬件设计──────────────────────────5
2.1显示电路────────────────────────5
2.2超声波发射电路─────────────────────6
2.3超声波接收电路─────────────────────7
三、软件设计──────────────────────────7
3.1主程序设计───────────────────────8
3.2超声波发射子程序及接收中断子程序────────────9
3.3关于超声波测距中的盲区问题───────────────10
四、系统调试──────────────────────────10
五、心得体会──────────────────────────11
六、参考文献──────────────────────────12
七、附件
摘要
随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。
但就目前技术水平来说,人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领域。
展望未来,超声波测距仪作为一种新型的非常重要有用的工具在各方面都将有很大的发展空间,它将朝着更加高定位高精度的方向发展,以满足日益发展的社会需求,如声纳的发展趋势基本为:
研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需要;继续发展采用低频线谱检测的潜艇拖曳线列阵声纳,实现超远程的被动探测和识别;研制更适合于浅海工作的潜艇声纳,特别是解决浅海水中目标识别问题;大力降低潜艇自噪声,改善潜艇声纳的工作环境。
无庸置疑,未来的超声波测距仪将与自动化智能化接轨,与其他的测距仪集成和融合,形成多测距仪。
随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。
在新的世纪里,面貌一新的测距仪将发挥更大的作用。
本设计采用以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。
整个电路采用模块化设计,由主程序、中断程序、发射子程序、接收子程序、显示子程序等模块组成。
各探头的信号经单片机综合分析处理,实现超声波测距仪的各种功能。
在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。
一、总体方案介绍
本文所研究的超声波测距仪利用超声波指向性强、能量消耗缓慢、传播距离较远等优点,即用超声波发射器向某一方向发送超声波,同时在发射的时候开始计时,在超声波遇到障碍物的时候反射回来,超声波接收器在接收到反射回来的超声波时,停止计时。
设超声波在空气中的传播速度为V,在空气中的传播时间为T,汽车与障碍物的距离为S,S=VT/2,这样可以测出汽车与障碍物之间的距离,然后在LED显示屏上显示出来。
其工作机理是依据压电材料的正逆压电效应,利用逆压电效应产生超声波,即逆压电效应是在压电材料上加上某种特定频率的交变正弦信号,材料就会产生随所加电压的变化规律而变化的机械形变,这种机械形变推动周围介质振动,产生疏密相间的机械波,如果其振动频率在超声范围内,这种机械波就是超声波。
本文所设计的超声波测距仪主要由AT89C52单片机、超声波发射电路、超声波接收放大电路、显示电路.
首先由单片机驱动产生12MHZ晶振,由超声波发射探头发送出去,在遇到障碍物反射回来时由超声波接收探头检测到信号,然后经过滤波、放大、整形之后送入单片机进行计算,把计算结果输出到LED液晶显示屏上。
超声波发生器可以分为两大类:
一类是用电气方式产生超声波;另一类是用机械方式。
产生超声波。
电气方式包括压电型、电动型等;机械方式有加尔统笛、液和气流旋笛等。
它们所产生的超声波的频率,功率和声波特性各不相同,因而用途也各不相同。
目前在近距离测量方面较为常用的是压电式超声波换能器。
综上分析决定采用AT89C51单片机作为主控制器,其中超声波系统设计如图1.1所示
图1.1
二、硬件设计
硬件电路可分为单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。
2.1显示电路
本系统单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
超声波测距的硬件示意图如图2.1所示:
单片机采用89S52或其兼容系列。
采用12MHz高精度的晶振,已获得较稳定的时钟频率,减少测量误差。
单片机用P1.0端口输出超声波换能器所需的40KHz的方波信号,利用外中断0口检测超声波接收电路输出的返回信号。
图2.1
表2.1
显示字符
共阳极段选码
dpgfedcba
显示字符
共阳极段选码
dpgfedcba
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
“灭”
FFH
2.2超声波发射电路
超声波发射电路原理图如图2.2所示。
发射电路主要有反向器和超声波发生换能器T构成,单片机P1.0的端口输出40KHz方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极。
用这种推挽形式将方波信号加到超声波换能器两端,可以提高超声波的发射强度。
输出端采用两个反向器并联,用以提高驱动能力。
上拉电阻R10,R11一方面可以提高反向器74lS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由震荡的时间。
图2.2
2.3超声波接收电路
集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38KHZ与测距的超声波频率40KHZ较为接近,可以利用它制作超声波检测接收电路(如图3-5)。
实验证明用CX20106A接受超声波(无信号时输出高电平),具有很高的灵敏度和较强的抗干扰能力。
适当更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。
图2.3
三、软件设计
超声波测距的原理,即超声波发生器T在某一时刻发出一个超声波信号,当这个超声波信号遇到被测物体后反射回来,就被超声波接收器R所接收到。
这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可以计算出超声波发生器与反射物体的距离。
距离的计算公式:
d=s/2=(c*t)/2
其中d为被测物与测距器的距离,s为声波的来回路程,c为声波,t为声波来回所用的时间。
其中声速c与温度有关。
C=331.5+0.607*T
如果要提高测距精确度,则必须考虑温度的影响,也可取室温简化电路设计,将温度传感器作为扩展电路,在力所能及的情况下完成。
3.1主程序设计
主程序首先是对系统环境初始化,设定定时器T0工作模式为6位定时计数器模式,置位总中断允许位EA并给显示端口P0和P2清0。
然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms(这也就是超声波测距器会有一个最小测距离的原因)后,才打开外中断0接收返回的超声波信号。
由于采用的是12MHz的晶振,计算器每计一个数就是1us,,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(1-2)计算,即可得被测物体与测距器之间的距离,设计时取20℃时的声速为344m/s。
主程序流程图
测距程序流程图
3.2超声波发射子程序及接收中断子程序
超声波发生子程序的作用是通过P1.0端口发送2个左右超声波脉冲信号(频率约为40kHz的方波),脉冲宽度为12us左右,同时把计数器T0打开进行计时。
超声波发生子程序较简单,但要求程序运行时间准确,所以采用汇编语言编程。
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平)立即进入中断程序。
进入该中断程序后立即关闭计时器T0停止计时,并将测距成功标志字赋值1。
如果当计时器溢出是还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示本次测距不成功。
3.3关于超声波测距中的盲区问题
超声波测距是根据超声波发射到接收经过的时间来测量介质之间的距离,但超声波的发射端和接收端之间可能不经过物体的反射,直接接收到发射的超声波,这时测量的距离就不是物体间的距离,而是超声波发射端与接收端的距离,这段距离就是盲区。
超声波盲区是一定要避免的,通常用软件控制,方法如下,单片机控制模组每次发生若干完整的40KHZ的脉冲信号,发射信号前打开计数器T0,进行计时,等计时到一定值后再开启检测回波信号,这个计时时间要大于超声波从发射端传到接收端时间,这样就可避免干扰,而测距的最小距离要大于发射端到接收端的距离。
四、系统调试
超声波测距仪的制作和调试都比较简单,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。
若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。
根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。
制作完成并调试好后,便可将程序编译好下载到单片机试运行。
根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。
根据所设计的电路参数和程序,测距仪能测的范围为0.07~5.5m,测距仪最大误差不超过1cm。
系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。
调试注意事项:
一、超声波探头表面严禁用手及其它物体触摸以免产生信号 滞后性及损坏
二、所有IC器件最好拔下烙铁插头再焊接,以免损坏.
三、按图安装完毕后接上12V电源,测距部分只要安装正确 不必进行调试即可正常工作,同时接收电路应用铁皮屏蔽以增加抗干扰的性能.以上所有芯片采用DIP封装如要缩小体积所有器件可用贴片封装.
四、使用注意事项:
在测距中应保证测距仪与被测物体距离为定值,要和被测物体成一条直线,使测得距离读数的准确性.
五、心得体会
为期一周的单片机课程设计结束了,最大的收获是系统的了解的利用单片机制作一个产品的过程,同时巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学到理论知识与实践相结合起来,从理论中得出结论才能真正的服务于工作。
这次实设计中遇到很多实际性的问题,在实际设计中才发现,书本上理论性的东西在实际运用中还是有一定出入的,所以有些问题不但要深入理解,而且要不断更正自己的错误思维。
很多子程序是可以借鉴别人的,但是程序之间的衔接才是关键,因此可以说系统的设计是软件与硬件的结合,二者是密不可分的。
这次的课设也激发了我对单片机的学习兴趣,我想这将对我今后的学习产生积极的影响。
其次,这次的课设让我充分的认识到团队合作的重要性,只有分工合作才能保证工作的有条不紊。
六、参考文献
【1】史彦斌,段哲民,高宪军,基于AT89C2051的超声波测距仪设计,新技术新仪器,2007
【2】周凯,赵望达,赵迪,刘静,高精度超声波测距系统,测试技术卷,2007
【3】常静,贺焕林,减少超声波测距仪盲区的研究,中国棉花加工,2005
附件一:
程序
#include
#include
unsignedcharintt0;
unsignedintx;
unsignedinttemper;
floatn;
floats;
floattt;//计算时候温度两位温小数
sbitsent=P2^0;//发射超声波
sbitreceive=P3^2;
sbitled1=P1^1;//成功标志
sbitled2=P1^5;//报警标志
sbitled3=P1^6;//停止
sbitled4=P1^7;//失败标志
sbitbegin=P3^3;//k1开始按钮
sbitstop=P3^6;//k2停止按钮
sbitwendu=P3^7;//k3温度/
sbitH4052B=P1^2;
sbitH4052A=P1^3;
unsignedcharset_s=20;
unsignedcharfail;
/*------超声波40khz发射10个,大约200us*/
voidcsb_40k()
{unsignedchari=30;//8.6cm
while(i--)
{_nop_();_nop_();_nop_();_nop_();sent=~sent;
}
}
/*------T0溢出中断-----*/
voidtimer0()interrupt1
{
TR0=0;//T0停止计数
EX0=0;
outseg[0]=seg[2][0];//显示缓冲区是FAIL
outseg[1]=seg[2][1];
outseg[2]=seg[2][2];
outseg[3]=seg[2][3];
}
voidtimer1()interrupt3
{
TF1=0;TH1=0;TL1=100;led4=~led4;
}
/*------外部中断0,-----*/
voidintr0()interrupt0
{
TR0=0;//T0停止计数
EX0=0;//关外部中断
led1=0;//测距成功标志
led3=1;
led4=1;//灭测距失败标志
n=TH0;//
n=n*256+TL0;//n存放计数
intt0=1;
}
//主函数
voidmain()
{
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);
while(begin==0);//按键松开之后动作
TH0=0x00;//计数清零
TL0=0x00;//
ET0=1;//定时器0中断允许
TR0=1;//T0计数计时
csb_40k();//发射6
delay_18B20(20);//14.7避开盲区20cm
EX0=1;
}
}
elseif((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);
}
elseif(wendu==0)
{
set_s--;
while(wendu==0);
}
elseif(stop==0)
{
while(stop==0);
gotob;}
buf[2]=(unsignedchar)(set_s/10%10);
buf[3]=(unsignedchar)(set_s%10);
outseg[0]=0;
outseg[1]=0;
outseg[2]=seg[0][buf[2]];
outseg[3]=seg[0][buf[3]];
display();
}
}
}
elseif((wendu==0)&(begin==1)&(stop==1))//单独测温度
{
delay_18B20(2000);//去抖动
if((wendu==0)&(begin==1)&(stop==1))
{while(wendu==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(s>51)
{
s=0;
}
}
if(fail==2)
{s+=18;
fail=0;
}
if(s>set_s)TR1=1;//s大于设置值报警,响,led4亮
else{
led4=1;
TR1=0;
}
if(s<100)//小于100显示**。
**
{
x=(unsignedint)(s*100);//取前四位放入x
buf[0]=(unsignedchar)(x/1000);//距离前四位放入buf中
buf[1]=(unsignedchar)(x/100%10);
buf[2]=(unsignedchar)(x/10%10);
buf[3]=(unsignedchar)(x%10);
outseg[0]=seg[0][buf[0]];
outseg[1]=seg[1][buf[1]];
outseg[2]=seg[0][buf[2]];
outseg[3]=seg[0][buf[3]];
}
else//大于100显示***。
*
{
x=(unsignedint)(s*10);//取前四位放入x
buf[0]=(unsignedchar)(x/1000);//距离前四位放入buf中
buf[1]=(unsignedchar)(x/100%10);
buf[2]=(unsignedchar)(x/10%10);
buf[3]=(unsignedchar)(x%10);
outseg[0]=seg[0][buf[0]];
outseg[1]=seg[0][buf[1]];
outseg[2]=seg[1][buf[2]];
outseg[3]=seg[0][buf[3]];
}
intt0=0;
display();
}
}
}
//显示
#include
#defineoutP0
unsignedcharseg[3][10]={{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}};//FAIL
unsignedcharbuf[4]={2,0,0,9};
unsignedcharoutseg[4]={0x67,0xeb,0xeb,0xee};
unsignedcharstopp[4]={0x04,0x04,0x04,0x04};
sbitP25=P2^3;
sbitP26=P2^4;
sbitP23=P2^5;
sbitP24=P2^6;
voiddelay(unsignedinti)//25us+(i-1)*9
{
while(i--);
}
/*-----显示----*/
voiddisplay(void)
{unsignedchari;
for(i=0;i<4;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=outseg[i];
delay(200);
}
}
#include
sbitDQ=P3^4;//定义1820通信端口
voiddelay_18B20(unsignedinti)//25us+(i-1)*9
{
while(i--);
}
/*-------DS18B20测温度-------------*/
//初始化函数
Init_DS18B20(void)
{
unsignedcharx=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则初始化失败
delay_18B20(10);
}//读一个字节
ReadOneChar(vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超声波 测距