当前位置:文档之家› (完整版)基于单片机的超声波测距系统设计

(完整版)基于单片机的超声波测距系统设计

(完整版)基于单片机的超声波测距系统设计
(完整版)基于单片机的超声波测距系统设计

目录

一、摘要 (3)

二、正文 (3)

1、引言 (3)

2、系统设计方案 (4)

2.1超声波测距的原理 (4)

2.2设计框图 (4)

2.3 US-100超声波收发模块 (4)

2.4 单片机电路 (6)

2.5 蜂鸣器报警电路 (8)

2.6显示电路 (9)

2.7供电及程序下载电路 (10)

3 软件编程 (10)

3.1软件流程图 (10)

3.2主程序 (11)

4、下载调试 (19)

5、实物图 (19)

6 元件选择 (20)

三、总结 (20)

四、参考文献 (20)

一、摘要

超声波具有指向性强,能量消耗缓慢,传播距离较远等优点,所以,在利用传感器技术和自动控制技术相结合的测距方案中,超声波测距是目前应用最普遍的一种,它广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。

本设计详细介绍了超声波传感器的原理和特性,分析了超声波测距的原理的基础上,指出了设计测距系统的思路和所需考虑的问题,给出了以STC89c52单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。该系统电路设计合理、工作稳定、性能良好、检测速度快、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。

关键词:超声波单片机测距 STC89c52

Abstract

Ultrasonic wave has strong pointing to nature ,slowly energy consumption ,propagating distance farther ,so, in utilizing the scheme of distance finding that sensor technology and automatic control technology combine together ,ultrasonic wave finds range to use the most general one at present ,it applies to guard against theft , move backward the radar , water level measuring , building construction site and some industrial scenes extensively。

This subject has introduced principle and characteristic of the ultrasonic sensor in detail ,on the basis of analyzing principle that ultrasonic wave finds range ,the systematic thinking and questions needed to consider that have pointed out that designs and finds range ,provide low cost , the hardware circuit of high accuracy , ultrasonic range finder of miniature digital display and software design method taking STC89c52 as the core ,this circuit of system is reasonable in design, working stability, performance good measuring speeding soon , calculating simple , apt to accomplish

real-time control ,and can reach industry's practical demand in measuring the precision 。

Key Words: Ultrasonic wave; One-chip computer; Range finding; STC89c52

二、正文

1 、引言:

测量距离的方法有很多种,短距离的可以用米尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。因为超声波在标准空气中的传播速

度为331.45米/秒,由单片机负责计时,系统的测量精度理论上可以达到毫米级。

2、系统设计方案

2.1超声波测距的原理

超声波测距的原理一般采用渡越时间法TOF(time of flight),也可以称为回波探测法,如图所示。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在介质中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。根据传声介质的不同,可分为液介式、气介式和固介式三种。根据所用探头的工作方式,又可分为自发自收单探头方式和一发一收双探头方式。而倒车雷达一般是装在车尾,超声波在空气中传播,超声波在空气中(20℃)的传播速度为340m/s(实际速度为344m/s 这里取整数),根据计时器记录的时间就可以计算出发射点距障碍物的距离,公式S 340*t/2。

图1 超声波测距原理

由于超声波也是一种声波,其声速c与温度有关,表1列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。

表1 声速与温度的关系

2.2设计框图

本研究设计的超声波测距仪框图如图所示。

超声波测距仪方框图

2.3 US-100超声波收发模块

该超声波收发模块可自己产生40kHz的方波,并经放大电路驱动超声波发射探头发射超声波,发射出去的超声波经障碍物反射后由超声波接收探头接收。经接收电路的检波放大,积分整形,在ECHO引脚上产生方波脉冲,该脉冲宽度与被测距离成线性关系。具体过程如图3所示。

US-100超声波收发模块工作时序图

上图表明:只需要在Trig/TX管脚输入一个10us以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号,当检测到回波信号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结果通过Echo/RX管脚输出。

在此模式下,模块将距离值转化为340m/s时的时间值的2倍,通过Echo 端输出一个高电平,可根据此高电平的持续时间来计算距离值。即距离值为:(高电平时间*340m/s)/2

注:因为距离值已经经过温度校正,此时无需再根据环境温度对超声波声速进行校正,也就是不管温度多少,声速选择340m/s即可。

使用US-100超声波收发模块进行距离测量测量时,单片机只需要输出触发信号,并监视回响引脚,通过定时器计算回响信号宽度,并换算成距离即可。该模块简化了发送和接收的模拟电路,工作稳定可靠,其参数指标如表2所示。

表2 US-100模块电气参数

应注意测量周期必须在60毫秒以上,防止发射信号对回响信号的影响。

US-100超声波模块外形图

2.4 单片机电路

本设计选用单片机STC89C52,其管脚如图所示。

STC89C52单片机管脚图

该芯片为52内核8位单片机,兼容Intel等52内核单片机,支持ISP下载,适用于常用检测控制电路。由STC89C52组成的单片机系统原理图如图6所示。

图中TRIG引脚为单片机发送触发信号的引脚,ECHO引脚为US-100模块送回回响信号的引脚,接至单片机外部中断P3.2脚上,可以利用外部中断测量回响信号宽度。

当测量距离小于阈值20cm时,单片机通过管脚P3.6发出灯光报警信号,触发LED报警灯亮,同时通过管脚P3.7发出声音报警信号beep,该信号用以触发蜂鸣器鸣响报警。

图6 单片机系统及超声波模块接口原理图

2.5 蜂鸣器报警电路

图7所示为蜂鸣器报警电路。由于单片机管脚的灌电流比拉电流容量大,因此电路设计为低电平输出时蜂鸣器响,高电平关闭。当P3.7脚输出低电平时,PNP型三极管8550导通,有集电极电流通过,蜂鸣器鸣响。当P3.7脚输出高电平时,三极管截止,蜂鸣器关闭。

图7 蜂鸣器报警电路

2.6显示电路

显示部分采用SMC 1602液晶屏进行数据显示,其主要技术参数为:表3 液晶屏技术指标

接口信号说明如表4所示。

表4 液晶屏接口信号说明与单片机接口

电路如图8所示。

图8 LCD与单片机接口电路

2.7供电及程序下载电路

本设计采用USB接口供电,电源电压5V。同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。其电路原理如图9所示。

图9 供电及程序下载电路

3 软件编程

3.1软件流程图

本设计软件主程序流程图如图10所示, (a)为主程序流程图,(b)为定时中断子程序流程图,(c)为外部中断子程序流程图。

(a) 主程序流程图

(b) 外部中断流程图

图10 程序流程图

3.2主程序

(1) 头文件和一些宏定义

/**************************************************************** ***/ /*******************超声波测距仪

************************************/ /*******************(液晶屏显示)************************************/

/*******************晶振

11.0592MHz********************************/

#include

#include "1602.h"

typedef unsigned char U8; /* defined for unsigned 8-bits integer variable无符号8位整型*/ typedef signed char S8; /* defined for signed 8-bits integer variable有符号8位整型*/

typedef unsigned int U16; /* defined for unsigned 16-bits integer variable无符号16位整型*/

typedef signed int S16; /* defined for signed 16-bits integer variable有符号16位整型*/ typedef unsigned long U32; /* defined for unsigned 32-bits integer variable无符号32位整型*/ typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型*/ typedef float F32; /* single precision floating point variable (32bits)单精度浮点数32位长度*/ typedef double F64; /* double precision floating point variable (64bits)双精度浮点数64位*/ //定时器0的定时值为1mS,即11059/12=922个时钟脉冲,其补为65536-922=64614 #define SYSTEMCLK 921600 //11059200/12

#define T0CLK 921600 //11059200/12

#define T1CLK 921600 //11059200/12

#define T1PERIOD 1000000/921600 //T1周期时间,以微秒为单位,约为1.085uS #define TIMER0H 0xFC //64614/256=252

#define TIMER0L 0x66 //54447%256=102

(2) 管脚、常量、变量定义和函数声明

//管脚定义

sbit Trig = P1^3;

sbit Echo = P3^2; //回波必须接在外部中断引脚上

sbit LedAlarm = P3^6; //报警灯,低电平亮

sbit Beep = P3^7; //报警蜂鸣器

//定义标志

volatile bit FlagSucceed = 0; //测量成功标志

volatile bit FlagDisplay = 0; //显示标志

//定义全局变量

U16 DisplayCount=0;

U16 time=0;

U32 distance=0;

//函数声明

void delay_20us();

void Start_Module();

void INT0_Init(void);

void Data_Init();

void Timer0_Init();

void Timer1_Init();

(3) 各子程序

//20us延时程序,不一定很准

void delay_20us()

{

U16 bt ;

for(bt=0;bt<100;bt++); //8M晶振是100 }

//数据初始化

void Data_Init()

{

}

//外部中断初始化函数

void INT0_Init(void)

{

IT0 = 0; //负边沿触发中断

EX0=0; //关闭外部中断

}

//外部中断处理用做判断回波电平

void INT0_ISR (void) interrupt 0

{

time =TH1*256+TL1; //取出定时器的值FlagSucceed = 1; //置成功测量的标志EX0=0; //关闭外部中断

}

//定时器0初始化,16位定时模式,初始化为1ms中断一次。 void Timer0_Init()

{

TMOD = 0x11; //定时器0和1工作在16位方式

TH0 = TIMER0H; TL0 = TIMER0L; TR0 = 1; //启动定时器 ET0 = 1; //允许定时器0中断 Trig = 0; distance = 0; DisplayCount = 0;

}

//定时器0中断,用做显示计时

void Timer0_ISR(void) interrupt 1 // 定时器0中断是1号 {

TH0 = TIMER0H; TL0 = TIMER0L; DisplayCount ++; if (DisplayCount >= 1000) //1秒钟显示一次 {

FlagDisplay = 1;

DisplayCount = 0;

}

}

//定时器1初始化,16位计数模式,时钟为11059200/12=921600Hz

//60ms计数为55296,即0xD800

void Timer1_Init()

{

TMOD = 0x11; //定时器0和1工作在16位方式

} TH1 =0; TL1= 0; ET1 = 1;

//启动模块,Trig管脚20us正脉冲

void Start_Module()

{

Trig=1;

Trig=0;

}

/**************************************************************** **** * 名称 : Main()

* 功能 : 主函数

***************************************************************** ******/ void main()

{

U16 i, j;

EA = 0;

INT0_Init();

Timer0_Init(); //定时器0初始化

Timer1_Init(); //定时器1初始化

Data_Init();

EA = 1; L1602_init(); L1602_string(1,1,"Welcome to my ");

L1602_string(2,1,"distance meter! "); //延时 for (i=0;i<1000;i++) //启动模块 //启动一次模块 delay_20us();

for (j=0;j<1000;j++) {;} while(1) { EA= 0; //以下为一次检测过程:先发出Trig电平,打开外部中断,清零T1, //最后在外部中断下降沿触发时取出T1当前值,计算出Trig脉冲宽度。 Start_Module();

while(Echo==0); //等待Echo回波引脚变高电平

FlagSucceed = 0; EX0=1; TH1= 0; TL1= 0;

TF1= 0;

TR1=1; //启动定时器1开始计数

EA = 1; while (TH1<80) ; //盲区 TR1 = 0 ; //关闭定时器1 EX0 = 0; //关闭外部中断

if(FlagSucceed==1) //一次测试成功,则计算距离,单位为厘米 {

distance = time * 1.085 ; //计算得到脉冲时间(以微秒为单位) //将微秒时间转变成厘米距离的算法: Y米=(X秒*344)/2 // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58 distance /=58;

//如果距离小于20cm,则声光报警

if ((FlagSucceed == 1) && (distance < 20)) { LedAlarm = 0; Beep = 0; } else { LedAlarm = 1; Beep = 1;

}

}

if (FlagDisplay == 1) //1秒显示时间到 { if(FlagSucceed==0) {

//LCD提示无回波

L1602_string(1,1,"OutOfRange(0-4m)");

L1602_string(2,1," ------ ");

}

else

{

//LCD显示数据

L1602_string(1,1,"Distance Result:");

L1602_string(2,1," cm ");

} } L1602_int(2, 5, distance ); } FlagDisplay = 0; }

3.3显示程序

/**************************************************************** **** * 文件名:液晶1602显示.c

* 描述 : 该程序实现了对液晶1602的控制。

***************************************************************** ******/ #include "1602.h"

#include "math.h"

/**************************************************************** **** * 名称 : delay()

* 功能 : 延时,延时时间大概为140US。

* 输入 : 无

* 输出 : 无

***************************************************************** ******/

void delay()

{

; int i,j; for(i=0; i<=10; i++) for(j=0; j<=2; j++)

}

/**************************************************************** **** * 名称 : Convert(uchar In_Date)

* 功能 : 因为电路设计时,P0.0--P0.7接法刚好与资料中的相反,所以设计该函数。 * 输入 : 1602资料上的值

* 输出 : 送到1602的值

****************************************************************** *****/ uchar Convert(uchar In_Date)

{

/*

uchar i, Out_Date = 0, temp = 0;

for(i=0; i<8; i++)

{

temp = (In_Date >> i) & 0x01;

Out_Date |= (temp << (7 - i));

}

return Out_Date;

*/

return In_Date;

}

/***************************************************************** *** * 名称 : enable(uchar del)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

****************************************************************** *****/

void enable(uchar del)

{

}

/***************************************************************** *** * 名称 : write(uchar del)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

****************************************************************** *****/

void write(uchar del)

{

P0 = Convert(del); P0 = Convert(del); RS = 0; RW = 0; E = 0; delay(); E = 1; delay();

}

RS = 1; RW = 0; E = 0; delay(); E = 1; delay();

/***************************************************************** *** * 名称 : L1602_init() * 功能 : 1602初始化 * 输入 : 无* 输出 : 无

****************************************************************** *****/ void L1602_init(void) {

enable(0x01); enable(0x38); enable(0x0c); enable(0x06);

enable(0xd0);

}

/***************************************************************** *** * 名称 : L1602_char(uchar hang,uchar lie,char sign)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下 L1602_char(1,5,'b')

* 输入 : 行,列,需要输入1602的数据 * 输出 : 无

****************************************************************** *****/ void L1602_char(uchar hang,uchar lie,char sign) { } /***************************************************************** *** * 名称 : L1602_string(uchar hang,uchar lie,uchar *p) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

uchar a;

if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign);

L1602_string(1,5,"ab cd ef;") * 输入 : 行,列,需要输入1602的数据* 输出 : 无

****************************************************************** *****/ void L1602_string(uchar hang,uchar lie,uchar *p) { uchar a;

if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); while(1) {

if(*p == '\0') break; write(*p); p++;

} }

//显示整型的温湿度数据用,共占用4位,其中一位符号位 void

L1602_int(uchar hang, uchar lie, int num) {

uint temp;

uint gewei,shiwei,baiwei,sign; if (num >= 0) {

sign = 0; } else {

sign = 1; }

temp = abs(num); baiwei = temp / 100; temp = temp - baiwei*100; shiwei = temp / 10; gewei = temp - shiwei*10; num = abs(num); if (num>=100) {

if (sign == 1) //负数

{

L1602_char(hang, lie, '-'); }

L1602_char(hang, lie+1, baiwei+48);

L1602_char(hang, lie+2, shiwei+48); L1602_char(hang, lie+3,

gewei+48); }

else if (num>=10)

{

if (sign == 1)

{

L1602_char(hang, lie+1, '-'); }

L1602_char(hang, lie+2, shiwei+48); L1602_char(hang, lie+3, gewei+48); } else

{

if (sign == 1)

{

L1602_char(hang, lie+2, '-'); }

L1602_char(hang, lie+3, gewei+48); } }

4 下载调试

当程序在uVision环境下编写完成,并编译生成.hex文件后,就可以下载并进行调试了。若无法写入程序,要检查下载器是否安装正确,若无误就检查电路是否有漏焊虚焊元件是否正常等问题

5 实物图

6 元件选择

超声波测距仪(报警)元器件清单

元件名 C1 C2 C3 C4 C5 R1 R2 R3 R4 R5 R6 L1 L2 K1 D1 Y1 U1 U2

液晶屏 J1 J2 B1 V1

单片机插座

LCD转接插座

USB下载线

连接导线

电路板

标称值 10uF/16V 20pF 20pF 0.1uF 22uF/16V 1k 10k 1k 10k 1k 1k 绿色红色

1N4148 11.0572M STC89C52 US-100 LCD1602 USB插座显示接口蜂鸣器

三极管说明

电解电容

电解电容

发光管发光管电源按钮

晶振单片机

超声波模块

4脚插针 16脚插座

8550

16脚插针

三、总结

超声波测距是工业上用的比较多的一种技术,廉价,精度高,适合于人员无法实地测量的场合,缺点是对环境要求非常高,非常容易受到干扰。

在调试过程中需要非常大的耐心,因为有些很细小的问题是很难发现的,比如调试时就出现了一个引脚虚焊和最小系统接错的情况,用万用表找了好久才找到问题。

四、参考文献

[1] 邹应全 51单片机原理与实验教程. 西安电子科技大学出版社

[2] 郭天祥 51单片机C语言教程.北京:电子工业出版社

[3] 韩久强现代遥控遥测技术与系统. 北京:清华大学出版社

[4] 谭浩强 C程序设计. 北京:清华大学出版社

[5] 求是科技单片机典型模块设计实例导航. 北京:人民邮电出版社

[6] 求是科技 8051系列单片机C程序设计. 北京:人民邮电出版社

[7] 张毅刚新编MCS-51单片机应用设计. 哈尔滨:哈尔滨工业大学出版社

[8] 宏晶科技 STC Microcontroller Handbook

51单片机超声波测距程序

//晶振:11.0592 //TRIG:P1.2 ECH0:P1.1 //波特率:9600 #include #include #include #define uchar unsigned char #define uint unsigned int sbit RX=P0^2; sbit TX=P0^3; unsigned int time=0; unsigned int timer=0; float S=0; bit flag =0; void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.87)/100; //算出来是CM if(flag==1) //超出测量 { flag=0; printf("-----\n"); } printf("S=%f\n",S); } void delayms(unsigned int ms) { unsigned char i=100,j; for(;ms;ms--) { while(--i)

{ j=10; while(--j); } } } void zd0() interrupt 1 //T0中断用来计数器溢出,超出测距范围{ flag=1; //中断溢出标志 } void StartModule() //T1中断用来扫描数码管和计800ms启动模块{ TX=1; //800MS启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } void main(void) { TMOD=0x21; //设T0为方式1,GATE=1; SCON=0x50; TH1=0xFD; TL1=0xFD; TH0=0; TL0=0;

基于51单片机的超声波测距毕业设计(论文)

一设计题目基于51单片机的超声波测距 二设计者 姓名班级学号组号 三、设计思路及框图、原理图 任务:以单片机为核心,设计并制作一超声波测距系统基本要求: 利用时间差测距,不考虑温度变化 用数码管显示测试结果 工作频率:450kHz 测距范围:0.5~10米 测试精度: 10% 发挥部分尽量增大测控范围,提高测试精度 1.系统的硬件结构设计 1.1. 超声波发生电路 发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的450kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R1O、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。 1.2超声波检测接收电路 采用集成电路CX20106A为超声波接收芯片。实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电

容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。 1.3 显示电路 显示电路主要由74ls273芯片驱动,用PNPC8550三级管进行位选,七段共阳极数码管显示。 2.系统的软件结构设计 设计思路 主程序中包括温度补偿子程序,计算子程序,显示子程序。采用汇编编程。首先进行系统初始化。其次利用循环产生4个40KHZ的方波,由输出口进行输出,并开始计时。第三等待中断,若超声波被接收探头捕捉到,那么通过中断可测得

超声波测距程序(详细C语言数码管显示)

超声波测距程序(详细C语言数码管显示) #include //头文件 #include// _nop_() 函数延时1US用 #include #include #define uchar unsigned char #define uint unsigned int #define nop _nop_() sbit csb=P1^0;//超声波发送端口为P1.0 sbit bai=P2^2;//数码管百位 sbit shi=P2^1;//数码管十位 sbit ge=P2^0;//数码管个位 uchar flag;//超声波接收标志 float juli1;//距离变量,用来数码管显示用 int juli; uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0到9的代码 int xianshi[3]; void delayshow(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void ledshow(void) { xianshi[0]=juli/100; xianshi[1]=((juli%100)/10); xianshi[2]=juli%10; bai=0; P0=table[xianshi[0]]; delayshow(2); bai=1; delayshow(2); shi=0; P0=table[xianshi[1]]; delayshow(2); shi=1;

基于单片机的超声波测距

测控技术与仪器专业课程设计报告 班级姓名学号起始时间 课程设计题目: 测控技术与仪器专业课程设计报告 摘 要:本文介绍了一种基于单片机的超声波测距仪的设计。详细给出了超声波测距仪的工作原理、超 声波发射电路和接受电路、测温电路、显示电路等硬件设计,以及相应的软件设计。设计中采用升压电路,提高了超声换能器的输出能力;采用红外接收芯片,减少了电路间相互干扰,提高了灵敏度;同时,考虑了环境温度对超声波测距的影响,采用温度传感器,提高了测量精度。该设计试验运行良好,系统结构简单、操作方便、价格低廉,具有广阔的推广前景。 关键字:超声波测距仪;超声波换能器;单片机;温度传感器 1 对题目的认识和理解 目前,常用的测距方法主要有毫米波测距、激光测距和超声波测距三种。超声波测距较前两种测距方法而言,具有指向性强、能耗缓慢、受环境因素影响较小等特点,广泛应用于如井深、液位、管道长度、倒车等短距离测量。 超声波测距适用于高精度中长距离测量。因为超声波在标准空气中传播速度为331.45m/s ,由单片机负责计时,单片机使用12.0M 晶振,所以此系统测量精度理论上可以达到毫米级。 目前比较普遍的测距的原理是:通过发射具有特征频率的超声波对被摄目标的探测,通过发射出特征频率的超声波和反射回接受到特征频率的超声波所用的时间,换算出距离,如超声波液位物位传感器,超声波探头,适合需要非接触测量场合,超声波测厚,超声波汽车测距告警装置等。 本设计选用频率为40kHZ 左右的超声波,它在空气中传播的效率最佳。由于超声波测距主要受温度影响较大,所以本设计增加了温度补偿电路。本设计具有电路简单、操作简便工作稳定可靠、测距精确和能耗小、成本低等特点,可实现无接触式测量,应用广泛。 1.1 超声波测距原理 超声波测距是通过超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即反射回来,超声波接收器收到回波就立即停止计时。根据计时器测出发射和接收回波的时间差t ,可以计算出发射点距障碍物的距离s :2 = t c s ,其中t c 为超声波在空气中的传 播速度,它随温度的变化而变化,其变化关系如下:331.50.6=+t c T 式中T 为环境摄氏温度,可由温 度传感器获取。

超声波测距仪单片机课设实验资料报告材料

微机原理与单片机系统课程设计 业:专轨道交通信号与控制 级:班1305 交控

姓名:贺云鹏 学号: 201310104 指导教师:建国 交通大学自动化与电气工程学院 30 日 12 2015 年月 超声波测距仪设计设计说明1 设计目的1.1 测量声波在发超声波测距的原理是利用超声波在空气中的传播速度为已知,根据发射和接收的时间差计算出发射点到障碍射后遇到障碍物反射回来的时间,物的实际距离。超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量。 超声波在气体、液体及固体中以不同速度传播,定向性好、能量集中、传输过程中衰减较小、反射能力较强。超声波能以一定速度定向传播、遇障碍物后形成反射,利用这一特性,通过测定超声波往返所用时间就可计算出实际距离,从而实现无接触测量物体距离。超声波测距迅速、方便,且不受光线等因素影响,广泛应用于水文液位测量、建筑施工工地的测量、现场的位置监控、振动仪车辆倒车障碍物的检测、移动机器入探测定位等领域。 1.2 设计方法 本课题包括数据测距模块、显示模块。测距模块包括一个HC-SR04超声波测距模块和一片AT89C51单片机,该设计选用HC-SR04超声波测距模块,通过单片机对超声波进行计时并根据超AT89C51发射和接受超声波,使用HC-SR04.声波在空气中速度为340米每秒的特性计算出距离。显示模块包括一个4位共阳极LED数码管和AT89C51单片机,由AT89C51单片机控制数码管动态显示距离。 1.3 设计要求 采用单片机为核心部件,选用超声波模组,实现对距离的测量,测量距离能够通过显示输出(LED,LCD)。 2 设计方案及原理 2.1超声波测距模块设计

单片机应用_超声波测距器

单片机课程设计 一、需求分析: 超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量围在1m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。 本文旨在设计一种能对中近距离障碍物进行实时测量的测距装置,它能对障碍物进行适时、适量的测量,起到智能操作,实时监控的作用。 关键词单片机AT82S51 超声波传感器测量距离 二、硬件设计方案 设计思路 超声波传感器及其测距原理 超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超生波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。

超声波测距的原理一般采用渡越时间法TOF(time of flight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离 测量距离的方法有很多种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。因为超声波在标准空气中的传播速度为340米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。 由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波可以用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求。 超声波发生器可以分为两类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。本课题属于近距离测量,可以采用常用的压电式超声波换能器来实现。 根据设计要求并综合各方面因素,可以采用AT89S51单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距器的系统框图如下图所示: 超声波测距器系统设计框图 主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。采用AT89S51来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。

基于单片机的超声波测距系统实验报告

基于单片机的超声波测距系统实验报告

一、实验目的 1.了解超声波测距原理; 2.根据超声波测距原理,设计超声波测距器的硬件结构电路; 3.对设计的电路进行分析能够产生超声波,实现超声波的发送与接收,从而实现利用 超声波方法测量物体间的距离; 4.以数字的形式显示所测量的距离; 5.用蜂鸣器和发光二极管实现报警功能。 二、实验容 1.认真研究有关理论知识并大量查阅相关资料,确定系统的总体设计方案,设计出系 统框图; 2.决定各项参数所需要的硬件设施,完成电路的理论分析和电路模型构造。 3.对各单元模块进行调试与验证; 4.对单元模块进行整合,整体调试; 5.完成原理图设计和硬件制作; 6.编写程序和整体调试电路; 7.写出实验报告并交于老师验收。 三、实验原理 超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距S=Ct/2,式中的C为超声波波速。由于超声波也是一种声波,其声速C与温度有关。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。这就是超声波测距仪的机理,单片机(AT89C51)发出短暂的40kHz信号,经放大后通过超声波换能器输出;反射后的超声波经超声波换能器作为系统的输入,锁相环对此信号锁定,产生锁定信号启动单片机中断程序,得出时间t,再由系统软件对其进行计算、判别后,相应的计算结果被送至LED显示电路进行显示。 (一)超声波模块原理: 超声波模块采用现成的HC-SR04超声波模块,该模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm。模块包括超声波发射器、接收器与控制电路。基本工作原理:采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号;模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。实物如下图1。其中VCC 供5V 电源,GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四支线。

超声波测距仪的设计说明

题目:超声波测距仪的设计 超声波测距仪的设计 一、设计目的: 以51单片机为主控制器,利用超声波模块HC-SR04,设计出一套可在数码管上实时显示障碍物距离的超声波测距仪。 通过该设计的制作,更为深入的了解51的工作原理,特别是51的中断系统及定时器/计数器的应用;掌握数码管动态扫描显示的方法和超声波传感器测距的原理及方法,学会搭建51的最小系统及一些简单外围电路(LED显示电路)。从中提高电路的实际设计、焊接、检错、排错能力,并学会仿真及软件调试的基本方法。 二、设计要求: 设计一个超声波测距仪。要求: 1.能在数码管上实时显示障碍物的实际距离; 2.所测距离大于2cm小于300cm,精度2mm。 三、设计器材: STC89C52RC单片机 HC-SR04超声波模块 SM410561D3B四位的共阳数码管 9014三极管(4) 按键(1) 电容(30PF2,10UF1) 排阻(10K),万用板,电烙铁,万用表,5V直流稳压电源,镊子,钳子,

导线及焊锡若干,电阻(200欧5)。 四、设计原理及设计方案: (一)超声波测距原理 超声测距仪是根据超声波遇到障碍物反射回来的特性进行测量的。超声波发射器向某一方向发射超声波,在发射同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即中断停止计时。通过不断检测产生波发射后遇到障碍物所反射的回波,从而测出发射超声波和接收到回波的时间差T,然后求出距离L。基本的测距公式为:L=(△t/2)*C 式中 L——要测的距离 T——发射波和反射波之间的时间间隔 C——超声波在空气中的声速,常温下取为344m/s 声速确定后,只要测出超声波往返的时间,即可求得L。 根据本次设计所要求的测量距离的围及测量精度,我们选用的是HC-SR04超声波测距模块。(如下图所示)。此模块已将发射电路和接收电路集成好了,硬件上不必再自行设计繁复的发射及接收电路,软件上也无需再通过定时器产生40Khz的方波引起压电陶瓷共振从而产生超声波。在使用时,只要在控制端‘Trig’发一个大于15us宽度的高电平,就可以在接收端‘Echo’等待高电平输出。单片机一旦检测到有输出就打开定时器开始计时。 当此口变为低电平时就停止计时并读出定时器的值,此值就为此次测距的时间,再根据传播速度方可算出障碍物的距离。 (二)超声波测距模块HC-SR04简要介绍 HC-SR04超声波测距模块的主要技术参数使用方法如下所述: 1. 主要技术参数: ①使用电压:DC5V ②静态电流:小于2mA ③电平输出:高5V

基于51单片机的超声波测距系统

基于51单片机的超声波测距系统 贾源 完成日期:2011年2月22日

目录 一、设计任务和性能指标 (3) 1.1设计任务 (3) 1.2性能指标 (3) 二、超声波测距原理概述 (4) 2.1超声波传感器 (5) 2.1.1超声波发生器 (5) 2.1.2压电式超声波发生器原理 (5) 2.1.3单片机超声波测距系统构成 (5) 三、设计方案 (6) 3.1AT89C2051单片机 (7) 3.2超声波测距系统构成 (8) 3.2.1超声波测距单片机系统 (9) 图3-1:超声波测距单片机系统 (9) 3.2.2超声波发射、接收电路 (9) 图3-1:超声波测距发送接收单元 (10) 3.2.3显示电路 (10) 四.系统软件设计 (11) 4.1主程序设计 (11) 4.2超声波测距子程序 (12) 4.3超声波测距程序流程图 (13) 4.4超声波测距程子序流程图 (14) 五.调试及性能分析 (14) 5.1调试步骤 (14) 5.2性能分析 (15) 六.心得体会 (15) 参考文献 (16) 附录一超声波测系统原理图 (18) 附录二超声波测系统原理图安装图 (19) 附录三超声波测系统原理图PCB图 (20) 附录四超声波测系统原理图C语言原程序 (21) 参考文献 (26)

一、设计任务和性能指标 1.1设计任务 利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个超声波测距仪器,用LED数码管把测距仪距测出的距离显示出来。 要求用Protel 画出系统的电路原理图,印刷电路板,绘出程序流程图,并给出程序清单。 1.2性能指标 距离显示:用三位LED数码管进行显示(单位是CM)。 测距范围:25CM到 250CM之间。误差:1%。

超声波测距C语言源程序代码

超声波测距C语言源程 序代码 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

/*{HZ即单位s的倒数}本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以内部的时钟频率为(12M H Z)/12=1M H 即1000000HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一)用时, 即1us(微秒).*/ /*************************************************************************** ********/ #include<> #define UC unsigned char #define UI unsigned int void delay(UI); sbit BX = P3^0;void TimeConfiguration(); a = 0; b = 0; c = 0; P2 =~ 0x00; goto loop; } time = TL0 + TH0*256; juli = ( int )( (time*/2 ); BAI = ( (juli%1000)/100 ); SHI = ( (juli%100)/10 ); GE = ( juli%10 ); /******************************************两种模式的距离显示 ********************************************/ if(juli > MAX) { Hong = 0; Lv = 1; while( t1-- ) { a = 0; b = 1; c = 1; P2 =~ CharacterCode[BAI]; delay(400); a = 1; b = 0; c = 1; P2 =~ CharacterCode[SHI]; delay(400); a = 1; b = 1; c = 0; P2 =~ CharacterCode[GE]; delay(390);

基于单片机的超声波测距仪设计

基于单片机的超声波测距仪设计

基于单片机的超声波测距仪设计 1总体设计方案介绍 1.1超声波测距原理 发射器发出的超声波以速度υ在空气中传播,在到达被测物体时被反射返回,由接收器接收,其往返时间为t,由s=vt/2即可算出被测物体的距离。由于超声波也是一种声波,其声速v 与温度有关,下表列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。 表1-1 超声波波速与温度的关系表 表1-1 1.2超声波测距仪原理框图如下图 单片机发出40kHZ的信号,经放大后通过超声波发射器输出;超声波接收器将接收到的超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t,再由软件进行判别、计算,得出距离数并送LED

显示。 图1-1 超声波测距仪原理框图 2 系统的硬件结构设计 硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。单片机采用AT89C51或其兼容系列。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P1.0端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管8550驱动。 2.1 51系列单片机的功能特点及测距原理 2.1.1 51系列单片机的功能特点 5l系列单片机中典型芯片(AT89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256 B的RAM,2个16b的定时/计数器TO和T1,4个8 b的工/O端I:IP0,

用51单片机实现HC-SR04超声波测距程序

#include //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long sbit Trig = P1^0; //产生脉冲引脚 sbit Echo = P3^2; //回波引脚 sbit test = P1^1; //测试用引脚 uchar code SEG7[10]={~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90};//数码管0-9 uint distance[4]; //测距接收缓冲区 uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器 bit succeed_flag; //测量成功标志 //********函数声明 void conversion(uint temp_data); void delay_20us(); void main(void) // 主程序 { uint distance_data,a,b; uchar CONT_1; i=0; flag=0; test =0; Trig=0; //首先拉低脉冲输入引脚 TMOD=0x11; //定时器0,定时器1,16位工作方式 TR0=1; //启动定时器0 IT0=0; //由高电平变低电平,触发外部中断 ET0=1; //打开定时器0中断 EX0=0; //关闭外部中断 EA=1; //打开总中断0 while(1) //程序循环 { EA=0; Trig=1; delay_20us(); Trig=0; //产生一个20us的脉冲,在Trig引脚 while(Echo==0); //等待Echo回波引脚变高电平 succeed_flag=0; //清测量成功标志 EX0=1; //打开外部中断 TH1=0; //定时器1清零 TL1=0; //定时器1清零 TF1=0; //

基于51单片机超声波测距

一设计要求 (1)设计一个以单片机为核心的超声波测距仪,可以应用于汽车倒车、工业现场的位置监控; (2)测量范围在0.50~4.00m,测量精度1cm; (3)测量时与被测物无直接接触,能够清晰稳定地显示测量结果。 二超声波测距系统电路总体设计方案 本系统硬件部分由AT89S52控制器、超声波发射电路及接收电路、温度测量电路、声音报警电路和LCD显示电路组成。汽车行进时LCD显示环境温度,当倒车时,发射和接收电路工作,经过AT89S52数据处理将距离也显示到LCD 上,如果距离小于设定值时,报警电路会鸣叫,提醒司机注意车距。超声波测距器的系统框图如下图所示: 图5 系统设计总框图 由单片机AT89S52编程产生10us以上的高电平,由指定引脚输出,就可以在指定接收口等待高电平输出。一旦有高电平输出,即在模块中经过放大电路,驱动超声波发射探头发射超声波。发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的处理,指定接收口即变为低电平,读取单片机中定时器的值。单片机利用声波的传播速度和发射脉冲到接收反射脉冲的

时间间隔计算出障碍物的距离,并由单片机控制显示出来。 由时序图可以看出,超声波测距模块的发射端在T0时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。计算时间差,即可得到超声波在媒介中传播的时间t,由此便可计算出距离。 图6 时序图 三超声波发射和接收电路的设计 分立元件构成的发射和接收电路容易受到外界的干扰,体积和功耗也比较大。而集成电路构成的发射和接收电路具有调试简单,可靠性好,抗干扰能力强,体积小,功耗低的优点,所以优先采用集成电路来设计收发电路。 3.1 超声波发射电路 超声波发射电路包括超声波产生电路和超声波发射控制电路两部分,可采用软件发生法和硬件方法产生超声波。在超声波的发射电路的设计中,我们采用电路结构简单的集成电路构成发射电路:

带温度补偿的超声波测距程序

/**程序:基于HC-SR04得超声波测距系统 *单片机型号:STC90C51612MHz *说明:开始连续进行7次超声波测距,每次测距间隔80ms, *完成后对7次结果排序并将最大得2个数值与最小得2个数值去除,对剩余得 *3个数值取平均值。完成后指示灯灭,输出结果到LCD1602上。测量超出范围则发出报警声、 *使用两个IO端口控制HC-SR04触发信号输入与回响信号输出, *以及一个T0定时器用于时间计数。 * 使用DS18B20测量环境温度,声速公式:V=334。1m/s+Temperature*0、61, *单片机晶振为12Mhz(11、953M),计数时为T=1us *计算公式:S=(334。1m/s+Temperature*0。61)*N*T/2,N为计数值=TH0*256+TL0*/ /*包含头文件*/ #include 〈reg51。h> #include 〈intrins。h> #define Delay4us(){_nop_();_nop_();_nop_();_nop_();} /*宏定义*/ #define uchar unsignedchar?//无符号8位 #define uint?unsigned int//无符号16位 #define ulongunsigned long ?//无符号32位 /*全局变量定义*/ sbit BEEP=P1^5;??//报警测量超出范围 sbit Trig=P3^4; //HC-SR04触发信号输入 sbitEcho=P3^2;?//HC—SR04回响信号输出 float xdataDistanceValue=0。0;?//测量得距离值 float xdata SPEEDSOUND; ??//声速 float xdataXTALTIME; ?//单片机计数周期 uchar xdata stringBuf[6];??//数值转字符串缓冲 //LCD1602提示信息 uchar codePrompts[][16]= { ?{"Measure Distance"}, //测量距离 {"-Out of Range -"}, //超出测量范围 ?{"MAX range400cm "}, //测距最大值400cm {”MIN range 2cm"},?//测距最小值2cm {”"},?//清屏 }; uchar xdata DistanceText[]="Range: ";//测量结果字符串 uchar xdata TemperatureText[]="Temperature:";//测量温度值 /*外部函数声明*/ extern voidLCD_Initialize(); //LCD初始化 extern void LCD_Display_String(uchar*, uchar); externvoid ReadTemperatureFromDS18B20(); extern int xdataCurTempInteger; void DelayMS(uint ms);?//毫秒延时函数 voidDelay20us(); //20微秒延时函数 voidHCSR04_Initialize();//HCSR04初始化 float MeasuringDistance();?//测量距离

基于单片机的超声波测距报警系统设计

综合性课程设计报告基于proteus仿真软件的超声波测距报警控制器设计 院系:计算机与通信工程学院 专业:电子信息工程 学号: 姓名: 指导教师: 设计时间:2012/6/27 综合课程设计任务书

专业:电子信息工程班级:4091603: 设计题目:基于proteus仿真软件的超声波测距报警控制器设计 一、设计实验条件 keil C和proteus仿真软件 二、设计任务 1)总体功能设计 2)硬件电路设计 3)软件设计 4)工作总结 三、设计说明书的容 1.设计题目与设计任务(设计任务书) 2.前言(绪论)(设计的目的、意义等) 3.主体设计部分(各部分设计容、总结分析、结论等) 4.结束语 5.参考文献 (答辩时间18周星期日晚7:30,地点:综合楼1313室) 四、设计时间与设计时间安排 1、设计时间:2周 2、设计时间安排: 熟悉实验设备、实验、收集资料:2 天 设计计算、绘制技术图纸:5 天 编写课程设计说明书:2 天 答辩:1 天 目录

一、设计题目 (2) 二、设计任务及要求 (3) 三、设计容 (3) 1.绪论 (3) 2.总体方案 (4) 2.1 总体设计方案 (4) 2.2超声波测距框图 (4) 3.系统硬件设计 (5) 3.1 硬件设计方案 (5) 3.2 各主要模块的硬件设计 (6) 4.系统软件设计 (10) 4.1 程序设计 (10) 4.2 程序流程图 (10) 四、结束语 (13) 五、参考文献 (13) 附录A 系统仿真图 (14) 附录B程序代码 (15) 一、设计题目 基于proteus仿真软件的超声波测距报警控制器设计

基于单片机的超声波测距系统的研究与设计

基于单片机的超声波测距系统的研究与设计 发表时间:2010-05-26T14:50:36.437Z 来源:《赤子》2010年第2期供稿作者:贾岩孙彩英 [导读] 随着汽车的日益普及,停车场越来越拥堵,车辆常常需要在停车场穿行,掉头或倒车 贾岩孙彩英(哈尔滨学院,黑龙江哈尔滨 150000) 摘要:简析超声波测踞原理,探讨基于单片机的超声波测距系统的研究与设计。 关键词:单片机;超声波;测距 随着汽车的日益普及,停车场越来越拥堵,车辆常常需要在停车场穿行,掉头或倒车。由于这些低速行驶的车辆与其他车辆非常的接近,司机的视野也颇受限制,碰撞与拖挂的事故经常发生,在夜间时则更加显著。为了确保汽车的安全,现介绍一种超声波测距离的报警装置,可有效的避免此类事故的发生。 1 超声波测距原理 超声波传感器分机械方式和电气方式两类,它实际上是一种换能器,在发射端它把电能或机械能转换成声能,接收端则反之。本次设计超声波传感器采用电气方式中的压电式超声波换能器,它是利用压电晶体的谐振来工作的。它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。在超声波电路中,发射端输出一系列脉冲方波,脉冲宽度越大,输出的个数越多,能量越大,所能测的距离也越远。超声波发射换能器与接收换能器其结构上稍有不同,使用时应分清器件上的标志。 超声波测距的方法有多种:如往返时间检测法、相位检测法、声波幅值检测法。本设计采用往返时间检测法测距。其原理是超声波传感器发射一定频率的超声波,借助空气媒质传播,到达测量目标或障碍物后反射回来,经反射后由超声波接收器接收脉冲,其所经历的时间即往返时间,往返时间与超声波传播的路程的远近有关。测试传输时间可以得出距离。 假定s为被测物体到测距仪之间的距离,测得的时间为t/s,超声波传播速度为v/m·s-1表示,则有关系式(1) s=vt/2(1) 在精度要求较高的情况下,需要考虑温度对超声波传播速度的影响,按式(2)对超声波传播速度加以修正,以减小误差。 v=331.4+0.607T(2) 式中,T为实际温度单位为℃,v为超声波在介质中的传播速度单位为m/s。 2 系统结构 本系统由超声波发射、回波信号接收、温度测量、显示和报警、电源等硬件电路部分以及相应的软件部分构成。 3 超声波发射电路 在本系统中采用的超声传感器是一种开发型的,固有频率为40Khz。超声波发射电路如。 该电路采用由双非门组成的三点RC振荡电路,频率为40Khz,与非门A是超声波发射控制门,振荡器的振荡信号经4049放大后可直接推动超声波发射探头。二极管D1,D2起限制电压的作用,电容C1用于隔离直流。 4 超声波接收电路 超声波接收电路由以MC3403为核心的三级滤波放大电路和二极管的倍压稳流电路等组成。处理好的回波信号被送到ARM的A/D转换模块进行A/D采样,从而触发得到返回的时间。德州仪器公司的MC3403的具体引脚配置。 5 声光报警电路 声光报警电路AP8821来完成。AP8821是API型21秒一次性编程语音芯片。它具有高质量的录音功能,采用ADPCM制,声音信息存储在512K的EPROM中,6K取样频率能存储21秒的声音数据。AP8821避免采用复杂的电路,但是能录制出不同的声音。它的声音可以根据需要分14段录制,分段组合可达到长时间录音,效果并不是简单的音符曲调。而是极其逼真的话语或模拟声音。AP8821有两个PWM引脚,VOUT1与VOUT2直接驱动喇叭或蜂鸣器,电流输出引脚VOUT。通过一个NPN晶体管来驱动喇叭或蜂鸣器,不需要复杂的滤波和放大电路。具有自动平滑功能,在放音结束时消除噪音。 6 LCD显示部分 本设计显示部分采用字符型TC1602液晶显示所测距离值。TC1602显示的容量为2行16个字。液晶显示屏有微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,与数码管相比,显得更专业、美观。 7 超声波汽车倒车防撞系统的软件设计 超声波传感器安装在汽车的尾部,其接收和发射传感器距离较近,之间容易有较强的干扰信号。为防止误测现象,在软件上采用延迟接收技术,一次提高系统的抗干扰能力。 系统软件设计采用模块化设计,主要包括主程序设计、T1中断服务子程序、INT0外部中断服务子程序、测温子程序、距离计算子程序、显示子程序、延时子程序和报警子程序设计等。 系统软件编制时应考虑相关硬件的连线,同时还要进行存储空间、寄存器以及定时器和外部中断引脚的分配和使用。定时器T1,T0均工作在工作方式1,为16位计数,T1定时器被用来开启一次测距过程以它的溢出为标志开始一个发射测量循环,T0定时器是用来计算脉冲往返时间,它们的初值均设为0。 系统初始化后就启动定时器T1从0开始计数,此时主程序进入等待,当到达65 ms时T1溢出进入T1中断服务子程序;在T1中断服务子程序中将启动一次新的超声波发射,同时开启定时器T0计时,为了避免直射波的绕射,需要延迟1 ms后再开INT0中断允许;INT0中断允许打开后,将提出中断请求进入INT0中断服务子程序,在INT0中断服务子程序中将停止定时器T0计时,读取定时器T0时间值到相应的存储区,同时设置接收成功标志;主程序一旦检测到接收成功标志,将调用测温子程序,采集超声波测距时的环境温度,并换算出准确的声速,存储到RAM存储单元中;单片机再调用距离计算子程序进行计算,计算出传感器到目标物体之间的距离;此后主程序调用显示子程序进行显示;若超过设定的最小报警距离还将启动扬声器报警;当一次发射、接收、显示的过程完成后,系统将延迟100ms重新让T1置初值,再次启动T1以溢出,进入下一次测距。如果由于障碍物过远,超出量程,以致在T0溢出时尚未接收到回波,则显示“ERROR”重新回到

51单片机超声波测距程序

//超声波测距,测距范围2cm-400cm; #include #include #define uint unsigned int #define uchar unsigned char sbit trig=P1^0; sbit echo=P3^2; sbit test=P1^1; //测试灯sbit dula=P2^6; sbit wela=P2^7; sbit BEEP=P2^3; uint timeh,timel,distance; uint ge,shi,bai,xiaoshu,flag,time; /*共阴极数码管不带小数点代码表*/

uchar code list[]={ 0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 }; /*共阴极数码管带小数点代码表*/ uchar code listtwo[] = { 0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef}; /*长延时函数*/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); }

/*短延时函数*/ void delay20us() { uchar a; for(a=0;a<100;a++); } /*报警函数*/ void beer() { // BEEP=0; delay(10); } /*定时器初始化*/ void initime0() { TMOD=0x01; TH0=0;

stm32超声波测距程序

stm32超声波测距程序 单片机用的是STM32F103VC系列,超声波是淘宝买的一个模块,只有5个引脚,用起来很方便。 用的时候只需要其中4个脚,VCC,GND,TRIG,ECHO。 TRIG接PA8,OUT_PP模式;ECHO接PA9,IN_FLOATING模式。 #include "stm32f10x_heads.h" #include "HelloRobot.h" #include "display.h" void Tim2_Init(void); void TIM2_IRQHandler(void) { if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_12)==0) GPIO_SetBits(GPIOE,GPIO_Pin_12); else GPIO_ResetBits(GPIOE,GPIO_Pin_12); TIM_ClearFlag(TIM2, TIM_FLAG_Update); } int main(void) { u16 count; float length; BSP_Init(); Tim2_Init();//定时器初始化函数 LCM_Init(); delay_nms(5);

GPIO_ResetBits(GPIOA,GPIO_Pin_8); Display_List_Char(1,0,"distance:"); //PA8:Trig PA0:Echo while (1) { GPIO_SetBits(GPIOA,GPIO_Pin_8); delay_nus(20);//拉高超过10us,发射超声波 GPIO_ResetBits(GPIOA,GPIO_Pin_8); TIM2->CNT=0;//计数器清0 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==0);//等待ECHO脚高电平 TIM_Cmd(TIM2, ENABLE);// TIM2 enable counter [允许tim2计数] while((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==1)&&(TIM2->CNTARR-10)); TIM_Cmd(TIM2, DISABLE); count=TIM2->CNT;//ECHO脚低电平后读取计数器的值,从而算出往返时间 length=count/58.0; Display_List_Char(1,9," "); Display_List_Float(1,9,length); delay_nms(200); } } void Tim2_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM2);//复位TIM2定时器

相关主题
文本预览
相关文档 最新文档