复制成功
  • 图案背景
  • 纯色背景

毕业论文-基于单片机的汽车倒车防撞系统设计

下载积分:1000

内容提示: 本科毕业论文(设计) 题 题 目 目 : 汽车倒车防撞系统设计 专 专 业 业 : 电 子信息工程 姓 姓 名 名 : 学 学 号: 指导教师: 职 职 称: 教 授 毕业时间: I 汽车倒车防撞系统设计 摘 要 :本次设计主要是以 AT89S52 单片机作为主体设...

文档格式:DOC| 浏览次数:14| 上传日期:2019-05-25 10:55:13| 文档星级:
本科毕业论文(设计) 题 题 目 目 : 汽车倒车防撞系统设计 专 专 业 业 : 电 子信息工程 姓 姓 名 名 : 学 学 号: 指导教师: 职 职 称: 教 授 毕业时间: I 汽车倒车防撞系统设计 摘 要 :本次设计主要是以 AT89S52 单片机作为主体设计的汽车倒车防撞系统,这种智能的系统给汽车在倒车时提供较高的安全性。该系统利用了超声波不用接触就能进行测量距离的特点,系统主要包括超声波发射电路模块,超声波接受电路模块,液晶显示模块以及声光报警电路模块。超声波探头主要是进行超声波的发射和接受部分,液晶显示主要是显示障碍物与车之间的距离,在超出所设定的距离时,蜂鸣器报警,同时发光二极管亮,提醒驾驶员采相应的措施。提高汽车在倒车过程中的安全性,能很有效的减少交通事故。 关键词: AT89S52;超声波;测量距离;防撞 II The Design about Collision Avoidance System of Revering Abstract : This design is mainly based on AT89S52 single chip microcomputer as the main design of the automobile back-draft anti-collision system, this system of intelligent car provides high security in reverse. The system uses ultrasonic without contact can characteristics of distance measurement, system mainly consists of ultrasonic transmitting circuit module, ultrasonic receiving circuit module, liquid crystal display module and an acousto-optic alarm circuit module. The ultrasonic probe is mainly the ultrasonic transmitting and receiving part, LCD display between the obstacle and the vehicle distance, beyond the set distance, the buzzer alarm, at the same time the bright light emitting diodes, to remind the driver to adopt the corresponding measures. Improve the safety car in reversing the process, can be very effective to reduce traffic accidents. KEY WORDS : AT89S52, ultrasonic, measuring the distance ,collision avoidance III 目 录 1 .绪 论 ........................................................................................................................................... 1 1.1.本设计的目的和意义 ....................................................................................................... 1 1.2.课题研究背景 ................................................................................................................... 1 2.超声波介绍 ............................................................................................................................... 3 2.1.超声波传感器 ................................................................................................................... 3 2.2.超声波测距的原理与方式 ............................................................................................... 4 2.2.1.超声波测距的工作原理 ....................................................................................... 4 2.2.2.超声波测距的工作方式 ....................................................................................... 5 3 . 本设计核心器件简介 ............................................................................................................. 6 3.1.硬件部分 ........................................................................................................................... 6 3.2.单片机的选择 ................................................................................................................... 6 3.2.1.AT89S52 单片机 .................................................................................................... 6 3.2.2.功能特性描述 ....................................................................................................... 7 3.3.超声波传感器的选择 ....................................................................................................... 8 3.4.系统总体设计思路 ........................................................................................................... 8 4. 硬件电路设计 ........................................................................................................................... 9 4.1.显示电路 ........................................................................................................................... 9 4.2.报警电路 ......................................................................................................................... 10 4.3.单片机最小系统 ............................................................................................................. 10 4.3.1.电源电路 ............................................................................................................. 11 4.3.2.晶振电路 ............................................................................................................. 11 4.3.3.复位电路 ............................................................................................................. 12 4.4.整个电路设计的原理图 ................................................................................................. 12 5.程序设计 .................................................................................................................................. 14 5.1.主程序流程图 ................................................................................................................. 14 5.2.超声波发射接收流程图 ................................................................................................. 16 5.3.测距流程图 ..................................................................................................................... 17 5.4.显示和报警流程图 ......................................................................................................... 17 IV 6.误差分析 .................................................................................................................................. 19 7.结束语 ...................................................................................................................................... 20 参考文献 ...................................................................................................................................... 21 致 谢 ............................................................................................................................................. 22 1 1.绪 论 超声波是那些没有眼睛生物用来防御外来侵略或用于捕食猎物的一种手段,这种生物发出人们所听不到的超声波,利用空气作为传输媒质传播它们所发出的超声波,超声波遇到障碍物时就会反射回来,由发射到反射回来这之间的时间就可以粗略的估算出猎物或障碍物离该生物的距离。超声波最早开始于 1879 年,而这种作为人类首次发现的高频信号,在其它行业得到广泛的应用。可是在汽车领域很少有提及到它,这主要是因为最早期的超声波传感器达不到汽车行业所要达到精确要求。近些年,由于超声波技术在我国的不断发展,再加上它是一种不用接触就能进行测量的高精度传感器。所以后来也被用于汽车行业中来,其主要被应用在汽车的倒车防撞系统上。 1.1.本设计的目的和意义 随着经济水平的提高,人们对物质要求也越来越高,汽车作为现今社会的主要交通工具,很快在人们的生活中普遍了起来,而在驾驶过程中的安全问题也成为大家所关注的课题。汽车倒车倒车防撞系统能测量障碍物离车辆的距离并显示该距离,同时用滴滴声报警。驾驶人员不但可以很直接观测到被显示的距离,还可以用听觉判断,根据车后障碍物距离的远近不同,报警频率是不同,距离越近频率越高。 近几年,由于科技突飞猛进的发展,单片机在对电路的设计中变得越来越重要,并带动传统控制检测技术的发展。在实时检测和自动控制的单片机应用系统中,单片机一般作为一个比较核心部件来使用,仅仅靠单片机方面知识还是不够的,还应该根据具体情况和要求设计硬件结构和软件部分,这些结合起来才能更好的完善对电路的设计。 利用超声波测距方面的知识和单片机设计电路,设计出了汽车倒车防撞系统,此系统采用计算机控制技术和超声波非接触测距特点,通过 LCD 显示障碍物与汽车之间的距离,并根据所测距离远近的不同,所发出的报警频率是不同的,同时有不同颜色的 LED 灯亮。这样就很好的解决了驾驶员在停车和起动车辆时存在的一些安全隐患,提高了驾驶过程中的安全性。 1.2.课题研究背景 随着汽车数量一年一年的增多年,对交通,停车位等造成严重的压力,现今社会交通堵塞,停车难已经是个一个令人很头疼的问题,特别是在停车的时候,稍稍不注意就有可能造成很严重的后果。这一问题得到了驾驶员们的关注,所以他们就对车操 2 纵的便捷性提出了更高的要求,希望可以自己的车上安装某种装置可以解决汽车在倒车中所遇到的难题,减少在驾驶过程中的不安全隐患,以便于他们可以很快的停在所要停的地方,而当出现问题可以及时的报警,以免造成不必要的问题。这时在汽车上安装倒车防撞系统就显得尤为重要,因此市场上出现了汽车倒车防撞系统。这种系统主要是利用超声波非接触的特点测量障碍物与车之间的距离。 3 2.超声波介绍 人耳能听到的声波频率在 20Hz-20KHz 之间。频率超过 20KHz 的称为超声波,低于20Hz 的称为次声波[1] 。我们通常用所到的超声波的频率范围,可从几十兆赫兹到几千兆赫兹。超声波作为人类首次发现一种高频信号,其特点颇多:比如受它的频率高,波长短,特别是方向性好,能够成为射线而定向传播等。这一特性应用到测量距离上来,它可以不用接触被测物进行测量,比起那些接触式的测量就比较方便了,特别对于那些比较难测量的区域。超声波的穿透能力是很强,无论是固体还是液体,尤其是对那些不透明的物体,可以穿透几十米的深度。超声波在不同的介质中传播会在分界面发生反射,折射和波形转换等现象。正是因为它的各种特点所以,超声波检测广泛应用在生物医学,国防等各个领域。 2.1.超声波传感器 用超声波作为检测的方法,首先必须有能产生超声波的元件。完成这项任务的元器件就是超声波传感器了,我们习惯上叫它超声波换能器,或是超声波探头。超声波传感器是利用超声波的特性研制而成传感器,超成波探头按其结构可分为直探头,斜探头,双探头和液侵探头。按其工作原理又可以分为压电式,磁致伸缩式,电磁式等[2] 。在实际中比较常用是压电式探头,它其实是利用了压电效应原理,压电效应又可分为逆压电效应和正压电效应。超声波传感器是一种可逆元件,而压电式超声波就是利用这一原理,也就是电信号和超声波信号的相互转化来。在超声波的发射这一过程中,是将电信号转化为发射的超声波信号;而在超声波接受过程中,主要是将超声波信号转化为电信号的过程。超声波是一种振动频率高于声波的机械波,具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点[3] 。 超声波传感器是由两个压电晶片和一个共振板组成。当给它外加一个脉冲信号时,当其频率和压电晶片的固有频率相等时,压电晶片就会产生共振现象,进而带动共振板产生振动,就是超声波发射器了[2] 。超声波发射器如图 2-1 所示: 4 图 2-1 超声波发射器 若两电极之间没有电压,共振板接收到超声波信号时,迫使压电晶片产生振动,这样就将机械能转换为电能,此时就是超声波接收器了[2] 。超声波接收器如图 2-2 所示: 图 2-2 超声波接收器 2.2.超声波测距的原理与方式 2.2.1.超声波测距的工作原理 超声波测距原理就是利用超声波发射器发射信号,从刚发射超声波时就开始计时,信号在介质中传播,在传播的过程中遇到障碍物就马上返回,超声波接收器收到反射回来的信号时就立即停止计时。超声波在空气中传播速度 v,一般情况认为是 340m/s, 5 根据记录时间 t 就可以计算出发射点距障碍物的距离 s,即: S=v·t/2 (2.1) 超声波测距示意图如图2-3所示 图 2-3 超声波测距原理图 2.2.2.超声波测距的工作方式 利用超声波测量距离主要有声波幅值检测法,相位检测法和度越时间法。声波复制检测法容易受反射波的干扰;度越时间检测法测量精度较高,可使其测量范围小[4] ,这种方法特别容易实现。综合所述各种方法的优缺点,本设计系统采用的是度越时间检测法,其原理其实特别简单,就是超声波传感器发射超声波信号,经由介质转播,当遇到障碍物返回,直到超声波接收器接收到回波时,这之间所经历的时间就是度越时间。 6 3.本设计核心器件简介 3.1.硬件部分 本设计的硬件电路主要包括单片机控制部分系统,超声波的接收和发射,报警电路以及显示电路四部分组成。该系统设计以 AT89S52 单片机为主,它有着 12MHz 高精度的晶振,可以获得较为稳定的时钟频率,能有效的较少测量误差。用 AT89S52 单片机的 P3.0 口发射出 40kHz 的方波信号,此信号是超声波传感器所需要的。利用外部中断 INT0 端口监测返回的超声波信号。显示电路采用液晶显示,报警电路采用声光报警。系统框架图如图 3-1 所示; 图 3-1 系统设计框图 3.2.单片机的选择[5] 3.2.1.AT89S52 单片机  片内存储器包含 8KB 的 Flash,可在线编程,擦写次数不少于 1000 次;  具有 256 个字节的片内 RAM;  具有可编程的 32 根 I/O 口线 P0,P1,P2 和 P3;  具有 3 个可编程定时器 T0,T1 和 T2;  内含有 2 个数据指针 TPTR0 和 TPTR1;  中断系统具有 8 个中断源,6 个中断矢量,2 级优先权的中断结构;  串行通信口是 1 个全双工的 UART 串行口;  2 种低功耗节电工作方式为空闲模式和掉电模式;  具有 3 级程序锁定位;  含有一个看门狗定时器  具有断电标志 POF; AT89S52 超声波测距 液晶显示模块 声光报警模块 7  与 MCS-51 产品完全兼容; 3.2.2.功能特性描述 AT89S52 是一种低功耗,高性能,采用 CMOS8 工艺的 8 为单片机,其片内具有 8K的可在线编程 Flash 存储器。该单片机采用了 Atmel 公司高密度非易失性存储器技术制造,与工业标准型 80C51 单片机的指令系统和引脚完全兼容;片上的 Flash 存储器可在线重新编程,或使用通用的易失性存储编程器;通用的 8 位 CPU 在线可编程 Flash集成在一块芯片上,从而使 AT89S52 功能更加完善,应用更加灵活;具有更高的性能价格比,使其在嵌入式控制应用系统中有着广泛的应用[5] 。 AT89S52 具有以下标准功能:8K 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 为定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外 AT89S52 可降至 0Hz 静态逻辑操作,支持 2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM,定时器/计数器,串口,中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止,AT89S52 引脚图如图 3-2 所示 图 3-2 AT89S52 引脚图 P0 用作通用 I/O 口,每个引脚可驱动 8TTL 负载;当用作输入时,每个端口首先置 1。P0 口也可以做访问偏外数据存储器和程序存储器时的低 8 位地址/数据总线的复用口。这种情况下,P0 口内含上拉电阻。在 flash 编程时,P0 口输入代码数据;在flash 校验时,P0 口输出代码数据。在进行编程校验时,须外接 10K 的上拉电阻。 8 P2 可用作通用 I/O 口,可驱动 4TTL 负载;对 P2 口各位写入 1。可作为输入。每个引脚由外部负载拉为低电平时,经由内部上拉电阻向外输出电在编程和检验时,P3口接受某些控制信号。 P3 可用作通用 I/O 口,可驱动 4TTL 负载;当用作输入时,要先将 P3 口各位置 1。若外部负载将 P3 口拉低,则经过上拉电阻向外输出电流。在编程和检验时,P3 口接受某些控制信号。P3 口还具有替代功能,例如 P3.0 串行输入(RXD),P3.1 串行输出(TXD),P3.2 外部中断 0(INT0)等。 3.3.超声波传感器的选择 在本课题中选用 HC-SR04超声波传感器:它测量距离是精度很高可达3mm 并且HC-SR04测距范围比较大,一般可以实现从2cm—400cm 的非接触式距离。HC-SR04模块自身就有超声波发射器,接收器与控制电路,这样就减少了本设计的工作量。基本工作原理是采用单片机 I/O 口(P3.0口)触发 TRIG 测距,至少给10us 的高电平;HC-SR04自动发送8个49khz 的方波,自动检测是否有回波;如果有回波,通过 I/O 口 ECHO 给单片机的 INT0口一个低电平,提醒 T0口停止计时。I/O 口 ECHO 输出一个高电平,那么高电平维持的时间就是超声波从发射到返回的时间。HC-SR04如图3-3所示 图 3-3 HC-SR04 模块 3.4.系统总体设计思路 本设计的主控制芯片是 AT89S52 单片机,AT89S52 单片机工作性能稳定,同时它是在单片机的设计中经常使用到的控制芯片。并且还具有很高的灵敏度和较强的抗干扰能力。可以通过改变其部分参数来改变电路的灵敏度和抗干扰能力,因而采用此芯片作为本设计的主控芯片。 该系统核心由单片机控制和超声波传感器为核心,本设计采用的超声波传感器HC-SR04 包括超声波发射器,接收器与控制电路。超声波传感器在单片机的控制下发射出超声波信号,传感器的接受部分接受到信号之后送入单片机进行处理,计算出汽车与障碍物之间的最短距离,将所计算出来的结果送入液晶显示电路显示,再按照所设定的要求由报警电路进行报警。 9 4.硬件电路设计 4.1.显示电路 在大多数单片机设计系统中,最常用的显示设备有:发光二极管,简称 LED(Light Emitting Diode);液晶显示器,简称 LCD。这两种显示器相对于其它显示设备说比较便宜,功耗较低,完全能达到其它显示器所要达到的要求。 方案(1):LCD1602 液晶显示器也称为 1602 字符型液晶显示,它的体积比较小,功率消耗小,显示质量高,是一种专门用来显示字母、数字、符号的液晶显示模块。由于液晶显示模块每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,不像有些显示设备需要不断的刷新和点亮;无电磁辐射;简单方便的数字式接口;应用广泛,可以显示数字,字符,汉字和图形等,可是用于各种场合[6] 。使用液晶显示器,系统再也不需要像往常那样把数字信号转化成模拟信号再行输出了。 方案(2):数码管是利用发光二极管组合而成的数字显示器件,通过控制相应的二极管的状态显示相应的数字。要使数码管正常显示就得有驱动电路驱动相应的段码,数码管的现实方式可分为静态显示和动态显示,静态显示方式只适合显示单个的数字,对于文字性的东西就显得没那么合适了。由于动态显示方式利用的是人眼视觉暂留的特性,扫描的时间应不大于 20 毫秒,占用系统资源大,且相对于整个倒车系统而言,,需要比较清晰明了的了解车与障碍物之间的距离。 综上所述,采用方案(1)显示电路如图 4-1 所示 图 4-1 显示电路 10 4.2.报警电路 本 设计采用声光报警,当所计算出来的距离在 30cm 到 50cm 之间,蜂鸣器报警同时绿色的灯亮;当所计算出来的距离大于 0cm 小于 30cm 时,黄色的灯亮蜂鸣器报警并且报警频率要比前者高。声控部分如图 4-2 所示,P24 口所接的是三极管的基极输入端。当 P24 输出为高电平时,三极管导通,蜂鸣器两端就可获得+5V 的电压而响;当 P24输出为低电平时,三极管不导通,蜂鸣器两端电压为 0,所以就不会发声。光控部分如图 4-3 所示,主要是由两个电阻和两个不同色的发光二极管组成。 图 4-2 声音报警 图 4-3 光报警 4.3.单片机最小系统 单片机最小系统也就是能使单片机工作的最少元器件构成的系统,虽然这个系统很简单,但是却是所有控制系统所必不可少的一部分。最小系统包括电源电路,晶振电路和复位电路组成。AT89S52 单片机最小系统如图 4-4 所示 11 图 4-4 AT89S51 单片机最小系统 4.3.1.电源电路 电源电路主要功能就是向单片机供电的。电源电路如图 4-5 所示 图 4-5 电源电路 4.3.2.晶振电路 晶振电路也称时钟电路,它是单片机工作的时间基准,决定着单片机工作速度的快慢。负责产生单片机所需要的时钟信号,AT89S52 内部有一个高增益反向放大器,其输入端为引脚 XTAL1,输出端为引脚 XTAL2。在 XTAL1 和 XTAL2 两端口连接晶体震荡器形成反馈电路,晶体振荡器就可以工作。 早期晶体振荡器的工作频率在 1.2-12MHz 之间,由于科技的不断发展,现在其工作频率可正向两端延伸,达到了 0-40MHz。晶振电路由电容和晶振构成,在电路的设 12 计过程中,对 C1 和 C2 的大小没有严格的要求,但是它们的大小会影响振荡器震荡的稳定性和起振的快速性,大多数电路选择的范围在 10-30pF 之间。在电路的布局时,晶振,电容等应可能近的靠近单片机,这样的目的是减小分布电容,保证振荡器震荡的稳定性[7] 。晶振电路如图 4-6 所示 图 4-6 晶振电路 4.3.3.复位电路 复位方式分为上电自动复位,按键电平复位和外部脉冲复位三种方式[7] .本设计采用按键电平复位,按键电平复位电路如图 4-7 所示,手动按键产生一个复位信号,完成单片机从新启动,使单片机回到初始状态。 图 4-7 复位电路 4.4.整个电路设计的原理图 整个设计的原理图如图 4-8 所示: 13 +5 VGND1 VCC2VO3RS4WR5E6 DB07 DB18 DB29 DB310DB411DB512DB6 13DB714BG VCC15BG GND16LCD160 2LCD1LCD160 2+5 V液晶接口R34.7KP1 .0 /T21P1 .1 /T2EX2P1 .23P1 .34P1 .45P1 .56P1 .67P1 .78RST9P3 .0 /RXD10P3 .1 /TXD11P3 .2 /INT012P3 .3 /INT113P3 .4 /T014P3 .5 /T115P3 .6 /W R16P3 .7 /RD17XTAL218XTAL119GND20P2 .0 /A821P2 .1 /A922P2 .2 /A1023P2 .3 /A1124P2 .4 /A1225P2 .5 /A1326P2 .6 /A1427P2 .7 /A1528PSEN29ALE30EA31P0 .7 /AD732P0 .6 /AD633P0 .5 /AD534P0 .4 /AD435P0 .3 /AD336P0 .2 /AD237P0 .1 /AD138P0 .0 /AD039VCC40U2STC8 9C52Y111 .0 592 MHzC5 30 pC4 30 p+5 V单片机最小系统电路R210 K+5 V单片机复位+5 VK0R11KC310 UF123456789J210 KC1220U/35VSW 1C210 4R01KL1J1+5 V+5 VP3 0P3 1P3 2A1B2B1113322Q185 50+5 VR41k报警蜂鸣器+5 V+5 V1234U1超声波模块接口超声波模块接口电路+5 VP3 1P3 2R647 0R547 0L2L3 图 4-8 原理图 14 5.程序设计 本课题的软件设计主要包括主程序,超声波发射子程序,测距离子程序及显示报警子程序组成。汇编语言程序执行效率比较高,主要因为它本身是一种低级语言,是面向面向机器的程序语言。由于低级语言直接控制硬件,指令执行速度快,且指令的执行时间固定,所以汇编语言运行时间短。但是其代码繁多,语言格式比较死板,可读性差,不易于编写,也不便于移植[6] 。和汇编相比较,C语言比较符合人类思维习惯,C语言是面向计算机的,它是一种高级语言,兼备高级语言与低级语言的优势。具有易于编写、开发效率高、结构化强、可移植性好、程序可读性高且C程序有利于实现较为复杂的算法。综上所述本设计选择C语言编写。并用Keil软件进行调试和编辑,Keil有丰富的库函数。另外,Keil软件多数语句生成的汇编代码很紧凑,容易理解。因此,利用单片机C语言进行单片机系统的开发,能缩短开发周期,降低了开发的成本。 5.1.主程序流程图 整个系统在的工作过程:首先将微处理器 AT89S52 的 P3.0 口置 0,让超声波传感器发射超声波,在这同时启动 AT89S52 单片机的内部定时器 T0 开始计时。在发射后1.4ms 才可以去检测反射回来的超声波信号,这样就可以抑制输出所产生干扰。当超声波遇到障碍物时立即被反射回来,这时微处理器就不停的对 INT0 端口进行扫描,若INT0 接收的信号由高电平变为低电平,就表明有信号反射回来,于是关闭定时器 T0。再将 T0 中的数据经计算就可以粗略的计算出超声波传感器与障碍物之间的距离。然后再根据所计算的情况进行声光报警。主程序框图如图 5-1 所示 15 图 5-1 主程序框图 计算距离并显示 开始 初始化 发射,T0 开始计时,延时 1ms,停止发射 显示,等待反射回的波 是否有回波 ? 进入中断程序,关闭计时器 T0 T0 溢出中断,外中断INT0 关闭 读取往返时间 是否安全 ? 声光报警 返回 Y N Y N 16 5.2.超声波发射接收流程图 通过 P3.0 端口发送出频率为 40KHz 的方波的超声波信号,其脉冲宽度为 12us 左右,同时将计数器 T0 打开计时。超声波测距模块主程序主要是利用 INT0 引脚检测反射回来的超声波信号,如果发现 INT0 引脚出现低电平,就证明接收到返回的超声波信号,于是进入中断子程序立即停止计数器 T0 的计时工作。若计时器都溢出了还没检测到反射回来的信号,也就是说 INT0 引脚没出现低电平,那么定时器 T0 溢出中断将外部中断 INT0 关闭。本设计采用 12M 晶振,即机器周期是 1 us。下图 5-3 是超声波发射与接收子程序流程图。 图 5-2 超声波发射与接收子程序流程图 开始 计时单元清零 开始发射超声波 延时 接收到超声波,停止计时 定时器 T0 开启,开始计时 读取时间 返回 17 5.3.测距流程图 超声波在空气中传播速度较慢,为 340m/s,这就使计算变得非常简单。只要准确的测得度从超声波传感器发出超声波到遇到障碍物反射回收受端的时间,就可由公式S=v·t/2 计算出车到障碍物的距离。测距流程图如图 5-3 所示 图 5-3 测距流程图 5.4.显示和报警流程图 显示模块是利用定时器将测试得到的最短距离的数值通过串行口传送到显示模块进行显示。通过调用距离计算子程序,大于50cm为安全距离,设定蜂鸣器的工作方式,工作设为1,不工作设为0,若所计算出来的距离大于30cm小于50cm,蜂鸣器工作同时绿灯亮;若计算出来的距离大于0cm小于30cm时,蜂鸣器工作同时黄灯亮。其余情况蜂鸣器和LED等处于不工作状态。距离显示,判断以及报警流程图如图5-4所示 开始 调用距离计算子程序 计算出距离 返回 18 图 5-4 距离显示,判断以及报警流程图 开始 将距离值通过 I/O 口送到显示模块显示 设置安全距离 是否安全? 声光报警 返回 N Y 19 6.误差分析 根据超声波测距公式S=v·t/2,可知测距的误差是由超声波的温度误差、传播速度误差和测量距离传播的时间误差引起的[8] 。 (1) 温度误差 超声波在空气中传播的一种纵波,而空气具有反抗压缩和和扩张的特性,由于气体反抗压缩变化的作用是传声波能在空气中传播的原理,因为反抗压缩这种特性与温度有很密切的关系,所以超声波在空气中的传播受温度影响。因此超声波在空气中的传播与空气的温度有很密切的关系。 v=331.5+0.607t(m/s) (6.1) 式中t=温度(℃)。在不是很严格的情况下可用340m/s代替,如果需要精确测量与障碍物之间的距离,可以通过温度补偿电路实现 (2)传播速度误差 如果系统要求测距误差小于 1mm 时,如果已知超声波速度在室温条件下 v=344m/s (20℃),不计声速在的传播过程中的误差。测距误差 2.907ms。不同的温度,超声波的传播速度不同,所以就必须把把超声波所处的环境的温度考虑到。比如说当温度 0℃时超声波 v=332m/s, 30℃时速度是 v=350m/s,温度变化引起的超声波速度变化为18m/s。假设超声波在 30℃的情况下用 0℃的速度测量 100M 的距离,测量的误差将达到 5M,也就是说测量 1M 误差将达到 5MM。如果距离过长的话,误差就会更大。所以在精确测量时,这个因素必须考虑进去。 (3)测量距离传播的时间误差 采用超声波传感器发射超声波,同时接受反射回来的波。一般使用的超声波频率为40KHZ。利用这一原理所计算出车与障碍物的距离。a.从反射原理看:反射规则中反射角等于入射角,所以说反射回来的回波能否被传感器所接收到,与反射面的角度有很大的关系。b.反射面的大小对反射的回波也是有影响的,如果反射面不是走够大的话,反射回来的会波就有所衰减,更有甚者是没有回波。c.障碍物的材质也与反射有很大关系,障碍物会吸收一部分,而吸收的多少与障碍物的材质有关。这些因素综合起来,决定障碍物是否会被探测到。 20 7.结束语 这次设计是对我大学四年所学的一次检测,从一开始的选题到论文的撰写我都很认真。这段时间我的设计按照我的计划一步一步的进行着,虽然它是一套比较简单的汽车倒车防撞系统设计,但是也是对我的考验。首先在查清楚系统的各项功能后,就开始对设计整个系统的总体结构,其次就是详细的说明了系统的硬件电路结构和完成各项功能相关的软件设计。本次设计主要以 AT89S52 为核心控制,灵活的运用超声波换能集成电路作为超声波的接收电路,在讨论了超声波测距原理、硬件电路实现和软件设计方法基础上,完成了对超声波测距的设计要求。在这过程中我查阅了很多的资料,也得到老师和同学的帮助。但是由于我的专业知识有限,本设计做的不是很完善,还有很多的缺陷,只能从理论上实现对驾驶员的提醒,应用到实际中还是有一定困难,因为其误差比较大,不能达到实际应用中所要达到的精密要求。无论哪个方案都要经过多次的验证与完善,只有经过不断的完善,最后的研究才能够获得成功。 通过这次课题的设计,我对单片机有了很深入的了解,尤其是关于 I/O 接口这部分,以前经常讲它们的功能搞混淆。还学到了许多关于超声波方面的知识,比如超声波测距离,超声波测距系统由于不受光线、电磁波、粉尘等的影响,其精度能达到厘米数量级的工程测距精度等的优点,在桥梁、隧道、涵洞等的距离检测中占有一定的优势。本设计中将其应用于汽车倒车,利用超声波非接触测距系统的特点,可以有效地提高车辆在倒车和停车过程中的安全性。 21 参考文献 [1] 何希才,薛永毅.传感器及其应用实例[M].北京:机械工业出版社,2004,1 138—139. [2] 徐甲强.传感器技术[M]哈尔滨:哈尔滨工业大学出版社,2004.10 74—75. [3] 曹瑞,包空军.基于超声波传感器新技术应用[J].信息科技,2009(3). [4] 肖质红.超声波测距仪在汽车安全系统中的应用[J].浙江万里学报,2007,20(5). [5] 王幸之,钟爱琴等.AT89 系列单片机原理与接口技术.北京:北京航空航天大学出版社,2004,(5):43-44. [6] 赵建领,崔昭霞.精通 51 单片机开发技术与应用实例.北京:电子工业出版社,2012,6 87-470. [7] 张俊谟.单片机中级教材—原理与应用[M]北京:北京航空航天大学出版社,2006.10 24—25. [8] 孙余凯,等. 传感器技术基础与技能实训教程[M].北京:电子工业出版社,2006,(5):50-150. [9] 李晓松,田文强.倒车防撞报警系统的设计[J].太原科技大学学报,2011,32(1):1. [10] 于志赣,刘国平.液晶 LCD1602 模块的应用[J].机电技术,2009,3(1). [11] 《51 系列单片机 C 程序设计与应用方案》 北京:(中国电力出版社). [12] 赵广逃,程荫杭.基于超声波传感器的测距系统设计[EB/OL]. http://www.dzjia.cn/html/ceshiyuceliang/20070223/9964.html, 2006-6 [13] 滕志军.基于超声波检测的倒车雷达设计 [EB/OL]. http://car.newmaker.com/disp_art/1020005/17626.html,2006-10-04 22 致 谢 时间飞逝,一眨眼的功夫,我们在延安大学西安创新学院的四年学习生涯随着此次论文的完成接近尾声,四年的奋斗与付出也将获得回报。 本论文设计能这么顺利的完成,首先我要感谢xx老师的悉心指导和严格要求下完成的,从开始个选题到实际考察,无不凝聚着xx老师的心血和汗水。xx老师帮我解决了许多在实际考察中所遇到的困难。感谢xx老师给我了这个课题,让我能在毕业之际,有机会对自己的能力进行检测。在这我要对xx老师表示我深深的感谢。xx老师给我们提供实验室,让我们能全心的做设计。而且xx老师每周有三四天都会去实验室,帮我们解解疑答惑。xx老师严谨认真的治学态度感染了我们,是我们不再畏惧问题。xx老师对我非常严格,论文和设计中一点瑕疵都不能出现,也正是因为这种严格,才使我能这么顺利的完成这次设计。在xx老师的指导下,我从一团乱麻到慢慢有了设计的思路,积累了一些设计的经验,还学会了如何有效快速的找到参考资料,掌握了很多有用的新的知识。在我的毕业论文写作期间,xx老师为我提供了专业知识上的指导和一些富于创造性的建议,没有这样的帮助和关怀,我不会这么顺利的完成毕业论文。也许我不是您最出色的学生,但您是我最尊敬的老师。在此向xx老师表示深深的感谢和崇高的敬意。 在临近毕业之际,我还要借此机会向在这四年中给予我帮助和指导的所有老师表示由衷的谢意,感谢你们四年来对我的辛勤栽培。不积跬步何以至千里,各位任课老师认真负责,在你们的悉心帮助和支持下,我能够很好的掌握和运用专业知识,并在这次设计中充分得以体现,顺利完成毕业论文。同时,我还要感谢我的同学,在毕业设计的这段时间里,你们给了我很多的启发,提出了很多宝贵的意见,对于你们的帮助和支持,在此我表示深深地感谢。 最后,我要想在百忙中抽时间对本文进行审阅,评议和参加本文大便的各位师长表示感谢! 附录 附录一原程序代码 #include <AT89x51.H> //器件配置文件 #include <intrins.h> #define RX P3_1 #define TX P3_2 #define LCM_RW P2_1 //定义 LCD 引脚 #define LCM_RS P2_0 #define LCM_E P2_2 #define LCM_Data P0 #define buzzer P2_3 #define LED P3_6 #define led P3_5 //#define Key_Data P2_0 //定义 Keyboard 引脚 //#define Key_CLK P3_2 #define Busy 0x80 //用于检测 LCM 状态字中的 Busy 标识 void LCMInit(void); void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void); void Delay400Ms(void); void Decode(unsigned char ScanCode); void WriteDataLCM(unsigned char WDLCM); void WriteCommandLCM(unsigned char WCLCM,BuysC); unsigned char ReadDataLCM(void); unsigned char ReadStatusLCM(void); unsigned char code mcustudio[] ={"Welcome to use !"}; //unsigned char code email[] = {"NAME:Zhu Kailun "}; unsigned char code Cls[] = {" "}; unsigned char code Distance[] = {"Distance: "}; unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'}; static unsigned char DisNum = 0; //显示用指针 unsigned int time=0; unsigned long S=0; bit flag =0; unsigned char disbuff[4] ={ 0,0,0,0,}; //写数据 void WriteDataLCM(unsigned char WDLCM) { ReadStatusLCM(); //检测忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0; LCM_E = 0; //若晶振速度太高可以在这后加小的延时 LCM_E = 0; //延时 LCM_E = 1; } //写指令 void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC 为 0 时忽略忙检测 { if (BuysC) ReadStatusLCM(); //根据需要检测忙 LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; } //读数据 unsigned char ReadDataLCM(void) { LCM_RS = 1; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; return(LCM_Data); } //读状态 unsigned char ReadStatusLCM(void) { LCM_Data = 0xFF; LCM_RS = 0; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; while (LCM_Data & Busy); //检测忙信号 return(LCM_Data); } void LCMInit(void) //LCM 初始化 { LCM_Data = 0; WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); //关闭显示 WriteCommandLCM(0x01,1); //显示清屏 WriteCommandLCM(0x06,1); // 显示光标移动设置 WriteCommandLCM(0x0F,1); // 显示开及光标设置 } //按指定位置显示一个字符 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { Y &= 0x1; X &= 0xF; //限制 X 不能大于 15,Y 不能大于 1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; X |= 0x80; //算出指令码 WriteCommandLCM(X, 1); //发命令字 WriteDataLCM(DData); //发数据 } //按指定位置显示一串字符 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) { unsigned char ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; //限制 X 不能大于 15,Y 不能大于 1 while (DData[ListLength]>0x19) //若到达字串尾则退出 { if (X <= 0xF) //X 坐标应小于 0xF { DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符 ListLength++; X++; } } } //5ms 延时 void Delay5Ms(void) { unsigned int TempCyc = 5552; while(TempCyc--); } //400ms 延时 void Delay400Ms(void) { unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) { TempCycB=7269; while(TempCycB--); }; } /********************************************************/ void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; LED=1; //rsd=0; S=(time*1.7)/100; //算出来是 CM if((S<50)&(S>30)) { buzzer=0; led=0; Delay400Ms(); //延时 buzzer=1; led=1; } else if((S<30)&(S>1)) { buzzer=0; LED=0; Delay5Ms(); //延时 Delay5Ms(); //延时 Delay5Ms(); //延时 Delay5Ms(); //延时 buzzer=1; LED=1; } if((S>=700)||flag==1) //超出测量范围显示“-” { flag=0; DisplayOneChar(11, 1, ASCII[11]); DisplayOneChar(12, 1, ASCII[10]); //显示点 DisplayOneChar(13, 1, ASCII[11]); DisplayOneChar(14, 1, ASCII[11]); DisplayOneChar(15, 1, ASCII[12]); //显示 M } else { disbuff[0]=S%1000/100; disbuff[1]=S%1000%100/10; disbuff[2]=S%1000%10 %10; DisplayOneChar(11, 1, ASCII[disbuff[0]]); DisplayOneChar(12, 1, ASCII[10]); //显示点 DisplayOneChar(13, 1, ASCII[disbuff[1]]); DisplayOneChar(14, 1, ASCII[disbuff[2]]); DisplayOneChar(15, 1, ASCII[12]); //显示 M } } /********************************************************/ void zd0() interrupt 1 //T0 中断用来计数器溢出,超过测距范围 { flag=1; //中断溢出标志 } /********************************************************/ void StartModule() //启动模块 { TX=1; //启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } /********************************************************/ void delayms(unsigned int ms) { unsigned char i=100,j; for(;ms;ms--) { while(--i) { j=10; while(--j); } } } /*********************************************************/ void main(void) { unsigned char TempCyc; Delay400Ms(); //启动等待,等 LCM 讲入工作状态 LCMInit(); //LCM 初始化 Delay5Ms(); //延时片刻(可不要) DisplayListChar(0, 0, mcustudio); // DisplayListChar(0, 1, email); ReadDataLCM();//测试用句无意义 for (TempCyc=0; TempCyc<10; TempCyc++) Delay400Ms(); //延时 DisplayListChar(0, 1, Distance); DisplayListChar(11, 1, Cls); while(1) { TMOD=0x01; //设 T0 为方式 1,GATE=1; TH0=0; TL0=0; ET0=1; //允许 T0 中断 EA=1; //开启总中断 while(1) { StartModule(); while(!RX); //当 RX 为零时等待 TR0=1; //开启计数 while(RX); //当 RX 为 1 计数并等待 TR0=0; //关闭计数 Conut(); //计算 delayms(80); //80MS } } }

关注我们

关注微信公众号

您选择了以下内容