1、超声波测距李单片机课程设计课题:超声波测距离系 别:电气与信息工程学院专 业:电子信息工程 姓 名:陈元威 学 号:093411118 河南城建学院2014年01月02日成绩评定一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。二、评分评分项目设计报告评分答辩评分平时表现评分合 计 (100分)任务完成情 况(20分)课程设计报告质量(40分)表达情况(10分)回答问题情 况(10分)工作态度与纪律(10分)独立工作能力(10分)得分课程设计成绩评定班级 姓名 学号成绩: 分(折合等级 )指导教师签字 年 月 日一、设计目的1、培养学生正确的设计思想,提高学生理论联系实际
2、的能力,增强严肃认真、实事求是的科学态度和勇于探索的创新精神。2、锻炼学生自学软件的能力及分析问题、解决问题的能力。3、巩固、深化和扩展学生的理论知识与初步的专业技能。二、设计要求1、设计一个超声波测距器,用于汽车倒车、建筑施工工地以及一些工业现场的位置控制;2、要求测量范围在0.104.00米,测量精度1厘米,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。三、总体设计本方案以stc89c52为核心,通过编程(C语言)来实现该单片机对外围电路的适时控制,并提供给外围电路各种所需的信号和接收超声波反射回来的微小信号,包括频率振荡信号,时钟信号,数据处理信号和显示信号等等。其核心功能是对
3、距离的检测并实时的进行距离的显示,在检测距离方面通过发射端与接收端的时间差来计算,理论上所测距离与其时间差成线性关系,所以可以通过线性回归统计方法求出实际距离与所求距离的关系。该电路简化了一些外围电路,任能做到较为精确的测量工作,由于是采用程控操作,所以其移植性和可扩展性还是较好。在设计时分,分模块进行设计来实现各部分功能,简化了在设计过程中的调试难度。3.1、超声波测距的原理谐振频率高于20 kHz 的声波称为超声波。超声波为直线传播方式, 频率越高, 反射能力越强, 而绕射能力越弱。利用超声波的这种特性, 常常用渡越时间检测法进行距离的测量。其工作原理是:换能器向介质发射超声波, 声波遇到
4、目标后必然有反射回波作用在换能器上。若已知介质中声速为c, 回波到达时刻与发射波时刻的时间差为t, 就可以计算出发射点与反射点的距离s:s= c.t/2 (1)3.2、超声波传感器的工作原理为了研究和利用超声波, 人们已经设计和制成了许多超声波发生器。总体上讲, 超声波发生器可以分为两大类: 即用电气方式和机械方式产生超声波。前者包括压电型、磁致伸缩型和电动型等; 后者有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同, 因而用途也各不相同, 目前较为常用的是压电式超声波发生器,压电式超声波换能器是利用压电晶体谐振来工作的。内部结构如图1所示,它有两个压电晶片和一个
5、共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是超声波发生器;如没加电压,当共振板接受到超声波时,将压迫压电振荡器作振动,将机械能转换为电信号,这时它就成为超声波接受转换器。超声波发射转换器与接受转换器其结构稍有不同。图1、超声波传感器结构 以下为型号T/R40-10的超声波传感器的特性参数(T-发射,R-接收,40-中心频率单位kHZ,10-外壳直径单位mm)四、各部分电路的设计4.1、各单元模块功能介绍及电路设计该系统是以STC89C52型单片机为主体而搭建的,外部连接有时钟电路和复位电路,1602液晶显示屏和
6、4个超声波测距模块,结构清晰,总体电路模块框图如下图2:图2、总体电路模块框图工作原理:超声波测距器工作原理:打开电源,整个电路通电,单片机执行程序,对系统环境初始化,设置定时器T0工作模式,启动T0, 调用超声波发生子程序,等待反射超声波,计算距离,显示距离;重复。工作过程中,相关的子程序和中断程序被执行,相应硬件配合行动,显示测量结果。4.2、STC89C52型单片机介绍STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 Flash 存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储
7、器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得ST89C52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 ST89C52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,ST89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片
8、机一切工作停止,直到下一个中断或硬件复位为止。其引脚图如图3所示:P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使
9、用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flas
10、h编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用。第二功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断0) P3.3 INT1(外中断1) P3.4 TO(定时/计数器0) P3.5 T1(定时/计数器1) P3.6 WR(外部
11、数据存储器写选通) P3.7 RD(外部数据存储器读选通) 图3、单片机芯片和其引脚图4.3、各个模块间的连接4.3.1、系统设计该系统是以STC89C52型单片机为主体而搭建的,外部连接了时钟电路、复位电路、1602液晶显示屏和4个超声波测距模块。(1)、单片机单片机的型号是STC89C52,其主要外部I/O连接如下:P0.0-P0.71602显示端口P2.0-P2.21602读写控制P1.1 、P1.3、 P1.5、 P1.7发波端P1.0 、P1.2、 P1.4、 P1.6接收端图4、单片机模块4.3.2、电源电路 图5、电源模块4.3.3、时钟电路 图6、时钟模块 4.3.4、复位电路
12、 图7、复位模块4.3.5 液晶显示电路 图8、液晶显示模块4.3.6测距电路 图9、超声波测距的电路 图10、超声波测距模块(1)工作原理a采用IO口TRIG触发测距,给至少10us的高电平信号;b模块自动发送8个40KHZ的方波,自动检测是否有信号返回;c有信号返回时,通过IO口ECHO输出一个高电平,高电平持续时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速)/2。(2)引脚定义VCC:供5V电源,TRIG:触发控制,信号输入,ECHO:回响信号输出,OUT:开关量输出(当报警模块使用),GND:为地线。五、软件和硬件的设计5.1、软件设计分析完成了系统的硬件设计之后,接下
13、来的就是系统软件设计,此设计所需要完成的主要是针对系统功能的实现及数据的处理和应用。由以上所述系统硬件设计和各个电路功能,系统软件需要实现以下功能:1、信号控制。在系统硬件中,已经完成了发射电路、回拨检测接收电路的设计。在系统软件设计中只需完成发射脉冲信号及输出显示。2、数据存储。测距系统中需要得到发射信号与接收回波的时间差,需要读出计时器的计数值,然后存储在RAM中,而且每次发射周期的开始,需要对计数器清零,以备后续处理。3、信号处理。RAM中存储的计数值并不能作为距离值直接显示出来,有这个时间后,可以通过程序来计算出来。4、距离显示。5.2、软件设计思路 超声波软件测距软件设计主要由主程序
14、,发射子程序,外部中断接收子程序及显示子程序。程序可以由汇编和C来编写,汇编语言虽然有很高的效率和精确度,但使用起来比较难以掌握,本文主要采用C语言程序来完成各个功能。5.2.1、主程序主程序流程图如图11所示。主程序首先对系统环境初始化,设置T0工作模式为16位的定时器模式,及计数初值,然后使超声波发射出一串40kHZ的方波。由于采用12MHZ的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0的数(即超声波来回所用的时间)按公式计算可测得被测物体与测距仪之间的距离,测出距离后结果在液晶屏显示,然后再循环进行下一次距离的测量。 图11、主流程图5.2.2、超声波测距子程序
15、超声波发射子程序在P1.1(为例)口产生40kHZ方波脉冲宽度约12us,作为超声波发射器的输出信号。一旦接收到超声波返回信号后(INT0引脚出现低电平),就立即进入中断程序。进入中断程序后就立即关闭定时器,T0停止计时,并将接收到的标志位为1,,然后在主函数里调用计算距离公式,在显示出来。流程图如图12: 图12、子程序流程图5.2.3超声波延时子程序在传感器以脉冲发射方式工作下,电压很高的发射电脉冲在激励传感器的同时也进入接收部分,此时,在短时间内放大器的放大倍数会降低,甚至没有放大作用,这种现象成为阻塞。不同的检测仪阻塞成都不一样。根据阻塞区内的缺陷回波高度对缺陷进行定量会使结果偏低,甚
16、至不能发现障碍物,这是需要注意的。由于发射脉冲自身有一定的宽度,加上放大器有阻塞问题,在靠近发射脉冲一段时间范围内,所要求发现的缺陷往往不能被发现,这段时间成为盲区。延时子程序的作用就是在超声波发射的同时延迟一些时间,在打开中断,为了就是防止在超声波发射时接收器就收到发射波,这样就会产生错误,产生比较严重的误差,所以要延迟一定的时间。5.3、硬件调试超声波测距仪的硬件安装时应保持两换能器中心轴线平行两者之间的距离在3-5cm之内,其余元件没有特殊要求。若能将超声波电路用金属壳屏蔽起来,可以提高抗干扰能力。 硬件调试中,首先是线路的检查。焊接完实验后检查是否有错焊、漏焊、虚焊,电解电容是否接反,
17、走线是否正确。检查无误后,再次就是上电检查,在正式上电前,用万用表测量一下电源与地是否短路,短路的话,要耐心检查、排除故障。然后进行显示电路,用同样的方法对显示部分进行调试后,给单片机与1602液晶之间进行调试。最后是对发射和接收电路,用函数发生器吧40kHZ的方波直接加到发射电路的输入端后,用示波器检测超声波发射的换能器,检差是不是有方波信号,再用函数发生器对超声波接收的换能器直接加40kHZ的方波信号,用示波器对接收电路输出端进行检测。通过这些过程,硬件部分的调试就基本完成了,然后软硬件联合调试,成功后开始测量。六、数据的测量和误差分析基于上面设计的硬件电路和软件,焊接好电路后,经过调试,
18、对系统进行测试,测试的距离数据如表1(下表为4路超声波所测的距离和其平均值)。测量单位:cm。 表1S11.130.558.265.586.194.9133.7158.3176.9S21.231.258.065.486.095.0133.5158.5176.9S31.429.858.165.787.094.7133.0158.0176.0S41.130.058.065.586.395.1134.0158.7177.1均值1.230.3858.0865.5386.3594.93133.55158.38176.73下面是平均值和实际值的比较如下表2 表2均值1.230.3858.0865.5386
19、.3594.93133.55158.38176.73实测1230.459.066.587.597.0135.0159.0179.0误差00.020.080.030.152.071.450.622.276.1、误差分析超声波测距在实际应用也有局限性,其中对超声波测距的精度要求挺高。一是超声波在空气中衰减极大,因为测量距离的不同,造成回波信号的起伏,使回波到达时间的测量产生了较大的误差;二是超声波脉冲回波在接收过程中展宽,影响了测距的分辨率,尤其是对近距离造成较大的影响,还有一些因素,诸如环境温度、风速等也会对测量造成一定地影响,这些因素都限制了超声波测距在一些对测距精度要求较高的场合的应用,如何
20、解决这些问题,提高超声波测距的精度,具有较大的现实意义。本系统最大测距误差在2.5cm左右,测距的盲区为1cm。6.1.1、温度误差由于超声波也是一种声波,其声速c与温度有关,不同温度下超声波在空气中传播的速度随温度变化。表3列出了不同温度下的超声波声速。在使用时,若果温度变化不大,则可以认为声速是基本不变的,如果测距精度要求很高,则应通过温度补偿的方法加以校正。 表3温度-20-30-100102030声速m/s313319325323338344349六、整体电路图 图13、原理图七、设计总结7.1设计过程中遇到的问题及解决方法设计中发射极和接收极距离较近,这样当发射极发射超声波后,有部分
21、超声波经过障碍物反射就直接绕射到接收极上,这部分信号时无用的,会引起系统误差,而且这种误差是不可避免的。设计中采用延时来解决这个问题,经过多次程序校正本设计的盲区为1cm。7.2设计体会在设计之前,参考了许多相关的资料。在设计中又参考了网上的相关超声波测距仪资料,有了基本的思路。但着手设计时,又出现了许多未预料到的问题,例如元件的选择:在选择方案时最初选择了用分立元件搭建,但是在调试过程中遇到了问题,发射端和接收端都正常工作,但是在处理接收端信号时由于CX1206芯片太为敏感,一直不能给出中断低电平,后改方案为全部用分立元件搭建,其中涉及到前级放大,带通滤波,后级放大比较,调试也没能完成,因此
22、暂时放弃了此方案。选择了用超声波模块传感器,在调试过程中就显得容易了许多。在显示问题上,由于要显示字母和数字,因此选择了用1602液晶显示屏。为使单片机正常工作,电源选择了用USB供电,达到了电压稳定的效果。在一些设计原理上也遇到了许多问题。如在中断程序和时钟编写上。还有就是在焊接上出现一些错误,经同学以及老师的指证,发现导通的原因,并及时的改正。总之,这次实验过程中我受益匪浅,培养了我的设计思维,增加了动手操作的能力。更让我体会到实现电路功能喜悦。7.3对设计的建议本次设计还是有许多的不足之处,比如说本次设计的测距仪测距范围还不是特别大,只有0-2.1m,测量精度还不是很高,在两米以内为2厘
23、米左右误差,而之后误差会随着测量距离的增加而增加,比如在3米左右误差达到10厘米。在设计上我们还可以做成更小更便携,比如在器件的选择可以改用贴片,达到节能的目的,还可以加上无线通信功能,只需给设备发条短信,就可以知道测量的数据。只是由于时间以及个人的能力问题我们暂时还难以设计出这样的电路,者就有待于今后我们在学习中认真领悟、参透。参考文献1孟立凡等.传感器原理及技术M,北京,国防工艺出版社,2005.2杨永瑞,刘振起.电子测量技术基础M,西安:西安电子科技大学出版社,2004.3栾桂东等.传感器及其应用M,西安,西安电子科技大学出版社,1996.4王子芳.传感器应用技术M,西安,西北工业大学出
24、版社,1996.5张国勋,孙海. 单片机原理及应用(第二版)M,北京:中国电力出版社,2007.6朱爱红,朱宁文.基于AT89C2051的超声波测距系统J,信息技术与信息化,2006, No.5.7翁黎朗.超声波换能器驱动和接收电路的研究J,集美大学学报,白然科学版,1998, No.4: 60-64.8赵广涛 ,程荫杭.基于超声波传感器的测距系统设计J,微计算机信息, 2006,No.1:129-131.9卜英勇,何永强.一种高精度超声波测距仪测量精度的研究J,郑州大学学报(工学版),2006,No.1.10张谦琳.超声波检测原理和方法M,北京:中国科技大学出版社,1993.11翟国富,刘茂
25、恺.一种实时高精度的机器人用超声波测距处理方法J,应用声学,1996,No.1.12谭浩强.程序设计(第二版)M,北京:清华大学出版社,1999.附录:相关程序设计/* 文件名 : 液晶1602显示.c* 描述 : 该程序实现了对液晶1602的控制。*/#include 1602.h#include math.h#include/* 名称 : delay()* 功能 : 延时,延时时间大概为140US。* 输入 : 无* 输出 : 无*/void Delay1ms(unsigned int count) unsigned int i,j; for(i=0;icount;i+) for(j=0;
26、j120;j+);uchar BusyTest(void) bit result; RS=0; /根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; EN=1; /E=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 result=BF; /将忙碌标志电平赋给result EN=0; /将E恢复低电平 return result;/* 名称 : enable(uchar del)* 功能 : 1602命令函数* 输入 : 输入的命令值* 输出 : 无*/* 名称 : write(uchar del
27、)* 功能 : 1602写数据函数* 输入 : 需要写入1602的数据* 输出 : 无*/void write_com(uchar com)/数据发送位选择在P2,写命令 while(BusyTest()=1); RS=0; RW=0; EN=0; Delay1ms(2); P0=com; Delay1ms(4); EN=1; Delay1ms(4); EN=0;void write_data(uchar dt)/写数据 while(BusyTest()=1); RS=1; RW=0; EN=0; Delay1ms(2); P0=dt; Delay1ms(4); EN=1; Delay1ms(4); EN=0;void locade(uchar locade) write_com(0x80+locade);/* 名称 : L1602_init()* 功能 : 1602初始化,请参考1602的资料* 输入 : 无* 输出 : 无*/void L1602_init(void) Del
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1