1、基于超声波的倒车雷达系统 电子 0601 郑灵光 电子 0602 潘建标,陈永根 2 摘 要 随着科技的发展,人们生活水平的提高,城市发展建设加快,城市给 交通 系统也有较大发展,其状况不断改善。但是,由于 多种 原因合成时间住的许多不可预见因素,城市 还是经常出现大量的交通事故,特别是倒车时,看不到后方而导致大量的交通事故 。因此, 设计 出好的倒车雷达系统,对于减少城市的交通事故将有一个很好的控制作用。当然这要求倒车雷达系统,具有精度高,抗干扰强,价格应该低,适宜推广等特点,这样基于超声波的测距系统,完全可以胜任此任务。 本设计采用以 AT89C51单片机为核心的低成本、高精度、微型化数字
2、显示超声波测距仪的硬件电路和软件设计方法。整个电路采用模块化设计,由主程序、发射子程序、接收子程序、显示子程序等模块组成。各探头的信号经单片机综合分析处理,实现超声波测距仪的各种功能。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。 该设 计 设抗干扰能力 较好,实时 性良好, 误差可以达到 mm 级,可以有效地解决汽车倒车作用。 本系统 在倒车时不断测量汽车尾部与其后面障碍物的距离,并随时显示其距离, 并用语音及时提示。 在不同的距离范围内 ,不同的温度下测出距离, 发出报警 信号,以提高汽车倒车时的安全性的仪器。 3 目录 第一章 绪论 3 1.1 课题背景,目的和意
3、义 3 1.2 两种常用的超声波测距方案 3 第 2 章 超声波测距系统设计 3 2.1 超声波测距的原理 4 2.2 超声波测距系统电路的设计 4 2.2.1 总体设计方案 4 2.2.2 发射电路的设计 4 2.2.3 接收电路的设计 4 2.2.4 显示模块的设计 5 2.2.5 温度补偿模块设计 5 2.2.6 语音处理模块 5 第三章 超声波测距系统的软件设 .5 3.1 总体流程图 .5 3.2 程序及分析 .6 第四章 电路调试及误差分析 .7 4.1 电路的调试 .7 4.2 系统的误差分析 .7 第 5 章 功能扩展 7 参考文献 .7 附录: 8-22 4 第 1 章 绪论
4、 1.1 课题背景,目的和意义 由于社会的进步, 经济的发展和生活水平的不断提高,汽。 车数量逐年增长,造成道路交通拥挤不堪,交通事故频繁发生 汽车倒车报警器:在倒车时不断测量汽车尾部与其后面障碍物的距离,并随时显示其距离, 并用语音及时提示。 在不同的距离范围内 ,不同的温度下测出距离, 发出报警信号,以提高汽车倒车时的安全性的仪器。 2.2 两种常用的超声波测距方案 2.2.1 基于 CPLD 的超声波测距系统 CPLD 模块主要由发射模块, 16 位计时计数器模块,接收模块,顺序执行计数器模块和六选一数据选择器模块五部分组成。其总体框图如图 1 所示。 CPLD 模 块主要完成超声波的发
5、射、接收和时间的测量。超声波发射模块启动40KHz 的超声波发射,当发射脉冲串达到设定值后,关闭超声波的发射,同时启动六路计时计数器模块开始计时 ;信号经过障碍物反射回来,接收电路接收到回波后,将其进行整形,作为接收模块的信号,当接收完回波脉冲信号后,接收模块输出端发出信号,关闭计时计数器停止工作 ;当所有的回波接收完毕后,顺序执行计数器输出端发出信号启动单片机开始接收数据,通过顺序执行计数器的计数值、数据选择器的选择端与计时计数器的控制端分别读取六路不同的计数值。所有的数据读取完后,清除计时 计数器的计数值,准备下一次的循环计数。 2.2.1 基于单片机的超声波测距系统 本警器由单片机来控制
6、。整个控制系统由超声波发射电路、超声波接收电路、报警电路、复位电路、显示电路组成。实行实时数字显示测得的距离,在不同的距离范围内发出不同的报警信号,驾驶员可根据个人需要调整设置报 警距离,以减少事故的发生。 本作品将采用此种方法。 第 二 章 超声波测距系统设计 2.1 超声波测距的原理 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声5 波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为 c,根据计时器记录的时间 t,就可以计算出发射点距障碍物的距离 (s),即: s=ct/2 。这就是所谓的时间差测距法。 2.2 超
7、声波测距系统电路的设计 2.2.1 总体设计方案 该设计总体基于 51,包括发射模块,接收模块, 显示模块,语音模块,温度补偿模块。由发射电路发射超声波, 51 计数器从 0 开始计时,当超声波反射回来,接收电路接收, 51 停止计时, 将所计得得数转化成十进制 n,因为 使用的 12MHz晶体作时钟基准的 89C51 单片机定时器能方便的计数到 1s的精度,因此系统采用89C51 定时器能保证时间误差在 1mm 的测量范围内。 ,则将 n 与 1us 相乘即可以得到时间,从而利用 超声波测距的原理 就可以判断距离以是否利用利用凌阳 61 版的语音处理功能,进行报警及播放当前的距离,温度和超声
8、波传播速度。再者显示器也将显示距离,温度,及超声波传播速度 。 2.2.2 发射电路的设计 用单片机直接产生的 40khz信号经过 74ls04 放大 后直接驱动超声波发射探头 。 2.2.3 接收电路的设计 将超声波 接收 探头接收的信号经 cx20106 红外线专用芯片处理接收 ,然后送给6 单片机。 2.2.4 显示模块的设计 使用 1602 液晶屏 ,与单片机连接,将单片机的距离,温度,超声波数度(声速) 传送给液晶屏显示出来。 2.2.5 温度补偿模块设计 因 为 声 速 在 不 同 温 度 下 的 传 播 速 度 是 不 同 的 , 根 据 补 偿 公 式C=C0+0.607T C
9、0 为零度时的声波速度 332m/s; T 为实际温度 ( )。 采用 18b20温度传感器测温,根据测得的温度 ,来确定具体的声速 。 2.2.6 语音处理模块 根据手中的现有的材料 ,利用凌阳 61 版的语音处理功能,播放出: “倒车请注意” 并通过 51 单片机和凌阳的串口通讯, 将 51 测得的距离,温度,声速 数据 传给 凌阳,然后通过凌阳的语音处理将其播报出来。 第三章 超声波测距系统的软件设计 3.1 总体流程图 3.1.1 凌阳模块流程图 初 始 化发 射是 否 有 数 据数 据 处 理播 报是否3.1.2 51 单片机模块 7 3.2 程序及分析 (见附录) 开始发射是否有键
10、按下处理 ( 关中断 , 定时器 ) 数据接收延时中断接收初始化是串口发送数据 , 凌阳接收处理否8 第 4 章 电路调试及误差分析 5.1 电路的调试 (盲区问题) 由于超声波发射探头在发射超声波时,接受探头也会接受到超声波,所以在发射超声波时,必须先关外部中断,延时一段时间,进而消除回波干扰,所以在测量中会有盲区出现,所以硬件调试中主要的就是调节延时时间,使盲区达到最小,进而跳高测量的精度。 通过硬件调试,来控制发射脉冲波的个数以及延时时间,并在实际测量中测出三种不同 测距 模式下的盲区,分别 约 为 5cm, 20cm及 45cm。 、 5.2 系统的误差分析 28 根据 超声波测距公式
11、 L=CT ,可知测距的误差是由超声波的传播速度误差和测量距离传播的时间误差引起的。 1.时间误差 当要求测距误差小于 1mm 时,假设已知超声波速度 C=344m/s (20 室温 ),忽略声速的传播误差。测距误差 st #include #include“18B20.h“ #include “intrins.h“ #include“LCD1602.H“ #include“Delay1.h“ #define uchar unsigned char #define uint unsigned int uchar ucHigh_time,ucLow_time; /超声波传输时间 uchar uc
12、Flag; /中断标志位 uchar frq; /音乐频率节拍问题 float c; /不同温度下的超声波传播速度 /*针脚定义 */ sbit Hz40k_out =P36; /40k 信号输出端 sbit Mod_short=P14; sbit Mod_long=P15; sbit Mod_out = P17; / 判断数据是发给电脑机还是 凌阳版 sbit Key_tran=P16; /发送数据,开始通讯 /*/ /*函数声明 */ void Tmr0_int(void); void Int0_int(void); void Send_40khz_long(void) ; /发射超声波
13、void Send_40khz_medium(void) ; void Send_40khz_short(void) ; int Distance_count(); /距离转换函数 float Compensate_c(); /温度补偿函数 void Display_dis(void) ; /距离显示函数 void Display_tem(void) ; /温度显示函数 void Display_c(void) ; /声速显示函数 10 void delayms(unsigned char ms); void Tmr1_int(void); /*子程序 */ void Tmr0_int(voi
14、d) TMOD|=0x01; /tmr0 方式 1, 16 位计数 EA=0; /关总中断 ET0=0; /关 T0 中断 TR0=0; /停止计时器 0 TH0=0X00; TL0=0X00; / void Int0_int(void) IT0=0; /低电平沿触发 EA=0; /关总中断 EX0=0; /屏蔽中断 / void Ustart_int(void) SCON |= 0x50; /串口方式 1,允许接收 TMOD |= 0x20; /定时器 1 定时方式 2 / TCON = 0x40; /设定时器 1 开始计数 TH1 = 0xF3; /12MHz 2400 波特率 TL1 =
15、 0xF3; TR1 = 0; /关闭定时器 / void Ustart_send_lingyang(void) uchar send3; uint Voice_v; send0=Distance_count(); send1=Distance_count()8; TR1 = 1; /启动定时器 TI=0; SBUF=send1; /先发高位再发低位 while(!TI); /等待发送完成 TI=0; while(!RI); /等待接收完成 RI=0; /delay_ms(200); SBUF=send0; while(!TI); TI=0; send0=Read_Temperature()/10; send1=(Read_Temperature()/10)8;/发送的为实际温度的十倍 37.2C 则发送 372