单片机课程设计-超声波测距器设计报告.doc_第1页
单片机课程设计-超声波测距器设计报告.doc_第2页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

超声波测距器设计报告课程: 单 片 机 课 程 设 计 系别: 电 子 工 程 系 班级: 电 信 0904 班 姓名(学号): 指导老师: 目 录(一)设计目的及功能要求(二)方案论证(三)系统硬件电路的设计1单片机系统及显示电路2超声波发射电路3超声波监测接收电路(四)系统程序的设计1超声波测距器的算法设计2主程序3超声波发生子程序和超声波接收中断程序(五)控制源程序清单(六)调试结果及结论超声波测距器的设计(一)设计目的及功能要求采用超声波测量距离的方法,实时检测现场温度用以实现实际波速的校准,减小温度对测距产生的误差,最终由led数码管显示所测距离、温度及对应的波速,测量范围为0.52m,误差0.05m。(二)方案论证常用的测距方式主要有雷达测距、红外测距、激光测距和超声波测距等4种。雷达测距对天气的依赖性较强,且成本较高;红外测距量范围窄;激光测距精度高、抗干扰能力强但成本高,且光学系统需要细心维护;超声波测距指向性强、能量消耗缓慢、传输距离远、受环境影响小、传输时间容易检测,而且超声波传声器结构简单、性能可靠、成本低、易集成、计算处理简单、测量精度也能达到日常使用的要求,因此本设计采用超声波测距的方式进行距离测量。超声波发生器可以分为两大类:一类是用电器方式产生超声波;另一类是用机械方式产生超声波。电器方式包括电压型、电动型;机械方式有加尔统笛、夜哨和气流旋笛等。他们超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前在近距离测量方面较为常用的是压电式超声波换能器。根据设计要求并综合各方面因素,本此设计决定采用at89c51单片机作为主控制器,用动态扫描法实现led数字显示,超声波驱动信号用单片机的定时器完成。超声波测距器系统框图如图3.1所示。 单片机控制器 led显示 超声波接受 扫描电路 超声波发送 图3.1 超声波测距器系统设计框图(三)系统硬件电路的设计硬件电路主要分为单片机系统及显示电路、超生波发射电路和超声波检测接收电路三部分。1单片机系统及显示电路单片机采用89c51或其兼容系列。系统采用12mhz高精度晶振,以获得稳定的时钟频率,并减小测量误差。单片机用p1.0端口输出超声波换能器所需的40khz方波信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阴led数码管,段码用74ls47驱动。单片机系统及显示电路如图3.2所示。2超声波发射电路超声波发射电路原理图如图3.3所示。发射电路主要由反向器74ls04和超声波换能器构成,单片机p1.0端口输出的40khz方波信号一路经一级读反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声声波换能器的另一个电极,用这种推挽形式将方波信号加到超声波换能器两端可以提高超声波的发射强度。输出端采用两个反向器并联,用以提高驱动能力。上拉电阻r10、r11一方面可以提高反向器74ls04输出高电平的驱动能力 ;另一方面可以增加超声换能器的阻尼效果,以缩短其自由振荡的时间。压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部结构如图所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超生波,这时它就是一个超声波发生器;反之,台果两电极间未外加电压,当共振板接收到超声波时将压迫电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器了。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。3超声波监测接收电路集成电路cx20106a是一款红外线检波接收的专用芯片,常用于电视机。考虑到红外遥控常用的载波频率38khz与测距的超声波频率40khz较为接近,可以利用它制作超声波检测接收电路,如图所3.4示。实验证明,用cx20106a接收超声波(无信号时输出高电平)具有很高的灵敏度和抗干扰能力。适当地更改电容c4的大小,可以改变接收电路的灵敏度和抗干扰能力。 图3.2 单片机及显示系统电路图 图3.3 超声波发射电路原理图 图3.4 超声波检测接收电路图(四)系统程序的设计超声波测距器的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。由于c语言程序有利于实现较复杂的算法,汇编程序则具有较高的效率并且容易精确计算程序运行的时间,而超声波测距器程序既有较复杂的计算(计算距离时),有要求精确计算程序运行的时间(超声波测距时),所以控制程序可采用c语言和汇编语言混合程序。下面对超声波测距器的算法、主程序、超声波发生子程序、超声波接收中断程序逐一介绍。1超声波测距器的算法设计图3.5示意了超声波测距的原理,即超声波发生器t在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波r接收到。这样,只要计算出从发出超声波信号倒接收到返 t r 图3.5 超声波测距原理图回信号所用的时间,就可算出超声波发生器与反射物体的距离。该距离的计算公式如下:d=s/2(v x t)/2 (3-2)其中:d为被测物与测距器的距离;s为声波的来回路程;v为声速;t为声波来回所用的时间。超声波也是一种声波,其声速v与温度有关。表3.1列出了几种不同温度下的超声波声速。在使用时,如果温度变化不大,则可以认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测的超声波往返时间,即可求得距离。 表3.1 不同温度下超声波声速 温度/-30-20-100102030100声速/(m/s) 3133193253233383443493862主程序主程序首先要对系统环境初始化,设置定时器t0工作模式为16位定时/计数器模式,位总中断允许位ea并对显示端口p0和p2清0;然后调用超声波发生子程序送出一个超声波脉冲。为了避免超声波从发射器直接传送到接收器引起直射波触发,需要延时约0.1ms(这也就是超声波测距器有一个最小可测距离的原因)后才打开外中断0接收返回的超声波信号。由于采用的是12mhz的晶振,计数器每计一个数就是1us,所以当主程序检测到接收成功的标志位后,将计数器t0中的数(即超声波来回所用的时间)按式(3-2)计算,即可得被测物体与测距器之间的距离。设计时20时的声速为344m/s,则有 d =(v x t)/2 =(172t/10000)cm其中:t为计数器t0的计数值。测出距离后,结果将以十进制bcd码方式送往led显示约0.5s然后再发超声波脉冲重复测量过程。图3.7所示为主程序流程图。开始 系统初始化 发送超声波脉冲 等待发射超声波 计算距离显示结果0.5s 图3.7 主程序流程图3超声波发生子程序和超声波接收中断程序超声波发生子程序的作用是通过p1.0端口发送两个左右的超声波脉冲信号(频率40khz的方波),脉冲宽度位12us左右,同时把计数器t0打开进行时。超声波发生子程序比较简单,但要求程序运行时间准确,所以采用汇编语言程序。超生波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即int0引脚出现低电平),立即进入超声波接收中断程序。进入该中断后,就立即关闭计时器t0,停止计时,并将测距成功标志字赋值1。如果当时计时器溢出是还未检测到超声波返回信号,则定时器t0溢出中断将外中断0关闭,并将测距成功标志字赋值2表示本次测距不成功。(五)控制源程序清单#include#include#define uchar unsigned char#define uint unsigned intextern void cs_t(void);/*数码管为共阳数码管*/sbit dp=p20;sbit seg0=p27;/个位选通sbit seg1=p26;/十位选通sbit seg2=p25;/百位选通sbit seg3=p24;/千位选通 sbit super_in=p32;/外部中断,接cx20106的脚/sbit super_out=p10;/40khz方波输出脚/*/void init(void);/初始化void delay_nms(uint n);/延时nmsvoid delay100us();/延时usvoid display(uint dat);/4位数码管显示函数,只用了位void tran(void);/超声波测量函数/*/uint dis,h=100,l=20;uchar flag=0,high_time,low_time,m=0;uchar leddata= 0,1,2,3,4,5,6,7,8,9;/*函数名称:主函数修改日期:入口参数:无返回值: 无*/void main(void)seg0=1;seg1=1;seg2=1;seg3=1;p0=0;init();while(1) /循环测量并显示 tran();/发送超声波信号测距 display(dis);/显示距离/*函数名称:初始化函数修改日期:入口参数:无返回值: 无*/void init(void)tmod=0x01;/定时器方式用于计时th0=0;tl0=0; /* 设定t0的工作模式为*/ea=1;it0=1;/下降沿有效,左传感器/*函数名称:延时函数修改日期:入口参数:n返回值: 无*/void delay_nms(uint n)uchar i; while(n-) for(i=123;i0;i-);/*函数名称:显示函数修改日期:入口参数:data返回值: 无*/void display(uint dat)uchar i,j,k;/分别为百十个位的缓存i=dat/100;/百位j=dat%100/10;/十位k=dat%10;/个位 seg3=0;seg2=1;seg1=0;seg0=0;p0=leddatai; delay_nms(2);seg2=1;seg3=0;seg2=0;seg1=1;seg0=0;p0=leddataj; delay_nms(2);seg1=0; seg3=0;seg2=0;seg1=0;seg0=1;p0=leddatak;delay_nms(2);seg0=0; /*函数名称:超声波测量函数修改日期:入口参数:无返回值: 无*/void tran(void)/uchar i;float temp;th0=0;tl0=0;/清定时tr0=1;/开定时/super_out=1;cs_t();ex0=1;/开中断delay_nms(1);if(flag=1) /中断标志位置,说明有回波 /以下为路程计算temp=high_time*256+low_time;temp=(temp/1000)/2;temp*=340;temp=temp/10;dis=(unsigned int)temp;flag=0;/*函数名称:中断函数修改日期:入口参数:无返回值: 无*/void recept() interrupt 0uint tmp;tr0=0;/关定时器et0=0;/关外部中断flag=1; /置位标志位tmp=th0*256+tl0; /读取定时器的值if(tmp0)&(tmp65535)/判断是否超出范围,此设置的范围为到米,实际不能达到米high_time=th0;/把计时值放入缓冲low_time=tl0;else /超出范围则重新测量high_time=0;low_time=0; -超声发生子程序(12m晶振38.5hz)- name cs_t?pr?cs_t?cs_t segment code public cs_t rseg ?pr?cs_t?cs_tcs_t: push acc mov th0, #00h mov tl0, #00h mov a, #6d setb tr0cs_t1: cpl p1.0 nop nop nop nop nop djnz acc, cs_t1 pop acc ret(六)调试结果及结论通过我们对程序的不断调试,最终在实际测量的距离与超声波数码管显示的距离如下所示:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论