温度补偿超声波测距仪.docx
- 文档编号:13420950
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:33
- 大小:206.84KB
温度补偿超声波测距仪.docx
《温度补偿超声波测距仪.docx》由会员分享,可在线阅读,更多相关《温度补偿超声波测距仪.docx(33页珍藏版)》请在冰点文库上搜索。
温度补偿超声波测距仪
摘要
本文给出了系统总体框架、硬件电路、软件设计和程序流程图,并在硬件平台上实现了所设计的功能。
超声测距是一种非接触式的检测方式。
与其它方法相比,如电磁的或光学的方法,它不受光线、被测对象颜色等影响。
对于被测物处于黑暗、有灰尘烟雾、电磁干扰、有毒等恶劣的环境下有一定的适应能力。
而本文介绍的基于单片机STC90C516RD+的超声波测距系统的设计方案与软硬件实现。
采用温度传感器DS18B20采集温度数据,液晶显示屏LCD1602C显示温度数据及来回波的时间,当环境温度变化较大时,提取测得的温度,根据不同的温度对超声波测距系统的声速进行修正。
测距时接收到回波,点亮绿色发光二极管;当没有回波时,定时器溢出,点亮红色发光二极管。
关键词:
红色发光二极管;超声波测距;温度补偿;温度传感器;电磁干扰
目录
摘要…………………………………………………………………………………Ⅰ
第1章绪论…………………………………………………………………….…...1
1.1概述…………………………………………………………………….….1
1.2系统软硬件的调试……………………………………………….…....….1
第2章系统设计原理…………………………………………….……………….2
2.1系统主要硬件结构………………………………………………...…….2
2.2单片机主机系统介绍…………………………………………..…….….2
2.2.1单片机控制模块…………………………………………….……...2
2.2.2温度数据采集模块…………………………………………..…..…2
2.2.3主件LCD1602C的结构……………………………………………..3
2.3超声波测距的设备…………………………………………………........4
2.3.1超声波测距系统的硬件电路设计…………………………..…..…4
2.3.2超声波发射电路……………………………………….………..….4
2.3.3超声波检测接收电路……………………………………….…..….5
第3章系统的软件设计…………………………………………………………..6
3.1语言的选用…………………………………………………………...….6
3.2系统控制流程………………………………………………………...….7
3.3程序设计流程图……………………………......................................…10
3.4超声波测距仪的算法设计………………………………………..……12
3.5超声波发生子程序和接收中断程序……………………………..……12
3.6电路仿真…………………………………………………………..……12
第4章安装调试………………………………………………………………….13
第5章电路特点和误差分析…………………………………………………….14
结论…………………………………………………………………………………..15
参考文献………………………………………………………………………….….16
附录………………………………………………………………………………..…17
致谢………………………………………………………………………………..…24
第1章绪论
1.1概述
制作超声波测距系统,并外加温度补偿使测距更精确。
前期制作超声波发送与接收电路,经过调试正常可用后,编写相应的超声波程序,完成对于整个测距系统的控制。
设计的最终结果是使超声波测距仪能够产生超声波,实现超声波的发送与接收,从而实现利用超声波方法测量物体间的距离。
以数字的形式显示测量距离。
超声波测距的原理是利用超声波的发射和接收,根据超声波传播的时间来计算出传播距离。
实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。
此次设计采用反射波方式。
超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。
单片机采用AT89C51或其兼容系列。
采用11.0592MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P3.4端口输出低电平,通过硬件电路产生超声波换能器所需的40kHz的方波信号,利用外中断1口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的LCD1602。
1.2系统软硬件的调试
超声波测距仪的制作和调试都比较简单,其中超声波发射和接收采用Φ16的超声波换能器T/R40-16(T为发射,R为接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。
若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。
根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成后,使用外加电源调试,用示波器检测振荡电路输出端是否有一个40KHz的方波。
并可检查CX20106第7引脚在收到回波时是否产生低电平。
调试好后,便可将程序编译好下载到单片机试运行。
根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。
根据所设计的电路参数和程序,测距仪能测的范围为6~150cm,测距仪最大误差不超过1cm。
系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。
第2章系统设计原理
2.1系统主要硬件结构
系统的硬件主要由单片机主机系统和超声波测距系统组成。
其中单片机主机系统用到了单片机、液晶显示LCD1602、独立键盘、温度传感器DS18B20、蜂鸣器、LED发光二极管等;超声波测距系统则包括产生40KHZ的振荡电路(使用集成芯片CD4011和74LS04组成),超声波发送探头,超声波接收探头及超声波接收芯片CX20106组成。
2.2单片机主机系统
2.2.1单片机控制模块
控制模块是整个设计方案的核心,它控制了温度的采集、处理与显示、超声波发送接收电路的启动及温度补偿。
本文选用STC90C516RD+作为控制器件。
其最突出的优点是片内Flash为16K,可方便地擦写100万次以上,价格低廉,而且其指令丰富,编译工具多,仿真环境好。
因此被广泛地应用于各种控制领域。
图2-1单片机控制模块图
2.2.2温度数据采集模块
温度由DALLAS公司生产的一线式数字温度传感器DS18B20采集。
DS18B20测温范围为-55°C~+125°C,测温分辨率可达0.0625°C,被测温度用符号扩展的16位补码形式串行输出。
CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
DS18B20内部有一个9字节的高速存储器用于存储温度值。
其中前两个字节是测得的温度数据,第1字节的内容是温度的低八位,第2字节是温度的高八位,第3和第4字节是温度上限TH与温度下限TL的易失性拷贝,第5字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新,第6、7、8这三个字节用于内部计算,第9个字节是冗余检验字节,可用来保证通信的正确性。
当温度转换命令发出后,经转换所得的温度值以二字节补码形式存放在此存储器的第1和第2个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,其中高5位是符号位,中间7位是整数位,最低4位是小数位。
DS18B20最大的特点是单总线数据传输方式,因此对读写的数据位有着严格的时序要求。
时序包括:
初始化时序、读时序、写时序。
每一次命令和数据的传输都是从单片机启动写时序开始,如果要求DS18B20回送数据,在进行写命令后,单片机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
DS18B20的时序及命令请参考文献。
温度数据采集模块中温度传感器DS18B20的DQ端接P2.6。
图2-2传感器图
2.2.3主件LCD1602C的结构
LCD1602C是2行×16个字符的字符型LCD显示器,它由32个字符点阵块组成,每个字符点阵块由5×7或5×10个点阵组成,可以显示ASCII码表中的所有可视的字符。
它内置了字符产生器ROM(CharacterGeneratorROM,CGROM)、字符产生器RAM(CharacterGeneratorRAM,CGRAM)和显示数据RAM(DataDisplayRAM,DDRAM)。
CGROM中内置了192个常用字符的字模,CGRAM包含8个字节的RAM,可存放用户自定义的字符,DDRAM就是用来寄存待显示的字符代码。
DDRAM地址与显示位置的对应关系以及LCM1602的指令与读写时序可参考文献。
显示模块LCD1602C的DB0~DB7数据端口接AD0~AD7,数据命令选择端RS接P2.0,读写选择端接P2.1,使能信号接P2.2,被光控制接P2.5,LCD1602C上的VO、RST接电源+5V,GND接地。
图2-3
图2-4LED发光二极管
2.3超声波测距的设备
2.3.1超声波测距系统的硬件电路设计
本系统的特点是利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时,单片机选用STC90C516RD+,经济易用,便于编程。
硬件设计上为减轻处理器负担,不采用软件方法,而使用硬件电路产生40KHZ的方波驱动超声波传感器。
2.3.2超声波发射电路
发射电路主要由集成芯片与非门CD4011、反相器74LS04和超声波发射换能器T构成,单片机P3.4端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。
输出端采两个反向器并联,用以提高驱动能力。
发射电路图如下:
图2-5超声波发射电路
压电式超声波换能器是利用压电晶体的谐振来工作的。
超声波换能器内部有两个压电晶片和一个换能板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。
超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
2.3.3超声波检测接收电路
接收电路图:
图2-6超声检测接收电路
超声波接收处理电路采用集成电路CX20106。
CX20106为红外接收专用集成电路,在此利用CX20106作为超声波传感器接收信号的放大检波装置,亦取得良好的效果。
CX20106采用8脚单列直插式塑料封装,内含前置放大、限幅放大、自动偏置、通带滤波、峰值检波、积分比较及施密特整形输出等电路。
CX20106的总放大增益约为80dB,以确保其7脚输出的控制脉冲序列信号幅值在正常范围内。
只要CX20106接收到与其中心频率相符的超声波信号时,7脚就输出低电平。
7脚输出的脉冲下降沿接单片机INT1口。
第3章系统的软件设计
3.1语言的选用
本设计中采用的处理器是AT89S52单片机,由此可采用面向MCS-51的程序设计语言,包括ASM51汇编语言和C51高级语言,这两种语言各有特点。
汇编语言更接近机器语言,常用来编制与系统硬件相关的程序,如访问I/O端口、中断处理程序、实时控制程序、实时通信程序等。
而数学运算程序则适合用C51高级语言编写,因为用高级语言编写运算程序可提高编程效率和应用程序的可靠性。
C语言是一种通用的计算机程序设计语言,在国际上十分流行,它即可用来编写计算机系统程序,也可以用来编写一般的应用程序。
以前计算机的系统软件主要是用汇编语言编写的,对于单片机应用系统来说更是如此。
由于汇编语言程序的可读性和可移植性都较差,采用汇编语言编写单片机应用程序的周期长,而且调试和排错也比较困难。
C语言具有很好的可移植性和硬件控制能力,表达和运算能力也较强。
3.2系统控制流程
超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。
我们知道C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),本文控制程序采用C语言编程。
主程序调用了5个主要的子程序,分别是LCD显示程序、按键扫描及处理程序、温度采集程序、超声波发送子程序、报警程序。
LCD显示程序,用于温度和距离等数据的实时显示;按键扫描及处理程序,实现按键识别、按键输入及相关处理;温度采集程序负责把DS18B20所采集的现场温度读入到指定的数组中;超声波发送子程序,在P3.4引脚发出一个低电平,使硬件电路产生40KHZ的方波,从而驱动超声波发射端;报警程序,对当前距离与设定的报警距离进行比较,若低于设定值,则蜂鸣器开始报警。
本次单片机温控系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
系统软件的功能又可分为两大类:
一是监控软件,它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件,它是用来完成各种实质性的功能如测量、显示等功能。
每一个执行软件也就是一个小的功能执行模块。
本文将各执行模块一一列出,各执行模块规划好后,就可以规划监控程序了。
两软件分为部分,主程序和中断服务程序,如下图。
主程序完成初始化工作、各路超声波发射和接收顺序的控制。
定时中断服务子程序完成超声波的轮流发射,外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出等工作。
3.3程序设计流程图
本系统用计数程序采集信号脉冲,用定时器产生中断,对数码管刷新和缓冲区数据进行更新,辅以数码管进行显示。
主程序流程图如图3-1。
图3-1系统控制流程图
3.4超声波测距仪的算法设计
主程序首先是对系统环境初始化,设置定时器T1工作模式为16位定时计数器模式。
置位总中断允许位EA并给显示端口使能端P1.5置位。
然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms(这也就是超声波测距仪会有一个最小可测距离的原因)后,才打开外中断1接收返回的超声波信号。
由于采用的是11.0592MHz的晶振,计数器每计一个数时间约为1μs,当主程序检测到接收成功的标志位后,将计数器T1中的数(即超声波来回所用的时间)按公式计算,即可得被测物体与测距仪之间的距离,设计测试时取20℃时的声速为344m/s则有:
d=(c×t)/2=172*T1/10000cm(其中,T1为计数器T1的计算值。
)
图3-2超声波测距仪
声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。
若测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返时间,即可求得距离。
在系统加入温度传感器来监测环境温度,可进行温度被偿。
这里用DS18B20测量环境温度,根据不同的环境温度确定一声速提高测距的稳定性。
为了增强系统的可靠性,可在软硬件上采用抗干扰措施。
不同温度下的超声波声速表:
图3-3超声波声速表
测出距离后结果将以十进制送往LCD1602显示一段时间,然后再发超声波脉冲重复测量过程。
为了有利于程序结构化和容易计算出距离,主程序采用C语言编写。
主要子程序及主程序:
voiddisplay(uintt_emp)//显示距离
{
uintq,b,s,g;
q=t_emp/1000;
b=(t_emp%1000)/100;
s=(t_emp%100)/10;
g=t_emp%10;
write_1602com(0x80+0x40+9);
write_1602dat(num[q]);
delay(5);
write_1602dat(num[b]);
delay(5);
write_1602dat(num[s]);
delay(5);
write_1602dat(num[g]);
delay(5);
write_1602dat('');
delay(5);
write_1602dat('C');
delay(5);
write_1602dat('M');
}
voidwrite_temp(ucharadd,uchardat)//温度显示子函数,写温度数据,指定显示位置
{
uchargw,sw,xs;
sw=dat/100;//取得十位数字
gw=(dat%100)/10;//取得个位数字
xs=dat%10;//取得小数点后一位
write_1602com(0x80+0x40+add);
write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码
write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码
write_1602dat('.');
write_1602dat(0x30+xs);
write_1602dat(0xdf);//显示温度的小圆圈符号
write_1602dat(0x43);//显示"C"符号
}
voidultrasound(void)//超声波子程序
{
ek=1;
S=0;
time=0;
beep=1;
lcd_init();
write_1602com(0x01);
delay
(1);
write_1602com(0x80);
write_1602dat('D');
delay
(1);
write_1602dat('i');
delay
(1);
write_1602dat('s');
delay
(1);
write_1602dat('t');
delay
(1);
write_1602dat('a');
delay
(1);
write_1602dat('n');
delay
(1);
write_1602dat('c');
delay
(1);
write_1602dat('e');
delay
(1);
write_1602dat(':
');
delay
(1);
tx=1;
rx=1;
TMOD=0x10;
IT1=0;
while
(1)
{
S=0;
distemp();
delay(500);
tran();
delay(10);
ek=0;
if(key3==0)
{
delay10ms();
if(key3==0)
{break;}
}
ek=1;
}
}
voidmain()//主函数
{
count3=0;
lcd_init();
lcd=0;
logo();
while
(1)
{key();}
}
3.5超声波发生子程序和接收中断程序
超声波发生子程序的作用是通过P3.4端口产生低电平,使硬件电路发送1个超声波脉冲信号(频率约40kHz的方波),同时把计数器T1打开进行计时。
超声波测距仪主程序利用外中断1检测返回超声波信号,一旦接收到返回超声波信号(即INT1引脚出现低电平),立即进入中断程序。
进入中断后就立即关闭计时器T1停止计时,关闭总中断EA,提取定时器数值,同时根据温度传感器的数值对声速修正,然后计算数据输出到LCD1602,同时点亮绿色发光二极管表示测距成功。
如果当定时器溢出时还未检测到超声波返回信号,则定时器T1溢出中断将外中断1关闭,并点亮红色发光二极管表示此次测距不成功。
测距电路的UltrasoundOut端接单片机INT1端口,中断优先级最高。
部分源程序如下:
voidtran(void)//超声波发送子程序
{
EX1=0;
ET1=0;
EA=0;
TH1=0;
TL1=0;
tx=0;
TR1=1;
nop;
tx=1;
nop;
EA=1;
EX1=1;
ET1=1;
}
voidtimer1(void)interrupt3//定时器1计算时间及判断测距是否成功
{
EA=0;
TH1=0;
TL1=0;
ET1=0;
TR1=0;
ledr=1;
delay02s();
delay02s();
ledr=0;
}
voidINT1_(void)interrupt2//外部中断1,用做判断回波电平
{
TR1=0;
EX1=0;
EA=0;
time=TH1*256+TL1;
display1(time);
temp=ReadTemperature();
if(temp>=0&&temp<100)
{
speed=0.01615;
}
elseif(temp>=100&&temp<200)
{
speed=0.0169;
}
elseif(temp>=200&&temp<300)
{
speed=0.0172;
}elseif(temp>300)
{
speed=0.01745;
}
S=time*speed-2;
display(S);
alarm();
ledg=1;
delay(10);
ledg=0;
EA=1;
delay(10);
}
3.6电路仿真
仿真部分运用Proteus仿真软件来实现,Proteus软件是一款强大的单片机仿真软件,它除了具有和其他工具一样的原理编辑、印制电路板(PCB)自动或人工布线及电路仿真外,最大的特色是其电路仿真是交互的、可视化的。
对于单片机学习和开发帮助极大。
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和数字集成电路,包括单片机。
通过Proteus可以绘制硬件原理图,并设置元件参数;为单片机及其程序以及外部接口电路的仿真提供可能,验证设计的可行性与合理性;还可以为连接实际的硬件电路做好准备;如有必要时,可以利用它来设计电路板。
超声波检测仿真电路图如下图3-4所示。
图3-4超声波检测电路图
第4章安装调试
使用5V电源对系统供电,使用超声波模块发出超声并测量反射波,电路如图所示,在接收到回波的同时关计数器,并将运算结果显示在1602液晶屏上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 补偿 超声波 测距仪