• 5.64 MB
  • 2022-04-22 13:33:30 发布

超声波测距毕业设计论文.doc

  • 41页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'超声波测距毕业设计论文目录摘要IAbstractII第一章绪论11.1课题设计目的及意义11.1.1设计的目的11.1.2设计的意义11.2国内外研究动态11.3课题研究的主要内容2第二章总体方案32.1方案选择32.2超声波测距仪的设计思路32.2.1超声波测距原理32.2.2超声波测距原理框图32.3元器件选择4第三章系统的硬件结构设计53.1STC89C52单片机的功能及特点53.2单片机最小系统83.3超声波测距模块93.3.1HC-SR04实物图93.3.2主要技术参数103.3.3HC-SR04工作原理103.4超声波发射电路103.5超声波接收电路113.6DSB18B20温度传感器123.6.1实物与引脚定义123.6.2DS18B20主要特性133.7语音播报模块133.8显示单元15第四章系统的软件设计174.1超声波测距的算法设计17-II- 4.2主程序流程图174.3超声波发生子程序和超声波接收中断程序184.4语音模块子程序20第五章温度补偿225.1设计方案225.2硬件设计235.2.1温度采集电路235.3软件设计245.3.1温度采集245.3.2温度补偿设计及距离计算28第六章总结30致谢31参考资料32附录一实物图33附录二原理图34附录三源程序35-II- 第一章绪论1.1课题设计目的及意义1.1.1设计的目的由于超声测距是一种非接触检测技术,不受光线、被测对象颜色等的影响,较其它仪器更卫生,更耐潮湿、粉尘、高温、腐蚀气体等恶劣环境,对于被测物处于黑暗、有灰尘、烟雾、电磁干扰等恶劣环境有一定的适应能力。具有少维护、不污染、高可靠、长寿命等特点。因此可广泛应用于纸业、矿业、电厂、化工业、水处理厂、污水处理厂、农业用水、环保检测、食品(酒业、饮料业、添加剂、食用油、奶制品)、防汛、水文、明渠、空间定位、公路限高料位测量、车辆自动导航、物体识别与定位、车辆安全行驶辅助系统乃至地形地貌探测等许多领域中。可在不同环境中进行距离准确度在线标定,可直接用于水、酒、糖、饮料等液位控制,可进行差值设定,直接显示各种液位罐的液位、料位高度。因此,超声在空气中测距在特殊环境下有较广泛的应用。利用超声波检测往往比较迅速、方便、计算简单、易于实现实时控制,并且在测量精度方面能达到工业实用的指标要求。随着测距的技术进步,测距将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。在新的世纪里,面貌一新的测距仪将发挥更大的作用。1.1.2设计的意义生活中超声波测距中的应用越来越广,但人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领域。展望未来,超声波测距仪作为一种新型的非常重要有用的工具在各方面都将有很大的发展空间,它将朝着更加高定位高精度的方向发展,满足日益发展的社会需求,因此研究超声波测距系统有着很大的现实意义。对本课题的研究与设计,还能进一步提高自己的电路设计水平,深入对单片机的理解和应用。1.2国内外研究动态国外在提高超声波测距方面做了大量的研究,国内一些学者也作了相关的研究。目前超声波测距方法主要有三种:(1)相位检测法:精度高,但检测范围有限;(2)声波幅值检测法:易受反射波的影响;(3)渡越时间法:工作方式简单,直观。现在对超声波测距的精度主要取决于所测的超声波传输时间和超声波在介质中的传输速度,二者中以传输时间的精度影响较大,所以大部分文献采用降低传输时间的不确定度来提高测距精度。温度对传感器的影响也很大,因此,需要用温度传感器进行校正,目前相位探测法和声谱轮廓分析法或二者结合起来的方法是主要的降低探测传输不确定度的方法。39 1.3课题研究的主要内容为了实现准确测出物体之间的距离的目的,设计了一个超声波测距的方案。超声波测距通过发出超声波并接收反射回来的回波,并通过单片机的计算就可以知道物体的距离。应用以下三种技术:a、单片机技术:STC89C52系列的单片机具有体积小,重量轻,结构较为简单,成本低廉,可以实现一般的控制功能的优点。而且单片机更适用应用于小型的嵌入式系统,因此它得到了广泛的应用。现代人类生活大部分电子和机械产品中都会集成有单片机。b、超声波测距技术:超声波测距技术与一般测距技术相比,具有操作方便、系统简单以及计算简单的优点。c、显示技术:数据处理,数码管显示测出与物体之间的距离。d、语音模块技术:ISD1730A芯片来语音播报距离。39 第二章总体方案2.1方案选择采用单片机来控制超声波测距,信号线发射到与超声波发射器相连的信号端,超声波发射器向既定方向发射,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物将产生回波。2.2超声波测距仪的设计思路2.2.1超声波测距原理超声波测距的方法有多种,如相位检测法、声波幅值检测法和渡越时间检测法等。相位检测法虽然精度高,但检测范围有限,声波幅值检测法易受反射波的影响。本测距系统采用超声波渡越时间检测法。其原理为:检测从发射传感器发射的超声波经气体介质传播到接收传感器的时间t,这个时间就是渡越时间,然后求出距离l。设l为测量距离,t为往返时间差,超声波的传播速度为c,则有l=ct/2。超声波接收器收到反射波就立即停止计时。再由单机计算出距离,送数码管显示测量结果。超声波测距的算法设计:超声波在空气中传播速度为每秒钟340米(15℃时)。t2是接收超声波时刻,t1是超声波声波发射时刻,t2-t1得出的是一个时间差的绝对值,假定t2-t1=0.03S,则有340m×0.03S=10.2m。由于在这10.2m的时间里,超声波发出到遇到返射物返回的距离如下:如图2-1为测距原理[4]图2-1测距原理因为θ/2角度较小,可以忽略不计,所以L≈S。超声波发出到遇到返射物返回的距离如下:L=Cx(t2-t1)/22.2.2超声波测距原理框图超声波测距模块用HC-SR04,温度传感器使用DS18B20,微处理器使用STC89C52单片机,显示部分采用共阳数码管。HC-SR04集成的发射电路模块发出超声波,遇到障碍物产生回波,被接收电路模块接收,STC89C52单片机统计出声波传输所用时间,经过温度补偿温,计算出正确的待测距离,同时ISD1730A根据相关数据处理进行组合播报当前测试距离,并且由数码管显示。39 图2-2超声波测距系统结构图2.3元器件选择由于测量距离的精度和长度要求不是很高,精度达到2cm,测量距离达到2m即可,因此超声波模块选用价格低廉且实用的HC-SR04即可。控制核心部分选择实用的STC89C52单片机即可满足计算和控制要求。温度补偿的温度传感器选择普遍且实用的DS18B20。语音播报:ISD1730A是华邦公司新推出的语音芯片,用来替代已经停产的ISD1400系列及ISD2500系列芯片。ISD1730A不仅在录音时间上有更多的选择(从20秒到240秒),而且在功能上继承14及25系列的所有录放功能,并增加了一些更加人性化的提示功能及对存储地址的精确操作。根据我们经营ISD系列芯片多年的经验来看,ISD1700的音质也较14及25系列有明显的提高ISD1700系列芯片是华邦公司新推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示(vAlert),双运作模式(独立&嵌入式),以及可定制的信息操作指示音效。芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。显示部分:选择了四位数码管。39 第三章系统的硬件结构设计3.1STC89C52单片机的功能及特点  STC89C52单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。主要特性如下:增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz用户应用程序空间为8K字节片上集成512字节RAM通用I/O口(32个)复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片具有EEPROM功能具有看门狗功能共3个16位定时器/计数器。即定时器T0、T1、T2外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒通用异步串行口(UART),还可用定时器软件实现多个UART工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)STC89C52RC单片机的工作模式掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序空闲模式:典型功耗2mA典型功耗正常工作模式:典型功耗4Ma~7mA典型功耗掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地39 P0端口(P0.0~P0.7P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入每个引脚能驱动写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线位数据的复用总线。此时,P0口内部上拉电阻有效。在FlashROM编在程时,P0端口接收指令字节端口接收指令字节;而在校验程序时,则输出指令字节则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:在对FlashROM编程和程序校验时,P1接收低8位地址。表XXP1.0和P1.1引脚复用功能P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(I)。在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX@DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX@R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流()。在对FlashROM编程或程序校验时,P3还接收一些控制信号。P3口除作为一般I/O口外,还有其他一些复用功能,如下表所示:表XXP3口引脚复用功能复用功能RST(9引脚)39 :复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/ROG(30引脚)地址锁存控制信号:(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚(ROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。特别强调在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。外部程序存储器选通信号(SEN)是外部程序存储器选SEN(29引脚)通信号。当STC89C52RC从外部程序存储器执行外部代码时,SEN在每个机器周期被激活两次,而访问外部数据存储器时SEN将不被激活。A/VPP(31引脚)访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,A必须接GND。注意加密方式1时,A将内部锁定位RESET。为了执行内部程序指令A应该接VCC。在Flash编程期间A也接收12伏VPP电压。XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器反相放大器的输入端。图3-1STC89C52引脚图39 3.2单片机最小系统单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对52系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.单片机最小系统电路介绍52单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短52单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。52单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2ms。39 图3-2单片机最小系统3.3超声波测距模块3.3.1HC-SR04实物图图3-3HC-SR04实物图3.3.2主要技术参数所用工作电压:直流5V电压。工作静态电流:小于2mA。39 电平输出:高电平为5V,低电平为0V。感应角度:不大于15度。探测距离及精度:2cm-450cm。高精度:可达3mm。3.3.3HC-SR04工作原理采用IO触发测距,给至少10us的高电平信号;模块自动发送8个40khz的方波,自动检测是否有信号返回;有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2; 图3-4时序图3.4超声波发射电路超声波传感器的发射电路主要由方波发生芯片,40kHz的晶振和MAX232芯片构成,单片机给方波发生芯片触发信号后,方波发生芯片开始工作,产生40kHz的方波信号,电平转换芯片MAX232将TTL电平转换成可以驱动振荡器的高电压,进而产生所需的40kHz的超声波。39 图3-5超声波发射电路图3.5超声波接收电路本设计中选用的TL740C芯片采用了前置放大电路+带通滤波电路+后级放大电路。将接收到的波形经过整形、积分、检波、滤波和限幅放大等实现接收超声波的功能。当距离较远时,回波信号会非常微弱,转换后的信号电平幅值很小,故要经过若干级放大,使输出功率达到一定要求,并且为了防止信号出现较大的失真,接收电路可以保证有4MHz的带宽。放大后的交流信号送入比较器后输出一个方波信号,并使触发器触发,向CPU发出中断请求。在中断服务程序中,读取计数器的计数值,结合温度补偿后的声速计算出测距仪距离障碍物的距离。39 图3-6超声波接收电路图3.6DSB18B20温度传感器3.6.1实物与引脚定义图3-7DS18B20实物图表3-1DS18B20各引脚描述管脚号符号功能1GND电源地2DQ数据输入输出3VDD电源可选39 DS18B20数字温度计以9位数字量的形式反映器件的温度值,通过一根单线接口发送和接收信息,因此在单片机和DS18B20之间仅需一条连接线(加上地线)。用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。3.6.2DS18B20主要特性独特的单线接口仅需一个端口引脚进行通讯简单的多点分布应用无需外部器件可通过数据线供电零待机功耗测温范围-55℃~+125℃。华氏器件-67℉~+257℉,以0.9℉递增温度以9位数字量读出温度数字量转换时间200ms(典型值)用户可定义的非易失性温度报警设置报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件应用包括温度控制工业系统消费品温度计或任何热感测系统图3-8与单片机连接图3.7语音播报模块ISD1700系列芯片是华邦公司新推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示(vAlert),双运作模式(独立&嵌入式),以及可定制的信息操作指示音效。芯片内部包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。特点:·可录、放音十万次,存储内容可以断电保留一百年。·两种控制方式,两种录音输入方式,两种放音输出方式39 ·可处理多达255段以上信息·有丰富多样的工作状态提示·多种采样频率对应多种录放时间·音质好,电压范围宽,应用灵活,价廉物美电特性:·工作电压:2.4V-5.5V,,最高不能超过6V·静态电流:0.5-1μA·工作电流:20mA用户可利用震荡电阻来自定芯片的采样频率,芯片的采样率可以通过外部振荡电阻来调节:表3-2采样频率与振荡电阻的关系采样频率12KHz8KHz6.4KHz5.3KHz4KHz振荡电阻60kΩ80kΩ100kΩ120kΩ160kΩ主控单片机主要通过四线(SCLK,MOSI,MISO,/SS)SPI协议对ISD1730进行串行通信。ISD1730作为从机,几乎所有的操作都可以通过这个SPI协议来完成。为了兼容独立按键模式,一些SPI命令:PLAY,REC,ERASE,FWD,RESET和GLOBAL_ERASE的运行类似于相应的独立按键模式的操作。另外,SET_PLAY,SET_REC,SET_ERASE命令允许用户指定录音、放音和擦除的开始和结束地址。此外,还有一些命令可以访问APC寄存器,用来设置芯片模拟输入的方式。微机接口主控单片机主要通过四线(SCLK,MOSI,MISO,/SS)SPI协议对ISD1700进行串行通信。ISD1700作为从机,几乎所有的操作都可以通过这个SPI协议来完成。为了兼容独立按键模式,一些SPI命令:PLAY,REC,ERASE,FWD,RESET和GLOBAL_ERASE的运行类似于相应的独立按键模式的操作。另外,SET_PLAY,SET_REC,SET_ERASE命令允许用户指定录音、放音和擦除的开始和结束地址。此外,还有一些命令可以访问APC寄存器,用来设置芯片模拟输入的方式。ISD1700系列的SPI串行接口操作遵照以下协议:.一个SPI处理开始于/SS管脚的下降沿。.在一个完整的SPI指令传输周期,/SS管脚必须保持低电平。.数据在SCLK的上升沿锁存在芯片的MOSI管脚,在SCLK的下降沿从MISO管脚输出,并且首先移出低位。.SPI指令操作码包括命令字节,数据字节和地址字节,这决定于1700的指令类型.当命令字及地址数据输入到MOSI管脚时,同时状态寄存器和当前行地址信息从MISO管脚移出。.一个SPI处理在/SS变高后启动。39 .在完成一个SPI命令的操作后,会启动一个中断信息,并且持续保持为低,直到芯片收到CLR_INT命令或者芯片复位。。图3-9语音播报电路3.8显示单元数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。在本次设计中,我们选用P0口作为‘段码’,连接SM410564‘a,b,c,d,e,f,g,dp’,每一段的亮灭。选用P2.4~P2.7分别对应‘位码’39 ,即连接SM410564的‘S1,S2,S3,S4’分别控制每一位的亮灭。‘S1,S2,S3,S4’相当于是每一段的COM端,由于是共阳极,只有某一位对应的COM端为‘1’时,所送的‘段码’对该端来说才是有效的。图3-10显示电路图39 电子信息工程系毕业论文第四章系统的软件设计超声波测距仪的软件设计主要有主程序、超声波发生程序、超声波接收中断程序及显示子程序组成。我们知道C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序需要有较复杂的计算(计算距离时),所以控制程序可采用C语言编程。4.1超声波测距的算法设计超声波测距的原理为超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R所接收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。距离的计算公式为:L=s/2=(ct)/2其中,L为被测物与测距仪的距离,s为声波的来回的路程,c为声速,t为声波来回所用的时间。在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。4.2主程序流程图软件分为两部分,主程序和中断服务程序,如图4-1、图4-2、图4-3所示。主程序完成初始化工作、各路超声波发射和接收顺序的控制。定时中断服务子程序完成单方向超声波的发射,外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出等工作。主程序首先是对系统环境初始化,设置定时器T0工作模式为16位定时计数器模式。置位总中断允许位EA并给显示端口P0和P1清0。然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms(这也就是超声波测距会有一个最小可测距离的原因)后,才打开外中断1接收返回的超声波信号。39 电子信息工程系毕业论文图4-1主程序流程由于采用的是12MHz的晶振,计数器每计一个数就是1μs,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(4-1)计算,即可得被测物体与测距仪之间的距离,设计时取20℃时的声速为344m/s则有:d=(ct)/2=172T0/10000cm其中,T0为计数器T0的计算值。测出距离后结果将传给LCD数码显示约5s,同时测量距离送语音模块播报。然后再发超声波脉冲重复测量过程。为了有利于程序结构化和容易计算出距离,主程序采用C语言编写。4.3超声波发生子程序和超声波接收中断程序超声波发生子程序的作用是通过P1.1端口发送2个左右超声波脉冲信号(频率约40kHz的方波),脉冲宽度为12μs左右,同时把计数器T0打开进行计时。超声波发生子程序较简单,但要求程序运行准确。39 电子信息工程系毕业论文图4-2定时中断服务子程39 电子信息工程系毕业论文图4-3外部中断服务子程序超声波测距主程序利用外中断1检测返回超声波信号,一旦接收到返回超声波信号(即INT1引脚出现低电平),立即进入中断程序。进入中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断1关闭,并将测距成功标志字赋值2以表示此次测距不成功。4.4语音模块子程序设所测量距离值为S=135cm,分别得到百位值、分位值、个位值,调用函数ISD_SET_PLAY进行组合播放语音,本例所播放的语音为“1点35米”流程图如下:39 电子信息工程系毕业论文图4-4语音播报流程图相关源程序代码如下:bai1=S%1000/100;shi1=S%100/10;ge1=S%10;ISD_SET_PLAY(add1[bai1],0,add2[bai1],0);delay1(100);//播放语音片段“1”ISD_SET_PLAY(add1[10],0,add2[10],0);delay1(100);//播放语音片段“点”ISD_SET_PLAY(add1[shi1],0,add2[shi1],0);delay1(100);//播放语音片段“3”ISD_SET_PLAY(add1[ge1],0,add2[ge1],0);delay1(100);//播放语音片段“5”ISD_SET_PLAY(add1[11],0,add2[11],0);delay1(100);//播放语音片段“米”39 电子信息工程系毕业论文第五章温度补偿采用超声波测量距离的方法,实时检测现场温度用以实现实际波速数据的校准,减小温度对测距产生的误差,最终由数码管显示所测距离,测量范围为7cm~1m,误差±2cm。5.1设计方案超声波传声器结构简单、行能可靠、成本低、易集成,因此常用超声波测距。在常温下,超声波的传播速度为340m/s,但其传播速度V易受到空气中的温度、湿度、压强等因素的影响,其中温度的影响最大。一般温度每升高1摄氏度,声速增加约为0.6m/s。表1为超声波在不同温度下的波速值。表5-1一些温度下声速温度T/℃-30-20-100102030声速v/m·s-1313319322331337344350油此可见温度对超声波测距系统的影响是不可忽略的。为了得到较为精确的测量结果,必须对波速进行温度补偿。通过实验可获得波速与温度之间的经验模型:V=331.5+0.607T,T为现场温度,V为实际波速。从式中可看出,要获得精确的波速值,必须首先获取现场温度T的大小。本设计采用DS18B20检测现场温度,用以实现实际波速的校准。温度补偿及其原理目前,大多数温度测控系统在进行温度测量时,通常采用模拟式温度敏感元件,如热电阻、热电偶、红外测温仪等,将温度转化为电信号,经过信号放大电路放大到合适的范围,再由A/D转换为数字量。此种形式的温度测量结构复杂,测量精度易受原器件参数影响。DS18B20是Dallas公司开发的1-wire(单总线)高精度数字式半导体温度传感器,它具有节省I/O口弦资源,结构简单,成本低廉,精度高,便于总线扩展和维护等诸多特点。1-wire是将数据线、控制线、地址线合为1根信号线。DS18B20的测温原理如图5-1-1,图中低温度系数的晶振的振荡频率受温度很小,用于产生固定频率的脉冲信号送给计数器1,高温度系数晶振随温度变化其振荡频率明显改变,产生的信号作为计数器2的脉冲输入图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃39 电子信息工程系毕业论文所对应的基数分别置入计数器1和温度寄存器中,计数器1的温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时温度寄存器的值将加1,计数器1的预置将重新被装入,重新开始对低温度系数晶振产生的脉冲进行计数。如此循环直至计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中振荡器温度特性的非线性,以产生高分辨率的温度测量。其输出用于修正计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。由经验公式V=331.5+0.607T得出现场波速,实现温度补偿。图5-1测温原理另外,由于DS18B20单总线通信功能是分时完成的,因此他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。5.2硬件设计5.2.1温度采集电路温度采用DS18B20传感器进行测量,P3.7接DS18B20数据总线,控制DS18B20进行温度转换和传输数据。本系统对DS18B20采用外部供电,其优点在于I/O线不需要强上拉,而且总线控制器无需在温度转换期间一直保持高电平。这样在转换期间可以允许在单线总线上进行其他数据传输,硬件结构如下图39 电子信息工程系毕业论文图5-2温度采集电路5.3软件设计5.3.1温度采集系统软件设计采用模块化设计,主要包括主程序设计、T1中断服务程序、INT0外部中断服务程序、温度测量子程序、距离计算子程序、显示子程序、延时子程序等。系统软件编制时考虑相关硬件的连线,同时还要进行存储空间、寄存器以及定时器和外部中断引脚的分配和使用。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序读时序写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每次命令和数据的传输都是从主机主动启动写时序开始,如果要去单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。39 电子信息工程系毕业论文图5-3初始化时序图图5-4读写时序图主程序首先对系统初始化,调用测温子程序进行现场温度的测量得出现场温度,流程图、程序如下:39 电子信息工程系毕业论文图5-5温度采集#ifndef_ds18b20_H_#define_ds18b20_H_#defineucharunsignedchar#defineuintunsignedint//温度传感器定义sbitDQ=P1^1;//ds18B20uintxdatatvalue;//温度值ucharxdatatflag;//温度正负标志uinttemper;uchartemper_ge,temper_shi,temper_bai;39 电子信息工程系毕业论文voiddelay_18B20(unsignedinti)//延时1微秒{while(i--);}voidds1820rst()//ds1820复位*{unsignedcharx=0;DQ=1;//DQ复位delay_18B20(4);//延时DQ=0;//DQ拉低delay_18B20(100);//精确延时大于480usDQ=1;//拉高delay_18B20(40);}unsignedchards1820rd()//读数据{unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay_18B20(10);}return(dat);}voidds1820wr(ucharwdata)//写数据{unsignedchari=0;for(i=8;i>0;i--){39 电子信息工程系毕业论文DQ=0;DQ=wdata&0x01;delay_18B20(10);DQ=1;wdata>>=1;}}read_temp()//读取温度值并转换{uchara,b;ds1820rst();ds1820wr(0xcc);//跳过读序列号ds1820wr(0x44);//启动温度转换ds1820rst();ds1820wr(0xcc);//跳过读序列号ds1820wr(0xbe);//读取温度a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff)tflag=0;else{tvalue=~tvalue+1;tflag=1;}tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数return(tvalue);}#endif5.3.2温度补偿设计及距离计算39 电子信息工程系毕业论文在使用时,如果温度变化不大,则可认为声速c是基本不变的,计算时取c为340m/s。如果测距精度要求很高,则可通过改变硬件电路增加温度补偿电路的方法或者在硬件电路基本不变的情况下通过软件改进算法的方法来加以校正。在本系统中采用STC89C52中的定时器测量超声波传播时间,利用DS18B20温度传感器测量环境温度,通过温度与声速的关系算出当前温度T下的声速,从而提高测距精度。空气中声速与温度的关系可表示为:声速确定后,只要测得超声波往返的时间,即可求得距离:如果为了进一步提高测量精度,本设计中将根据需要利用软件方式增加角度补偿的设计:(S为物体离超声波发射器的距离)通过以上温度采集得到现场实际温度在距离计算中,实行了温度补偿和夹角补偿的程序如下:/****************************************距离计算函数****************************************/voidcomputer(floattemp)//距离计算函数{floatc,d,s;uintt;if(temp>0)//温度大于0c=331.4+0.61*temp*0.0625;else//温度小于0c=331.4-0.61*temp*0.0625;t=jsh*256+jsl-120;//计数时间d=(c*t*0.001)/2;d*=d;//直角三角形勾股定理s=d-7.98;//补偿distance=sqrt(s);//开方运算}通过以上程序,超声波测距系统上电启动后即可获得现场温度,在进行测距工作时单片机会把温度值通过公式V=331.5+0.6T补偿到超声波的波速计算中,使得计算波速值得到校正,从而提高超声波测距系统的精度。39 电子信息工程系毕业论文第六章总结超声波测距的原理是利用超声波的发射和接收,根据超声波传播的时间来计算出传播距离。实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;另一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪;此次设计采用反射波方式。超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路,温度补偿电路以及语音播报电路。单片机采用STC89C52。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P1.0端口输出超声波换能器所需的40kHz的方波信号,利用外中断监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,温度补偿使用DS18B20来实现计算的精确,语音播报电路采用ISD1730芯片来实现语音播报。超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言和汇编语言混合编程本次设计的超声波测距系统满足倒车测距等所需的测量精度,而且反映速度快、控制简单、成本低廉等,测距范围为2cm到150cm。但由于经验不足还有些地方有待完善。在要求精度较高的地方时,各元器件的参数也有影响。通过以上的设计过程,我们不但在知识上收获了,而且发现了自己的一些不足之处;同时,我们也对自己的动手能力有所锻炼,而且一次成功的经历给我增添了不少的信心。39 电子信息工程系毕业论文致谢刚接触此设计课题,总认为较为简单,不会花很多时间便能完成。但随着设计的一步步进行,遇到了很多难题,才发现还有很多地方是自己不懂的。但是课题最终得以顺利完成。首先要感谢的是我的指导老师。感谢他在此次毕业设计过程中给予我的悉心指导与各方面的帮助,他给了我许多非常有益的建议和意见,使我在思路上得到了很大的开阔,从中认识到了自己存在的不足,并且学到了很多非常宝贵的知识。特别是在审阅了我的论文,指出我的错误和不足之处,在这里深表感谢。还有和我一起做毕业设计的同学,你们给我提出了很多宝贵的意见和帮助,也正是在这样一个相互促进的环境中才让我有不断的动力。最后再次深深感谢我的导师老师以及给予我帮助的同学和朋友。39 电子信息工程系毕业论文参考资料[1]肖景和.数字集成电路应用精粹[M].北京:人民邮电出版社,2003.[2]陈晓文.电子线路课程设计[M].北京:北京电子工业出版社.2004.[3]徐淑华,程退安,姚万生.单片机微型机原理及应用[M].哈尔滨:哈尔滨工业大学出版社,1994.85[4]梅丽凤,王艳秋,任国臣等.单片机原理及接口技术.北京:清华大学出版社;北京交通大学出版社,2009.2[5]章忠全.电子技术实验与课程设计[M].北京:电力工业出版社,1999.[6]毕满清.电子技术实验与课程设计[M].北京:机械工业出版社,2005.[7]赵晶.电路设计与制版—PROTEL99高级应用[M].北京:人民邮电出版社,2000.[8]孙涵芳,徐爱卿.89C51/96系列单片机原理及应用.北京:北京航空航天大学出版社,1988[9]张志良.单片机原理与控制技术.2版.北京:机械工业出版社,2005.[10]曹素芬.单片机微型计算机原理与接口技术.沈阳:东北大学出版社,1994.[11]李朝青.单片机原理及接口技术.简明修订版.北京:北京航空航天大学出版社,1999.[12]余永权,汪明慧等.单片机在控制系统中的应用.电子工业出版社,2004[13]张波,王朋亮.基于STC89C51单片机超声波测距系统的设计.机床与液压,2010(3):66~68。[14]张健,李钢.超声波测距系统的研究与设计.合肥工业大学学报,2004(6):640~643。[15]胡萍.超声波测距仪的研制[J].计算机与现代化,2003,7(10):21~23.[16]时德刚,刘哗.超声波测距的研究[J].计算机测量与控制,2002,9(10):31~33.[17]路锦正,王建勤.超声波测距仪的设计[J].传感器技术,2002,21(8):29~31.39 电子信息工程系毕业论文附录一实物图39 电子信息工程系毕业论文附录二原理图39 电子信息工程系毕业论文附录三源程序//*函数名:Read_Temperature(void)//功能:读取温度*//Read_Temperature(void)//读取温度{Init_DS18B20();if(presence==1){flash=1;}//DS18B20不正常else{flash=0;WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器temp_data[0]=ReadOneChar();//温度低8位temp_data[1]=ReadOneChar();//温度高8位}}///*函数名:Disp_Temperature()//功能:显示温度*//Disp_Temperature()//显示温度{unsignedcharn=0,word[16]={"环境温度:℃"};show_one(word,4);for(n=0;n<16;n++)write(1,word[n]);*/lcd_pos(4,5);//设置显示位置为第三行write(1,display[3]+0x30);//lcd_wdat(display[3]+0x30);//温度值百位不显示elsewrite(1,0x20);//lcd_wdat(0x20);*/39 电子信息工程系毕业论文delay(1);if((display[3]==0)&(display[2]==0))write(1,0x20);//lcd_wdat(0x20);elsewrite(1,display[2]+0x30);//lcd_wdat(display[2]+0x30);delay(1);write(1,display[1]+0x30);//lcd_wdat(display[1]+0x30);delay(1);write(1,".");//lcd_wdat(".");delay(1);write(1,display[0]+0x30);//lcd_wdat(display[0]+0x30);delay(1);}//*函数名:voidtemp_all(void)//功能:进行温度补偿*//voidtemp_all(){Read_Temperature();display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];//查表得小数位的值display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//温度整数值display[3]=display[4]/100;display[1]=display[4]%100;display[2]=display[1]/10;display[1]=display[1]%10;if(display[4]>50)//温度高于50度,则不修正flash=1;if((flash==0)&(flag_1==0)){Disp_Temperature();}if(flash==0)//温度传感器正常检测到温度并温度小于50度{39 电子信息工程系毕业论文speed=(uint)(331+(display[4]*61+display[0]*6+45)/100);}}//*函数名:uintDistance_count()//功能:距离计算函数*//Distance_count(){floattemp1;ulongtt;temp2=high_time*256+low_time;temp=high_time*256+low_time;tt=(ulong)temp*344;temp1=(float)(tt/2000.0);temp=(uint)(temp1);temp=(uint)(temp1+0.5);//returntemp;}///*函数名:uintdo_s(uintdis_1)//功能:距离补偿*//uintdo_s(uintdis_1){ucharn;if((dis_1>70)&(dis_1<100)){n=dis_1/10;switch(n){case7:dis_1-=40;break;case8:dis_1-=22;break;case9:dis_1-=26;break;}return(dis_1);}39 电子信息工程系毕业论文else{n=dis_1/100;switch(n){case1:dis_1-=43;break;case2:dis_1-=42;break;case3:dis_1-=34;break;case4:dis_1-=30;break;case5:dis_1-=32;break;case6:dis_1-=31;break;case7:dis_1-=28;break;case8:dis_1-=29;break;case9:dis_1-=34;break;case10:dis_1-=34;break;case11:dis_1-=34;break;case12:dis_1-=35;break;case13:dis_1-=30;break;case14:dis_1-=35;break;case15:dis_1-=46;break;case16:dis_1-=46;break;case17:dis_1-=39;break;case18:dis_1-=36;break;case19:dis_1-=37;break;case20:dis_1-=32;break;case21:dis_1-=33;break;case22:dis_1-=34;break;case23:dis_1-=38;break;case24:dis_1-=40;break;case25:dis_1-=35;break;case26:dis_1-=35;break;case27:dis_1-=37;break;case28:dis_1-=62;break;case29:dis_1-=64;break;case30:dis_1-=68;break;39 电子信息工程系毕业论文case31:dis_1-=64;break;case32:dis_1-=256;break;case33:dis_1-=262;break;case34:dis_1-=268;break;case35:dis_1-=271;break;case36:dis_1-=282;break;case37:dis_1-=290;break;case38:dis_1-=302;break;case39:dis_1-=332;break;case40:dis_1-=352;break;case41:dis_1-=350;break;case42:dis_1-=367;break;case43:dis_1-=285;break;case44:dis_1-=350;break;case45:dis_1-=290;break;case46:dis_1-=295;break;case47:dis_1-=295;break;case48:dis_1-=374;break;case49:dis_1-=395;break;case50:dis_1-=395;break;case51:dis_1-=405;break;case52:dis_1-=425;break;case53:dis_1-=394;break;case54:dis_1-=395;break;case55:dis_1-=495;break;}return(dis_1);}}39'