用51单片机设计超声波测距系统的设计原理和电路(附源程序)
基于51单片机的超声波测距仪设计
自动化技术综合实训报告实训题目:院专班姓学指导教师:实训地点:开课时间:序号 评价内容 分数 序号 评价内容分数1 出勤(10 分)3 实训任务完成情况(50 分) 2 课题难度分值(10 分)4实训总结报告(30 分)实训总成绩: 94 分学生姓名:魏*星实训评分指导教师评语:指导教师(签名):年月目录第 1章绪论1.1实训的目和要求1.2实训课题设计功能描述………………………………………………………1.3应解决的问题………………………………………………………………第 2章整体设计方案2.1设计原理2.2整体系统设计………………………………………………………………第 3章硬件电路设计3.1电路原理图3.2元件清单……………………………………………………………………3.3重要电路介绍3.3.1复位与晶振电路……………………………………………………3.3.2超声波发射电路……………………………………………………3.3.3超声波接收检测电路………………………………………………3.3.4显示电路第 4章软件设计4.1系统软件设计4.2程序流程图4.3程序设计与调试第 5章制板焊接调试5.1仿真结果与 PCB图5.2焊制电路板、实物运行调试5.3误差分析与校正讨论总结与体会谢词参考文献附录第1章绪论1.1实训的目的和要求生产实训是自动化专业本科生在校期间必须进行的主要实践环节之一,是培养学生工程实践能力、提高学生工程素质的一个重要组成部分。
作为一名工科学生,将来从事自动化及相关工作,为了让我们能尽早的认识社会实践,了解工业生产,提高自己的动手意识,强化个人素质,增强理论联系实际的观念,学校给我们安排了为期两周的专业实训,让我们学到的理论知识和实践联系到一起,为我们以后的走向社会打下一个坚实的基础。
这次实训的主要目的是让大家进一步了解 AT89 系列单片机的引脚、功能,晶振电路、显示电路和信号输入输出电路的设计,熟悉使用 keil 软件和用汇编语言编程完成各种处理和控制,同时学习使用软件对电路进行设计,对项目进行仿真、调试,以及 PCB 板的制作等,最主要的是了解一个小型项目的研发过程,从项目的提出到项目实现需要怎样一步步来完成,项目完成事应该大概掌握以上要求。
51单片机超声波测距离(带温度补偿)
超声波模块原理图:发射接收原理图PCB:51单片机原理图:软件部分C语言程序:/*=========================================================== =========调试要求:1.MCU:A T89S52芯片或AT89C522.晶振:12MHz调试注意:本程序带温度补偿,采用DS18B20测量温度1.LCD1602液晶屏有显示后,才接入超声波模块。
2.注意超声波模块电源的极性。
不清楚请参好淘宝的电路图3.没有选用频率为12MHz晶振,用了别的频率晶振,单片机定时器的测量值与发出的40KHz频率脉冲不对。
4.使用者经常误发出20KHZ脉冲当40KHZ脉冲。
(40KHz频率脉冲,周期25us,占空比为50% = 12.5us)5.如果是用开发板调超声波模块,请检查开发板上的电路是否与超声波模块的控制脚复用了, 若复用了,请通过跳线分开发板上的电路。
6如果使用的是万用板,请确定单片机的复位电路和晶振电路是否正常,同时单片机的31脚(EA)记得接高电平。
============================================================= =======*/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//===============================LCD1602接口定义=====================/*-----------------------------------------------------|DB0-----P2.0 | DB4-----P2.4 | RW-------P0.1 ||DB1-----P2.1 | DB5-----P2.5 | RS-------P0.2 ||DB2-----P2.2 | DB6-----P2.6 | E--------P0.0 ||DB3-----P2.3 | DB7-----P2.7 | 注意,P0.0到P0.2需要接上拉电阻---------------------------------------------------============================================================= */#define LCM_Data P2 //数据接口#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit LCM_RW = P0^1; //读写控制输入端,LCD1602的第五脚sbit LCM_RS = P0^2; //寄存器选择输入端,LCD1602的第四脚sbit LCM_E = P0^0; //使能信号输入端,LCD1602的第6脚//===============================超声波模块定义========================sbit RemPin =P3^2;// 接收端(这个不能修改,因为是外部中断(INT0)的引脚) sbit TxPin =P3^1;// 发射端//******************************************************************** ***//ds18b20数字温度传感器控制引脚定义sbit dq_ds18b20=P3^3;//定义控制DS18B20//******************************************************************** ***//LCD显示模块的函数声明void WriteDataLCM (uchar WDLCM);//LCD模块写数据void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模块写指令uchar ReadDataLCM (void);//LCD模块读数据uchar ReadStatusLCM (void);//读LCD模块的忙标void DisplayOneChar (uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符void DisplayListChar (uchar X,uchar Y,uchar delayms,uchar code *DData); void DisplayCursorPos (uchar X, uchar Y);void LCMInit (void);void DisplayIntData (uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu);void DisplayCharData (uchar X, uchar Y,uchar ZiFu);//******************************************************************** **//延时函数声明void delay25us_40KHz(unsigned char us);void DelayUs(uint us);void DelayMs(uint Ms);void delay_3us();//3US的延时程序void delay_8us(unsigned int t);//8US延时基准程序void delay_50us(unsigned int t);//延时50*T微妙函数的声明//******************************************************************** ***//DS18B20测温函数定义void w_1byte_ds18b20(uchar value);//向DS18B20写一个字节uchar r_1byte_ds18b20(void);//从DS18B20读取一个字节的数据void rest_ds18b20(void);//DS18B20复位程序void readtemp_ds18b20(void);//读取温度void display_temp(void);//温度显示程序//******************************************************************** ***//参数定义uint length = 0; // 测距的长度0.00Muchar flag = 0; // 测距的标志有信号接收=1uchar templ,temph;uint speed;//根据温度计算出来的声音速度uchar t_b,t_s,t_g,t_x;//从左到右分别存储温度百位,十位,个位,小数位uchar flag1;//温度正负性暂存,1为正数,0为负数const unsigned char tabl3[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x0 8,0x09,0x09};/*=========================================================== ================主程序============================================================= ================*/void main(void){uchar i;LCMInit(); //1602初始化EX0 = 1; //允许总中断中断,使能INT0 外部中断ET0 = 1;TMOD=0x11; //设定T0为16位时器,设定T1为16位时器DisplayOneChar( 0,14,'m');DisplayListChar(0,0,0, "Distanc: "); //显示字符串while(1){readtemp_ds18b20();display_temp();//显示温度for(i=0;i<20;i++){DisplayIntData(0, 13,length,5,3);//显示测量距离TH0=0x00;TL0=0x00;TR0=1; //启动定时器0EA = 1; //允许所有中断delay25us_40KHz(15); //发出脉冲信号DelayMs(200);}}}//******************************************************************** ***********//温度显示函数void display_temp(){if(flag1==1)//温度为正数时的显示程序{DisplayOneChar( 1,2,'+');}else{DisplayOneChar( 1,2,'-');}//显示温度信息DisplayOneChar( 1,0,'T');DisplayOneChar( 1,1,':');DisplayOneChar( 1,3,t_s+0x30);DisplayOneChar( 1,4,t_g+0x30);DisplayOneChar( 1,5,'.');DisplayOneChar( 1,6,t_x+0x30);//显示速度信息DisplayOneChar( 1,8,'S');DisplayOneChar( 1,9,':');DisplayOneChar( 1,10,speed/100%10+0x30);DisplayOneChar( 1,11,speed/10%10+0x30);DisplayOneChar( 1,12,speed%10+0x30);DisplayOneChar( 1,13,'M');DisplayOneChar( 1,14,'/');DisplayOneChar( 1,15,'S');}//****************************************************//读取温度void readtemp_ds18b20(void){uchar temp32;rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0x44); //启动温度转换delay_8us(2);rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度templ=r_1byte_ds18b20();temph=r_1byte_ds18b20();if((temph&0xf0))//判断温度的正负性{flag1=0;temph=-temph;templ=-templ;t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据speed=331.4-0.607*(temp32 | templ);}else//为正数{t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据flag1=1;speed=311.4+0.607*(temp32 | templ);}}/*=========================================================== =========功能:在1602显示一个整数数据说明:显示一个整数数据-9999->32625. 从右至左显示数据5位:============================================================= =========*/void DisplayIntData(uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu) {uchar i=0,k=0, BCD[5]={0};if(Digit>5) Digit=5;if(ZhengShu<0){k=1;//负数示志位ZhengShu=-ZhengShu;}BCD[4] =ZhengShu / 10000; //求出万位数据ZhengShu = ZhengShu % 10000;BCD[3] =ZhengShu / 1000; //求出千位数据ZhengShu = ZhengShu % 1000;BCD[2] =ZhengShu / 100; //求出百位数据ZhengShu = ZhengShu % 100;BCD[1] =ZhengShu / 10; //求出十位数据BCD[0] =ZhengShu % 10; //求出个位数据for(i=0;i<Digit;i++)//输出显示的数值{if((i==XiaoShu)&&(0!=XiaoShu)){DisplayOneChar(X,Y-i,'.');//输出小数点Y= Y-1;}DisplayOneChar(X,Y-i,BCD[i]+0x30); //显示一个字符}if(k==1)DisplayOneChar(X,Y-1,'-');//输出负符}//****************************************************************//读一个字节uchar r_1byte_ds18b20(void){uchar i=0;uchar value= 0;for (i=0;i<8;i++){value>>=1;dq_ds18b20=0;// DQ_L;delay_3us();dq_ds18b20=1; //DQ_H;delay_8us(2);if(dq_ds18b20==1) value|=0x80;delay_8us(6); //延时40us}dq_ds18b20=1;return value;}//******************************************************************** ***********//子程序功能:向DS18B20写一字节的数据void w_1byte_ds18b20(uchar value){uchar i=0;for(i=0;i<8;i++){dq_ds18b20=1;delay_3us();dq_ds18b20=0;delay_8us(2);if (value& 0x01) dq_ds18b20=1; //DQ = 1delay_50us(1); //延时50us 以上delay_8us(2);value>>=1;}dq_ds18b20=1; //DQ = 1}//;**************************************************//ds18b20复位子程序void rest_ds18b20(void){rest:delay_3us(); //稍做延时delay_3us();dq_ds18b20=1;delay_3us();dq_ds18b20=0;// DQ_L;delay_50us(11);//480us<T<960usdq_ds18b20=1;//拉高总线delay_8us(5);if(dq_ds18b20==1){return;}delay_50us(2); //延时90usif(dq_ds18b20==1){return;}else{goto rest;}}//==============================超声波模块测试子程序================================================/*=========================================================== =========注意:是用12MHz晶振设定延时时间:x*25us 与产生40KHZ的脉冲============================================================= =======*/void delay25us_40KHz(unsigned char us){while(us--){TxPin = 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TxPin = 1;_nop_();_nop_();_nop_();_nop_();}TxPin = 1;}/*=========================================================== ==================中断程序的入口(注意:接收与发射的电平是相反的)============================================================= ==================*/void init0int() interrupt 0{uint timer_us = 0;TR0=0; //关闭定时器0timer_us =TH0*256+TL0;if(timer_us>190)timer_us=timer_us-180; //修正测距的距离if(timer_us<=735){timer_us=timer_us-96;//二次修正}if(timer_us>5059){timer_us+=29;}if(timer_us>5470){timer_us+=29;}if(timer_us>6410){timer_us+=29;}if(timer_us>7410){timer_us+=29;}if(timer_us>8410){timer_us+=29;}if(timer_us>9410){timer_us+=29;}if(timer_us>10410){timer_us+=29;}length = ((unsigned long)(speed)*timer_us)/2000;//计算长度,是扩大100倍flag = 0;EA = 0; //禁止所有中断}/*=========================================================== =========功能:在1602显示一个字符数据说明:显示一个字符数据0~256. 从左至右显示数据3位============================================================= =========*/void DisplayCharData(uchar X, uchar Y,uchar ZiFu){uchar i=0;uchar V alueBCD[3];V alueBCD[0] = ZiFu / 100; //求出百位数据ZiFu = ZiFu % 100;V alueBCD[1] = ZiFu / 10; //求出十位数据V alueBCD[2] = ZiFu % 10; //求出个位数据for(i=0;i<3;i++)//输出显示的数值{DisplayOneChar(X,Y+i,V alueBCD[i]+0x30); //显示一个字符}}/*=========================================================== ================超出测量时间============================================================= ================*/void timer0int (void) interrupt 1{TR0=0; //关闭定时器0length = 0; //超出测量时间显示示0flag = 1; //EA = 0; //禁止所有中断}/*=========================================================== ===========LCM初始化============================================================= =========*/void LCMInit(void){LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置DelayMs(100);}/*=========================================================== =========显示光标的位置============================================================= =======*/void DisplayCursorPos( unsigned char X, unsigned char Y){X &= 0x1;Y &= 0xF; //限制Y不能大于15,X不能大于1if (X) Y |= 0x40; //当要显示第二行时地址码+0x40;Y |= 0x80; // 算出指令码WriteCommandLCM(Y, 1); //这里不检测忙信号,发送地址码}/*=========================================================== =========按指定位置显示一串字符:第X 行,第y列注意:字符串不能长于16个字符============================================================= =========*/void DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData){unsigned char ListLength;ListLength = 0;X &= 0x1;Y &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]!='\0') //若到达字串尾则退出{if (Y <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;Y++;DelayMs(delayms);//延时显示字符串}elsebreak;//跳出循环体}}/*=========================================================== =========设定延时时间:x*1us============================================================= =======*/void DelayUs(uint us){while(us--);}/*=========================================================== =========设定延时时间:x*1ms============================================================= =======*/void DelayMs(uint Ms){uint i,TempCyc;for(i=0;i<Ms;i++){TempCyc = 250;while(TempCyc--);}}//==============================LCD1602显示子程序================================================/*=========================================================== ==========写数据函数: E =高脉冲RS=1 RW=0============================================================= =========*/void WriteDataLCM(unsigned char WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}/*=========================================================== =========写指令函数: E=高脉冲RS=0 RW=0============================================================= =========*/void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}/*=========================================================== =========//读数据============================================================= =========*/unsigned char ReadDataLCM(void){LCM_RS = 1;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);}/*=========================================================== =========正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。
(完整版)基于51单片机的超声波测距系统设计
完满 WORD 格式整理1设计任务本文采纳超声波传感器 ,IAP15 单片机以及 LCD显示模块设计了一种超声波测距显示器,能够实现丈量物体到仪器距离以及显示等功能。
是一种构造简单、性能稳固、使用方便、价钱便宜的超声波距离丈量器,拥有必定的适用价值。
2设计思路超声波测距超声波超声波是指频次在 20kHz 以上的声波,它属于机械波的范围。
最近几年来,跟着电子丈量技术的发展,运用超声波作出精准丈量已成可能。
跟着经济发展,电子丈量技术应用愈来愈宽泛,而超声波丈量精准高,成本低,性能稳固则备受喜爱。
超声波也按照一般机械波在弹性介质中的流传规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质汲取而发生衰减等。
正是因为拥有这些性质,使得超声波能够用于距离的丈量中。
跟着科技水平的不停提升,超声波测距技术被宽泛应用于人们平时工作和生活之中。
一般的超声波测距仪可用于固定物位或液位的丈量,合用于建筑物内部、液位高度的丈量等。
超声在空气中测距在特别环境下有较宽泛的应用。
利用超声波检测常常比较快速、方便、计算简单、易于实现及时控制,并且在丈量精度方面能达到工业适用的指标要求,所以为了使挪动机器人能够自动闪避阻碍物行走,就一定装备测距系统,以使其及时获得距阻碍物的地点信息(距离和方向)。
所以超声波测距在挪动机器人的研究上获得了宽泛的应用。
同时因为超声波测距系统拥有以上的这些长处,所以在汽车倒车雷达的研制方面也获得了宽泛的应用。
超声波测距原理最常用的超声测距的方法是回声探测法,超声波发射器向某一方向发射超声波,在发射时辰的同时计数器开始计时,超声波在空气中流传,途中遇到阻碍物面阻拦就立刻反射回来,超声波接收器收到反射回的超声波就立刻停止计时。
超声波在空气中的流传速度为340m/s,依据计时器记录的时间 t ,就能够计算出发射点距阻碍物面的距离s,即:s=340t/2 。
因为超声波也是一种声波,其声速 V 与温度有关。
课程设计实验报告-超声波测距仪的设计
超声波测距仪的设计一、设计目的本设计利用超声波传输中距离与时间的关系,采用STC51单片机进行控制和数据处理,设计出能够精确测量两点间距离的超声波测距仪。
同时了解单片机各脚的功能,工作方式,计数/定时,I/O口的相关原理,并稳固学习单片机的相关内容知识。
二、设计要求1.设计一个超声波测距仪,能够用四段数码管准确显示所测距离2.精度小于1CM,测量距离大于200CM三、设计器材元器件数量STC51单片机 1个超声波测距模块URF-04 1个电阻〔1K 200 4.7K〕 3 个晶振〔12MHz〕 1 个共阳极四位数码管 1 个极性电容〔33pF〕 2 个非极性电容〔22uF〕 1 个四、超声波测距系统原理331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以到达毫米级。
超声波测距的算法设计: 超声波在空气中传播速度为每秒钟340米〔15℃时〕。
X2是声波返回的时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值,假定X2-X1=0.03S,那么有340m×0.03S=10.2m。
由于在这10.2m 的时间里,超声波发出到遇到返射物返回的距离如下:图1 测距原理超声波测距器的系统框图如下列图所示:图2 系统框图五、设计方案及分析〔包含设计电路图〕4.1硬件电路设计4.1.1 单片机最小系统控制模块设计与比拟方案二:采用STC51单片机控制。
STC51单片机是一种低功耗、高性能CMOS8位微控制器,具有 8KB的系统可编程Flash 存储器。
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路,能够满足题目设计的所有要求,而且我们对STC51单片机也比拟熟悉,因此我们选择方案二。
最小系统电路图如图3所示图3 单片机最小系统显示模块设计采用四位共阳极数码管显示,连接电路简单,显示电路连接图如图4所示图4 数码管显示电路超声波测距模块a.本系统采用超声波模块URF04进行测距,该模块使用直流5V供电,理想条件下测距可达500cm,广泛应用于超声波测距领域,模块性能稳定,测度距离精确,盲区〔2cm〕超近。
用51单片机设计超声波测距系统的设计原理和电路(附源程序)
---------------------------------------------------------------最新资料推荐------------------------------------------------------用51单片机设计超声波测距系统的设计原理和电路(附源程序)基于51单片机的超声波测距仪说明书引言超声波测距仪,可使用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
利用超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。
一、性能要求该超声波测距仪,要求测量范围在0.08-3.00m,测量精度1cm,测量时和被测物体无直接接触,能够清晰稳定地显示测量结果。
二、工作原理及方案论证超声波传感器及其测距原理超声波是指频率高于20KHz 的机械波。
用超声波传感器产生超声波和接收超声波,习惯上称为超声波换能器或超声波探头。
超声波传感器有发送器和接收器.超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法 TOF(timeofflight)。
1/ 14首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源和障碍物之间的距离。
根据要求并综合各方面因素,采用 AT89C52单片机作为主控制---------------------------------------------------------------最新资料推荐------------------------------------------------------ 器,用动态扫描法实现 LED 数字显示,超声波驱动信号用单片机的定时器完成,超声波测距仪的系统框图如下图所示:图1 超声波测距仪系统设计框图三、系统硬件部分硬件部分主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
基于51单片机超声波测距.
一设计要求(1)设计一个以单片机为核心的超声波测距仪,可以应用于汽车倒车、工业现场的位置监控;(2)测量范围在0.50~4.00m,测量精度1cm;(3)测量时与被测物无直接接触,能够清晰稳定地显示测量结果。
二超声波测距系统电路总体设计方案本系统硬件部分由AT89S52控制器、超声波发射电路及接收电路、温度测量电路、声音报警电路和LCD显示电路组成。
汽车行进时LCD显示环境温度,当倒车时,发射和接收电路工作,经过AT89S52数据处理将距离也显示到LCD 上,如果距离小于设定值时,报警电路会鸣叫,提醒司机注意车距。
超声波测距器的系统框图如下图所示:图5 系统设计总框图由单片机AT89S52编程产生10us以上的高电平,由指定引脚输出,就可以在指定接收口等待高电平输出。
一旦有高电平输出,即在模块中经过放大电路,驱动超声波发射探头发射超声波。
发射出去的超声波经障碍物反射回来后,由超声波接收头接收到信号,通过接收电路的处理,指定接收口即变为低电平,读取单片机中定时器的值。
单片机利用声波的传播速度和发射脉冲到接收反射脉冲的时间间隔计算出障碍物的距离,并由单片机控制显示出来。
由时序图可以看出,超声波测距模块的发射端在T0时刻发射方波,同时启动定时器开始计时,当收到回波后,产生一负跳变到单片机中断口,单片机响应中断程序,定时器停止计数。
计算时间差,即可得到超声波在媒介中传播的时间t,由此便可计算出距离。
图6 时序图三超声波发射和接收电路的设计分立元件构成的发射和接收电路容易受到外界的干扰,体积和功耗也比较大。
而集成电路构成的发射和接收电路具有调试简单,可靠性好,抗干扰能力强,体积小,功耗低的优点,所以优先采用集成电路来设计收发电路。
3.1 超声波发射电路超声波发射电路包括超声波产生电路和超声波发射控制电路两部分,可采用软件发生法和硬件方法产生超声波。
在超声波的发射电路的设计中,我们采用电路结构简单的集成电路构成发射电路:图7 由反相器构成的超声波发射电路图7是由反相器74HC04构成的发射电路,用反相器74HC04构成的电路简单,调试容易,易通过软件控制。
51单片机超声波测距C程序
51单片机超声波测距C程序(2018-01-26 14:09:10>超声波检测原理超声波测距的程序流程图程序如下://超声波模块程序〃超声波模块程序//Trig = P2A0//Echo = P3A2#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int//void delay( uint z>{uint x,y 。
for(x=z 。
x>0。
x-->for(y=110 。
y>0。
y-->。
//void delay_20us(>{uchar a 。
for(a=0。
a<100。
a++>。
}//*********************************************************** ****// 显示数据转换程序void display(uint temp>{uchar ge,shi,bai 。
bai=temp/100 。
shi=(temp%100>/10 。
ge=temp%10。
wela=1 。
P0=0xf7。
wela=0 。
dula=1 。
P0=table[bai] 。
delay(1> 。
dula=1 。
P0=0x00 。
// 关位码dula=0 。
wela=1 。
P0=0xef 。
wela=0 。
dula=1 。
P0=table[shi] 。
dula=0 。
delay(1> 。
dula=1 。
P0=0x00。
// 关位码dula=0 。
dula=1 。
P0=table[ge] 。
dula=0 。
wela=1 。
P0=0xdf 。
wela=0。
dula=1 。
P0=0x00。
// 关位码dula=0 。
}//***************************************************************void main(>{uint distance 。
基于51单片机的超声波测距仪设计
基于51单片机的超声波测距仪设计摘要:本方案以stc89c52为核心,通过编程(C语言)来实现该单片机对外围电路的适时控制,并提供给外围电路各种所需的信号和接收超声波反射回来的微小信号,包括频率振荡信号,时钟信号,数据处理信号和显示信号等等。
其核心功能是对距离的检测并实时的进行距离的显示,在检测距离方面通过发射端与接收端的时间差来计算,理论上所测距离与其时间差成线性关系,所以可以通过线性回归统计方法求出实际距离与所求距离的关系。
该电路简化了一些外围电路,任能做到较为精确的测量工作,由于是采用程控操作,所以其移植性和可扩展性还是较好。
在设计时分,分模块进行设计来实现各部分功能,简化了在设计过程中的调试难度。
关键词:超声波测距、单片机控制、液晶显示、距离报警、线性回归Abstract:This program stc89c52 programming (C language) to achieve the timely control of the single-chip peripheral circuits, and made available to the peripheral circuits of the desired signal and receiving the ultrasonic reflected the small signal, including frequency oscillation signal, the clock signal, data signal processing and display signals, and so on. The its core function is to to the detection of pairs the distance and real-time of the carried out the distance the display of goes as follows. In the to calculate the, in the the detection distance aspects of through the launch of the-side with the the time of the the receiving end is poor, in theory, the measured distance with its time difference into a linear the relationship between,, so can through the the linear regression statistical methods calculate the actual distance of the seek distance relationship. The circuit simplifies the peripheral circuit, any more accurate measurements can be done, because it is programmed operation, its portability and scalability better. Hours of the design, the sub-module design to achieve the function of each, and simplifies the debugging difficulty in the design process.1Keywords:Ultrasonic Ranging, MCU control, LCD, alarm of distance ,linear regression目录1前言 (4)1.1 课题的研究背景和意义 (4)1.2 课题的国内外研究现状 (4)2 总体方案设计 (5)2.1超声波测距的原理 (5)2.2超声波传感器的工作原理及结构图 (5)3单元模块设计 (6)3.1各单元模块功能介绍及电路设计 (6)3.2 AT89S52型单片机介绍 (7)3.3各单元模块的联接 (9)4 软件设计 (16)4.1软件设计分析 (16)4.2软件设计思路 (16)4.2.1主程序 (16)4.2.2 超声波测距子程序 (17)4.2.3 超声波延时子程序 (18)5系统调试 (19)5.1硬件调试 (19)5.2硬软件联调 (20)5.3测试结果分析 (21)5.3.1测试波形 (21)5.3.2测试中仪器仪表 (22)5.3.3 数据分析 (22)5.4超声波测距误差分析 (23)5.4.1温度误差 (23)5.4.2串扰问题 (23)6 结论 (24)6.1总结与体会 (24)6.2 对设计的进一步完善提出意见或建议 (24)附录一、相关设计程序 (27)附录二、设计图和PCB (36)附录三、实物图 (37)231前言1.1 课题的研究背景和意义超声波是指频率高于20KHz的声波,属于机械波的范畴,遵循一般机械波在弹性介质中的传播规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质吸收而发生衰减等,正是因为有这些性质,使得超声波可以用于距离的测量,随着经济的发展,科技水平的不断提高,电子测量技术应用越来越广泛,超声波测量精度高,成本低,性能稳定则备受青睐,超声波测距技术被广泛的应用于人们生活和工作中。
基于51单片机的超声波测距仪设计.
江苏经贸职业技术学院毕业设计(论文)单片机的超声波测距仪设计基于题目:MCS51) 信息技术学院系 (院12应用电子专业班级1227031128 号学学生姓名万小伟董李江职校内导师称老师职夏国平企业导师称工程师职企业导师潘仕美称研究生5年2015月日12基于MCS51单片机的超声波测距仪设计摘要:伴随着社会的发展,人们的生活质量不断地提高,各个的城市不断地在发展,当然城市的排水系统得到了很大的发展和改进,由于很多的原因和很多的因素,每个城市的排水系统,现在的城市的发展和建设往往忽略一些重要的项目那就是排水系统。
所以好多的城市经常出现开挖已经建设好的建筑和工程设施来改进排水系统因此他们忽视到这个问题的严重性。
因此,我的论文设计是采用以AT89C51单片机为核心的高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法它还有一个重要的指标那就是低成本一种的设计方法。
通过一系列的实验反馈,这个软件设计的非常的合理、低成本、实时性良好,经过开发和研究,因此在许多的方面得到很多的发展和有效的解决一些重要的问题比如在汽车的倒车,建筑的工地上,还有一些重要的工业现场的重要的位置等等。
关键词:超声波测距仪AT89C51The design of ultrasonic range finder based onMCS51Abstract:With the development of science and technology, the improvement of people'sstandard of living, speeding up the development and construction of the city. urban drainagesystem have greatly developed their situation is constantly improving. control system Freesewage culvert clear guarantee robot, the robot is designed to clear the culvert sewage to thecore.At the core of the design using AT89C51 low-cost, high accuracy, Micro figures show that theultrasonic range finder hardware and software design methods. signal processing, and theultrasonic range finder function. On the basis of the overall system design, hardware andsoftware by the end of each module.Keywords: Silent Wave Measure Distance AT89S52目录第一章绪论 ................................................ - 1 -1.1课题设计的目的和意义 (1)1.2超声波测距仪设计思路 (1)1.2.1超声波测距原理及方案论证 (1)1.2.2超声波测距仪原理框图 (2)第二章课程的方案设计 ...................................... - 3 -2.1系统整体方案的设计 (3)第三章 51系列单片机的功能特点及测距原理 ................... - 3 -3.1基于51系列单片机的功能特点 (3)3.2单片机实现测距原理 (4)3.3超声波测距原理和结构 (5)3.4超声波检测发射电路 (5)3.5超声波检测接受电路 (5)第四章系统的软硬件的调试和程序图 .......................... - 6 -总结 ..................................................... - 10 -致谢 ..................................................... - 10 -参考文献 .................................................. - 11 -第一章绪论1.1课题设计的目的和意义论文设计目的;随着社会的不断地发展,电子测量技术得到了长远的展,超声波的精准测量得到了科技人员的重视和研究。
51单片机课程设计 超声波测距仪
华中师范大学武汉传媒学院传媒技术学院课程设计报告华中师范大学武汉传媒学院传媒技术学院电子信息工程2011仅发布百度文库,版权所有.一、设计题目及原理超声波测距仪超声波测距仪是利用反射的原理测量距离的,被测距离一端为超声波传感器,另一端必须有能反射超声波的物体。
测量距离时,将超声波传感器对准反射物发射超声波,并开始计时,超声波在空气中传播到达障碍物后被反射回来,传感器接收到反射脉冲后立即停止计时,然后根据超声波的传播速度和计时时间就能计算出两端的距离。
测量距离D为式中c——超声波的传播速度;——超声波发射到接收所需时间的一半,也就是单程传播时间。
由上式可风,距离的测量精度主要取决于计时精度和传播速度两方面。
计时精度由单片机定时器决定,定时时间为机器周期与计数次数的乘积,可选用12MHz的晶振,使机器周期为精确的1µs,不会产生累积误差,使定时间达到1µs。
超声波的传播速度c并不是固定不变的,传播速度受空气密度、温度和气体分子成分的影响,关系式为式中γ——气体定压热容与定容热容的比值,空气为1.40R——气体普适常数,为8.314kg/molT——气体势力学温度,与摄氏温度的关系是T=273K+tM——气体相对分子质量,空气为28.8×10-3kg/mol——0℃时的声波速度,为331.4m/s由上式可见,超声波在空气中传播时,受温度影响最大,由表达式可计算出波速与温度的关系,如表2.1所示。
温度越高,传播速度越快,而且不同温度下传播速度差别非常大,例如0℃时的速度为332m/s,30℃时的速度为350m/s,相差18m/s。
因此,需要较高的测量精度时,进行温度补偿是最有效的措施。
对测量精度要求不高时,可认为超声波在空气中的传播速度为340m/s。
超声波传播速度与温度关系表二、设计框图超声波测距仪系统结构如下图所示。
它主要由单片机、超声波发射及接收电路、超声波传感器、温度传感器、键盘、LED显示电路及电源电路组成。
基于51单片机超声波测距仪设计
个性化实验基于51单片机超声波测距器设计摘要传统地测距方法存在不可克服地缺陷.例如,液面测量就是一种距离测量,传统地电极法是采用差位分布电极,通过给电或脉冲来检测液面,电极由于长期浸泡于水中或其他液体中,利用超声波测量距离就可以解决这些问题,因此超声波测量距离技术在工业控制、勘探测量、机器人定位和安全防范等领域得到了广泛地应用.本设计以STC89C52单片机为核心控制定时器产生超声波脉冲并计时,计算超声波自发射至接收地往返时间,从而得到实测距离.并且在数据处理中采用了温度补偿对声速进行调整,用1602液晶显示速度和测量距离.整个硬件电路有超声波电路、电源电路、显示电路等组成.个探头地信号经单片机综合分析处理,实现超声波测距器地功能.在此基础上设计了系统地总体方案,最后通过硬件和软件实现了测距功能.此系统具有易控制、工作可靠、测距准确度高、可读性强和流程清晰等优点,即过系统扩展和升级,可以有效地解决汽车倒车,建筑施工工地以及一些工业现场地位置监控.关键词:STC89C52;超声波;温度补偿;测距目录绪论 (3)设计目地和意义 (3)设计任务和要求 (3)系统方案设计 (4)设计原理 (4)设计框图 (5)主要元器件介绍 (5)STC89C52 (5)LCD1602液晶显示器 (6)HC-SR04超声波模块 (8)DS18B20温度传感器 (9)系统硬件结构设计 (10)单片机电路 (10)LCD显示电路 (11)温度补偿电路 (11)电源电路 (12)系统软件设计 (12)主程序流程 (12)测距流程图 (13)测试 (14)测试结果 (14)误差分析 (15)总结 (15)附录 (17)整体电路图 (17)PCB布线图 (18)实物图 ......................................................................................................错误!未定义书签。
基于51单片机的超声波测距系统设计【毕业作品】
基于51单片机的超声波测距系统设计摘要本次系统的设计主要包括两部分,即硬件电路和软件程序。
硬件电路主要包括单片机电路、发射电路、接收电路、显示电路和电源电路等。
本次设计采用以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路。
整个电路采用模块化设计,由信号发射和接收、供电、显示等模块组成。
发射探头的信号经放大和检波后发射出去,单片机的计时器开始计时,超声波被发射后按原路返回,信号被接受电路接受,然后被单片机接收,计数器停止工作并得到时间。
软件程序主要由主程序、预置子程序、发射子程序、接收子程序、显示子程序等模块组成。
它控制单片机进行数据发送与接收,实现数据正确显示在数码管上。
另外程序控制单片机消除各探头对发射和接收超声波的影响。
相关部分附有硬件电路图、程序流程图。
实际的环境对超声波有很大的影响,如外部电磁干扰电源干扰信道干扰等等,空气的温度对超声波的速度影响也很大,此外供电电源也会使测量差生很大的误差。
由于知识面有限,作品还有许多可以改进的地方,希望在日后的学习中能将作品完善的更好。
关键词:AT89C51;超声波;测距51 MCU-based Ultrasonic Ranging System DesignAbstractThe system's design includes two parts, namely the hardware circuit and software program.The hardware circuit includes a microcontroller circuit, the transmitting circuit, the receiving circuit, display circuit and the power supply circuit. The design uses AT89C51 microcontroller as the core of low-cost, high-precision, miniaturization of digital hardware circuit of the ultrasonic range finder. The entire circuit is modular in design, by the signal transmitter and receiver, power supply, display modules. Transmitted probe signal is amplified and detector were launched out single-chip timer is started, the ultrasonic was launched after the original way back, a signal is accepted by a receiving circuit, then MCU receives the counter stop working and time. Software program from the main program, preset subroutine emission subroutine, receive subroutine, subroutines modules. It microcontroller to send and receive data, data display correctly in the digital control. In addition, program-controlled microcontroller to eliminate the impact of the probe for transmitting and receiving ultrasonic waves. With relevant parts of the hardware circuit diagram, process flow chart.Actual environment has a great influence on the ultrasonic waves, such as an external electromagnetic interference power interfering channel interference, etc., the temperature of the air is also a great influence on the speed of the ultrasonic addition, the power supply to the measured differential raw large errors. Due to the limited knowledge, works there are many areas for improvement, can work better in the future study.Keywords: AT89C51;Ultrasonic;Ranging目录1.绪论 (1)1.1课题背景及重要意义 (1)1.2 研究内容 (2)1.3主要任务及目标: (2)2.整体设计思路 (3)2.1硬件整体设计 (3)2.2软件整体设计思路 (5)3.硬件设计 (5)3.1对超声波的认识 (5)3.2器材的选择 (6)3.3.单片机最小系统 (9)3.4超声波发射电路 (10)3.5超声波接收电路设计 (11)3.6显示电路设计 (13)4.软件设计 (14)4.1主程序设计 (14)4.2中断处理程序 (17)4.3计算及显示模块设计 (19)4.4作品展示: (21)5.设计总结 (21)参考文献 (22)谢辞 (24)系统整体电路图 (25)程序代码 (26)1.绪论1.1课题背景及重要意义近年来,随着电子测量技术的发展,运用超声波作出精确测量已成可能。
超声波测距系统 基于51单片机的超声波倒车测距报警系统设计
引言超声波是一种频率在20KHz以上的机械波,在空气中的传播速度约为340 m/s(20°C 时)。
超声波可由超声波传感器产生,常用的超声波传感器两大类:一类是采用电气方式产生超声波,一类是用机械方式产生超声波,目前较为常用的是压电式超声波传感器。
由于超声波具有易于定向发射,方向性好,强度好控制,对色彩、光照度不敏感,反射率高等特点,因此被广泛应用于无损探伤,距离测量、距离开关、汽车倒车防撞、智能机器人等领域。
1 系统原理框图本设计的整体框图如图1所示,主要由超声波发射,超声波接收与信号转换,按键显示电路与温度传感器电路组成。
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差T,然后求出距离S=CT/2,式中的C为超声波波速。
在常温下,空气中的声速约为340m/s。
由于超声波也是一种声波,其传播速度C 与温度有关,在使用时,如果温度变化不大,则可认为声速是基本不变的。
因本系统测距精度要求很高,所以通过对温度的检测对超声波的传播速度加以校正。
超声波传播速度确定后,只要测得超声波往返的时间,如图2所示,即可求得距离。
这就是超声波测距系统的基本原理。
2 超声波信号的发射与接收电路发射部分电路如图3所示,主要由脉冲调制信号产生电路,隔离电路以及驱动电路组成,用来为超声波传感器提供发送信号。
脉冲调制信号产生电路中通过单片机对555定的复位(RESET)端的控制,使555定时器分时工作从而生产生脉冲频率为40KHz,周期为30ms的脉冲调制信号,信号波形如图2所示,本设计中一个周期内发送10个脉冲信号。
隔离电路主要是由两个与非门组成,对输出级与脉冲产生电路之间进行隔离。
输出级由两个通用型集成运放TL084CN 组成,由于超声波传感器的发射距离与其两端所加的电压成正比,因此要求电路要产生足够大的驱动电压,其基本原理就是一个比较电路,当输入信号Vi>2.5V时,运放A的输出电压VA=+12V,运放B的输出电压VB=-12V,当输入信号Vi<2.5V时,运放A的输出电压VA="-12V",运放B的输出电压VB=+12V,所以在超声传感器两端得到两个极性完全相反的对称波形,即VB=-VA,所以加在超声波传感器两端的电压V=VA-VB=2VA,其两端的电压可达到24V,从而保证超声波能够发送较远的距离,提高了测量量程。
51单片机超声波测距设计
51单片机超声波测距设计第一章引言1.1单片机应用系统概述单片机是一个单芯片形态、面向控制对象的嵌入式应用计算机系统。
它的出现及发展使计算机技术从通用型数值计算领域进入到智能化的控制领域。
从此,计算机技术在两个重要领域——通用计算机领域和嵌入式计算机领域都得到了极其重要的发展,并正在深深地改变着我们的社会。
嵌入式系统无疑是当前最热门、最具有发展前景的IT应用之一。
嵌入式系统的应用可以使传统的电子系统升级成为智能化的电子产品,使其成为具有“生命”的现代化智能系统。
嵌入式系统一般应用于对实时响应要求较高的设备中,单片机作为嵌入式系统的核心部件,其应用使电子系统的智能化出现了意想不到的效果,常常无需对硬件资源做任何改动,只需更新系统软件就能使系统功能升级。
现代社会中嵌入式系统无处不在,早已被应用在国防、国民经济、以及人们日常生活的各个领域,主要可以归纳为以下几个方面。
(1)军事装备:各种武器控制(火炮控制、弹道控制、炮弹引信等),坦克、舰船、轰炸等各种电子装备,雷达、电子对抗、军事通讯装备等。
(2)家用电器:各种家电产品,如数字电视、机顶盒、数码相机、VCD、DVD、可视电话、洗衣机、电冰箱、手机、智能玩具等。
(3)工业控制:各种智能仪器仪表、数控装置、可编程控制器、分布式控制系统、工业机器人、机电一体化设备、汽车电子设备等。
(4)商用设备:各种收款机、POS系统、电子秤、条形码阅读器、商务终端、IC 卡输入设备、自动柜员机、防盗系统等。
(5)办公用品:复印机、打印机、传真机、扫描仪、手机、个人数字助理(PDA)、变频空调设备、通信终端、程控变换机、网络设备等。
(6)医疗电子设备:各种医疗电子仪器,如X光机、超声诊断仪、心脏起搏器、监护仪器等,以及辅助诊断系统、专家系统等。
单片机应用系统的设计包括单片机基本扩展、外围电路设计和程序设计、单片机应用系统开发环境、系统可靠性设计、电磁兼容性设计等内容。
通常开发一个单片机系统的步骤如下:图1.1.1 设计步骤1.2超声波测距系统概述在基于传统的测力距离存在不可克服的缺陷。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的超声波测距仪说明书
引言
超声波测距仪,可使用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
利用超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。
一、性能要求
该超声波测距仪,要求测量范围在0.08-3.00m,测量精度1cm,测量时和被测物体无直接接触,能够清晰稳定地显示测量结果。
二、工作原理及方案论证
超声波传感器及其测距原理
超声波是指频率高于20KHz的机械波。
用超声波传感器产生超声波和接收超声波,习惯上称为超声波换能器或超声波探头。
超声波传感器有发送器和接收器.超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(timeofflight)。
首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源和障碍物之间的距离。
根据要求并综合各方面因素,采用AT89C52单片机作为主控制
器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距仪的系统框图如下图所示:
图1 超声波测距仪系统设计框图
三、系统硬件部分
硬件部分主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
1.单片机系统及显示电路
单片机采用AT89C52来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。
单片机通过P1.1引脚发射脉冲控制超声波的发送,然后单片机不停的检测外中断0口INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器和障碍物之间的距离。
显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管驱动。
单片机系统及显示电路如下图所示:
X T A L 2
18X T A L 119A L E 30E A
31P S E N 29R S T
9P 0.0/A D 039P 0.1/A D 138P 0.2/A D 237P 0.3/A D 336P 0.4/A D 435P 0.5/A D 534P 0.6/A D 633P 0.7/A D 732P 1.0/T 21P 1.1/T 2E X 2P 1.23P 1.34P 1.45P 1.56P 1.67P 1.7
8P 3.0/R X D 10P 3.1/T X D 11P 3.2/I N T 012P 3.3/I N T 113P 3.4/T 014P 3.7/R D
17
P 3.6/W R 16P 3.5/T 115P 2.7/A 15
28
P 2.0/A 821P 2.1/A 922P 2.2/A 1023P 2.3/A 1124P 2.4/A 1225P 2.5/A 1326P 2.6/A 1427U 1
A T 89C 52
Q 1
9012
Q 3
9012
Q 4
9012
Q 2
9012
1A 021A 141A 261A 382A 0112A 1132A 2152A 3171O E 12O E
191Y 0181Y 1161Y 2141Y 3122Y 092Y 172Y 252Y 33
U 2
74L S 244
R
510
510
R 1
4.7K
R 2
4.7K
R 3
4.7K
R 4
4.7K
V c c C 13.3u
X T 112M
S 1
C 3
20p
R 8
10K
C 2
20p
G N D
图2 单片机系统及显示电路
2.超声波发射电路
利用555时基电路振荡产生40kHz的超声波信号,使之和换能器的40kHz固有频率一致。
12V电源保证555时基具有足够驱动能力。
P1.1为超声波发射控制信号,由单片机控制。
发射电路如图3所示:
图3 超声波发射电路原理图
3.超声波检测接收电路
超声波接收电路采用集成电路CX20106A,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。
考虑到红外遥控常用的载波频率38KHz和测距超声波频率40KHz较为接近,可以利用它作为超声波检测电路。
实验证明其具有很高的灵敏度和较强的抗干扰能力。
适当改变C4的大小,可改变接受电路的灵敏度和抗干扰能力。
接收电路如图4所示:
图4 超声波接收电路图
四.系统软件部分
超声波测距程序设计软件部分主要由主程序,超声波发射子程序,超声波接受中断程序及显示子程序组成。
下面对超声波测距仪的算法,主程序,超声波发射子程序和超声波接受中断程序逐一介绍。
1.超声波测距仪的算法设计
下图示意了超声波测距的原理,即超声波发生器T在某一时刻发出的一个超声波信号,当超声波遇到被测物体后反射回来,就被超声波接收器R所接受。
这样只要计算出发生信号到接受返回信号所用的时间,就可算出超声波发生器和反射物体的距离。
距离计算公式:d=s/2=(c*t)/2
*d为被测物和测距器的距离,s为声波的来回路程,c为声速,t为
声波来回所用的时间
2.主程序
主程序框图如右图所示:
主程序首先对系统环境初始化,设置定时
器T0工作模式为16位的定时计数器模式,
置位总中断允许位EA并给显示端口P0和
P2清0。
然后调用超声波发生子程序送出
一个超声波脉冲,为避免超声波从发射器
直接传送到接收器引起的直接波触发,需
延迟0.1ms(这也就是测距器会有一个最
小可测距离的原因)后,才打开外中断0接
收返回的超声波信号。
由于采用12MHz的
晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体和测距仪之间的距离,设计时取20℃时的声速为344m/s则有:d=(C*T0)/2=172T0/10000cm(其中T0为计数器T0的计数值)测出距离后结果将以十进制BCD码方式LED,然后再发超声波脉冲重复测量过程。
3.超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过P1.1端口发送超声波发射控制脉冲信号,同时把计数器T0打开进行计时。
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。
进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。
如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。
五.软硬件调试及性能
超声波发射和接收采用Φ15的超声波换能器TCT40-10F1(T发射)和TCT40-10S1(R接收),中心频率为40kHz,保持两换能器中心轴线平行并相距4~8cm。
主要性能指标:测距仪能测的范围为0.08~3.00m,测距仪精度1cm。
程序清单
以下是用汇编语言编写的超声波测距控制源程序:
采用MH晶振
显示缓冲单元在40H~43H,使用内存、、用于计算距离用于标志
脉冲输出端口
中断入口程序
主程序
为显示数据存放单元(
为最高位)
为
位自动重装模式,为位定
时器
初值
初值
;超声波脉冲个数控制(为赋值的一半)
开启测距定时器
收到反射信号时标志位为
;计算距离子程序
;重新开启测距定时器
;测量间隔控制(约
)
中断程序
中断,中断一次
启动计时器,用以计算超声波来回时间
开启发超声波用定时器
中断,发超声波用
;超声波发送完毕,关
;开启接收回波中断
外中断,收到回波时进入
;关计数器
;将计数值移入处理单元
;接收成功标志
延时程序
显示程序
为最高位,为最低位,先扫描高位
:
;共阳数码管不亮,—
距离计算程序计算值×m近似
最高位为,不点亮
;此高位为,先看最高位是否为不亮
;最高位不亮,次高位也不亮
次高位为,先看次高位是否为不亮
;次高位不亮,次高位也不亮
两字节无符号数乘法程序
四字节两字节无符号数除法程序
附程序。