基于单片机的超声波测距论文.docx
《基于单片机的超声波测距论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的超声波测距论文.docx(26页珍藏版)》请在冰点文库上搜索。
基于单片机的超声波测距论文
单片机课程设计论文
题目:
基于单片机的超声波测距仪
学院:
电气与电子工程学院
专业:
电气工程及其自动化
班级:
14电气实验班
姓名:
李浩文
学号:
指导教师:
小组成员:
日期:
2016年12月15日
基于单片机的超声波测距仪
摘要
超声波具有指向性强,能量消耗缓慢,传播距离较远等优点,所以,在利用传感器技术和自动控制技术相结合的测距方案中,超声波测距是目前应用最普遍的一种,它广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。
本课题详细介绍了超声波传感器的原理和特性,以及STC89C52单片机的性能和特点,并在分析了超声波测距的原理的基础上,指出了设计测距系统的思路和所需考虑的问题,给出了以STC89C52单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。
该系统电路设计合理、工作稳定、性能良好、检测速度快、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。
关键词:
超声波;测距;单片机;STC89C52
目录
1导论1
1.1目的和意义1
1.2研究的主要内容1
2总体方案设计与分析2
2.1.1超声波传感器2
2.1.2超声波发生接收模块设计2
2.1.3收发分立集成超声波探头HC-SR043
2.1.4HC-SR04总体性能分析5
2.2STC89C52RC单片机介绍5
3系统硬件电路设计7
3.1系统电路图7
3.2单片机最小系统7
3.3超声波模块电路8
3.47端数码管显示电路9
3.5蜂鸣器报警电路9
3.6按键键盘电路9
4系统程序的设计11
4.1程序设计流程11
4.2C语言源程序12
总结17
参考文献18
附录(A)(成品展示)19
附录(B)(元件清单)20
1导论
1.1目的和意义
由于超声测距是一种非接触检测技术,不受光线、被测对象颜色等的影响,较其它仪器更卫生,更耐潮湿、粉尘、高温、腐蚀气体等恶劣环境,对于被测物处于黑暗、有灰尘、烟雾、电磁干扰等恶劣环境有一定的适应能力。
具有少维护、不污染、高可靠、长寿命等特点。
因此可广泛应用于纸业、矿业、电厂、化工业、水处理厂、污水处理厂、农业用水、环保检测、食品(酒业、饮料业、添加剂、食用油、奶制品)、防汛、水文、明渠、空间定位、公路限高料位测量、车辆自动导航、物体识别与定位、车辆安全行驶辅助系统乃至地形地貌探测等许多领域中。
可在不同环境中进行距离准确度在线标定,可直接用于水、酒、糖、饮料等液位控制,可进行差值设定,直接显示各种液位罐的液位、料位高度。
因此,超声在空气中测距在特殊环境下有较广泛的应用。
利用超声波检测往往比较迅速、方便、计算简单、易于实现实时控制,并且在测量精度方面能达到工业实用的指标要求,因此为了使移动机器人能够自动躲避障碍物行走,就必须装备测距系统,以使其及时获取距障碍物的位置信息(距离和方向)。
因此超声波测距在移动机器人的研究上得到了广泛的应用。
同时由于超声波测距系统具有以上的这些优点,因此在汽车倒车雷达的研制方面也得到了广泛的应用。
1.2研究的主要内容
课题《基于单片机的超声波测距仪》由51单片机最小系统、超声波测距模块、驱动显示电路、报警电路和按键电路等组成。
利用超声波测距模块HC-SR04测量距离,并对数据进行分析处理,传给51单片机,再通过LED数码管显示出来,可以通过按键调整报警距离,同时电源部分采用5V稳压直流电源。
2总体方案设计与分析
2.1.1超声波传感器
超声波传感器主要有电致伸缩和磁致伸缩两类,电致伸缩采用双压电陶瓷晶片制成,具有可逆特性。
压电陶瓷片具有如下特性:
当在其两端加上大小和方向不断变化的交流电压时,就会产生“压电效应”,使压电陶瓷也产生机械变形,这种机械变形的大小以及方向与外加电压的大小和方向成正。
也就是说,若在压电晶片两边加以频率为
的交流电电压时,它就会产生同频率的机械振动,这种机械振动推动空气的张弛,当
落在音频范围内时便会发出声音。
反之,如果由超声波机械振动作用于陶瓷片使其发生微小的形变时,那么压电晶片也会产生与振动频率相同的微弱的交流信号。
超声波传感器结构如下:
图2-1元件内部结构图2-2超声波外部结构
2.1.2超声波发生接收模块设计
根据超声波测距原理,超声波收发设备应该完成超声波脉冲的发射以及回波首波的精确检测。
从结构上可以将收发设备分为收发一体换能器和收发分立换能器,这两种形式各自有优缺点。
收发一体超声波换能器由于超声波发射和接收在一个口,因此其不存在近距离形成所谓的三角关系,因此其近距离的测量精度高。
但是也由于收发共用端口的原因,导致了在发射完成脉冲序列之前不能够开始接收,这就导致了盲区的存在,这在原理是是不能消除的。
收发分立超声波换能器虽然在近距离上可以进行测量,近乎没有盲区的存在,但是在近距离上一定会形成一个三角关系,从而导致其近距离上的测量相对误差极大。
而在电路上,由于收发一体的超声波换能器的发射驱动电路和接收极的接收检测电路彼此相连,导致了电路的相互干扰,增加了抗干扰设计工作。
虽然收发分立形式也存在串扰的缺点,但其是可以通过软硬件设计消除的。
从总体上来说,收发分立在应用上更加简单、可靠,本次设计采用收发分立形式换能器。
2.1.3收发分立集成超声波探头HC-SR04
产品特点:
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。
HC-SR04实物图和总体参数分别如图3-3和表2-1所示。
图2-3HC-SR04实物图如图
表2-1HC-SR04总体参数
HC-SR04基本工作原理:
(1)采用IO口TRIG触发测距,给最少10us的高电平信号。
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2;超声波时序图如图2-4所示。
图2-4超声波时序图
2.1.4HC-SR04总体性能分析
根据HC-SR04的原理图图2-5,HC-SR04测距模块时一个相对独立的系统。
采用的电源芯片MAX232为超声波换能器提供了合适的电压,驱动换能器正常工作。
它采用了单片机EM78P135作为控制器,完成了对外部触发信号的检测、产生脉冲信号、检测回波首波信号等工作。
与此同时其还肩负着控制电路的开启,处理超声波换能器的横向干扰,并且消除电路固定延时影响等工作。
对于本次设计,选用这种测距模块将极大减少设计的工作,降低设计的成本。
图2-5
HC-SR04的原理图
2.2STC89C52RC单片机介绍
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
如图2-6STC89C52引脚图
主要特性如下:
增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.
工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
用户应用程序空间为8K字节
片上集成512字节RAM
通用I/O口(32个),复位后为:
P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
具有EEPROM功能
具有看门狗功能
共3个16位定时器/计数器。
即定时器T0、T1、T2
外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
通用异步串行口(UART),还可用定时器软件实现多个UART
工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
PDIP封装
图2-6STC89C52引脚图
3系统硬件电路设计
3.1系统电路图
该超声波测距系统由单片机最小系统、超声波模块电路、7端数码管显示电路、蜂鸣器报警电路、按键键盘电路组成,如图3-1系统电路图所示;
图3-1系统电路图
3.2单片机最小系统
单片机最小系统有复位电路和晶振电路组成。
为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延迟才撤销复位,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
当单片机的复位引脚出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
所以复位引脚的电容大一点没多大关系,顶多是复位时间长一点;但如果电容太小,高电平持续时间太短,则单片机无法正常复位,就不能工作,电容通常取10UF或22UF,铝电解电容即可。
单片机的复位电路在刚接通电时,刚开始电容是没有电的,电容内的电阻很低,通电后,5V的电源通过电阻给电解电容进行充电,电容两端的电会由0V慢慢的升到4V左右(此时间很短一般小于0.3秒),正因为这样,复位脚由低电位升到高电位,引起了内部电路的复位工作;当按下复位键时,电容两端放电,电容又回到0V了,于是又进行了一次复位工作。
晶振电路是单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作。
假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:
电路将无法通信。
它是由一个晶振和两个瓷片电容组成的,晶振和瓷片电容是没有正负的。
两个电容的取值都是相同的,或者说相差不大,如果相差太大,容易造成谐振的不平衡,容易造成停振或者干脆不起振。
其起到一个并联协振的作用,这样可以让它的脉冲更平稳与协调。
如图3-2单片机最小系统;
图3-2单片机最小系统
3.3超声波模块电路
由单片机STC89C52编程产生25us的方波,由P3.3口输出给超声波模块的Trig端口,再经过放大电路,驱动超声波发射探头发射超声波。
发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的检波放大、积分整形及一系列处理,由Echo端口送至单片机P3.2端口。
单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由单片机控制显示出来。
如图3-3超声波模块电路。
图3-3超声波模块电路
3.47端数码管显示电路
显示电路采用简单实用的4位共阴LED数码管,段码用74HC573驱动,位码用PNP三极管9012驱动。
单片机系统及显示电路如图3-4所示
图3-47段数码管显示电路图3-5蜂鸣器电路图
3.5蜂鸣器报警电路
本设计采用电磁式蜂鸣器,当测量距离小于预设报警值时,蜂鸣器就会发出报警生硬。
电磁式蜂鸣器的发声原理是电流通过电磁线圈,是电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,即通过一个PNP型三极管9012来放大驱动蜂鸣器。
如图3-5所示
3.6按键键盘电路
本设计选用了独立式键盘接法。
独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。
将常开按键的一端接地,另一端接一个I/O口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。
当有键下时,此I/O口与地短路迫使I/O口为低电平。
在单片机程序中查寻此I/O口的电平状态,根据I/O
口的电平状态进行相应的程序执行。
如图3-6所示。
图3-6按键电路
由单片机最小系统、超声波模块电路、7端数码管显示电路、蜂鸣器报警电路、按键键盘电路组成超声波测距的功能框架图如图3-7所示。
图3-7系统设计原理框架图
4系统程序的设计
4.1程序设计流程
图4-1主程序流程图
在超声波测距仪系统的设计中,采用C语言编程。
系统程序主要包括主程序、显示数据子程序、报警子程序、按键子程序和中断服务程序。
首先利用C语言的宏定义#define语句来定义个管脚的连接,将每个管脚表示成为
便于理解的字符在程序中可以直接对字符进行赋值,以实现对单片机输出端口的控制。
程序控制流程如图4-1所示。
4.2C语言源程序
#include
#include//_nop_()延时的头文件
#defineucharunsignedchar
#defineuintunsignedint
/************端口配置************/
sbitTrig=P3^3;//发射端口
sbitEcho=P3^2;//接收端口
sbitk1=P1^6;//设置键
sbitk2=P1^5;//加键
sbitk3=P1^4;//减键
sbitfeng=P2^0;//蜂鸣器
/********定义变量*************/
charcb;//超出测量范围标志位
charmode=0;//模式标志,0为正常模式,1为设置模式
intBJJ=50;//报警距离,默认为50cm
uchartimeH,timeL;
uintdistance;//测量距离
uinttime;//回波时间
/*****************************************************/
//显示0~9,共阴,不带小数点
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/**************************************************/
voiddelay(uintz)//z毫秒
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************************************/
//显示数据转换程序
voiddisplay(uinttemp)
{
ucharge,shi,bai;
bai=temp/100;
shi=(temp%100)/10;
ge=temp%10;
//百
P0=0;
P1=(P1|0xff)&0xfd;
P0=table[bai]|0x80;//按位或,最高位变为1,显示小数点
delay
(1);
//
//十
P0=0;
P1=(P1|0xff)&0xfb;
P0=table[shi];
delay
(1);
//
//个
P0=0;
P1=(P1|0xff)&0xf7;
P0=table[ge];
delay
(1);
//
}
//************延时25微秒**************************
voiddelay_25us()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//***********************************
voidjianpansaomiao()//键盘扫描
{
if(k1==0)//设置键按下检测
{
delay(10);
if(k1==0)
{
mode++;//模式加
if(mode>=2)//加到2时清零
{
mode=0;
}
while(!
k1);
}
}
if(mode==1)//只在设置模式下检测加减键
{
if(k2==0)//加
{
delay(10);
if(k2==0)
{
BJJ++;
if(BJJ>150)BJJ=150;
while(!
k2);
}
}
if(k3==0)//减
{
delay(10);
if(k3==0)
{
BJJ--;
if(BJJ<=0)BJJ=0;
while(!
k3);
}
}
}
}
//**********************************
voidmain()
{
uchari;
Trig=0;//首先拉低脉冲输入引脚
TMOD=0x10;//定时器1,方式1,16位工作方式
ET1=1;//允许定时器1中断
while
(1)
{
cb=0;
i=0;
EA=0;//关总中断
Trig=1;//超声波输入端
delay_25us();//延时25us
Trig=0;//产生一个25us的脉冲
while(Echo==0);//等待Echo回波引脚变高电平
EA=1;
EX0=1;//打开外部中断0
IT0=1;//外部中断0下降沿触发
TH1=0;//定时器1清零
TL1=0;//定时器1清零
TF1=0;//计数溢出标志
TR1=1;//启动定时器1
/***************蜂鸣器模块***************************/
if(cb==1||distance>400)feng=1;
if(mode==0){//蜂鸣器在正常模式时,当测量距离小于报警距离时就响
if(distanceelsefeng=1;
}
elsefeng=1;
//*************************************
if(cb==1||distance>400)feng=1;
jianpansaomiao();
//*************设置模式的显示
if(mode==1)
{
while(i<30){
jianpansaomiao();
P0=0;
P1=(P1|0xff)&0xfe;
P0=0x73;
delay
(1);
display(BJJ);
i++;
}
}
/******************正常模式的显示*************/
else
{
while(i<30){
jianpansaomiao();
if(cb==1||distance>400)
{
feng=1;
P0=0;
P1=(P1|0xff)&0xfe;
P0=0x46;
delay
(1);}
display(distance);
i++;
}
}
/***************************************/
}
}
//***************************************
//外部中断0,用做判断回波电平
voidexter()interrupt0//外部中断0是0号
{
TR1=0;//关闭定时器1
timeH=TH1;//取出定时器的值
timeL=TL1;//取出定时器的值
EX0=0;//关闭外部中断
EA=0;
time=timeH*256+timeL;
distance=time*0.0172;//厘米
}
//*********************************
//定时器1中断,用做超声波测距计时
voidtimer1()interrupt3
{
cb=1;
}
总结
通过本次课程设计,在调试功能的过程中,培养了我的设计思维,增强了动手能力,同时加深了我对单片机中所学的数码管的显示、键盘接口原理与应用、蜂鸣器的使用等外围电路工作原理与使用的理解。
在我写代码与调试代码过程中,我遇到了很多问题,如一开始数码管显示闪射且亮度不足,按键不灵敏等问题,后来我调整与更改代码,增加扫描数码管和键盘的频率,数码管的显示亮度与稳定性和键盘的灵敏度问题得于解决。
在调试代码与硬件电路设计好之后,在测量一米的范围之内,存在明显的4~5厘米的精度误差,查阅相关资料与解决方案后,怀疑是电子电路里有干扰信号或电子电路不稳定,于是设计在电路里加入一个滤波电容。
结果在电路的测距模块上加上一个滤波电容后,测量一米的范围内精度误差为1~2厘米,且较稳定,取得比较理想的效果。
参考文献
[1]陈朝大.单片机原理与应用.北京:
化学工业出版社,2013.5
[2]郭天祥.新概念51单片机C语言教程.北京:
电子工业出版社,2009.1
附录(A)(成品展示)
附录(B)(元件清单)
7*9万用板
HC-SR04超声波模块
STC89C51单片机
74hc573
40PIC座
20PIC座
4p母座
四位一体共阴数码管
9012三极管*5
2.2k电阻*5
220Ω电阻*8
10k电阻
5V有源蜂鸣器
103排阻
10uf电解电容
30pf瓷片电容*2
12MHZ晶振
100uF电解电容
104独石电容
按键*3
自锁开关
DC电源插口
导线若干
焊锡若干
USB电源线或电池盒+DC电源插头