超声波测距设计方案.docx
- 文档编号:10429368
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:16
- 大小:156.35KB
超声波测距设计方案.docx
《超声波测距设计方案.docx》由会员分享,可在线阅读,更多相关《超声波测距设计方案.docx(16页珍藏版)》请在冰豆网上搜索。
超声波测距设计方案
基于单片机的超声波测距仪设计
目录
1目的1
2本设计的主要研究内容2
2.1超声波测距的原理2
2.2设计的主要内容2
3超声波测距硬件电路设计3
3.1超声波测距系统电路总体设计方案3
4超声波测距系统电路各部分模块的设计4
4.1超声波发射接收电路的设计4
4.1.1超声波发射部分4
4.1.2超声波接收部分4
4.1.3LCD显示部分5
4.1.4报警部分6
5系统软件设计7
5.1程序代码:
7
6系统误差分析14
6.1温度对实验的影响14
1目的
1.1选择超声波测距的原因
超声波测距是近十几年来随着集成电路技术迅速发展才开始应用的,相对于其它诸多测距方法而言,超声波测距的优点突出。
运用到现代距离测量的新要求的现代装置中,相对于智能小车、红外感应太阳能路灯控制系统和液晶显示,我认为我们的优势十分明显。
智能小车他们工序过于繁琐,虽然可利用程度最高,但很难在短时间内完成这样一个高质量的任务。
红外感应太阳能路灯控制系统,虽然能完成,但以后的发展空间不大,在现在几乎已经非常普及了。
液晶显示,虽然前卫,但发展空间已不大。
2本设计的主要研究内容
2.1超声波测距的原理
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离
(1-1)
式(1-1)中的c为超声波在空气中传播的速度。
2.2设计的主要内容
单片机控制超声波模块发射及检波接收,其系统原理框图如图1所示。
图1超声波测距系统框图
通过P1.0发一个40KHz的方波脉冲信号,遇被测物反射后回波被超声波接收换能器接收。
进行相关处理后,输入单片机的INT0(P3.2)脚产生中断,计算中间经历的时间,然后根据公式(1-1)算出距离。
3超声波测距硬件电路设计
3.1超声波测距系统电路总体设计方案
由单片机STC89s52编程产生40KHz的方波脉冲,由P1.0口输出,就可以在接收口P3.2(Echo引脚)等待高电平输出。
一旦有高电平出处,即在模块中经过放大电路,驱动超声波发射探头发射超声波。
发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的检波放大、积分整形及一系列处理,接收口P3.2口即变为低电平,读取单片机中定时器的值。
单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由液晶显示出来。
该测距装置是由超声波模块、单片机和LCD显示电路组成。
传感器输入端与发射接收电路组成超声波测距模块,模块的输出输入端与单片机相连接,单片机的输出端与显示电路输入端相连接。
其时序图如图3-1所示。
图2时序图
超声波测距模块的发射端在T0时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。
计算时间差,即可得到超声波在媒介中传播的时间t,由此便可计算出距离。
4超声波测距系统电路各部分模块的设计
4.1超声波发射接收电路的设计
4.1.1超声波发射部分
超声波发射部分是为了让超声波发射换能器TCT40-16T能向外界发出40kHz左右的方波脉冲信号.编程由单片机P1.0端口输出40kHz左右的方波脉冲信号,由于单片机端口输出功率不够,40kHz方波脉冲信号分成两路,送给一个由74HC04组成的推挽式电路进行功率放大以便使发射距离足够远,满足测量距离要求,最后送给超声波发射换能器TCT40-16T以声波形式发射到空气中。
发射部分的电路,如图2所示。
图中输出端上拉电阻R31,R32,一方面可以提高反向器74HC04输出高电平的驱动能力,另一方面可以增加超声换能器的阻尼效果,缩短其自由振荡的时间。
4.1.2超声波接收部分
上述TCT40-16T发射的在空气中传播,遇到障碍物就会返回,超声波接收部分是为了将反射波(回波)顺利接收到超声波接收换能器TCT40-16R进行转换变成电信号,并对此电信号进行放大、滤波、整形等处理后,这里用索尼公司生产的集成芯片CX20106,得到一个负脉冲送给单片机的P3.2(INT0)引脚,以产生一个中断。
接收部分的电路,如图3所示。
4.1.3LCD显示部分
本设计显示部分采用字符型TC1602液晶显示所测距离值。
TC1602显示的容量为2行16个字。
液晶显示屏有微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,与数码管相比,显得更专业、美观。
使用时,可将P0与LCD的数据线相连,P2口与LCD的控制线相。
连如5图LCD仿真
图5LCDPROTRUS仿真
其中,TC1602第4脚RS为寄存器选择,第5脚RW为读写信号线,第6脚E为使能端。
第7~14脚:
D0~D7为8位双向数据线。
这里要注意的是,为了布线方便,单片机端的D0~D7是接到LCD/602的D1~D0,正好相反,因此在编写软件时需要做处理,使读取正确。
4.1.4报警部分
采用一个蜂鸣器,由P1.2输出一定频率的信号,在连接到蜂鸣器之前,经过一个三极管9012的放大。
报警部分的连线,如图6所示。
图6蜂鸣器PROTEUS仿真图
5系统软件设计
软件方面:
软件分为两部分,主程序和中断服务程序,如图4-1所示。
主程序完成初始化工作、超声波发射和接收,距离计算、结果的输出。
外部中断服务子程序主要完成时间值的读取。
图表1主程序流程图
5.1程序代码:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
sbitTrig=P1^0;//发射40KHZ波
sbitEcho=P3^2;//中断入口
sbitbeep=P1^2;//蜂鸣器端口
sbitrs=P2^4;
sbitrw=P2^5;
sbitep=P2^6;
bitsucceed_flag;
uintflag,timeH,timeL,time,distance;
unsignedcharcodedis1[]={"thejuliis:
"};
unsignedcharcodedis2[]={"0123456789"};
unsignedcharcodedis3[]={"mm"};
voiddelay(unsignedcharms)//LCD延时子程序
{
unsignedchari;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
voiddelay_20us()//延时20us
{ucharbt;
for(bt=0;bt<100;bt++);
}
bitlcd_bz()//测试LCD忙碌状态
{
bitresult;
rs=0;
rw=1;
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(bit)(P0&0x80);
ep=0;
returnresult;
}
voidlcd_wcmd(unsignedcharcmd)//写指令数据到LCD子程序
{
while(lcd_bz());//判断LCD是否忙碌
rs=0;
rw=0;
ep=0;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
ep=0;
}
voidlcd_pos(unsignedcharpos)//设定显示位置子程序
{
lcd_wcmd(pos|0x80);
}
voidlcd_wdat(unsignedchardat)//写入显示数据到LCD子程序
{
while(lcd_bz());//判断LCD是否忙碌
rs=1;
rw=0;
ep=0;
P0=dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
ep=0;
}
voidlcd_init()//LCD初始化子程序
{
lcd_wcmd(0x38);
delay
(1);
lcd_wcmd(0x0c);
delay
(1);
lcd_wcmd(0x06);
delay
(1);
lcd_wcmd(0x01);
delay
(1);
}
voidmain()
{
unsignedchari;
lcd_init();//初始化LCD
delay(10);
lcd_pos(0x01);//设置显示位置
i=0;
while(dis1[i]!
='\0')
{
lcd_wdat(dis1[i]);//显示字符
i++;
}
beep=1;
Trig=0;//首先拉低脉冲输入引脚
EA=1;//打开总中断0
TMOD=0x10;//定时器1,16位工作方式
while
(1)
{
EA=0;//关总中断
Trig=1;//超声波输入端
delay_20us();//延时20us
Trig=0;//产生一个20us的脉冲
while(Echo==0);//等待Echo回波引脚变高电平
succeed_flag=0;//清测量成功标志
EA=1;
EX0=1;//打开外部中断0
TH1=0;//定时器1清零
TL1=0;//定时器1清零
TF1=0;//计数溢出标志
TR1=1;//启动定时器1
delay(20);//等待测量的结果
TR1=0;//关闭定时器1
EX0=0;//关闭外部中断0
if(succeed_flag==1)
{time=timeH*256+timeL;
distance=time*0.172;//0.344/2=0.172mm
lcd_pos(0x42);////设置显示位置
lcd_wdat(dis2[distance/100]);//百位
lcd_wdat(dis2[(distance%100)/10]);//十位
lcd_wdat(dis2[distance%10]);//个位
lcd_wdat(dis3[0]);
delay(10);
lcd_wdat(dis3[1]);
}
if(succeed_flag==0)
{
distance=0;//没有回波则清零
beep=!
beep;//测试蜂鸣器变化
}
}
}
//外部中断0,用做判断回波电平
voidexter()interrupt0//外部中断0是0号
{
timeH=TH1;//取出定时器的值
timeL=TL1;//取出定时器的值
succeed_flag=1;//至成功测量的标志
EX0=0;//关闭外部中断
}
voidtimer1()interrupt3//定时器1中断,用做超声波测距计时
{
TH1=0;
TL1=0;
}
实物图:
6系统误差分析
6.1温度对实验的影响
在精度要求较高的情况下,需要考虑温度对超声波传播速度的影响,按式
(2)对超声波传播速度加以修正,以减小误差。
v=331.4+0.607T
(2)式中,T为实际温度单位为℃,v为超声波在介质中的传播速度单位为m/s。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超声波 测距 设计方案