2014单片机课设报告超声波测距

目录

第一章 超声波测距的概述 1.1几种测距方法及比较 1.2单片机应用系统概述 1.3超声波及测距系统概述 1.4本设计任务主要内容 第二章 系统主要硬件设计 2.1方案论证与比较 2.2单片机主机系统电路 2.2.1单片机电路 2.2.2复位电路 2.2.3时钟电路 2.3超声波发送电路 2.4超声波接收电路 2.5超声波收发集成模块 2.6 LED显示电路 2.7电源电路

第三章 系统软件设计 3.1系统程序结构 3.2系统主程序

3.3 40KHz超声波发送程序 3.4超声波的接收和处理 3.5距离计算程序 3.6 LED显示程序 3.7延时程序

3.8 T1中断服务程序 3.9最终程序

第四章 实验分析 4.1实验测试 4.2实验数据 4.3误差分析 第五章 总结 参考文献

基于单片机的超声波测距系统 摘要:由于传统的接触测量方法在很多特殊场合:如带腐蚀的液体,强电磁干扰,有毒等恶劣条件下,测量距离存在不可克服的缺陷,超声波测距能很好的解决此类的问题。本论文主要对单片机超声波测距系统的原理,单片机的应用等进行了分析;并且对超声波的发生电路和接收电路,LED显示电路,硬件制作和软件设计进行阐述;最后对系统进行误差分析。

关键词:单片机,超声波测距,LED显示,硬件构架,软件设计,误差分析。

1 超声波测距的概述

1.1几种测距方法及比较

在实际生活中,常常需要对物体间的距离进行精确测量。目前测距实现的方法有很多种,由激光测距,红外测距和超声波测距。1960年,美国休斯飞机公司科学家梅曼首先研究出激光测距仪,渐渐成为高精度测距仪的主流。虽然其测量距离远,速度快,精度高,但是激光测距传感器价格昂贵;而超声波测距设计简单,成本低,监控迅速,方便,计算简单,易于做到实时监控,在测量精度上也满足本次课程设计的要求,并且可以满足我们对单片机知识由理论到实践的积累过程。超声波测距在泊车辅助系统,导盲机器人等方面都有广泛的应用。所以最终选择超声波测距方案。

1.2单片机应用系统概述

STC89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在线系统可编程Flash存储器。与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在线可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使的STC89S52为众多嵌入式控制应用系统提供高灵活,有效地解决方案.STC89S52具有以下标准功能:8位字长的CPU,可在线ISP变成的8K片内Flash存储器,256B的片内数据存储器,可编程的32跟I/O口线(P0~P3),4.0~5.5V电压操作范围,3个可编程的16位定时/计数器,双数据指针DPRR0和DPTR1,具有8个中断源,6个中断矢量,2级优先权的中断系统,可在“空闲”和“断电”两种低功耗方式运行,3级程序锁定位,全双I的UARE串行通信口,1个看门狗定时器WDT,具有断电标志位POF,振荡器和时钟电路的全静态工作频率为0~30MHZ。

1.3超声波测距系统概述

总体来讲,超声波发生器可以分为两大类:一类使用电气方式产生超声波,一类使用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛,液哨和气流旋笛等。各不相同。他们所产生的超声波频率、

功率和特性各不相同,因而用途也不同。目前较为常用的死压电式超声波发生器。压电式超声波发生器实际上是利用压电晶体的谐振来工作的,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动震荡板震动,便产生超声波。反之,如果两电极间未外加电压,当共振板接受到超声波时,将压迫压电晶片作震荡,将机械能转化为电信号,这时它就成为超声波接收器了。

超声波发射器向某一方向发射超声波,在发射时刻的同事开始计时,超声波在空气中传播,途中碰到障碍物就立即返回,超声波接收器收到反射波就立即停止计时。超声波在空气的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即s=340t/2。超声波测距的原理是利用超声波在空气中的传播速度已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差测量出实际距离。超声波测距原理图如下:

1.4 本设计任务主要内容

以STC89S52为核心,设计一个测距范围在1~350cm,精度为1cm的测距系统。

2 系统主要硬件设计

2.1方案论证与比较

常用的超声波发射和接收电路有多种,如下 超声波发射电路:

(1) 分立元件构成的发射电路

图 2.1.1 分立元件构成的超声波发射电路

图2.1.1是由两只普通低频小功率三极管C9013构成的振荡、驱动电路,三极管T1、T2构成两级放大器,但是由于超声波发射头的正反馈作用,这个原本是放大器的电路变成了振荡器。超声波发射器的压电晶片可等效于一个串联LC谐振电路,具有选频作用,因此该振荡器只能振荡在超声波发射头的固有谐振频率f0。第二个图中用电感L替代R3这样可以增大激励电压,使其具有较大的功率输出。

(2) 由集成电路构成的发射电路

图3.1.2为由555集成芯片构成的振荡、调制、激励电路。该电路应使用双极型555(内部电路由普通三极管构成),不宜使用单极型7555(内部电路由CMOS电路构成,外部引脚与555相同),其原因是7555带负载能力小。

图2.1.2 555构成的超声波发射电路

图2.1.3是由非门构成的一个振荡器发送电路,用非门构成的电路简单,调试容易。很容易通过软件控制。图中把两个非门的输出接到一起的目的是为了提高其吸入电流,电路驱动能力提高。

图2.1.3 由非门构成的超声波发射电路 1 超声波接收电路:

(1) 由分立元件构成的接收电路

图2.1.4 为由三极管T1,T2和若干电阻电容组成的两级阻容耦合交流放

大电路。第一级中R3为集电极负载电阻;R2为偏流电阻,同时引入了交直流并联电压负反馈,可以较有效的稳定静态工作点,改善非线性失真以及增益的稳定性;R4是发射极负反馈电阻,引入直、交流串联电流负反馈,具有稳定工作点、增益、改善失真、提高输入阻抗等作用。

图 2.1.4 分立元件构成的超声波接收电路 (2) 由运算放大器构成的接收电路

图2.1.5是由运放构成的超声波放大电路,该电路的形式在其他应用中经常遇到,特点如下:

1)一般式用运放组成的放大电路都要求对称的正负电源供电,这里以单电源供电,输出端的静态电位必须设置在1/2的电源电压,这由同相输入端的点位来确定,R1和R2分压取得1/2的电源电压加到运放的同相输入端,使其电位1/2电源电压。

2)采用同相端输入方式其输入阻抗高,超声波接收传感器的输出信号接到放大器的同相端,有利于超声波传感器充分发挥接收灵敏度和自生的选频作用。

3)反相端对地不提供直流通路,因此通过隔直电容C2提供直流通路。

图 2.1.5 运放构成的超声波接收电路

(3) LM1812收发集成电路构成

LM1812是一种专用于超声波接收和发送的集成电路,它即可做发送电路,又可以做接收电路使用。如下图所示:

图 2.1.6 由LM1812构成的接收电路 (4) CX20106构成的接收电路

图 2.1.7 CX20106构成的接收电路

以上为常用的发射和接收电路,分立元件构成的收发电路容易受到外界的干扰,体积、功耗也比较大。而集成电路构成的发射和接收电路具有调试简单,可靠性好,抗干扰能力强,体积小,功耗低的优点,所以首先考虑采用集成电路来组成收发电路。在由集成电路构成的收发电路中,发射电路我们选用由非门构成,接收电路采用由红外接收检波芯片CX20106构成,主要是考虑到系统的调试简单、成本低、可靠性好。

2.2单片机主机系统电路 2.2.1单片机电路

2.2.2复位电路

2.2.3时钟电路

2.3超声波发送电路

2.4超声波接收电路

2.5集成收发模块

2.6LED

2.7 电源电路

图2.7

第三章 系统软件设计

3.1系统程序结构

3.2系统主程序

超声波收发分立元件: //主函数 void main() {

TMOD=0x12; //T1方式1,T0方2 TH0=256-12; //T0设定初值 TL0=244; T2MOD=0; T2CON=0;

RCAP2H=(65536-50000)/256;

RCAP2L=(65536-50000)%256;

ET0=1;

ET1=1;

ET2=1;

EX0=1;

EA=1;

TR2=1;

while(1)

{ if(num==10)

TR0=0;

display();

}

}

超声波收发集成模块:

//主函数

void main()

{

TMOD=0x11;

ET0=1;

ET1=1;

EA=1;

TR1=1;

while(1)

{

while(!led2);

TR0=1;

while(led2);

TR0=0;

count();

}

}

3.3 40KHz超声波发送程序

用于超声波收发分立元件

//T0中断服务程序用于产生40KHz方波驱动超声波发射器产生超声波 void timer_T0() interrupt 1

{

led1=~led1;

num++;

}

3.4超声波的接收和处理

超声波收发分立元件:

//外部中断0中断程序,用于接收到超声波时进行处理

void wbzd_0() interrupt 0

{

count();

}

超声波收发集成模块:

//包含于主程序中,用于接收到超声波时进行处理

while(1)

{

while(!led2);

TR0=1;

while(led2);

TR0=0;

count();

}

3.5距离计算程序

超声波收发分立元件和超声波收发集成模块相同:

void count()

{

time=TH0*256+TL0;

TH0=0;

TL0=0;

distance=time*1.7/100; //cm

qian=distance/1000;

bai=distance%1000/100;

shi=distance%100/10;

ge=distance%10;

}

3.6 LED显示程序

超声波收发分立元件和超声波收发集成模块相同:

void display()

{

dula=1;

P0=table[qian];

dula=0;

P0=0x00;

wela=1;

P0=0x01;

wela=0;

delayms(1);

dula=1;

P0=table[bai];

dula=0;

P0=0x00;

wela=1;

wela=0;

delayms(1);

dula=1;

P0=table[shi];

dula=0;

P0=0x00;

wela=1;

P0=0x04;

wela=0;

delayms(1);

dula=1;

P0=table[ge];

dula=0;

P0=0x00;

wela=1;

P0=0x08;

wela=0;

delayms(1);

}

3.7延时程序

超声波收发分立元件和超声波收发集成模块相同:

void delayms(uint xms)

{uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

3.8T1中断服务子程序

用于超声波收发集成模块:

//T1中断服务程序用于循环显示和循环启动超声波

void timer_T1()interrupt 3

{

TH1=(65536-10000)/256; //10ms刷新一次显示

TL1=(65536-10000)%256;

display();

num++;

if(num>=80) //800ms启动一次超声波模块

{num=0;

led1=1;

delayms(1);

led1=0;

}

最终程序

超声波收发集成模块:

/* 2014/5/13

程序说明:用51单片机制作超声波测距器

单片机:

超声波测距模块:HC-SR04(Trig-led1,Echo-led2)

显示模块:74HC573锁存器(锁存段码dula和位码wela)

四位(共阳)数码管

P0:发送段码和位码

P1:P1^2-Trig

P1^3-Echo

P3:P3^6-dula

P3^7-wela

*/

#include

#define uint unsigned int

#define uchar unsigned char

sbit led1=P1^2;

sbit led2=P1^3;

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

uchar qian,bai,shi,ge;

uint time,distance,num;

//声明子函数

void delayms(uint);

void count()

{

time=TH0*256+TL0;

TH0=0;

TL0=0;

distance=time*1.7/100; //cm

qian=distance/1000;

bai=distance%1000/100;

shi=distance%100/10;

ge=distance%10;

}

void display()

dula=1;

P0=table[qian];

dula=0;

P0=0x00;

wela=1;

P0=0x01;

wela=0;

delayms(1);

dula=1;

P0=table[bai];

dula=0;

P0=0x00;

wela=1;

P0=0x02;

wela=0;

delayms(1);

dula=1;

P0=table[shi];

dula=0;

P0=0x00;

wela=1;

P0=0x04;

wela=0;

delayms(1);

dula=1;

P0=table[ge];

dula=0;

P0=0x00;

wela=1;

P0=0x08;

wela=0;

delayms(1);

}

void delayms(uint xms)

{uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void main()

TMOD=0x11;

ET0=1;

ET1=1;

EA=1;

TR1=1;

while(1)

{

while(!led2);

TR0=1;

while(led2);

TR0=0;

count();

}

}

//T1中断服务程序用于循环显示和循环启动超声波

void timer_T1()interrupt 3

{

TH1=(65536-10000)/256; //10ms刷新一次显示

TL1=(65536-10000)%256;

display();

num++;

if(num>=80) //800ms启动一次超声波模块

{num=0;

led1=1;

delayms(1);

led1=0;

}

}

超声波收发分立元件:

/* 2013/05/21

程序说明:超声波测距程序

超声波收发分立元件

*/

#include

#define uint unsigned int //16

#define uchar unsigned char //8

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sfr T2MOD=0xc9; //定义T2定时器

sbit led1=P1^0;

sbit led2=P1^1;

sbit Echo=P3^2;

sbit dula=P2^6;

sbit wela=P2^7;

uint time,timer,distance;

uchar num,qian,bai,shi,ge;

uchar disbuff[4]; //显示区寄存器

//声明子函数

void csb();

void delayms(uint);

void delayus();

void display();

void count(); //

//主函数

void main()

{

TMOD=0x12;

初值自动重装定时)

TH0=256-12;

TL0=244;

T2MOD=0;

T2CON=0;

RCAP2H=(65536-50000)/256;

RCAP2L=(65536-50000)%256;

ET0=1;

ET1=1;

ET2=1;

EX0=1;

EA=1;

TR2=1;

while(1)

{ if(num==10)

TR0=0;

display();

}

}

//产生超声波程序

void csb()

{

num=0; //产生40kHz方波 //延时 // //T1方式1(16位定时),T0方2(八位 //T0设定初值

TH1=0;

TL1=0;

TR0=1;

TR1=1;

}

//计算子程序

void count()

{

time=TH1*256+TL1;

TH1=0;

TL1=0;

distance=time*1.83/100;

qian=distance/1000;

disbuff[0]=qian;

bai=distance%1000/100;

disbuff[1]=bai;

shi=distance%100/10;

disbuff[2]=shi;

ge=distance%10;

disbuff[3]=ge;

}

//显示子程序

void display()

{

dula=1;

P0=table[disbuff[0]];

//P0=table[qian];

dula=0;

P0=0x00;

wela=1;

P0=0x08;

P0=0x08;

wela=0;

delayms(1);

dula=1;

P0=table[disbuff[1]];

//P0=table[bai];

dula=0;

P0=0x00;

wela=1;

P0=0x04;

P0=0x04;

wela=0;

delayms(3);

dula=1;

P0=table[disbuff[2]];

//P0=table[shi];

dula=0;

P0=0x00;

wela=1;

P0=0x02;

P0=0x02;

wela=0;

delayms(3);

dula=1;

P0=table[disbuff[3]];

//P0=table[ge];

dula=0;

P0=0x00;

wela=1;

P0=0x01;

P0=

wela=0;

delayms(3);

}

//延时子程序

void delayms(uint X)

{

uint i,j;

for(i=X;i>0;i--)

for(j=110;j>0;j--);

}

//

void delayus()

{

uchar k;

for(k=10;k>0;k--);

}

//外部中断0中断程序

void wbzd_0() interrupt 0

{

TR1=0;

count();

}

//T0中断服务程序

void timer_T0() interrupt 1

{

led1=~led1;

num++;

}

//

void timer_T1() interrupt 3

{

csb();

}

//

void timer_T2() interrupt 5

{

TF2=0;

timer++;

if(timer>=20)

{timer=0;

csb();

}

TR2=1;

} //每1000毫秒启动一次超声波

第四章 实验分析

4.1 实验测试

由于超声波测距是根据测距模块发出超声波到返回超声波的时间来测量距离的,因此必须保证返回的超声波不能丢失过多,既要保证所测的障碍物表面光洁平整,若表面凹凸不平,超声波散射会比较严重,所测的距离的精度会大大降低。另外,在测量的过程中,尽量保证超声波发射和接收的探头正对障碍物。

4.2 实验数据

4.3 误差分析

本系统的误差主要来源于以下三个方面:

(1)所测物体表面不平整 由于超声波测距是根据测距模块发出超声波到返回超声波的

时间来测量距离的,所以物体表面不平整会使误差增大。

(2)温度影响 实验证明声音在空气中的传播速度并不是一成不变的,它会受到温度的影响。

(3)接触不良 由于焊接以及排线导致接触不良也会影响最后结果。

第五章 总结

参考文献

【1】 张琛 耿标 超声波测距的原理及设计【J】 科技传播,2010年7月:217-222

【2】 康雅萍 刘震宇 郭鑫等 高精度超声波测距系统【J】实验技术与管理 2010年3月,

27(3):61-64

【3】 张珩 刘亚杰 基于单片机的超声波测距倒车防撞报警系统【J】广西轻工业 2009年

9月(9):61-62

【4】 唐波 朱琼玲 基于51单片机超声波测距器设计【J】 矿业安全与环保 2009年8月

36卷增刊:68-70

目录

第一章 超声波测距的概述 1.1几种测距方法及比较 1.2单片机应用系统概述 1.3超声波及测距系统概述 1.4本设计任务主要内容 第二章 系统主要硬件设计 2.1方案论证与比较 2.2单片机主机系统电路 2.2.1单片机电路 2.2.2复位电路 2.2.3时钟电路 2.3超声波发送电路 2.4超声波接收电路 2.5超声波收发集成模块 2.6 LED显示电路 2.7电源电路

第三章 系统软件设计 3.1系统程序结构 3.2系统主程序

3.3 40KHz超声波发送程序 3.4超声波的接收和处理 3.5距离计算程序 3.6 LED显示程序 3.7延时程序

3.8 T1中断服务程序 3.9最终程序

第四章 实验分析 4.1实验测试 4.2实验数据 4.3误差分析 第五章 总结 参考文献

基于单片机的超声波测距系统 摘要:由于传统的接触测量方法在很多特殊场合:如带腐蚀的液体,强电磁干扰,有毒等恶劣条件下,测量距离存在不可克服的缺陷,超声波测距能很好的解决此类的问题。本论文主要对单片机超声波测距系统的原理,单片机的应用等进行了分析;并且对超声波的发生电路和接收电路,LED显示电路,硬件制作和软件设计进行阐述;最后对系统进行误差分析。

关键词:单片机,超声波测距,LED显示,硬件构架,软件设计,误差分析。

1 超声波测距的概述

1.1几种测距方法及比较

在实际生活中,常常需要对物体间的距离进行精确测量。目前测距实现的方法有很多种,由激光测距,红外测距和超声波测距。1960年,美国休斯飞机公司科学家梅曼首先研究出激光测距仪,渐渐成为高精度测距仪的主流。虽然其测量距离远,速度快,精度高,但是激光测距传感器价格昂贵;而超声波测距设计简单,成本低,监控迅速,方便,计算简单,易于做到实时监控,在测量精度上也满足本次课程设计的要求,并且可以满足我们对单片机知识由理论到实践的积累过程。超声波测距在泊车辅助系统,导盲机器人等方面都有广泛的应用。所以最终选择超声波测距方案。

1.2单片机应用系统概述

STC89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在线系统可编程Flash存储器。与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在线可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使的STC89S52为众多嵌入式控制应用系统提供高灵活,有效地解决方案.STC89S52具有以下标准功能:8位字长的CPU,可在线ISP变成的8K片内Flash存储器,256B的片内数据存储器,可编程的32跟I/O口线(P0~P3),4.0~5.5V电压操作范围,3个可编程的16位定时/计数器,双数据指针DPRR0和DPTR1,具有8个中断源,6个中断矢量,2级优先权的中断系统,可在“空闲”和“断电”两种低功耗方式运行,3级程序锁定位,全双I的UARE串行通信口,1个看门狗定时器WDT,具有断电标志位POF,振荡器和时钟电路的全静态工作频率为0~30MHZ。

1.3超声波测距系统概述

总体来讲,超声波发生器可以分为两大类:一类使用电气方式产生超声波,一类使用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛,液哨和气流旋笛等。各不相同。他们所产生的超声波频率、

功率和特性各不相同,因而用途也不同。目前较为常用的死压电式超声波发生器。压电式超声波发生器实际上是利用压电晶体的谐振来工作的,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动震荡板震动,便产生超声波。反之,如果两电极间未外加电压,当共振板接受到超声波时,将压迫压电晶片作震荡,将机械能转化为电信号,这时它就成为超声波接收器了。

超声波发射器向某一方向发射超声波,在发射时刻的同事开始计时,超声波在空气中传播,途中碰到障碍物就立即返回,超声波接收器收到反射波就立即停止计时。超声波在空气的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即s=340t/2。超声波测距的原理是利用超声波在空气中的传播速度已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差测量出实际距离。超声波测距原理图如下:

1.4 本设计任务主要内容

以STC89S52为核心,设计一个测距范围在1~350cm,精度为1cm的测距系统。

2 系统主要硬件设计

2.1方案论证与比较

常用的超声波发射和接收电路有多种,如下 超声波发射电路:

(1) 分立元件构成的发射电路

图 2.1.1 分立元件构成的超声波发射电路

图2.1.1是由两只普通低频小功率三极管C9013构成的振荡、驱动电路,三极管T1、T2构成两级放大器,但是由于超声波发射头的正反馈作用,这个原本是放大器的电路变成了振荡器。超声波发射器的压电晶片可等效于一个串联LC谐振电路,具有选频作用,因此该振荡器只能振荡在超声波发射头的固有谐振频率f0。第二个图中用电感L替代R3这样可以增大激励电压,使其具有较大的功率输出。

(2) 由集成电路构成的发射电路

图3.1.2为由555集成芯片构成的振荡、调制、激励电路。该电路应使用双极型555(内部电路由普通三极管构成),不宜使用单极型7555(内部电路由CMOS电路构成,外部引脚与555相同),其原因是7555带负载能力小。

图2.1.2 555构成的超声波发射电路

图2.1.3是由非门构成的一个振荡器发送电路,用非门构成的电路简单,调试容易。很容易通过软件控制。图中把两个非门的输出接到一起的目的是为了提高其吸入电流,电路驱动能力提高。

图2.1.3 由非门构成的超声波发射电路 1 超声波接收电路:

(1) 由分立元件构成的接收电路

图2.1.4 为由三极管T1,T2和若干电阻电容组成的两级阻容耦合交流放

大电路。第一级中R3为集电极负载电阻;R2为偏流电阻,同时引入了交直流并联电压负反馈,可以较有效的稳定静态工作点,改善非线性失真以及增益的稳定性;R4是发射极负反馈电阻,引入直、交流串联电流负反馈,具有稳定工作点、增益、改善失真、提高输入阻抗等作用。

图 2.1.4 分立元件构成的超声波接收电路 (2) 由运算放大器构成的接收电路

图2.1.5是由运放构成的超声波放大电路,该电路的形式在其他应用中经常遇到,特点如下:

1)一般式用运放组成的放大电路都要求对称的正负电源供电,这里以单电源供电,输出端的静态电位必须设置在1/2的电源电压,这由同相输入端的点位来确定,R1和R2分压取得1/2的电源电压加到运放的同相输入端,使其电位1/2电源电压。

2)采用同相端输入方式其输入阻抗高,超声波接收传感器的输出信号接到放大器的同相端,有利于超声波传感器充分发挥接收灵敏度和自生的选频作用。

3)反相端对地不提供直流通路,因此通过隔直电容C2提供直流通路。

图 2.1.5 运放构成的超声波接收电路

(3) LM1812收发集成电路构成

LM1812是一种专用于超声波接收和发送的集成电路,它即可做发送电路,又可以做接收电路使用。如下图所示:

图 2.1.6 由LM1812构成的接收电路 (4) CX20106构成的接收电路

图 2.1.7 CX20106构成的接收电路

以上为常用的发射和接收电路,分立元件构成的收发电路容易受到外界的干扰,体积、功耗也比较大。而集成电路构成的发射和接收电路具有调试简单,可靠性好,抗干扰能力强,体积小,功耗低的优点,所以首先考虑采用集成电路来组成收发电路。在由集成电路构成的收发电路中,发射电路我们选用由非门构成,接收电路采用由红外接收检波芯片CX20106构成,主要是考虑到系统的调试简单、成本低、可靠性好。

2.2单片机主机系统电路 2.2.1单片机电路

2.2.2复位电路

2.2.3时钟电路

2.3超声波发送电路

2.4超声波接收电路

2.5集成收发模块

2.6LED

2.7 电源电路

图2.7

第三章 系统软件设计

3.1系统程序结构

3.2系统主程序

超声波收发分立元件: //主函数 void main() {

TMOD=0x12; //T1方式1,T0方2 TH0=256-12; //T0设定初值 TL0=244; T2MOD=0; T2CON=0;

RCAP2H=(65536-50000)/256;

RCAP2L=(65536-50000)%256;

ET0=1;

ET1=1;

ET2=1;

EX0=1;

EA=1;

TR2=1;

while(1)

{ if(num==10)

TR0=0;

display();

}

}

超声波收发集成模块:

//主函数

void main()

{

TMOD=0x11;

ET0=1;

ET1=1;

EA=1;

TR1=1;

while(1)

{

while(!led2);

TR0=1;

while(led2);

TR0=0;

count();

}

}

3.3 40KHz超声波发送程序

用于超声波收发分立元件

//T0中断服务程序用于产生40KHz方波驱动超声波发射器产生超声波 void timer_T0() interrupt 1

{

led1=~led1;

num++;

}

3.4超声波的接收和处理

超声波收发分立元件:

//外部中断0中断程序,用于接收到超声波时进行处理

void wbzd_0() interrupt 0

{

count();

}

超声波收发集成模块:

//包含于主程序中,用于接收到超声波时进行处理

while(1)

{

while(!led2);

TR0=1;

while(led2);

TR0=0;

count();

}

3.5距离计算程序

超声波收发分立元件和超声波收发集成模块相同:

void count()

{

time=TH0*256+TL0;

TH0=0;

TL0=0;

distance=time*1.7/100; //cm

qian=distance/1000;

bai=distance%1000/100;

shi=distance%100/10;

ge=distance%10;

}

3.6 LED显示程序

超声波收发分立元件和超声波收发集成模块相同:

void display()

{

dula=1;

P0=table[qian];

dula=0;

P0=0x00;

wela=1;

P0=0x01;

wela=0;

delayms(1);

dula=1;

P0=table[bai];

dula=0;

P0=0x00;

wela=1;

wela=0;

delayms(1);

dula=1;

P0=table[shi];

dula=0;

P0=0x00;

wela=1;

P0=0x04;

wela=0;

delayms(1);

dula=1;

P0=table[ge];

dula=0;

P0=0x00;

wela=1;

P0=0x08;

wela=0;

delayms(1);

}

3.7延时程序

超声波收发分立元件和超声波收发集成模块相同:

void delayms(uint xms)

{uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

3.8T1中断服务子程序

用于超声波收发集成模块:

//T1中断服务程序用于循环显示和循环启动超声波

void timer_T1()interrupt 3

{

TH1=(65536-10000)/256; //10ms刷新一次显示

TL1=(65536-10000)%256;

display();

num++;

if(num>=80) //800ms启动一次超声波模块

{num=0;

led1=1;

delayms(1);

led1=0;

}

最终程序

超声波收发集成模块:

/* 2014/5/13

程序说明:用51单片机制作超声波测距器

单片机:

超声波测距模块:HC-SR04(Trig-led1,Echo-led2)

显示模块:74HC573锁存器(锁存段码dula和位码wela)

四位(共阳)数码管

P0:发送段码和位码

P1:P1^2-Trig

P1^3-Echo

P3:P3^6-dula

P3^7-wela

*/

#include

#define uint unsigned int

#define uchar unsigned char

sbit led1=P1^2;

sbit led2=P1^3;

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

uchar qian,bai,shi,ge;

uint time,distance,num;

//声明子函数

void delayms(uint);

void count()

{

time=TH0*256+TL0;

TH0=0;

TL0=0;

distance=time*1.7/100; //cm

qian=distance/1000;

bai=distance%1000/100;

shi=distance%100/10;

ge=distance%10;

}

void display()

dula=1;

P0=table[qian];

dula=0;

P0=0x00;

wela=1;

P0=0x01;

wela=0;

delayms(1);

dula=1;

P0=table[bai];

dula=0;

P0=0x00;

wela=1;

P0=0x02;

wela=0;

delayms(1);

dula=1;

P0=table[shi];

dula=0;

P0=0x00;

wela=1;

P0=0x04;

wela=0;

delayms(1);

dula=1;

P0=table[ge];

dula=0;

P0=0x00;

wela=1;

P0=0x08;

wela=0;

delayms(1);

}

void delayms(uint xms)

{uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void main()

TMOD=0x11;

ET0=1;

ET1=1;

EA=1;

TR1=1;

while(1)

{

while(!led2);

TR0=1;

while(led2);

TR0=0;

count();

}

}

//T1中断服务程序用于循环显示和循环启动超声波

void timer_T1()interrupt 3

{

TH1=(65536-10000)/256; //10ms刷新一次显示

TL1=(65536-10000)%256;

display();

num++;

if(num>=80) //800ms启动一次超声波模块

{num=0;

led1=1;

delayms(1);

led1=0;

}

}

超声波收发分立元件:

/* 2013/05/21

程序说明:超声波测距程序

超声波收发分立元件

*/

#include

#define uint unsigned int //16

#define uchar unsigned char //8

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sfr T2MOD=0xc9; //定义T2定时器

sbit led1=P1^0;

sbit led2=P1^1;

sbit Echo=P3^2;

sbit dula=P2^6;

sbit wela=P2^7;

uint time,timer,distance;

uchar num,qian,bai,shi,ge;

uchar disbuff[4]; //显示区寄存器

//声明子函数

void csb();

void delayms(uint);

void delayus();

void display();

void count(); //

//主函数

void main()

{

TMOD=0x12;

初值自动重装定时)

TH0=256-12;

TL0=244;

T2MOD=0;

T2CON=0;

RCAP2H=(65536-50000)/256;

RCAP2L=(65536-50000)%256;

ET0=1;

ET1=1;

ET2=1;

EX0=1;

EA=1;

TR2=1;

while(1)

{ if(num==10)

TR0=0;

display();

}

}

//产生超声波程序

void csb()

{

num=0; //产生40kHz方波 //延时 // //T1方式1(16位定时),T0方2(八位 //T0设定初值

TH1=0;

TL1=0;

TR0=1;

TR1=1;

}

//计算子程序

void count()

{

time=TH1*256+TL1;

TH1=0;

TL1=0;

distance=time*1.83/100;

qian=distance/1000;

disbuff[0]=qian;

bai=distance%1000/100;

disbuff[1]=bai;

shi=distance%100/10;

disbuff[2]=shi;

ge=distance%10;

disbuff[3]=ge;

}

//显示子程序

void display()

{

dula=1;

P0=table[disbuff[0]];

//P0=table[qian];

dula=0;

P0=0x00;

wela=1;

P0=0x08;

P0=0x08;

wela=0;

delayms(1);

dula=1;

P0=table[disbuff[1]];

//P0=table[bai];

dula=0;

P0=0x00;

wela=1;

P0=0x04;

P0=0x04;

wela=0;

delayms(3);

dula=1;

P0=table[disbuff[2]];

//P0=table[shi];

dula=0;

P0=0x00;

wela=1;

P0=0x02;

P0=0x02;

wela=0;

delayms(3);

dula=1;

P0=table[disbuff[3]];

//P0=table[ge];

dula=0;

P0=0x00;

wela=1;

P0=0x01;

P0=

wela=0;

delayms(3);

}

//延时子程序

void delayms(uint X)

{

uint i,j;

for(i=X;i>0;i--)

for(j=110;j>0;j--);

}

//

void delayus()

{

uchar k;

for(k=10;k>0;k--);

}

//外部中断0中断程序

void wbzd_0() interrupt 0

{

TR1=0;

count();

}

//T0中断服务程序

void timer_T0() interrupt 1

{

led1=~led1;

num++;

}

//

void timer_T1() interrupt 3

{

csb();

}

//

void timer_T2() interrupt 5

{

TF2=0;

timer++;

if(timer>=20)

{timer=0;

csb();

}

TR2=1;

} //每1000毫秒启动一次超声波

第四章 实验分析

4.1 实验测试

由于超声波测距是根据测距模块发出超声波到返回超声波的时间来测量距离的,因此必须保证返回的超声波不能丢失过多,既要保证所测的障碍物表面光洁平整,若表面凹凸不平,超声波散射会比较严重,所测的距离的精度会大大降低。另外,在测量的过程中,尽量保证超声波发射和接收的探头正对障碍物。

4.2 实验数据

4.3 误差分析

本系统的误差主要来源于以下三个方面:

(1)所测物体表面不平整 由于超声波测距是根据测距模块发出超声波到返回超声波的

时间来测量距离的,所以物体表面不平整会使误差增大。

(2)温度影响 实验证明声音在空气中的传播速度并不是一成不变的,它会受到温度的影响。

(3)接触不良 由于焊接以及排线导致接触不良也会影响最后结果。

第五章 总结

参考文献

【1】 张琛 耿标 超声波测距的原理及设计【J】 科技传播,2010年7月:217-222

【2】 康雅萍 刘震宇 郭鑫等 高精度超声波测距系统【J】实验技术与管理 2010年3月,

27(3):61-64

【3】 张珩 刘亚杰 基于单片机的超声波测距倒车防撞报警系统【J】广西轻工业 2009年

9月(9):61-62

【4】 唐波 朱琼玲 基于51单片机超声波测距器设计【J】 矿业安全与环保 2009年8月

36卷增刊:68-70


相关内容

  • 无线超声波测距
  • 福州大学物理与信息工程学院 电子系统设计报告 设计题目:基于80C52单片机的超声波无线测距显示 专业:电子科学与技术 班级:7班 姓名: 韩少炜 学号: 111100709 同组姓名:魏霖涛 学号: 111100727 指导老师: 吴新坤 2014年06月 一.设计要求和目的 1.1设计要求:采用 ...

  • 基于STM32的可遥控智能跟随小车设计
  • 基于STM32的可遥控智能跟随小车设计 刘 磊 孙晓菲 张 煜 )(西南交通大学电气工程学院 成都 611756 摘 要:针对物品搬运时人类双手仍无法完全解放的现状,设计并实现了一种基于S超声波测距以及比例控TM32.制算法的可遥控智能跟随小车.小车以S有智能跟随和红外遥控2个模式可选.跟随模式下用 ...

  • 汽车倒车防撞报警器毕业设计
  • 乐山师范学院毕业设计(论文) 本科生毕业设计报告 学 院 物理与电子工程学院 专 业 电子信息工程 论文题目:汽车倒车防撞报警器设计 学生姓名 指导教师 班 级 学 号 完成日期:2014 年 12 月 题目:汽车倒车防撞报警器 物理与电子工程学院 电子信息工程 学号 [摘 要]本设计是以基于AT8 ...

  • 超声波测距仪开题报告
  • 德州职业技术学院毕业设计 开题报告 (2015届) 题目指导教师 系班 学 姓部级号名二〇一四年十一月四日 课题研究的目的.意义: 课题的目的:随着社会的发展,由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量.超声波测距由于其能进行非接触测量和相对较高的精度,越 ...

  • 超声波测距报告含程序
  • <单片机原理及应用> 单片机课程设计报告 超声波测距报告 目 录 第1 章 课程设计概述„„„„„„„„„„„„„„„„„„„„„„„2 1.1 课程设计选题及原理„„„„„„„„„„„„„„„„„„2 1.2 课程设计选题调研„„„„„„„„„„„„„„„„„„„2 1.2.1 选题目 ...

  • 超声波测距仪设计实验报告2
  • 超声波测距仪设计实验报告 一.实验目的 1)了解超声波发生器原理以及超声波测距原理: 2)根据超声波测距原理,设计超声波测距仪硬件电路: 3)熟悉PCB板的设计与制作: 4)熟悉基于单片机或嵌入式系统的开发编程: 5)熟悉电路的综合调试. 二.实验内容 1)认真研究有关理论知识并大量查阅相关资料,确 ...

  • 超声波测距仪实验报告
  • 课题名称:超声波测距仪 班级:应用电子0901 姓名:吴星超 学号:0503090128 指导老师:杨文博 随着人类社会从工业化社会到信息化社会的发展,视觉传达 设计经历了商业美术.工艺美术.印刷美术设计.装潢设计.平面设计等几大阶段的演变,最终成为以视觉媒介为载体,利用视觉符号表现并传达信息的设计 ...

  • 学生坐姿矫正仪的研究
  • 龙源期刊网 http://www.qikan.com.cn 学生坐姿矫正仪的研究 作者:李苏南 谢勇 来源:<科技视界>2013年第05期 [摘 要]为了保护青少年的视力和防治近视,本文设计了一台智能学生坐姿矫正仪,该装置是基于单片机的超声波测距系统,其基本原理是通过测量人眼和书本的距离 ...

  • 51单片机超声波测距仪的设计与实现毕业论文
  • 仅供参考和学习! 超声波测距仪的设计 The design of a Silent Wave Measure Distance 摘 要 随着科技的发展,人们生活水平的提高,城市发展建设加快,城市给排水系统也有较大发展,其状况不断改善.但是,由于历史原因合成时间住的许多不可预见因素,城市给排水系统,特 ...