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

合集下载

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单片机超声波测距系统方案

目录摘要 (1)一. 绪论 (2)二.超声波测距的原理 (3)2.1 超声波的基本理论 (3)2.2 超声波测距系统原理 (7)三. 系统硬件的具体设计与实现 (8)3.1 系统原理和框图 (8)3.2 功能模块的设计 (8)3.2.1 单片机介绍 (8)3.2.1.1 AT89C51管脚说明 (9)3.2.1.2 AT89C51主要特性 (10)3.2.1.3芯片擦除 (11)3.2.2 超声波测距模块HC-SR04 (11)3.2.2.1 产品特点 (11)3.2.2.2 基本原理 (12)3.2.2.3 电气参数 (12)3.2.2.4 超声波时序图 (12)四. 系统软件设计 (13)1. 程序设计思路 (13)2. 程序流程图 (13)3. 程序 (14)五. 总结 (15)六. 致 (16)七. 参考文献 (17)八.附录 (18)1.原理图 (18)2.PCB图 (19)3.主程序 (19)摘要基于传统的测距方法在很多特殊场合:如带腐蚀的液体,强电磁干扰,有毒等恶劣条件下,测量距离存在不可克服的缺陷,超声波测距能很好的解决此类的问题。

本系统主要以AT89C51单片机为核心,结合超声波测距模块HC-SR04、数码管、蜂鸣器等硬件平台,对超声波测距系统的原理、数码管显示、单片机的应用等进行了分析和验证。

关键词:超声波测距模块,AT89C51,数码管。

AbstractIn many special occasions, traditional measuring distance methods based on the existence of insurmountable distance measuring defects, such as the measurement of corrosion in the liquid with strong electromagnetic interference, toxic and other adverse conditions. The ultrasonic range can be a very good solution to the problem. This system mainly uses AT89C51 microcontroller as the core,hardware platform combined with the HC-SR04 ultrasonic ranging module,digital tube,buzzer etc. Analyzed and validated the principle of ultrasonic ran,d igital tube’s display,the application of single-chip microcomputer etc.Keywords: ultrasonic ranging module,AT89C51,Digital tube.一. 绪论随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。

基于51单片机超声波测距.

基于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程序

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

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

一种基于51单片机的超声波测距设计

一种基于51单片机的超声波测距设计作者:孙李生来源:《魅力中国》2018年第46期摘要:在日常生活中,测量距离具有重要意义。

在实际的生产过程中,采用超声波测距的方法具有造价低、应用领域广的明显优势。

对此,本文介绍了一种基于51单片机的超声波测距设计,该系统选用STC89C-51单片机作为处理芯片,采用超声波模块HC-SR04进行距离测量。

该系统具有结构简单、成本低、操作方便、测量精度高等优点。

关键词:51单片机;超声波;测距;温度一、绪论距离是在不同的场合和控制中需要检测的一个参数,测距成为数据采集中要解决的一个问题。

而超声波是一种频率高于20kHz,波长较短,在空气中传播过程中以纵波形式传输的机械波。

由于超声波的速度相对光速小的多,具有较好的方向性,其傳播时间比较容易检测,并且易于定向发射,方向性好,强度好控制,因而人类采用仿真技能利用超声波测距。

超声波测距是一种利用超声波特性、电子技术、光电开关相结合来实现非接触式距离测量的方法。

因为它是非接触式的,所以它就能够在某些特定场合或环境比较恶劣的情况下使用。

二、超声波电路原理超声波测距是借助于超声波脉冲回波渡越世间法来实现的。

设超声波脉冲由传感器发出到接收所经历的时间为t,在空气中的传播速度为c,则距离s可由以下公式求出:s = c*t/2本文采用的超声波模块是HC-SR04,当模块的触发信号发出10μs的高电平之后,模块自动发出8个40Khz的方波,并自动检测是否有信号返回;当有信号返回时,通过51单片机上的IO口输出一个高电平,此时高电平持续的时间就是超声波从发射到返回的时间。

该模块的有效测量范围为0.02~4 m,能够达到毫米级的测量精度。

三、超声波测距系统的组成本系统的主体框架包含以下几个部分:由STC89C51主控芯片、超声波测距电路、显示电路、复位电路、供电电路等几部分组成,STC89C51单片机外接5 V直流电源,采用了12V转5V的稳压电源。

51单片机红外解码、超声波测距程序(详细解释程序)

51单片机红外解码、超声波测距程序(详细解释程序)

// c51红外解码、超声波测距程序#include <reg52.h>#define uchar unsigned char#define uint unsigned int#define count 4uchar data IRcode[4]; //定义一个4字节的数组用来存储代码uchar table[4];uchar enled[4]={0x1f,0x2f,0x4f,0x8f};uchar CodeTemp,temp,tt; //编码字节缓存变量uchari,j,k,temp,timeH,timeL,succeed_flag,flag,h,h1,h2,a,key,key1,key2; //延时用的循环变量uint distance,distance1,time; //距离,timesbit IRsignal=P3^2; //HS0038接收头OUT端直接连P3.2(INT0)sbit come=P3^3;sbit d=P1^1;//发送码sbit BZ=P1^0;sbit s=P3^7;//38ksbit ss=P3^6;//38kuchar m;// 开关控制//sbit n=P2;//电机反转code unsigned charseg7code[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28}; //显示段码/**************************** 定时器0中断************************/void timer0() interrupt 1{TH0=(65536-count)/256;TL0=(65536-count)%256;s=~s;//产生38K信号ss=~ss;//tt++;//发送超声波个数}/**************************** 延时0.9ms子程序************************/void Delay0_9ms(void){uchar j,k;for(j=18;j>0;j--)for(k=20;k>0;k--);}/***************************延时1ms子程序**********************/void Delay1ms(void){uchar i,j;for(i=2;i>0;i--)for(j=230;j>0;j--);}/***************************延时4.5ms子程序**********************/ void Delay4_5ms(void){uchar i,j;for(i=10;i>0;i--)for(j=225;j>0;j--);}/**************************** 解码延时子程序************************/ void Delay(void){uchar i,j,k;for(i=100;i>0;i--)for(j=100;j>0;j--)for(k=3;k>0;k--);}/**************************** 显示延时子程序************************/ void ledDelay(unsigned int tc) //延时程序{unsigned int i,j;for(i=0;i<10;i++)for(j=0;j<tc;j++);}/************************************************ ****************///定时器1中断,用做超声波测距无回波void timer1() interrupt 3{TR1=0;ET1=0;EX1=0;TH1=0;TL1=0;}/***********************显示程序*********************/ void Led(int date) //显示函数{ int i;table[0]=date/1000;table[1]=date/100%10;table[2]=date/10%10;table[3]=date%10;date=0;for(i=0;i<120;i++){P2=enled[i%4]&m;//P2口高四位控制数码管,低位陪分控制继电器P0=seg7code[table[i%4]]; //取出千位数,查表,输出。

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

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单片机程序与电路图1

超声波测距 含51单片机程序与电路图1

超声波测距摘要该超声测距系统采用芯片STC89C52作为系统的主控制器,利用NE555作为本系统的脉冲发射源,结合3位7段数码管液晶显示,达到了较大的测试距离和较高的测量精度,并能实时显示且无明显失真。

关键字: 超声波测距实时第1章设计题目与要求1.1 设计要求采用压电式超声波换能器,使用单片机作为控制器,完成超声波测距仪的软硬件设计。

1.2 基本要求:(1)具有反射式超声波测距功能,测量距离0.1m~3.0m;(2)测量距离精度:误差±1cm;(3) 利用LED数码管显示测试距离;(4)实时显示测量的距离,显示格式为:□.□□米第2章系统总体方案论证2.1 系统总体方案题目要求设计一个利用超声波反射原理测量距离的超声波测距仪,并且具有实时同步显示,由此本系统可以划分为发射、接收、显示、主控制模块共四大模块,如图2.1所示:图2.1系统基本方框图针对技术指标的需要,为使系统的测量距离更远、精度更高,提高系统的整体完善性,现对以上系统各个功能模块进行一一的方案论证:2.2 主控制模块2.2.1 主控制模块概述主控制器模块其实就是一个简化的嵌入式系统。

嵌入式系统一般指非PC系统,有计算机功能但又不称之为计算机的设备或器材。

它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。

嵌入式系统的核心是嵌入式微处理器。

2.2.2 主控制模块方案选择根据以上知识,考虑到目前市场上比较常用的AVR、61、51三种微控制器,我们有如下三种方案可供选择。

方案一:AVR单片机AVR单片机种类丰富,有AT tiny、AT90S、ATmeg系列,各个系列又有不同的型号,价格较适中。

相对来说,比起51单片机来说资源较丰富,内部也有集成A/D ,有PWM 输出,但在系统进一步扩展方面不是很好,这类单片机主要应用于工业控制领域,在语音处理方面没有什么优势。

方案二:SPCE061A.凌阳单片机的资源相对来说比较丰富,32K ×16bitFlash ,两路D/A ,1个全双工异步串行口(UART )方便其跟其他为控制通信。

51单片机开发板-超声波测距-数码管显示

51单片机开发板-超声波测距-数码管显示

计算机技术系项目工作报告课程名称单片机开发板设计与制作实训班级学号姓名项目名称超声波测距,数码管显示实训日期/时间2015.6.23-2015.7.5 地点指导教师同组成员仪器设备(参考资料)计算机、Keil uVision2、Proteus ISIS 电烙铁、开发板、HC-SR04超声波模块实训内容(任务安排)1焊接开发板2自选课题3开发与调试4项目汇报与总结一、项目名称与要求项目名称:超声波测距,数码管显示功能描述:采用HC-SR04超声波模块,STC89C52单片机以及数码管显示设计的一种超声波测距显示器,可以实现测量物体到仪器距离以及显示等功能,可以测量范围为2cm –450cm ,精确度为1cm。

是一种结构简单、性能稳定、使用方便、价格低廉的超声波距离测量器,具有一定的实用价值。

二、项目设计思路1、硬件资源单片机开发板(携带数码管);HC-SR04超声波模块;STC89C52芯片;2、软件设计思路软件设计采用C语言编程,运用模块化程序设计思想,对不同功能模块的程序进行分别编程,以便移植或调用,这样使软件层次结构清晰,有利于软件的调试修改。

软件设计思路是:系统初始化、发射脉冲串、计时、接收输入脉冲,接收串口输入速度值、计算距离、显示距离值、重复。

超声波测距算法设计如下:超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就会被超声波接收器R接收到。

这样,只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器于反射物体的距离。

该距离的计算公式如下:d=s/2(v×t)/2其中:d为被测物于测距器的距离;s为声波的来回路程;v为声速;t为声波来回所用的时间。

超声波测距原理图如下:3、项目涉及的知识点说明HC-SR04超声波模块简介:实物图:正面:背面:HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 1cm;模块包括超声波发射器、接收器与控制电路。

51单片机超声波测距程序

51单片机超声波测距程序

//超声波测距,测距X围2cm-400cm; #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit 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;TL0=0;EA=0;ET0=0;EX0=0;}/*外部中断函数*/void estern() interrupt 0{timeh=TH0;timel=TL0;beer();flag=1;//进入中断,标志位就置1 EX0=0;//同时关断外部中断和定时器 TR0=0;}/*显示函数*/void display(distance) {bai=distance/1000;shi=distance%1000/100; ge=distance%100; xiaoshu=distance%10;dula=1;P0=list[xiaoshu];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(2);P0=listtwo[ge]; dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(2);dula=1;P0=list[shi]; dula=0;P0=0xff;wela=1;P0=0xfd;delay(1);dula=1;P0=list[bai]; dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);}/*被调用子函数*/ void diaoyong(){uint i;EA=0;echo=1;//为了检测电平的上下,首先必须拉高trig=1;delay20us();trig=0;while(echo==0);//如果进入中断即接收到超声波就向下执行flag=0;//接收到就去除标志位EA=1;//同时打开总中断EX0=1;//打开外部中断TR0=1;//开定时器TH0=0;//定时器清零TL0=0;for(i=0;i<100;i++)//等待测量的结果{display(distance);//用100次显示循环来延时,解决数码管显示不亮问题}//delay(50);//用延时函数数码管闪烁TR0=0;//延时一段时间后关断定时器EX0=0;//延时一段时间后关断外部中断if(flag==1)//如果进入中断,说明测距已经测好{time=timeh*256+timel;//计算测定距离,并显示distance=time*0.1720;display(distance);}if(flag==0)//如果没有进入中断,距离为0,同时灯闪烁{distance=0;test=!test;}}word/*主函数*/void main(){initime0();test=0;trig=0;EA=1;while(1){diaoyong();display(distance);}}11 / 11。

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

超声波测距系统 基于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单片机设计超声波测距系统的设计原理和电路(附源程序)

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

51单片机超声波测距设计

51单片机超声波测距设计

51单片机超声波测距设计第一章引言1.1单片机应用系统概述单片机是一个单芯片形态、面向控制对象的嵌入式应用计算机系统。

它的出现及发展使计算机技术从通用型数值计算领域进入到智能化的控制领域。

从此,计算机技术在两个重要领域——通用计算机领域和嵌入式计算机领域都得到了极其重要的发展,并正在深深地改变着我们的社会。

嵌入式系统无疑是当前最热门、最具有发展前景的IT应用之一。

嵌入式系统的应用可以使传统的电子系统升级成为智能化的电子产品,使其成为具有“生命”的现代化智能系统。

嵌入式系统一般应用于对实时响应要求较高的设备中,单片机作为嵌入式系统的核心部件,其应用使电子系统的智能化出现了意想不到的效果,常常无需对硬件资源做任何改动,只需更新系统软件就能使系统功能升级。

现代社会中嵌入式系统无处不在,早已被应用在国防、国民经济、以及人们日常生活的各个领域,主要可以归纳为以下几个方面。

(1)军事装备:各种武器控制(火炮控制、弹道控制、炮弹引信等),坦克、舰船、轰炸等各种电子装备,雷达、电子对抗、军事通讯装备等。

(2)家用电器:各种家电产品,如数字电视、机顶盒、数码相机、VCD、DVD、可视电话、洗衣机、电冰箱、手机、智能玩具等。

(3)工业控制:各种智能仪器仪表、数控装置、可编程控制器、分布式控制系统、工业机器人、机电一体化设备、汽车电子设备等。

(4)商用设备:各种收款机、POS系统、电子秤、条形码阅读器、商务终端、IC 卡输入设备、自动柜员机、防盗系统等。

(5)办公用品:复印机、打印机、传真机、扫描仪、手机、个人数字助理(PDA)、变频空调设备、通信终端、程控变换机、网络设备等。

(6)医疗电子设备:各种医疗电子仪器,如X光机、超声诊断仪、心脏起搏器、监护仪器等,以及辅助诊断系统、专家系统等。

单片机应用系统的设计包括单片机基本扩展、外围电路设计和程序设计、单片机应用系统开发环境、系统可靠性设计、电磁兼容性设计等内容。

通常开发一个单片机系统的步骤如下:图1.1.1 设计步骤1.2超声波测距系统概述在基于传统的测力距离存在不可克服的缺陷。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

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

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

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

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

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

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

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

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

1.单片机系统及显示电路单片机采用AT89C52来实现对CX20106A 红外接收芯片和 TCT40-10系列超声波转换模块的控制。

单片机通过 P1.1引脚发射脉冲控制超声波的发送,然后单片机不停的检测外中断0口 INT0引脚,当 INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。

计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器和障碍物之间的距离。

显示电路采用简单实用的4位共阳 LED 数码管,段码用74LS244驱动,位码用 PNP 三极管驱动。

单片机系统及显示电路如下图所示:3/ 14图 2 单片机系统及显示电路 2.超声波发射电路C2GND20pC320pR810KXT112MU119 XTAL118 XTAL29 RSTC1 S13.3u29 30 31PSEN ALE EA1 2 3 4 5 6 7 8P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7AT89C52P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD739 38 37 36 35 34 33 32P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A1521 22 23 24 25 26 27 28P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD10 11 12 13 14 15 16 17U22 4 6 8 11 13 15 171A0 1A1 1A2 1A3 2A0 2A1 2A2 2A31 191OE 2OE74LS2441Y0 1Y1 1Y2 1Y3 2Y0 2Y1 2Y2 2Y318 16 14 12 9 7 5 3VccR 510510Q19012R1R24.7K4.7KQ29012R34.7KQ3Q490129012R44.7K---------------------------------------------------------------最新资料推荐------------------------------------------------------ 利用555时基电路振荡产生40kHz 的超声波信号,使之和换能器的40kHz 固有频率一致。

12V 电源保证555时基具有足够驱动能力。

P1.1为超声波发射控制信号,由单片机控制。

发射电路如图3所示:图3 超声波发射电路原理图 3.超声波检测接收电路超声波接收电路采用集成电路 CX20106A,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。

考虑到红外遥控常用的载波频率38KHz 和测距超声波频率40KHz 较为接近,可以利用它作为超声波检测电路。

实验证明其具有很高的灵敏度和较强的抗干扰能力。

适当改变 C4的大小,可改变接受电路的灵敏度和抗干扰能力。

接收电路如图4所示:5/ 14图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,然后再发超声波脉冲重复测量过程。

7/ 143.超声波发生子程序和超声波接收中断程序超声波发生子程序的作用是通过 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,使用内存、、用于标志脉冲输出端口中断入口程序用于计算距离---------------------------------------------------------------最新资料推荐------------------------------------------------------ 时器主程序为显示数据存放单元(为最高位)为位自动重装模式,为位定初值初值;超声波脉冲个数控制(为赋值的一半)开启测距定时器收到反射信号时标志位为;计算距离子程序;重新开启测距定时器;测量间隔控制(约)中断程序9/ 14中断,中断一次来回时间中断,发超声波用外中断,收到回波时进入启动计时器,用以计算超声波开启发超声波用定时器;超声波发送完毕,关;开启接收回波中断;关计数器;将计数值移入处理单元;接收成功标志延时程序为最高位,:显示程序为最低位,先扫描高位---------------------------------------------------------------最新资料推荐------------------------------------------------------ ;共阳数码管不亮,—距离计算程序计算值×m 近似最高位为,不点亮;此高位为,先看最高位是否为不亮11/ 14;最高位不亮,次高位也不亮次高位为,先看次高位是否为不亮;次高位不亮,次高位也不亮两字节无符号数乘法程序---------------------------------------------------------------最新资料推荐------------------------------------------------------ 四字节两字节无符号数除法程序13/ 14附程序。

相关文档
最新文档