超声波模块DYPME007和单片机的使用毕业论文
目 录
第一章 绪论................................................1
1.1选题背景及目的.................................................11.2 超声波介绍及其应用领域.........................................11.3 本设计的主要研究内容...........................................21.3.1 超声波测距的原理..........................................2
第二章 超声波测距系统......................................4 |
第三章超声波测距硬件电路设计...............................8
3.1超声波测距系统电路总体设计方案..................................83.2 超声波测距系统电路各部分模块的设计.............................93.2.1 超声波发射接收电路的设计..................................93.2.2 温度补偿电路的设计......................................113.2.3 显示模块的设计..........................................12
第四章系统软件设计........................................14
4.1 显示子程序...................................................1.2 外部中断子程序................................................1.3 测量温度子程序................................................17
第一章 绪论
1.1选题背景及目的
1.2超声波介绍及其应用领域
当物体振动时会发出声音。科学家们将每秒钟振动的次数称为声音的频率,它的单位是赫兹。人类耳朵能听到的声波频率为20~20K赫兹。当声波的振动频率大于20K赫兹或小于20赫兹时,人们便听不见了。因此,把频率高于20K赫兹的声波称为“超声波”。通常用于医学诊断的超声波频率为1~5兆赫。超声波具有方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远等特点。可用于测距,测速,清洗,焊接和碎石等。在医学,军事,工业以及农业上有明显的作用。
理论研究表明,在振幅相同的条件下,一个物体振动的能量与振动频率成正比,
的冬季,如果把超声波通入水罐中,剧烈的振动会使罐中的水破碎成许多小雾滴,再 |
机、化油器及汽车零件的清洗,过滤器及滤网的疏通清洗等等。
2.表面处理行业:电镀前的除油除锈;离子镀前清洗;磷化处理;清除积炭,氧化皮,抛光膏,金属工件表面活化处理等等。
3.医疗行业:医疗器械的清洗,消毒,杀菌,实验器皿的清洗等等。
4.仪器仪表行业:精密零件的高清洁度清洗,装配前清洗等等。
5.机电电子行业:印刷线路板除松香,焊斑;高压触点,接线柱等机械电子零件的清洗等等。
6.光学行业:光学器件的除油、除汗和清灰等。
7.半导体行业:半导体晶片的高清洁度清洗。
8.科教文化:化学生物等实验器皿的清洗和除垢。
9. 钟表首饰:清除油泥、灰尘、氧化层和抛光膏等。 |
11.纺织印染行业:清洗纺织锭子和喷丝板等。
12.其它:
超声清洗:清除污染物,疏通细小孔洞,如:清洁印章,古董修复和汽车电喷头疏通等。
超声搅拌:加快溶解,提高均匀度,加快物理化学反应,防止过腐蚀和加速油水乳化,如:溶剂染料混合和超声磷化等。
超声凝聚:加速沉淀,分离,如:种子浮选和饮料除渣等。
超声杀菌:杀灭细菌及有机污染物,如:污水处理和除气等。
超声粉碎:降低溶质颗粒度,如:细胞粉碎和化学检测等。
超声封孔:排除间隙气体,提高整体密度,如:工件浸漆等。
1.3本设计的主要研究内容
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波, 从而测出 |
式(1-1)中的c为超声波在空气中传播的速度。
该系统的最大可测距离存在四个因素:超声波的幅度、反射物的质地、反射和入射声波之间的夹角以及接收装置的灵敏度。接收装置对声波脉冲的直接接收能力 表1-1列出了几种不同温度下的将决定最小可测距离。超声波的波速c与温度有关,
波速。
表1-1声速与温度的关系
温度(℃) | -30 | -20 | -10 | 0 | 10 | 20 | 30 | 100 |
声速(m/s) | 313 | 319 | 325 | 331 | 338 | 344 | 349 | 386 |
可以推导得出,温度和波速大概有c=331.5+0.607T这样的规律,波速确定后,只要测得超声波往返的时间t,即可求得距离S。
1.3.2设计的主要内容
单片机控制超声波模块发射及检波接收,其系统原理框图如图1-3所示。
图1-3超声波测距系统框图
先驱动DS18B20温度传感器,测出当前温度,然后根据公式换算出当前波速,然
后控制口P1.0(Trig引脚)发一个10US以上的高电平,就可以在接收口P3.2(Echo
外部中断0,在中断程序中读取定时器的值,此时就为此次测距的时间,方可算出距 |
第二章 超声波测距系统
本设计是基于单片机控制的,在介绍电路设计之前,先简单了解一下单片机的工作原理,即简单介绍STCC51的一些特性。
2.1单片机基础知识
单片微型计算机简称单片机,特别适用于控制领域,故又称为微控制器(Microcontroller)。单片微型计算机是微型计算机的一个重要分支,也是一种非常活跃且颇具生命力的机种。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:CPU(CentralProcessing Unit,处理器)、存储器和I/O接口电路等。因此,单片机只需要与适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片机内部结构如图2-1所示。
图2-1单片机内部结构
与单片机相比,微型计算机是一种多片机系统。它是由处理器(CPU)芯片、ROM芯片、RAM芯片和I/O接口芯片等通过印刷电路板上总线(地址总线AB、数据总线DB和控制总线CB)连成一体的完整计算机系统。其中,处理器(CPU)的字长长,功能强大;ROM和RAM的容量很大;I/O接口的功能也大,这是单片机无法比拟的。因
此,单片机在结构上与微型计算机十分相似,是一种集微型计算机主要功能部件于同 |
2.2单片机ATC51的特性
ATC系列单片机是Atmel公司生产的一款标准型单片机。其中数字是单片机ATC51的特性,C表示CMOS工艺。其管脚图如图2-2所示。
图2-2ATC51 单片机管脚图
ATC51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammable and Erasable Read Only Memory)的低电压,高性能CMOS8 位微处理器,俗称单片机。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
P3 口:P3 口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4 个TTL门电流。P3 口也可作为ATC51的一些特殊功能口,如下所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器 |
管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2.3超声波探头介绍
超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常
用于距离的测量,如测距仪和物 位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达 | |
到工业实用的要求 | |
本测距模块使用的是压电式超声波发生器探头,压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如图2-3所示,它有两个压电陶瓷晶片和一个金属片共振板。当它的两极外加脉冲信号,其频率等于压电陶瓷晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当金属片共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
图2-3压电式超声波发生器
第三章超声波测距硬件电路设计
3.1超声波测距系统电路总体设计方案
由单片机STCC51编程产生10US以上的高电平,由P1.0口输出,就可以在接收口P3.2(Echo引脚)等待高电平输出。一旦有高电平出处,即在模块中经过放大电路,驱动超声波发射探头发射超声波。发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的检波放大、积分整形及一系列处理,接收口P3.2口即变为低电平,读取单片机中定时器的值。单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由单片机控制显示出来。
该测距装置是由超声波模块、单片机、和LED显示电路组成。传感器输入端与发射接收电路组成超声波测距模块,模块的输出输入端与单片机相连接,单片机的输出端与显示电路输入端相连接。其时序图如图3-1所示。
图3-1时序图
超声波测距模块的发射端在T0时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。
计算时间差,即可得到超声波在媒介中传播的时间t,由此便可计算出距离。
3.2超声波测距系统电路各部分模块的设计
3.2.1超声波发射接收电路的设计
发射电路的设计
由模块中产生的40kHz的方波需要进行放大,才能驱动超声波传感器发射超声波,发射驱动电路其实就是一个信号放大电路,本模块所选用的是74HC04集成芯片,图3-1为发射电路图。
|
74HC04内部集成了六个反向器,同时具有放大的功能。74HC04的管脚如图3-2所示。
接收电路的设计 | |
超声波接收头接收到超声波后,转换为电信号,此时的信号比较弱,必需经过放大。本系统采用了LM741对接收到的信号进行放大,接收电路如图3-3所示。
形后输出到单片机中断口。LM741是一单运放集成芯片,图3-4为LM741 管脚图。
图3-4LM741 管脚图
其板上接线方式为,VCC、trig(控制端)、echo(接收端)、out(空脚)、GND
使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,就可以达到移动测量的值了。
图3-5超声波测距模块外观图
DYP-ME007超声波测距模块可提供3cm--3.5m的非接触式距离感测功能,图3-5为DYP-ME007外观,包括超声波发射器、接收器与控制电路。其基本工作原理为给予
此超声波测距模块一触发信号后发射超声波,当超声波投射到物体而反射回来时,模 |
稳定准确的超声波传播速度是保证测量精度的必要条件,而超声波在空气中传播时,其速度受到了温度,湿度,粉尘,大气压,气流等因素的影响,其中温度影响最大,而超声波在空气中的速度与温度的关系的表达式为c=331.45
T | | 273 . 16 | | / | 273 . 16 | ,由泰勒公式将其展开,可得到近似计算公式 |
c=331.5+0.607T。式中T是环境摄氏温度,所以温度每变化1摄氏度,声速的变化为0.6m/s,可见温度对声速的影响很大,测量时必须进行温度补偿。
DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,测温范围为-55~125摄氏度,最大分辨率可达0.0625摄氏度。DS18B20可以直接读出被测温度值,而且采用了线制与单片机相连,减少了外部的硬件电路,具有低
成本和易使用的特点,测温电路如图3-5 所示。
图3-5测温电路原理图
3.2.3 显示模块的设计
LED(Light-Emitting Diode,发光二极管)有七段和八段之分,也有共阴和共阳两种。
LED数码管结构简单,价格便宜。下图示出了八段LED数码显示管的结构和原理
显示管原理图。八段LED 显示管由八只发光二极管组成,编号是a、b、c、d、e、f、 |
图3-68 段数码管示意图
单片机对LED管的显示可以分为静态和动态两种。静态显示的特点是各LED管能稳定地同时显示各自字形;动态显示是指各LED轮流地一遍一遍显示各自字符,人们
由于视觉器官惰性,从而看到的是各LED 似乎在同时显示不同字形。 |
本系统采用了两片74HC573分别作为断码和位码的选通芯片,并用一片10K的排阻提
供上拉电流,以达到数码管动态描显示,电路原理图如图3-6所示。
第四章系统软件设计
软件分为两部分,主程序和中断服务程序,如图4-1所示。主程序完成初始化工作、超声波发射和接收,距离计算、结果的输出。
外部中断服务子程序主要完成时间值的读取。
开 始
单片机初始化
DS18B20初始化
定时器及中断初始化
开外部中断
NO
收到回波?
YES 指示灯闪烁外部中断子程序
计算距离
结果输出 | 图4-1 主程序流程图 |
|
|
主程序首先是对系统环境初始化,设置定时器T0工作模式为16位定时计数器模式。置位总中断允许位EA。然后给Trig一个20us的高电平,然后在Echo引脚等待其变为高电平,一旦输出了高电平,表明超声波已开始发射,此刻即计时,等待Echo变为低电平,即触发外部中断0的跳变沿方式中断。读取当前定时器的值,换算成时间,乘以温度补偿后的波速,即得到测距距离。由于采用的是11.0592MHz的晶振,计数器每计一个数大概就是1μs,当主程序检测到接收成功的标志位后,将计数器T1中的数(即超声波来回所用的时间)按式计算,
即可得被测物体与测距仪之间的距离。 测出距离后结果将以十进制BCD码方式送往LED显示约0.5s,然后再发超声波脉冲重复测量过程。为了有利于程序结构化和容易计算出距离,主程序采用C语言编写。
4.1 显示子程序
没显示一根管延时2ms,利用人眼的视觉暂留效应,达到静态显示的效果,C 程序如 |
uchardm,cm,mm;
dm=distance_date/100;
cm=distance_date%100/10;
mm=distance_date%10;
dula=0;
P0=table[dm];
dula=1;
dula=0;
wela=0;
P0=0x7f; | |
wela=0;
delay(2);
dula=0;
P0=table1[cm];
dula=1;
dula=0;
wela=0;
P0=0xbf;
wela=1;
wela=0;
P0=table[mm]; delay(2); |
wela=1;
wela=0;
delay(2);
}
4.2外部中断子程序
因本设计把数据换算,计算距离以及显示子程序都放在了主程序中,所以外部中断子程序比较简单,它实现了对T1数值读取,以及关闭外部中断的功能。流程图如图4-2所示。
外部中断入口
读取时间值
关外部中断
返回
图4-2外部中断程序流程图c程序如下:
INTO_() interrupt 0
outcomeH =TH1; {
outcomeL =TL1;
EX0=0;
}
4.3测量温度子程序
测温电路由美国DALLAS公司的DS18B20芯片完成,其初始化过程如下:DS18B20的初始化
(1)先将数据线置高电平“1”。
(2)延时(该时间要求的不是很严格,但是尽可能的短一点)
(3) 数据线拉到低电平“0”。
(4) 延时750微秒(该时间的时间范围可以从480到960微秒)。
(5) 数据线拉到高电平“1”。 |
(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20
所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等
待,不然会使程序进入死循环,所以要进行超时控制)。
(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从
发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8)将数据线再次拉高到高电平“1”后结束。
DS18B20的写操作
(1)数据线先置低电平“0”。
(2)延时确定的时间为15微秒。
(5)将数据线拉到高电平。
(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7)最后将数据线拉高。
DS18B20的读操作
(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时15微秒。
(5)将数据线拉高“1”。
(6)延时15微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时30微秒。
根据读写操作,其流程图如4-3
开始
初始化
写命令:跳过读序列号操作(0XCC)
温度转换结束?
转换完毕
初始化
写命令:跳过读序列号操作(0XCC)
写命令:读温度寄存器(0XBE)
写EEPROM,存储结果
图4-3DS18B20初始化流程图
具体的各部分C程序如下:
voiddsreset(void) //send reset and initialization command {
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
} |
DS=0;i++; //i++ for delay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchartmpread(void) //read a byte date
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++) | |
j=tmpreadbit();
dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里 }
return(dat);
}
voidtmpwritebyte(uchar dat) //write a byte to ds18b20
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
dat=dat>>1; testb=dat&0x01; |
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //write 0
i=8;while(i>0)i--;
DS=1;
i++;i++;
} | |
}
voidtmpchange(void) //DS18B20 begin change
{
dsreset();
delay(1);
tmpwritebyte(0xcc); // address all drivers on bus
tmpwritebyte(0x44); // initiates a single temperature conversion }
uinttmp() //get the temperature
{
float tt;
uchar a,b;
delay(1); dsreset(); |
b=tmpread();
temp=b;
temp<<=8; //two byte compose a int variable temp=temp|a;
tt=temp*0.0625;
temp=tt*10+0.5;
return temp;
}
voidreadrom() //read the serial
{
uchar sn1,sn2; | |
delay(1);
tmpwritebyte(0x33);
sn1=tmpread();
sn2=tmpread();
}
前两章是该课题的重点,全面介绍了超声波测距系统的原理和设计思路,给出了硬件电路和软件的设计。在硬件电路的设计中,分别详细介绍了发射电路,接收电路及显示模块的设计方法。软件编程部分,给出了整个程序的思路以及程序流程图。
结 论
本设计介绍了一种基于单片机的超声波测距系统的原理和设计。给出了硬件和软
件的设计方案。
超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出
传播距离。实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接
收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,
适用于测距仪。此次设计采用反射波方式。
超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射检测
接收电路,温度补偿电路四部分。单片机采用ATC51或其兼容系列。采用12MHz高
精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P1.0 端口输出超过10us 的使能信号,利用外中断0 口监测超声波接收电路输出的返回信号。显示电路采用简单实用3 位共阳LED 数码管,段码位码都用74HC573 芯片驱动驱动。 |
控制场合,都有很重要的作用。但由于经验不足,电路硬件、软件部分都有不够完善
的地方,在今后的学习中会进一步改进。
总体来说,最重要的是在本设计的设计过程中我学到了很多知识,从中受益匪浅。
了解了超声波传感器的原理,也掌握了单片机的开发过程和利用单片机设计电路的方
法。对一块电路板的设计、焊板、调试、改进等整个过程,有了更深入的理解和掌握。
这些对我今后的学习和工作都会有很大帮助的。
附录1
附录2
#include<reg52.h>
#defineuchar unsigned char
#defineuint unsigned int
#defineulong unsigned long
sbitTrig =P1^0;
sbitEcho =P3^2;
sbittest =P1^1; //测试灯引脚
sbitdula =P2^6; //段码选通引脚
sbitwela =P2^7; //位码选通引脚
sbit DS =P2^2; //测温引脚 |
ucharflag,outcomeH,outcomeL;
bitsucceed_flag;
voiddelay(uint count) //延时程序
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--; | |
}
voiddelay_20us() //延时20us
{ uchar bt ;
for(bt=0;bt<100;bt++);
}
voiddisplay(uint distance_date) //距离显示子程序{
uchar dm,cm,mm;
dm=distance_date/100; //计算分米位 cm=distance_date%100/10; //计算厘米位 mm=distance_date%10; //计算毫米位 dula=0;
dula=1; P0=table[dm]; |
P0=0x7f;
wela=1;
wela=0;
delay(2);
dula=0;
P0=table1[cm];
dula=1;
dula=0;
wela=0; | |
wela=1;
wela=0;
delay(2);
P0=table[mm];
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
delay(2);
void dsreset(void) //send reset and initialization command |
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bittmpreadbit(void) //read a bit
{
uint i;
bit dat; | |
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchartmpread(void) //read a byte date
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在 |
}
voidtmpwritebyte(uchar dat) //write a byte to ds18b20 {
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1; | |
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //write 0
i=8;while(i>0)i--;
DS=1;
i++;i++;
} |
voidtmpchange(void) //DS18B20 begin change
{
dsreset();
delay(1);
tmpwritebyte(0xcc); // address all drivers on bus
tmpwritebyte(0x44); // initiates a single temperature conversion }
uinttmp() //get the temperature
{
float tt; | |
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8; //two byte compose a int variabletemp=temp|a;
tt=temp*0.0625;
temp=tt*10+0.5;
return temp;
void readrom() //read the serial} |
delay(1);
tmpwritebyte(0x33);
sn1=tmpread();
sn2=tmpread();
}
voidmain(void)
{
uint distance_data;
uchar a;
float tem;
flag=0; //标志位,1 表示收到回波,0 则未收到 | |
test=0; //控制灯闪烁 | |
Trig=0;
TMOD=0x11; //对定时器1选择16位模式IT0=0; //设置触发方式为低电平触发IE0=0;
EA=1; //开总中断
tmpchange(); //测出当时温度
ET0=0;
TR0=0;
while(1)
{
EA=0;
TH1=0;
Trig=1; //让TRIG 引脚为高电平 TL1=0; |
TR1=1; //开始计时
succeed_flag=0;
EX0=1;
TF1=0;
EA=1;
while((TH1<25)&&(!IE0)); //等待25us或者中断产生(即收到回波) TR1=0; //停止计时
EX0=0; //关闭中断
if(succeed_flag==1) //如果收到回波
{ | distance_data=outcomeH; //先保存高8 位 |
distance_data<<=8; //将高8 位左移,低八位则全置0 |
distance_data=distance_data|outcomeL; //将高低八位组成新的16位数据
tem=tmp(); //取得温度
tem/=10;
tem=331.5+0.607*tem; //得出当前波速
tem/=2000;
distance_data*=tem;
distance_data=distance_data*126000/120000; //代入晶振频率及当前波速算出距离
for(a=300;a>0;a--)
{
} |
distance_data=0;
test = !test;
}
}
}
INTO_() interrupt 0 //外部中断0
{
outcomeH =TH1;
outcomeL =TL1;
succeed_flag=1; | |
}
本文所介绍的三方向(前、左、右)超声波测距系统,就是为机器人了解其前方、左侧和右侧的环境而提供一个运动距离信息。(类似GPS定位系统)
一超声波测距原理
1、压电式超声波发生器原理
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如图1所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
2、超声波测距原理 |
距障碍物的距离(s),即:s=340t/2
二超声波测距系统的电路设计
系统的特点是利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时,单片机选用8751,经济易用,且片内有4K的ROM,便于编程。电路原理图如图2所示。其中只画出前方测距电路的接线图,左侧和右侧测距电路与前方测距电路相同,故省略之。
1、40kHz脉冲的产生与超声波发射
它的工作电压是40kHz的测距系统中的超声波传感器采用UCM40的压电陶瓷传感器,
脉冲信号,这由单片机执行下面程序来产生。
puzel: mov 14h, #12h;超声波发射持续200ms here: cpl p1.0 ; 输出40kHz 方波 | |
nop ;
nop ;
nop ;
djnz 14h,here;
ret
前方测距电路的输入端接单片机P1.0端口,单片机执行上面的程序后,在P1.0端口输出一个40kHz的脉冲信号,经过三极管T放大,驱动超声波发射头UCM40T,发出40kHz的脉冲超声波,且持续发射200ms。右侧和左侧测距电路的输入端分别接P1.1和P1.2端口,工作原理与前方测距电路相同。
2、超声波的接收与处理
接收头采用与发射头配对的UCM40R,将超声波调制脉冲变为交变电压信号,经运算
放大器IC1A和IC1B两极放大后加至IC2。IC2是带有锁 定环的音频译码集成块LM567, |
输入端,中断源的识别由程序查询来处理,中断优先级为先右后左。部分源程序如下:receive1:pushpsw
push acc
clr ex1 ; 关外部中断1
jnb p1.1, right ;P1.1引脚为0,转至右测距电路中断服务程序
jnb p1.2, left ; P1.2引脚为0,转至左测距电路中断服务程序
return: SETBEX1; 开外部中断1
pop? acc
pop? psw | |
right: ...?; 右测距电路中断服务程序入口
? ajmp? return
left: ...; 左测距电路中断服务程序入口 ? ajmp? return
4、计算超声波传播时间
在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波反射波时,接收电路输出端产生一个负跳变,
在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。其部分源程序如下:
RECEIVE0:PUSHPSW
PUSH ACC
CLR EX0 ; 关外部中断0
MOV R6, TL0? |
MOV31H, A ; 存储结果
MOV A, R7
SUBB A, #3CH
MOV 30H, A?
SETBEX0 ; 开外部中断0
POP ACC?
POP PSW
RETI
四、超声波测距系统的软件设计
软件分为两部分,主程序和中断服务程序,如图3(a)(b)(c) 所示。主程序完成 | |
初始化工作、各路超声波发射和接收顺序的控制。 | |
定时中断服务子程序完成三方向超声波的轮流发射,外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出等工作。
五、结论
对所要求测量范围30cm~200cm内的平面物体做了多次测量发现,其最大误差为0.5cm,且重复性好。可见基于单片机设计的超声波测距系统具有硬件结构简单、工作可靠、测量误差小等特点。因此,它不仅可用于移动机器人,还可用在其它检测系统中。
Copyright © 2019- fupindai.com 版权所有 赣ICP备2024042792号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务