超声波测距系统设计报告.docx
- 文档编号:13775676
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:27
- 大小:1.18MB
超声波测距系统设计报告.docx
《超声波测距系统设计报告.docx》由会员分享,可在线阅读,更多相关《超声波测距系统设计报告.docx(27页珍藏版)》请在冰点文库上搜索。
超声波测距系统设计报告
时间:
周一晚上
组号:
8
创新性实验报告
题目
超声波测距报警系统设计
学院
电子信息学院
专业
电子信息工程
班级
08041812
学号
080418320804194808041906
学生姓名
吴思徐旭东张翠翠
指导教师
刘公致
完成日期
2010年11月
摘要
本文详细介绍了一种基于单片机的超声测距系统。
该系统以空气中超声波的传播速度为确定条件,利用反射超声波测量待测距离。
其原理是:
单片机发出的超声波,通过换能器发射出去,遇到被测物体后翻身回来,计算此超声波从发射出道接受的时间差从而得出被测物体到测距仪的距离,并通过GSM模块实现短信报警。
针对测距系统发射、接受、检测、显示部分的总体设计方案做了论证。
给出了系统的硬件原理图和软件原理图。
TheDesignofSystemforUltrasonicDistance
MeasurementUsingMCU
Abstract
Thethesisintroducesakindofsingle-pulse-reflectionultrasonicdistancemetersystemindetailbasedonsinglechipprocessor.Thesystemcouldmeasurecertaindistanceonthepremisethatthespeedofreflectedwaveintheairisfixed.Basedonthestudyofsinglechipprocessor,thispapersummarizesthedevelopmentandfundamentalprincipleofultrasonicdetection.Thenitpresentsthetheoryandcharactersofultrasonicsensor.Moreover,itproposesthewholestructureofthesystembyintroducingthefunctionofultrasonicdistancemeter.Thenthispaperintroducestheprincipleofdistance-measuring-devicewhichisdesignedwiththesinglechipPProcessorof51series.Thisprincipleisbasedontheultrasonicmeasurewhichiscalculatedbythetimeusedbyultrasonictravelingfromthetarget,wealso.Andthenthetransmission,receiver,detection,displayschemeofthisdistancemetersystemarebroughtout.ThispaperpresentsthedesignoftheCircuitanddebugoftheultrasonicdistancesensor.
Keywords:
single-chipprocessor,ultrasonic,distancemeasurement,GSM
1、总体方案设计
1.1超声波测距原理
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射与接收回波的时间差t,然后求出距离S=Ct/2,式中的C为超声波波速。
由于超声波也是一种声波,其声速C与温度有关,表一列出了几种不同温度下的声速。
在使用时,如果温度变化不大,则可以认为声速基本不变的,如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测的超声波往返的时间,既可求得距离。
这就是超声波测距仪的机理。
温度(℃)
-30
-20
-10
0
10
20
30
100
声速(米/秒)
313
319
325
323
338
344
349
386
表一
1.2方案比较
方案一
根据设计要求综合各方面的因素,可采用AT89S52单片机作为主控器,用模拟SPI驱动诺基亚5110液晶显示屏,实时显示数据,超声波驱动信号用单片机的定时器完成,同时,我们通过串口发送AT指令控制GSM模块实现了短信报警。
超声波测距器的系统框图如下:
方案二
本设计的整体框图如下图一所示,主要由超声波发射,超声波接受与信号转换,按键显示电路与温度传感器电路组成。
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差T,然后求出距离S=CT/2,式中的C为超声波波速。
在常温下,空气中的声速约为340m/s.由于超声波也是一种声波,其传播速度C与温度有关,在使用时,如果温度变化不大,则可认为声速是基本不变的。
因本系统测距精度要求很高,所以通过对温度的检测对超声波的传播速度加以校正。
超声波传播速度确定后,只要测的超声波往返的时间,如图下图二波形所示。
即可求得距离。
这就是超声波测距系统的基本原理。
图一
图二
1.3方案选择
比较方案一与方案二,两者有很多相似之处,两个设计都运用到了单片机,用到了同一类型的传感器。
运用了LCD显示。
但综合分析:
方案一,软件的编写方面比较容易理解、实现。
而方案二的软件部分与方案一比较,就略显麻烦,而且对外围还需要一些辅助电路,增加了温度补偿电路,程序编写复杂。
综合分析之下,本设计采用方案一,另外GSM手机现在已经很普及,而且GSM短信廉价,实现简单,实现超远距离报警。
2、单元模块设计
2.1各单元模块功能介绍及电路设计
2.1.1单片机系统设计
详见原理图附录一
2.1.2超声波测距模块
此系统我们采用了HC-SR04超声波测距模块,该模块可提供2cm-400cm的非接触式距离感测功能,测距精度可高达3mm;模块包括超声波发射器和接收器与控制电路。
其工作原理:
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间×声速)/2;
实物图如下图五所示。
VCC供5V电源,GND为地线,TRIG触发控制信号输入,ECHO回响信号输出等四支线。
图五
2.1.3TC35GSM模块
另外我们还用TC35实现了无线语音报警功能。
GSM模块选用西门子公司的TC35,在应用系统中很容易集成,具有如下特点:
(1)频段为双频GSM900MHz和GSM1800MHz;
(2)支持数据、语音、短消息和传真;
(3)电源范围宽;
(4)具有RS232接口和语音接口;
电路连接简单,单片机的串行接口与TC35的串口相连,采用异步串行通信。
TC35的外围电路图见附录二。
3、软件设计
3.1软件设计原理及设计所用工具
本次设计主要利用C语言编写程序,根据功能的需要进行编程,其中软件设计所用的软件主要是KeiluVision3软件,PROTUESISIS软件。
3.2超声波测距的算法原理
超声波在空气中传播速度为每秒钟340米(15℃)。
X2是声波返回时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值。
3.3程序流程图设计
本软件设计包括了三部分,主程序、定时中断程序和外部中断程序,流程图如下图六所示。
图六(主程序流程图)
图六(定时器中断服务程序)
图六(外部中断服务子程序)
其中,GSM模块程序流程图如下图
4、系统调试
4.1软件调试
软件的调试主要通过KeiluVision3软件进行操作,对程序编写过程中的错误进行查找,找出错误,进行修改,然后再进行编译直至编译成功,生成HEX文件,才能下载到单片机里,继而实现相应功能。
程序源文件见附录三
实测数据如下表,精确度控制在3%以内
实际距离/cm
5
10
15
20
30
40
测试距离/cm
4.9
9.9
14.8
20.1
29.8
39.8
5、系统功能
本系统通过单片机与现实模块相结合,实现的主要功能是超声波测距,报警以及显示功能。
设计前期通过KEIL软件PROTEUS软件仿真的联调,对设计功能进行,仿真,均达到了预期的设计效果。
6、总结与体会
本次课程设计是对所学知识的一次综合性运用。
其中包括对模拟电子技术的基础和数字电子技术基础、单片机等知识的运用。
从而完成了本次设计。
在设计的过程中发现了自身知识的不足,也发现我们必须具备专业基础知识才能成功的设计出一间合格的东西。
这次课程设计收获很多,体会也很深刻,并且对我们所学的东西也产生了浓厚的兴趣。
在设计过程中,也学会了很多新的东西,如对一些初次使用的模块的认识与掌握。
当然最重要的是学到了关于基本电子设计的一些方法,同时也加深了对一些常用的电子元件的理解以及其基本用法的掌握。
除此之外,我觉得在这次设计过程中,我发现团队净胜的重要性,很多时候一个人的力量是有限的,一个人不可能什么都会,什么都能自己解决,还是有需要他人帮助的时候,我觉得人与人之间的相互帮助很有必要,这样不仅能帮助大家很快的解决问题,还能调高我们每个人的实际水平,也培养了我们的团队合作精神,这些能力对于我们今后的学习和工作都很有帮助。
由于时间关系,本次设计中还有不尽完善之处。
希望在以后的学习生涯中不断的完善和改进。
7、参考文献
【1】全国大学生电子设计竞赛系统设计黄智伟北京航空航天大学出版社
【2】电子系统设计余小平奚大顺北京航空航天大学出版社
【3】单片机高级语言编程与uVision2应用实践徐爱钧电子工业出版社
【4】单片机原理及其接口技术胡汉才北京:
清华大学出版社,1996年
【5】数字电路逻辑设计王毓银主编高等教育出版社
【6】电子电路大全【美】J.马库斯,卷5数字电路。
北京:
计量出版社,1985年。
【7】电子创新设计王松屋主审武思军于鑫哈尔兵工程大学电工电子教学基地,2003
【8】流行单片机实用子程序及应用实例杨振江,杜铁军,李群西安电子科技大学出版社,2002
附录
附录一
附录二
附录二:
源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#include"LCD5110.h"
unsignedlongtime=0;
unsignedintn=0;
unsignedcharposit=0;
unsignedlongS=0;
bitflag=0;
unsignedlongsum=0;
unsignedlongnum=0;
sbitRX=P2^1;
sbitTX=P2^2;
/*********************************************************/
voidtimer_init(void)
{
TMOD=0x11;//设T0为方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8;//2MS定时//th1=(65536-2000)/256tl1=(65536-2000)%256
TL1=0x30;
ET0=1;//允许T0中断
ET1=1;//允许T1中断
TR1=1;//开启定时器
EA=1;//开启总中断
}
voidConut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*17)/90;//算出来是CM
if((S>=7000)||flag==1)//超出测量范围显示“-”
{
flag=0;
LCD_write_english_string(1,0,"error");
sum=num=0;
}
else
{
num++;
sum+=S;
if(num>=5)
{
S=sum/num;
sum=num=0;
set_xy(1,0);
LCD_write_char(S%10000/1000+'0');
LCD_write_char(S%1000/100+'0');
LCD_write_char(S%100/10+'0');
LCD_write_char(S%10+'0');
LCD_write_char('');
}
}
}
voidmain()
{
timer_init();
init();
chinese();
LCD_write_english_string(0,0,"NOKIA5110LCD");
while
(1)
{
while(!
RX);//当RX为零时等待
TR0=1;//开启计数
while(RX);//当RX为1计数并等待
TR0=0;//关闭计数
Conut();//计算
}
}
/********************************************************/
voidtimer0()interrupt1//T0中断用来计数器溢出,超过测距范围
{
flag=1;//中断溢出标志
}
/********************************************************/
voidtimer1()interrupt3//T1中断用来扫描数码管和计100MS启动模块
{
TH1=0xf8;
TL1=0x30;
n++;
if(n>=50)
{
n=0;
TX=1;//100MS启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
/*********************************************************************
*AT指令发送程序*
*********************************************************************/
ucharSend_AT_Command(uchartype){//发送AT指令
//拨号时号码放在phone.number
//其他用para_temp
AT_Command_Type=type;
send_count=0;
switch(type){
caseRESET_TC35:
//复位TC35
strcpy(uart_buff,"AT+CFUN=1,1");
break;
caseCHECK_PIN:
//检查当前是否要输入PIN码
strcpy(uart_buff,"AT+CPIN?
");
break;
caseTC35_INIT:
//TC35初始化命令
strcpy(uart_buff,"ATE0V0");
break;
caseSIM_ID:
strcpy(uart_buff,"ATE0V0+CMGF=1+CNMI=2,1");
break;
caseAT_IPR:
strcpy(uart_buff,"AT+IPR=9600");
break;
caseSMSS_ID:
strcpy(uart_buff,"ATE0V0^SSMSS=1+CNMI=2,1");//AT^SSMSS=1先存SIM卡再存手机存储器
break;
caseSMS_CMGF:
//SMS接收方式,
strcpy(uart_buff,"ATE0V0+CMGF=0");
break;
casePHONE_WRITE:
//存电话号码
strcpy(uart_buff,"AT+CPBW=");
strcat(uart_buff,para_temp);
break;
casePHONE_READ:
//读电话本
strcpy(uart_buff,"AT+CPBR=");
strcat(uart_buff,&read_tmp);
uart_buff[9]=0x0d;
uart_buff[10]=0x0a;
uart_buff[11]=0x00;
uart_buff[12]=0x00;
break;
caseSMS_CMGR:
//读一个短信
strcpy(uart_buff,"AT+CMGR=");
strcat(uart_buff,para_temp);
break;
caseSMS_CMGS:
//写一个短信
strcpy(uart_buff,"AT+CMGS=");
strcat(uart_buff,para_temp);
break;
caseSMS_CMGD:
//删除一个短信
strcpy(uart_buff,"AT+CMGD=");
strcat(uart_buff,para_temp);
break;
caseCMGS_MUB:
//发报警短信内容
strcpy(uart_buff,para_temp);
break;
caseAT_COMMAND:
break;
default:
receive_count=0;
return(TRUE);
}
//LCD_write_string(0,0,uart_buff);
ES=1;
strcat(uart_buff,"\x0d\x00");//在命令后加入CR
send_count=0;//设置发送指针
receive_count=0;
AT_Command_Status=COMMAND_WAIT;//设置接收成功标志
timer_S_cnt=0;
txd_rxd_bit=0;
at_send_bit=0;
TI=1;//开始发送数据
RI=0;//清除接收标志
if(type==TC35_INIT){
while(timer_S_cnt<6){
if(AT_Command_Status!
=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
elseif((type==SMS_CMGR)){
while(timer_S_cnt<6){
if(AT_Command_Status!
=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
elseif((type==CALL_ID)){
while(timer_S_cnt<2){
if(AT_Command_Status!
=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
else{
while(timer_S_cnt<6){
if(AT_Command_Status!
=COMMAND_WAIT||txd_rxd_bit==1)
return(TRUE);
}
}
return(FALSE);
}
/*********************************************************************
*话机启动的初始化程序*
*********************************************************************/
voidSys_Init(void){//话机启动的初始化程序,包含键盘与定时器,串口等
//TH0=(65536-46080)/256;//重新装入定时25mS的初值到TH0,TL056320
//TL0=(65536-46080)%256;
//65536-(11.0592/12)*20MS*1000=To1843247104
//1ms定时
//11.0592/12=0.9216M(记数频率)
//1ms记数921.6次
//16位2^16-x=922x=64614FC66
//定时器里不断放fc66,不用怀疑51定时器得到的1ms的精确性吗
//TH0=0xf6;
//TL0=0x50;
TH0=0xB8;
TL0=0x00;//20ms的时钟基准//串口中断
TI=0;
RI=0;
SCON=0x50;//选用方式1
TMOD=0x20;
TMOD=(TMOD&0xf0)|1;//MODE1
TH1=0xfd;//波特率为9600
TL1=0xfd;
PCON=0x00;//倍频0x80
IE=0xb0;//EAXXET2ESET0EX0ET1EX111000000
TR1=1;//enableTIMER1
ES=1;
TR0=1;
ET0=1;
ET1=0;
EA=1;
receive_count=0;
send_count=0xff;//表示禁止发送,可以接收
//定时器2
ET2=1;
T2CON=0x01;//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超声波 测距 系统 设计 报告