基于单片机的超声波测距及温度补偿设计与实现.docx
《基于单片机的超声波测距及温度补偿设计与实现.docx》由会员分享,可在线阅读,更多相关《基于单片机的超声波测距及温度补偿设计与实现.docx(20页珍藏版)》请在冰豆网上搜索。
基于单片机的超声波测距及温度补偿设计与实现
期末课程设计
学院:
软件学院___
专业:
软件工程___
年级:
2009级___
课程:
_单片机应用技术__
姓名:
_郭汉杰_____
学号:
_123012009138_____
二〇一二年六月
基于单片机的超声波测距及温度补偿设计与实现
摘要本文介绍了基于单片机STC90C516RD+的超声波测距系统的设计方案与软硬件实现。
采用温度传感器DS18B20采集温度数据,液晶显示屏LCD1602C显示温度数据及来回波的时间,当环境温度变化较大时,提取测得的温度,根据不同的温度对超声波测距系统的声速进行修正。
测距时接收到回波,点亮绿色发光二极管;当没有回波时,定时器溢出,点亮红色发光二极管。
本文给出了系统总体框架、硬件电路、软件设计和程序流程图,并在硬件平台上实现了所设计的功能。
关键词STC90C516RD+;超声波测距;温度补偿;温度传感器;液晶显示器
一、引言
1.1超声波测距系统概述
随着社会的发展,超声波测量及控制变得越来越重要。
本文采用单片机STC90C516RD+设计了超声波测距及温度补偿系统。
单片机STC90C516RD+能够根据温度传感器DS18B20所采集的温度数据来修正测距系统中的声速,从而使超声波测得的距离更准确。
同时,当温度高于设定的温度时,单片机启动蜂鸣器发出报警,并点亮绿色发光二极管;当温度低于设定的温度时,蜂鸣器停止报警。
所有测距和温度数据均通过液晶显示器LCD1602显示出来。
当收到回波时,测距成功,并在屏幕上现实来回波的时间及距离,并可看到动态变化的当前温度和来回波时间;当未收到回波时,定时器溢出,测距失败,在屏幕上显示出错。
1.2本设计任务和主要内容
制作超声波测距系统,并外加温度补偿使测距更精确。
前期制作超声波发送与接收电路,经过调试正常可用后,编写相应的超声波程序,完成对于整个测距系统的控制。
设计的最终结果是使超声波测距仪能够产生超声波,实现超声波的发送与接收,从而实现利用超声波方法测量物体间的距离。
以数字的形式显示测量距离。
超声波测距的原理是利用超声波的发射和接收,根据超声波传播的时间来计算出传播距离。
实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。
此次设计采用反射波方式。
超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。
单片机采用AT89C51或其兼容系列。
采用11.0592MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P3.4端口输出低电平,通过硬件电路产生超声波换能器所需的40kHz的方波信号,利用外中断1口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的LCD1602。
1.3系统软硬件的调试
超声波测距仪的制作和调试都比较简单,其中超声波发射和接收采用Φ16的超声波换能器T/R40-16(T为发射,R为接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。
若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。
根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成后,使用外加电源调试,用示波器检测振荡电路输出端是否有一个40KHz的方波。
并可检查CX20106第7引脚在收到回波时是否产生低电平。
调试好后,便可将程序编译好下载到单片机试运行。
根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。
根据所设计的电路参数和程序,测距仪能测的范围为6~150cm,测距仪最大误差不超过1cm。
系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。
二、系统主要硬件电路设计
2.1系统硬件结构
系统的硬件主要由单片机主机系统和超声波测距系统组成。
其中单片机主机系统用到了单片机、液晶显示LCD1602、独立键盘、温度传感器DS18B20、蜂鸣器、LED发光二极管等;超声波测距系统则包括产生40KHZ的振荡电路(使用集成芯片CD4011和74LS04组成),超声波发送探头,超声波接收探头及超声波接收芯片CX20106组成。
2.2单片机主机系统
1)单片机控制模块
控制模块是整个设计方案的核心,它控制了温度的采集、处理与显示、超声波发送接收电路的启动及温度补偿。
本文选用STC90C516RD+作为控制器件。
其最突出的优点是片内Flash为16K,可方便地擦写100万次以上,价格低廉,而且其指令丰富,编译工具多,仿真环境好。
因此被广泛地应用于各种控制领域。
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。
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接地。
4)LED发光二极管:
5)蜂鸣器:
6)独立式键盘:
2.3超声波测距的设备
1)超声波测距系统的硬件电路设计:
本系统的特点是利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时,单片机选用STC90C516RD+,经济易用,便于编程。
硬件设计上为减轻处理器负担,不采用软件方法,而使用硬件电路产生40KHZ的方波驱动超声波传感器。
2)超声波发射电路:
发射电路主要由集成芯片与非门CD4011、反相器74LS04和超声波发射换能器T构成,单片机P3.4端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。
输出端采两个反向器并联,用以提高驱动能力。
发射电路图如下:
压电式超声波换能器是利用压电晶体的谐振来工作的。
超声波换能器内部有两个压电晶片和一个换能板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。
超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
3)超声波检测接收电路:
接收电路图:
超声波接收处理电路采用集成电路CX20106。
CX20106为红外接收专用集成电路,在此利用CX20106作为超声波传感器接收信号的放大检波装置,亦取得良好的效果。
CX20106采用8脚单列直插式塑料封装,内含前置放大、限幅放大、自动偏置、通带滤波、峰值检波、积分比较及施密特整形输出等电路。
CX20106的总放大增益约为80dB,以确保其7脚输出的控制脉冲序列信号幅值在正常范围内。
只要CX20106接收到与其中心频率相符的超声波信号时,7脚就输出低电平。
7脚输出的脉冲下降沿接单片机INT1口。
三、系统的软件设计
3.1系统控制流程
超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。
我们知道C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),本文控制程序采用C语言编程。
主程序调用了5个主要的子程序,分别是LCD显示程序、按键扫描及处理程序、温度采集程序、超声波发送子程序、报警程序。
LCD显示程序,用于温度和距离等数据的实时显示;按键扫描及处理程序,实现按键识别、按键输入及相关处理;温度采集程序负责把DS18B20所采集的现场温度读入到指定的数组中;超声波发送子程序,在P3.4引脚发出一个低电平,使硬件电路产生40KHZ的方波,从而驱动超声波发射端;报警程序,对当前距离与设定的报警距离进行比较,若低于设定值,则蜂鸣器开始报警。
本次单片机温控系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
系统软件的功能又可分为两大类:
一是监控软件,它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件,它是用来完成各种实质性的功能如测量、显示等功能。
每一个执行软件也就是一个小的功能执行模块。
本文将各执行模块一一列出,各执行模块规划好后,就可以规划监控程序了。
两软件分为部分,主程序和中断服务程序,如下图。
主程序完成初始化工作、各路超声波发射和接收顺序的控制。
定时中断服务子程序完成超声波的轮流发射,外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出等工作。
3.2超声波测距仪的算法设计
主程序首先是对系统环境初始化,设置定时器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的计算值。
)
声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。
若测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返时间,即可求得距离。
在系统加入温度传感器来监测环境温度,可进行温度被偿。
这里用DS18B20测量环境温度,根据不同的环境温度确定一声速提高测距的稳定性。
为了增强系统的可靠性,可在软硬件上采用抗干扰措施。
不同温度下的超声波声速表:
测出距离后结果将以十进制送往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');
}
voidalarm(void)//报警
{
if(S<=15)
{
beep=0;
delay(10);
beep=1;
}
else
{
beep=1;
}
}
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.3超声波发生子程序和接收中断程序
超声波发生子程序的作用是通过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);
}
四、结束语
本文详细讲述了系统设计方案,并给出了相关程序流程。
本设计应用性比较强,简单使用,可以应用在倒车雷达、机器人或小车避障等方面。
另外,如果把本设计方案的电源电压提升,则可以测得更远的障碍,若使用防水型超声波探头,则可以进行水下探测,将具有更大的应用价值。
设计的最终结果是使超声波测距仪能够产生超声波,实现超声波的发送与接收,从而实现利用超声波方法测量物体间的距离。
以数字的形式显示测量距离。
超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。
实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。
此次设计采用反射波方式。
超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。
单片机采用AT89C51或其兼容系列。
采用11.0592MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P3.4端口输出超声波换能器所需的40kHz的方波信号,利用外中断1口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的LCD1602。
超声波发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P3.4端口输出的低电平信号,40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。
输出端采两个反向器并联,用以提高驱动能力。
上位电阻一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。
压电式超声波换能器是利用压电晶体的谐振来工作的。
超声波换能器内部有两个压电晶片和一个换能板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。
超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的TR标志。
超声波检测接收电路主要是由集成电路CX20106A组成,它是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路。
实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。
适当更改电容的大小,可以改变接收电路的灵敏度和抗干扰能力。
超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。
我们知道C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言和汇编语言混合编程。
为增强程序的可读性,实际中采用了C语言近似计算的方法,通过多次试验测量校正软件误差。
主超声波测距仪主程序利用外中断1检测返回超声波信号,一旦接收到返回超声波信号(即INT1引脚出现低电平),立即进入中断程序。
进入中断后就立即关闭计时器T1停止计时。
如果当计时器溢出时还未检测到超声波返回信号,则定时器T1溢出中断将外中断1关闭。
超声波测距的算法设计原理为超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R所接收