超声波测距的电路设计与单片机编程

合集下载

51单片机超声波测距离(带温度补偿)

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单片机的超声波测距系统设计

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

完满 WORD 格式整理1设计任务本文采纳超声波传感器 ,IAP15 单片机以及 LCD显示模块设计了一种超声波测距显示器,能够实现丈量物体到仪器距离以及显示等功能。

是一种构造简单、性能稳固、使用方便、价钱便宜的超声波距离丈量器,拥有必定的适用价值。

2设计思路超声波测距超声波超声波是指频次在 20kHz 以上的声波,它属于机械波的范围。

最近几年来,跟着电子丈量技术的发展,运用超声波作出精准丈量已成可能。

跟着经济发展,电子丈量技术应用愈来愈宽泛,而超声波丈量精准高,成本低,性能稳固则备受喜爱。

超声波也按照一般机械波在弹性介质中的流传规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质汲取而发生衰减等。

正是因为拥有这些性质,使得超声波能够用于距离的丈量中。

跟着科技水平的不停提升,超声波测距技术被宽泛应用于人们平时工作和生活之中。

一般的超声波测距仪可用于固定物位或液位的丈量,合用于建筑物内部、液位高度的丈量等。

超声在空气中测距在特别环境下有较宽泛的应用。

利用超声波检测常常比较快速、方便、计算简单、易于实现及时控制,并且在丈量精度方面能达到工业适用的指标要求,所以为了使挪动机器人能够自动闪避阻碍物行走,就一定装备测距系统,以使其及时获得距阻碍物的地点信息(距离和方向)。

所以超声波测距在挪动机器人的研究上获得了宽泛的应用。

同时因为超声波测距系统拥有以上的这些长处,所以在汽车倒车雷达的研制方面也获得了宽泛的应用。

超声波测距原理最常用的超声测距的方法是回声探测法,超声波发射器向某一方向发射超声波,在发射时辰的同时计数器开始计时,超声波在空气中流传,途中遇到阻碍物面阻拦就立刻反射回来,超声波接收器收到反射回的超声波就立刻停止计时。

超声波在空气中的流传速度为340m/s,依据计时器记录的时间 t ,就能够计算出发射点距阻碍物面的距离s,即:s=340t/2 。

因为超声波也是一种声波,其声速 V 与温度有关。

用51单片机设计超声波测距系统的设计原理和电路(附源程序)

用51单片机设计超声波测距系统的设计原理和电路(附源程序)

---------------------------------------------------------------最新资料推荐------------------------------------------------------用51单片机设计超声波测距系统的设计原理和电路(附源程序)基于51单片机的超声波测距仪说明书引言超声波测距仪,可使用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。

利用超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。

利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。

一、性能要求该超声波测距仪,要求测量范围在0.08-3.00m,测量精度1cm,测量时和被测物体无直接接触,能够清晰稳定地显示测量结果。

二、工作原理及方案论证超声波传感器及其测距原理超声波是指频率高于20KHz 的机械波。

用超声波传感器产生超声波和接收超声波,习惯上称为超声波换能器或超声波探头。

超声波传感器有发送器和接收器.超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。

超声波测距的原理一般采用渡越时间法 TOF(timeofflight)。

1/ 14首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源和障碍物之间的距离。

根据要求并综合各方面因素,采用 AT89C52单片机作为主控制---------------------------------------------------------------最新资料推荐------------------------------------------------------ 器,用动态扫描法实现 LED 数字显示,超声波驱动信号用单片机的定时器完成,超声波测距仪的系统框图如下图所示:图1 超声波测距仪系统设计框图三、系统硬件部分硬件部分主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。

用51单片机设计超声波测距系统的设计原理及电路(附源程序)

用51单片机设计超声波测距系统的设计原理及电路(附源程序)

基于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三极管驱动。

(完整版)基于单片机的超声波测距仪毕业设计

(完整版)基于单片机的超声波测距仪毕业设计

目录摘要 (1)Abstract (2)第1章绪论 (3)1.1 课题研究的目的与意义 (3)1.2 国内外研究动态 (3)1.3 论文主要内容 (4)第2章系统的总体设计 (5)2.1 设计方案 (5)2.2 系统的硬件选型 (5)2.2.1 单片机选型 (5)2.2.2 超声波传感器选型 (6)2.2.3 超声波接收芯片选型 (6)2.2.4 显示器选型 (7)第3章系统的硬件设计 (8)3.1 基本系统构成 (8)3.1.1 系统电源电路 (9)3.1.2 超声波发射电路 (9)3.1.3 超声波接收电路 (10)3.1.4 晶振电路 (11)3.1.5 复位电路 (11)3.1.6 显示电路 (12)3.1.7 报警电路 (13)3.2 电路原理图 (13)3.3 PCB图 (14)第4章系统的软件设计 (15)4.1 软件keil的简介 (15)4.2 主程序流程 (16)4.3 超声波收发模块程序设计 (16)4.3.1 超声波收发中断子程序 (17)4.3.2 距离测算子程序 (19)4.4 显示模块程序设计 (20)4.4.1 初始化程序 (22)4.4.2 显示程序 (22)4.4.3 延时程序 (23)4.5 现场实测距离显示 (25)第5章结论 (26)5.1 总结 (26)5.2 系统实物图形 (27)5.3 展望 (27)致谢 (28)参考文献 (29)附录 (30)摘要本文阐述了基于51单片机的超声波测距仪的设计过程和运行结果。

AT89C51单片机控制定时器产生方波脉冲,同时计时器T1开始计时。

发出的超声波在空气中传播,而后遇到障碍物体的表面时超声波折返,超声波接收模块接收返回的超声波信号并且把超声波信号转化为电信号。

计时器记录超声波往返所用的时间,从而由51单片机计算得到实测距离。

再使用四位数码管显示距离。

硬件电路由超声波发射电路、超声波接收电路、电源电路、四位数码管显示电路、电铃报警电路、12MHz晶振电路等组成。

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

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

基于51单片机超声波测距报警系统课程设计一、引言超声波测距技术是一种常见的非接触式测距技术,具有测距范围广、精度高等优点。

在日常生活中,超声波测距技术被广泛应用于车辆倒车雷达、智能家居中的人体感应等领域。

本文将介绍基于51单片机的超声波测距报警系统的课程设计。

二、设计思路本课程设计主要分为硬件设计和软件设计两部分。

硬件部分主要包括超声波模块、LCD显示屏、蜂鸣器等模块的连接和电路设计;软件部分主要包括51单片机程序设计及LCD显示程序编写。

三、硬件设计1. 超声波模块连接超声波模块是实现测距功能的核心部件。

在本课程设计中,我们采用HC-SR04型号的超声波模块。

该模块需要连接到51单片机上,具体连接方式如下:- 将VCC引脚连接到51单片机上的5V电源;- 将GND引脚连接到51单片机上的GND;- 将Trig引脚连接到P2.0口;- 将Echo引脚连接到P2.1口。

2. LCD显示屏连接LCD显示屏用于显示测距结果和报警信息。

在本课程设计中,我们采用1602型号的LCD显示屏。

该模块需要连接到51单片机上,具体连接方式如下:- 将VSS引脚连接到51单片机上的GND;- 将VDD引脚连接到51单片机上的5V电源;- 将VO引脚连接到一个10K电位器,再将电位器两端分别接到GND 和5V电源;- 将RS引脚连接到P1.0口;- 将RW引脚连接到P1.1口;- 将EN引脚连接到P1.2口;- 将D4-D7引脚分别连接到P0口的高四位。

3. 蜂鸣器连接蜂鸣器用于报警。

在本课程设计中,我们采用被动式蜂鸣器。

该模块需要连接到51单片机上,具体连接方式如下:- 将正极引脚(一般为长针)连接到51单片机上的P3.7口;- 将负极引脚(一般为短针)连接到51单片机上的GND。

四、软件设计1. 51单片机程序设计在本课程设计中,我们采用Keil C51作为编程工具,使用C语言编写程序。

主要程序流程如下:- 定义超声波模块的Trig和Echo引脚;- 定义LCD显示屏的RS、RW、EN和D4-D7引脚;- 定义蜂鸣器的引脚;- 定义变量存储测距结果和报警状态;- 初始化LCD显示屏、超声波模块等模块;- 循环执行以下操作:- 发送超声波信号并计算回波时间,从而得到距离值;- 根据距离值判断是否需要报警,并控制蜂鸣器发出报警声音;- 将测距结果和报警状态显示在LCD显示屏上。

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

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

基于单片机超声波测距仪的设计一、引言随着科技的进步和应用的广泛,超声波测距技术在各个领域中得到了广泛的应用。

超声波测距技术通过发送超声波并接收其反射信号,利用声波在空气中传播速度恒定的特性,可以精确地测量目标与传感器之间的距离。

基于单片机的超声波测距仪是一种常见的应用,本文将介绍该测距仪的设计原理、硬件和软件实现。

二、设计原理基于单片机的超声波测距仪的设计原理主要包括超声波发射与接收、信号处理和距离计算三个部分。

1. 超声波发射与接收该测距仪通过发送一定频率的超声波脉冲,并接收其反射信号来实现测距功能。

超声波发射器将电信号转换为超声波信号,并经过超声波传感器发射。

当超声波信号遇到目标物体后,一部分信号会被目标物体反射,经超声波传感器接收并转换为电信号。

2. 信号处理接收到的电信号经过放大、滤波和波形整形等处理,使信号能够被单片机准确识别和处理。

放大电路将微弱的接收信号放大到单片机能够处理的范围,滤波电路则去除掉噪声干扰,波形整形电路将信号整形为单片机可读取的数字信号。

3. 距离计算通过测量超声波的发射和接收时间,可以计算出目标物体与传感器之间的距离。

超声波在空气中传播速度恒定,通过测量超声波的往返时间,可以得到距离的数值。

三、硬件设计基于单片机的超声波测距仪的硬件设计主要包括超声波发射与接收电路、信号放大电路、滤波电路、波形整形电路和单片机控制电路等部分。

1. 超声波发射与接收电路超声波发射与接收电路由超声波发射器和超声波传感器组成。

超声波发射器将单片机输出的电信号转换为超声波信号,超声波传感器将接收到的超声波信号转换为电信号。

2. 信号放大电路信号放大电路用于放大传感器接收到的微弱信号,使其能够被后续的电路准确处理。

一般采用放大器电路来实现信号放大功能。

3. 滤波电路滤波电路用于去除信号中的噪声干扰,使后续处理的信号更加准确。

可以采用滤波器电路来实现滤波功能。

4. 波形整形电路波形整形电路将接收到的信号整形为单片机可读取的数字信号。

单片机课程设计超声波测距离

单片机课程设计超声波测距离
距离
超声波测距系 统的功耗:功 耗较低,适合
长时间使用
评估指标:包括测量精度、 响应速度、稳定性等
测试方法:采用标准测试方法, 如距离测量误差、响应时间等
改进建议:针对测试结果,提 出改进方案,如优化算法、提
高硬件性能等
评估结果:对改进后的系统性 能进行再次评估,确保达到预
期效果
总结与展望
课程设计目标:掌握超声波测距原 理,提高实践能力
提高稳定性:通过 优化硬件设计和软 件算法,提高系统 的稳定性
拓展应用领域:将 超声波测距技术应 用于更多领域,如 机器人、无人机等
感谢您的观看
汇报人:
测试条件:温度、湿度、光照、 噪音等
测试方法:静态测试、动态测 试、模拟测试等
准备测试环境:确保测 试环境无干扰,温度适
宜,湿度适中
连接测试设备:将超声 波测距系统与测试设备 连接,确保连接稳定
设定测试参数:设定测 试距离、测试次数、测
试精度等参数
启动测试:启动超声波 测距系统,开始测试
记录测试数据:记录测 试过程中的距离、时间、
超声波传感器通过发射超声波信号,接收反射信号,计算距离 超声波传感器由发射器、接收器和信号处理电路组成 发射器发出超声波信号,接收器接收反射信号,信号处理电路计算距离 超声波传感器的测量精度与发射频率、接收灵敏度、信号处理算法等因素有关
超声波测距原理:通过测量超声波在空气中的传播时间和距离,计算目标物体的距离 误差来源:超声波在空气中的传播速度、温度、湿度、气压等环境因素的影响 误差分析:通过实验数据,分析误差来源和影响程度,提出改进措施 误差补偿:通过软件或硬件方法,对误差进行补偿,提高测量精度
● 优势: a. 控制精度高:可以精确控制超声波发射和接收的时间 b. 响应速度快:可以快速响应超声波信号的变化 c. 功耗低:适合长时间连续工作 d. 体积小:便于携带和安装
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[收稿日期]2003207208
[作者简介]李建法(1955—),男,河南林州人,副教授,
从事自动控制研究。

超声波测距的电路设计与单片机编程
李建法,李立新,李勇,牛洹波
(安阳师范学院物理系,河南安阳455000)
[摘 要]介绍了基于单片机处理的超声波测距系统的组成,工作原理和程序设计方法。本系统可用于需要测量距
离参数的各种应用场合。
[关键词]超声波;单片机;
测距电路
[中图分类号]TP36811 [文献标识码]A [文章编号]167125330(2003)0520047202

距离是在不同的场合和控制中需要检测的一个参数
,

所以,测距就成为数据采集中要解决的一个问题。尽管测距有多种方式,比如,激光测距,微波测距,红外线测距和超声波测距等。但是,超声波测距不失为一种简单可行的方法。虽然超声波测距电路多种多样,甚至已有专用超声波测距集成电路。但是,有的电路复杂,技术难度大,有的调试困难,有的元件不易购买。本文介绍的电路,成本低廉,性能可靠,所用元件易购,并且利用测距原理,结合单片机的数据处理,使测量精度提高,电路实现容易,无须调试,工作稳定可靠。超声波测距通常采用度越时间法,即利用s=vt/2计算被测物体的距离。式中s为收发头与被测物体之间的距离,v为超声波在介质中的传播速度(v=331.41+T/273m/s),t为超声波的往返时间间隔。工作原理为:发射头发出的超声波以速度v在空气中传播,在到达被测物体时被其表面反射返回,由接收头接收,其往返时间为t,由s算出被测物体的距离。T为环境温度,在测量精度要求高的场合必须考虑此影响,但在一般情况下,可舍去此法,由软件进行调整补偿。1 电路设计电路框图如图1所示。图1 整机电路框图111超声波发送电路超声波发送电路如图2所示。555电路产生40KH的振荡信号,门电路产生低频调制脉冲,脉冲持续时间为160μs左右,脉冲间隔为30—40ms(视需要调整)。此脉冲信号一路作为振荡器的置位脉冲,另一路作为计时的起始
脉冲。在置位期间,振荡器输出频率为40KH的脉冲信号
(约8个脉冲)
,由超声波发射头T40—16
发射出去。

图2 超声波发送电路
112
超声波接收电路

图3 超声波收电路
超声波的接收电路如图3所示。它采用通用的FPS—
4091红外接收组件,但是,需要将红外接收管PH302
换为
超声波接收头R40—16。因为在距离较远时,回波信号很
弱,使用此接收组件,可以在有效的测距范围内保证接收
到的信号其输出达到TTL电平,避免了为达到几十万倍的
放大量而采用多级运放组成的调试困难的高增益放大电
路,十分便于制作,且电路无需调试。图中T为进一步整
形放大,可增大测量距离,反相器为满足单片机需要不同
极性的信号而加入。

2
 软件设计
本系统的程序主要包括启、停脉冲检测,计时,盲区延

74
2003
年 安阳师范学院学报
© 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
时,数据处理,修正,显示等。因为采用的是渡越时间法进行测距,所以要测出超声波收、发之间的时间t,则距离s=图4 发收端工作时序图vt/2。电路的工作时序如图4所示,其中a脉冲为发送端的置位脉冲,同时作为计时器的起始脉冲;b脉冲为虚假脉冲(由绕射产生,应避开);a、b的时间间隔为盲区;c脉冲为接受端接收到的有效回波脉冲,用于停止计时器的计时。程序的主要任务就是检测a、c脉冲,以启停计时器的计时,进而得出时间,再由数据处理、修正单元计算出实际距离,然后供显示。因为现在有多种不同的单片机,实际制作中根据习惯,采用不同系列的产品,所以,本文主要给出程序流图(见图5),说明编程思路,以及采用AT89C2051处理器的计时部分程序。计时部分程序如下:图5 ……
M1:JNBP1.0,M11;
起始脉冲
LJMPM1
M11:
;延时6ms,避开盲区=====
DL3:MOVR5,#6
DL31:MOVR6,#100
DL32:NOP
NOP
NOP
DJNZR6,DL32
DJNZR5,DL31
;计时=====
MOVR1,#0
M2:MOVR0,#0
M3:JNBP1.1,M5;
停止脉冲
INCR0
CJNER0,#100,M3
MOVR0,#0
INCR1
CJNER1,#15,M2;
最大测量距离限制
;计时结束,t=6ms+R030.1ms+R1310030.1ms===
===
M5:
……

[参考文献]
[1]何立民1单片机应用系统设计[M]1北京:
北京航空航
天出版社,19901
[2]何希才1新型集成电路及应用[M]1北京:
科学技术出
版社,20011

UltrasonticRangeFindingSystemBasedonMicrocontroller
LIJian2fa,LILi2xin,LIYong,NIUHuan2bo
(PhysicsDepartmentofAnyangTeachersCollege,Anyang455000,China)
Abstract:Thepaperpresentsthedesignofanultrasonicrangefindingsystembaseonmicrocontroller,Italsogivesa
detailedintroductiontothesoftwaretechnologyforimplementationaswellastheusesandscopesofthesystem
1
Keywords:ultrasonic;microcontroller;rangedetectingcirculum

84
安阳师范学院学报 2003年
© 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

相关文档
最新文档