超声波测距仪朱淼森解析.docx
- 文档编号:26767330
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:32
- 大小:613.78KB
超声波测距仪朱淼森解析.docx
《超声波测距仪朱淼森解析.docx》由会员分享,可在线阅读,更多相关《超声波测距仪朱淼森解析.docx(32页珍藏版)》请在冰豆网上搜索。
超声波测距仪朱淼森解析
滁州职业技术学院信息工程系
——2015届应用电子专业毕业论文
姓名:
朱淼森
班级:
12级应用电子
(1)班
设计课题:
超声波测距仪
指导教师:
姚聪
2014年11月28日
目录
目录2
摘要4
第一章概述1
1.1系统功能要求1
1.1.1基本要求1
1.1.2发挥部分1
1.2系统设计方案1
1.2.1超声波测距模块2
1.2.2显示模块2
1.2.3主控模块2
1.2.4电源模块3
1.2.5充电控制模块3
第二章硬件设计3
2.1超声波测距模块3
2.1.1设计方案3
2.1.2HC-SR04芯片介绍4
2.1.3超声波测距模块原理4
2.2显示模块5
2.2.1设计方案5
2.2.21602液晶显示器介绍[1]6
2.2.31602液晶显示器原理6
2.3主控模块7
2.3.1设计方案7
2.3.2STC12C5A60S2单片机介绍[2]7
2.3.3STC12C5A60S2单片机原理8
2.4总体硬件设计9
2.4.1总体设计方案9
2.4.2完整硬件电路图9
第三章软件设计10
3.11602液晶屏显示驱动模块10
3.1.1软件设计方案10
3.1.2软件流程10
3.1.3软件代码11
3.2A/D检测模块14
3.2.1软件设计方案14
3.2.2软件流程图15
3.2.3软件代码[3]15
3.3超声波测距模块17
3.3.1软件设计方案17
3.3.2软件流程图17
3.3.3软件代码18
3.4软件整体流程25
3.4.1软件整体设计方案25
3.4.2主函数程序结构25
第五章系统结果26
5.1超声波测距仪性能介绍26
5.2超声波测距仪结果分析26
致谢28
参考文献29
摘要
超声波测距仪要求测量范围在5cm~500cm,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波常用于距离测量。
超声波测距仪,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于液位、井深、管道长度等测量的场合。
利用超声波检测往往比较迅速、方便、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因为往往在移动机器人的研制中得到了广泛的应用。
本组设计的超声波测距仪采用HC-SR04模块实现了超声波的发射与接收,采用STC12C5A60S2单片机做为该测距仪的控制核心,此设计易于调试,成本低廉,具有很强的实用价值和良好的市场前景。
关键词:
超声波传感器,单片机,测距仪
第一章概述
声波分为纵波和横波等,声波可以在任意介质当中传播称之为纵波。
当声波受到尺寸大于其波长的目标物体阻挡时就会产生反射,反射波称为回声。
假如声波在介质中传播的速度是已知的,而且声波从声源到达目标然后返回声源的时间可以测量得到,那么就可以计算出从声源到目标的距离。
超声波测距仪就是基于上面原理而设计的。
这里声波传播的介质为空气,采用的是方向性较好的超声波。
1.1系统功能要求
1.1.1基本要求
(1)最大测距距离5m,最小测距距离5cm。
(2)测量精度小于1cm。
(3)人机界面友好,操作方便,用液晶屏或数码管显示测量值。
(4)自带可充电电池作为电源,充电电池用USB口充电。
1.1.2发挥部分
(1)最大测距距离提高到10m。
(2)测量精度提高到5mm。
(3)使用两套以上设备实现“一问一答”的二次雷达工作方式进行距离测
量。
各套设备发射不同编码波形实现自身个体身份识别,并以此同时测量自身与其它多个个体之间的距离。
1.2系统设计方案
根据系统功能要求,本此设计的思路是将系统分为电源模块、主控模块、超声波测距模块、显示模块和充电控制模块五个部分(如图1-1所示)进行分步设计。
图1-1系统功能框图
测量距离的方法有很多种,短距离的可以用米尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。
因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,系统的测量精度理论上可以达到毫米级。
超声波测距的原理一般采用渡越时间法TOF(time of flight),也可以称为回波探测法。
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在介质中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
根据传声介质的不同,可分为液介式、气介式和固介式三种。
根据所用探头的工作方式,又可分为自发自收单探头方式和一发一收双探头方式。
超声波在空气中(20℃)的传播速度为340m/s(实际速度为344m/s这里取整数),根据计时器记录的时间就可以计算出发射点距障碍物的距离,公式S=340*t/2。
1.2.1超声波测距模块
超声波测距模块用于实现本系统核心功能,是本次设计首先考虑的内容,超声波测距模块的好坏,直接决定了产品的性能。
1.2.2显示模块
显示模块是人际交换的重要平台之一,显示模块的好坏直接决定了用户的体验,所以选择什么样的显示器件也是很重要的。
1.2.3主控模块
主控模块是本次设计的核心器件,它起到了“大脑”的作用,在一定程度上决定了产品的性能和功能;强大的单片机可以丰富产品功能,增加用户体验和产品性能,更利于软件开发等。
所以选择什么样的单片机更加实惠,性能会更好,也是硬件设计所面临的挑战。
1.2.4电源模块
电源模块是超声波测距仪的“心脏”,只有给超声波测距仪的各个“器官”提高足够的功率,这些“器官”才能发挥自己的作用,所以选择一个适合超声波测距仪的“心脏”也是很重要的,在整体上影响了产品的性能,毕竟超声波测距仪是手持式的,具有便携的功能,电源模块也需要短小精悍。
1.2.5充电控制模块
这个模块在超声波测距仪中也是不可缺少的,它性能的优良关系到产品的性能和耐用度。
根据设计要求,我们知道需要用USB接口给充电电池充电,如果我们用USB接口直接连接外部的USB电源的话,那么USB接口标准电压为5V,电池电压不低于5V,这时充电就无法进行。
我们为了可以用USB接口对充电电池充电,采用的是:
一个USB接口母头、升压模块、JZC-32F继电器、发光二极管共同组成充电控制模块。
在超声波测距仪正常工作时使用电池直接供电,当电量不足时发管二极管点亮来提示电量不足。
在为电源模块充电时,外接5v充电器连接超声波测距仪的USB接口,通过升压模块来提升充电电压,用单片机来控制继电器为电池充电。
第二种方案还带有电池电量检测功能,可以再电池电量不足的时给予提示,避免了由于电池电量不足而影响超声波测距精度。
第二章硬件设计
2.1超声波测距模块
2.1.1设计方案
超声波测距模块用于实现本系统核心功能,是本次设计首先考虑的内容,在设计时,本组确实考虑了两种方案。
方案一:
选取超声波收发探头作为核心器件,配合外部电路以及超声波信号处理芯片(CX20106)自主设计测距模块。
这种方案可以控制超声波的发射接收频率,具有很强系统优化功能,但是外部电路复杂,参数匹配要求较高,且测距的精度和距离不够高。
方案二:
购买市面上已经成熟的超声波测距模块。
这种超声波模块的发射接收频率固定,不具有系统优化的可能,但是信号接收精度高,控制简单。
经过比较,方案二既能够满足设计要求,同时对控制程序的要求较低,因此选取方案二作为本模块的设计方案。
2.1.2HC-SR04芯片介绍
HC-SR04芯片是超声波模块,它由STC11单片机、MAX232电平转换芯片、TL074四个集成的运算放大器组成。
使用HC-SR04超声波模块,可以很方便的与单片机连接,并且超声波测距的精度很高,驱动程序也很好编写。
HC-SR04超声波模块也是由发射部分和接收部分组成。
发射部分包括,STC11系列的单片机,MAX232电平转换芯片和超声波发射头组成。
接收部分包括:
TL074芯片和超声波接收头。
STC11系列的单片机芯片主要起到控制作用,起到和我们使用的单片机进行通讯,包括TX引脚的启动电平和RX引脚的接收电平。
我们将单片机输出TX=1,启动信号后,STC11单片机打开MAX232芯片的电源开关,并且输出8个40kHz的方波信号给MAX232芯片,MAX232芯片是电平转换芯片,在这里的作用就是电平转换,将5V电平转换到12V输出。
这样可以提高发射功率,我们知道功率和电压和电流有关,现在电流不变,电压升高,那么超声波发射的功率显然就上升了。
功率的提升可以增加超声波检测的距离和精度。
正是有了这个模块,所以HC-SR04的性能这能这样好。
TL074芯片是4个集成运放电路。
而且它是低噪声输入的JFET的运算放大器,可以很好的将超声波接收头接收到的信号,进行放大,整形等。
通过三极管控制和STC11单片机的通讯信号,拉低或者拉高。
所有的信号经过STC11单片机处理后,和我们使用的主控芯片进行通讯和数据传输。
2.1.3超声波测距模块原理
(1)超声波测距原理:
超声波是利用反射的原理测量距离的,被测距离一端为超声波传感器,另一端必须有能反射超声波的物体。
测量距离时,将超声波传感器对准反射物发射超声波,并开始计时,超声波在空气中传播到达障碍物后被反射回来,传感器接收到反射脉冲后立即停止计时,然后根据超声波的传播速度和计时时间就能计算出两端的距离。
测量距离L为L=(Δt/2)*c超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距离障碍物的距离(s)即:
s=340t/2。
这就是所谓的时间差测距法。
(2)原理图:
图2-1-1是和单片机连接的原理图;图2-1-2是HC-SR04内部原理图。
图2-1-1HC-SR04原理图
图2-1-2HC-SR04内部原理图
2.2显示模块
2.2.1设计方案
在显示模块的设计方案中,选择什么型号的显示器件,关乎到用户体验,本组认为数码管不利于控制,且视觉效果不好,所以选取了1602液晶屏作为主要显示器件,相对于数码管,液晶屏的显示信息数量更多,而且数据更清晰,这样用户使用时能更清楚、直观的明白距离等信息,同时配合发光二极管作为报警器件,可以拥有更好的用户体验。
2.2.21602液晶显示器介绍[1]
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
2.2.31602液晶显示器原理
(1)1602液晶显示器工作原理:
1602液晶显示器的数据接口连接到单片机STC12C5A60S2的P0口上,控制端口连接在P2口上面,我们通过1602的读写时序,对RS、RW、E三个端口进行操作,便可以对1602进行读操作,写操作;数据也可以和1602进行交换,我们可以先写命令,也可以写地址,然后直接发送数据,这样1602就能识别了。
详细的程序会在软件中介绍。
(2)原理图:
图2-2-1是1602液晶显示器与单片机连接原理图;图2-2-2是1602液晶显示器的实物图。
图2-2-11602液晶屏接线图
图2-2-21602液晶屏实物图
2.3主控模块
2.3.1设计方案
主控模块是控制超声波发射与接收的核心器件,选取什么型号的单片机是至关重要的。
STC59C52RC单片机使用起来比较简单,程序也容易编写,但是考虑到,以后超声波测距仪功能的拓展和本次设计要求,如检测距离的精度高,且要进行A/D检测等,经过挑选,最终选择了STC12C5A60S2单片机作为本次超声波测距模块的主控芯片,这款单片机具有执行速度快,且内部自带A/D转换,符合了本次设计的功能要求。
2.3.2STC12C5A60S2单片机介绍[2]
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合具体功能如下:
(1)增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;
(2)工作电压:
STC12C5A60S2系列工作电压:
5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:
3.6V-2.2V(3V单片机);
(3)工作频率范围:
0-35MHz,相当于普通8051的0~420MHz;
(4)用户应用程序空间8K/16K/20K/32K/40K/48K/52K/60K/62K字节;
(5)片上集成1280字节RAM;
(6)通用I/O口(36/40/44个),复位后为:
准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma;
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;
(8)有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM);
(9)内置看门狗;
(10)时钟源:
外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内)1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:
5.0V单片机为:
11MHz~15.5MHz,3.3V单片机为:
8MHz~12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准;
(11)共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器再加上2路PCA模块可再实现2个16位定时器;
(12)2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟;
(13)PWM(2路)/PCA(可编程计数器阵列,2路):
可用来当2路D/A使用、也可用来再实现2个定时器、也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);
(14)A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口。
2.3.3STC12C5A60S2单片机原理
(1)STC12C5A60S2单片机控制原理:
在本次设计中采用了单片机芯片,单片机采用的是STC12C5A60S2,采用11.0592MHz高精度的晶振,方便以后单片机和上位机通讯。
其次是利用单片机对超声波模块发出的40kHz的超声波进行计时和距离的计算。
根据距离控制1602液晶显示屏显示相应的距离,单片机内部自带ADC,用于检测电池组的电压,单片机通过检测得到电压数据,而后控制1602液晶屏进行电压数据的显示。
我们根据不同的电压,控制信号灯进行点亮或者熄灭,也控制电池组进行充电或是不充电。
(2)原理图:
图2-3-1是STC12C5A60S2单片机引脚图。
图2-3-1STC12C5A60S2引脚图
2.4总体硬件设计
2.4.1总体设计方案
在上面我们已经提到了,我们所有的硬件模块都是根据设计要求而得到的,总体设计思路如下:
当接通电源后,电源给所有硬件电路供电,同时单片机对电源模块进行电压检测,因为电池电量和电池电压有直接关系,所以我们可以通过检测电池电压知晓电池的电量,这样在电池没电时,可以发出报警信号,当电池过充时,同样可以报警和利用继电器关闭充电回路。
并且单片机可以实时将电池电量显示在1602液晶屏上面,增加信息量。
当上电时,单片机不仅会对电池电压进行检测,而且当电池电压不高不低时,会控制HC-SR04超声波模块发出超声波,并且打开定时器,当超声波反射回来的时候,关闭定时器,然后计算出距离数据,最后驱动1602液晶屏显示出来。
这就是我们超声波测距仪的整体设计思路。
2.4.2完整硬件电路图
通过上面的设计方案和设计要求,本组设计出了完整的电路图,如图2-4-1所示。
图2-4-1超声波测距仪完整电路图
第三章软件设计
3.11602液晶屏显示驱动模块
3.1.1软件设计方案
根据1602液晶屏的资料,我们可以知道1602液晶屏有16个引脚,数据脚有8个,与操作相关的引脚有3个,分别是RS数据/命令选择端、R/W读写选择端、E使能信号。
知道这些引脚功能,并且知道了操作1602的时序后,就可以编写出1602液晶屏的操作读写代码。
通过这些读写代码,我们单片机就可以与1602液晶屏进行通讯,也就可以让1602液晶屏显示出我们想显示的内容了。
3.1.2软件流程
我们查询资料可以得到1602液晶屏的基本操作时序,如:
写命令:
RS=0.RW=0,D0-D7=指令码,E=高脉冲。
写数据:
RS=1,RW=0,D0-D7=数据,E=高脉冲。
具体的写时序图如下所示:
图3-1-1是写指令时序图;图3-1-2是写数据时序图。
图3-1-11602液晶屏写指令时序图图3-1-21602液晶屏写数据时序图
3.1.3软件代码
#include
#include"STC12C5A60S2.H"
sbitRS=P2^5;
sbitRW=P2^6;
sbitE=P2^7;
externvoiddelay_ms(unsignedintj);
unsignedcharP00(unsignedchari)
{
unsignedcharda=0,n;
for(n=8;n>0;n--)
{
da=da<<1;
da=da+(i&0x01);
i=i>>1;
}
return(da);
}
bitlcd_bz()//查忙函数
{
bitbusy;
RS=0;//选择目标为指令寄存器
RW=1;//读操作
E=1;//拉高E端口
_nop_();
_nop_();
//busy=(P0&0x80)>>7;//取出D7位(忙信号)
busy=P0&0X01;
_nop_();
_nop_();
E=0;//E端产生下降沿
returnbusy;//返回忙信号
}
voidlcd_wcmd(unsignedcharcmd)//写指令函数
{
unsignedcharcmd1;
while(lcd_bz());//查忙
cmd1=P00(cmd);
RS=0;//选择目标为指令寄存器
RW=0;//写操作
P0=cmd1;//发送指令数据
E=1;//拉高E端口
_nop_();
_nop_();
_nop_();
_nop_();
E=0;//E端产生下降沿,数据写入指令寄存器
}
voidlcd_wdat(unsignedchardat)//写数据函数
{
unsignedchardat1;
while(lcd_bz());//查忙
dat1=P00(dat);
RS=1;//选择目标为数据寄存器
RW=0;//写操作
P0=dat1;//发送显示内容数据
E=1;//拉高E端口
_nop_();
_nop_();
_nop_();
_nop_();
E=0;//E端产生下降沿,数据写入指令寄存器
}
voidlcd_init()//初始化函数
{
lcd_wcmd(0X38);//8位总线,双行显示,字符大小5*7
delay_ms
(1);
lcd_wcmd(0x0c);//开显示,无光标
delay_ms
(1);
lcd_wcmd(0x06);//光标向右,文字不移动
delay_ms
(1);
lcd_wcmd(0x01);//清屏
delay_ms
(1);
}
voiddisplay_up(unsignedchar*p)//第一行显示函数
{
unsignedchartemp=0,i;
lcd_wcmd(0x00|0x80);//设置显示起始位置为左边第一位
for(i=0;i<16;i++)//依次显示16个字符
{
temp=p[i];
lcd_wdat(temp);
delay_ms
(1);
}
}
voiddisplay_down(unsignedchar*p)//第二行显示函数
{
unsignedchartemp=0,i;
lcd_wcmd(0x40|0x80);//设定显示起始位置为左边第一位
for(i=0;i<16;i++)//依次显示16个字符
{
temp=p[i];
lcd_wdat(temp);
delay_ms
(1);
}
}
3.2A/D检测模块
3.2.1软件设计方案
在上面的设计要求中有提到,需要用电池供电,且用USB接口对电池充电,从这个要求中我们不难看出,一个好的产品必然需要对电池的电量进行检测,只有这样才能算是完整的产品。
在硬件设计的时候,本组就考虑这种情况,所以选择了STC12C5A60S2单片机,这款单片机内部自带8路10位A/D转换,精度高,数量多,我们对单片机内部的相关寄存器进行调用就可以完成A/D转换。
因为电池是直接对单片机进行供电,这时,如果电池电压下降,那么单片机检测出来的电压必然是不准确的,所以为了避免这种情况,我们用了两路A/D转换接口,一路是检测电池电压,另一路是检测基准电压源的输出电压,因为基准电压源的电压值不会随着电池的电压波动而变化,所以可以通过检测这个电压,将这个电压和电池电压之间的比例关系计算出来,就可以实现我们实际测得的电池电压数据是准确的,不会因为电池电压的波动而得到错误的电池电压数据,这样就可以正确的对电池进行操作了。
3.2.2软件流程图
A/D转换流程如图3-2-1所示:
图3-2-1A/D转换流程图
3.2.3软件代码[3]
voidAD_init()//AD初始化
{
P1M0=0x01;//设置P1口最低位为开漏模式,用来A/D采集
P1M1=0x01;
ADC_CONTR=0xe0;//开启A/D转换器电源
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超声波 测距仪 朱淼森 解析