单片机接受单片机超声波测距论文的距离控制LED灯

单片机超声波传感器测量距离
> 单片机超声波传感器测量距离
单片机超声波传感器测量距离
一、设计要求设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.10-3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。本文引用地址:二、设计思路超声波传感器及其测距原理超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超生波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。超声波测距的原理一般采用渡越时间法TOF(timeofflight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离测量距离的方法有很多种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。因为超声波在标准空气中的传播速度为331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波可以用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求。超声波发生器可以分为两类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。本课题属于近距离测量,可以采用常用的压电式超声波换能器来实现。根据设计要求并综合各方面因素,可以采用AT89S51单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距器的系统框图如下图所示:超声波测距器系统设计框图三、系统组成硬件部分主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。采用AT89S51来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。软件部分主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序等部分。四、系统硬件电路设计1.单片机系统及显示电路单片机采用89S51或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接受电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管驱动。单片机系统及显示电路如下图所示 单片机及显示电路原理图2.超声波发射电路原理图参考期刊如图所示: 超声波发射电路原理图压电超声波转换器的功能:利用压电晶体谐振工作。内部结构上图所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一超声波发生器;如没加电压,当共振板接受到超声波时,将压迫压电振荡器作振动,将机械能转换为电信号,这时它就成为超声波接受转换器。超声波发射转换器与接受转换器其结构稍有不同。3.超声波检测接受电路参考红外转化接收期刊的电路采用集成电路CX20106A,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38KHz与测距超声波频率40KHz较为接近,可以利用它作为超声波检测电路。实验证明其具有很高的灵敏度和较强的抗干扰能力。适当改变C4的大小,可改变接受电路的灵敏度和抗干扰能力。超声波接收电路图五、系统程序设计超声波测距软件设计主要由主程序,超声波发射子程序,超声波接受中断程序及显示子程序组成。下面对超声波测距器的算法,主程序,超声波发射子程序和超声波接受中断程序逐一介绍。1.超声波测距器的算法设计下图示意了超声波测距的原理,即超声波发生器T在某一时刻发出的一个超声波信号,当超声波遇到被测物体后反射回来,就被超声波接收器R所接受。这样只要计算出发生信号到接受返回信号所用的时间,就可算出超声波发生器与反射物体的距离。距离计算公式:d=s/2=(c*t)/2*d为被测物与测距器的距离,s为声波的来回路程,c为声速,t为声波来回所用的时间声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返时间,即可求得距离。在系统加入温度传感器来监测环境温度,可进行温度被偿。这里可以用DS18B20测量环境温度,根据不同的环境温度确定一声速提高测距的稳定性。为了增强系统的可靠性,应在软硬件上采用抗干扰措施。不同温度下的超声波声速表温度/-30-20-100102030100声速c(m/s)3133193253233383443493862.主程序主程序首先对系统环境初始化,设置定时器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.0端口发送2个左右的超声波信号频率约40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。六.软硬件调试及性能超声波测距仪的制作和调试,其中超声波发射和接收采用&P15的超声波换能器TCT40-10F1(T发射)和TCT40-10S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.07~5.5m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。后续工作需实验后才能验证根据参考电路和集成的电路器件测距范围有限10m以内为好。程序清单以下是用汇编语言编写的超声波测距控制源程序:采用AT89S51 12MHz晶振显示缓冲单元在40H~43H,使用内存44H、45H、46H用于计算距离20H用于标志VOUT EQU P1.0 ;脉冲输出端口*中断入口程序*ORG 0000H LJMP STARTORG 0003H LJMP PINT0ORG 000BH LJMP INTT0ORG 0013H RETIORG 001BH LJMP INTT1ORG 0023HRETIORG 002BH RETI*主程序*START: MOV SP, #4FH MOV R0, #40H ;40~43H为显示数据存放单元(40为最高位) MOV R7,#0BHCLEARDISP:MOV @R0, #00H INC R0 DJNZ R7, CLEARDISP MOV 20H, #00H MOV TMOD, #21H ;T1为8位自动重装模式,T0为16位定时器 MOV TH0, #00H ;65ms初值 MOV TL0, #00H ;40KHz初值 MOV TH1, #0F2H MOV TL1, #0F2H MOV P0, #0FFHMOV P1, #0FFH MOV P2, #0FFH MOV P3, #0FFHMOV R4, #04H ;超声波脉冲个数控制(为赋值的一半)SETB PX0SETB ET0STEB EACLR 00HSETB TR0开启测距定时器START1: LCALL DISPLAY JNB 00H, START1 ;收到反射信号时标志位为1 CLR EA LCALL WORK ;计算距离子程序 SETB EA CLR 00H SETB TR0 ;重新开启测距定时器 MOV R2, #64H ; 测量间隔控制(约4*100=400ms)LOOP: LCALL DISPLAY DJNZ R2, LOOP SJMP START 1*中断程序*;T0中断,65ms中断一次INTT0: CLR EA CLR TR0 MOV TH0, #00H MOV TL0, #00H SETB ET1 SETB EA SETB TR0 ;启动计时器T0,用以计算超声波来回时间 SETB TR1 ;开启发超声波用定时器T1OUT: RETI;T1中断,发超声波用INTT1: CPL VOUT DJNZ R4,RETIOUT CLR TR1 ;超声波发送完毕,关T1 CLR ET1 MOV R4,#04H SETB EX0 ;开启接收回波中断RETIOUT: RETI;外中断0,收到回波时进入PINT0: CLR TR0 ;关计数器 CLR TR1 CLR ET1 CLR EA CLR EX0 MOV 44H, TL0 ;将计数值移入处理单元 MOV 45H, TH0 SETB 00H ;接收成功标志 RETI*延时程序*DL1MS: MOV R6, #14HDL1: MOV R7, #19HDL2: DJNZ R6, DL2 DJNZ R6, DL1 RET*显示程序*;40H为最高位,43H为最低位,先扫描高位DISPLAY: MOV R1, #40H;G MOV R5,#0F7H;G PLAY: MOV A, R5 MOV P0, #0FFH MOV P2, A MOV A, @R1 MOV DPTR, #TABMOVC A, @A+DPTRMOV P0, ALCALL DLIMSINC R1MOV A, R5JNB ACC.0, ENDOUT;GRR AMOV R5, AAJMP PLAYENDOUT; MOV P2, #0FFH MOV P0, #0FFH RETTAB; DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH;共阳数码管 0 ,1, 2,3,4,5,6,7,8,9,不亮,A, &*距离计算程序(=计算值&17/1000cm) 近似WORK: PUSH ACC PUSH PSW PUSH B MOV PSW, #18H MOV R3, 45H MOV R2, 44H MOV R1, #00D MOV R0, #17D LCALL MUL2BY2 MOV R3, #03H MOV R2, #0E8H
LCALL DIV4BY2 LCALL DIV4BY2 MOV 40H, R4 MOV A, 40H JNZ JJ0 MOV 40H, #0AH ;最高位为0,不点亮JJ0: MOV A R0 MOV R4, A MOV A R1 MOV R5 A MOV
R3, #00D MOV R2, #100D LCALL DIV4BY2 MOV 41H, R4 MOV A, 41H JNZ JJ1 MOV A, 40H ;此高位为0,先看最高位是否为不亮 SUBB A, #0AH JNZ JJ1 MOV 41H, #0AH ; 最高位不亮,次高位也不亮JJ1: MOV A, R0 MOV R4, A MOV A, R1 MOV R5, A MOV R3, #00D MOV R2, #10D LCALL DIV4BY2 MOV 42H, R4 MOV A 42H JNZ JJ2 MOV A, 41H ;次高位为0,先看次高位是否为不亮 SUBB A, #0AH JNZ JJ2 MOV 42H, #0AH ;次高位不亮,次高位也不亮JJ2: MOV 43H, R0 POP B POP PSW POP ACC RET*两字节无符号数乘法程序MUL2BY2: CLR A MOV R7, A MOV R6, A MOV R5, A MOV R4, A MOV 46H, #10HMULLOOP1: CLR C MOV A, R4 RLC A MOV R4, A MOV A, R5 RLC A MOV R5, A MOV A, R6 RLC A MOV R6, A MOV A, R7 RLC A MOV R7, A MOV A, R0 RLC A MOV R0, A MOV A, R1 RLC A MOV R1, A JNC MULLOOP2 MOV A, R4 ADD A, R2 MOV R4, A MOV A, R5 ADDC A, R3 MOV R5, A MOV A, R6 ADDC A, #00H MOV R6, A MOV A, R7 ADDC A, #00H MOV R7, AMULLOOP2: DJNZ 46H, MULLOOP1 RET*四字节/两字节无符号数除法程序*DIV4BY2: MOV 46H, #20H MOV R0, #00H MOV R1, #00HDIVLOOP1:
RLC A MOV R4, A MOV A, R5 RLC A MOV R5, A MOV A, R6 RLC A MOV R6, A MOV A, R7 RLC A MOV R7, A MOV A, R0 RLC A MOV R0, A MOV A, R1 RLC A MOV R1, A CLR C MOV A, R0 SUBB A, R2 MOV B, A MOV A, R1 SUBB A, R3 JC DIVLOOP2 MOV R0, B MOV R1, ADIVLOOP2: CPL C DJNZ 46H, DIVLOOP1 MOV A, R4 RLC A MOV R4, A MOV A, R5 RLC A MOV R5, A MOV A, R6
RLC A MOV R6, A MOV A, R7 RLC A MOV R7, A RET; END 附C51程序#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned longextern void cs_t(void);extern void delay(uint);extern void display(uchar*);//data uchar display(uchar*);void main (void){data uchar dispram[5];P0=0P2=0TMOD=0x11;IE=0x80;while (1){cs_t();delay(1);testok=0;EX0=1;ET0=1;while(! testok) display(dispram);if (1==testok) { time=TH0; time=(time<<8)| TL0; time*=172; time/=10000; dispram[0]=(uchar) (time%10); time/=10; dispram[1]=(uchar) (time%10); time/=10; dispram[2]=(uchar) (time%10); dispram[3]=(uchar) (time/10); if (0==dispram[3]) dispram[3]=17; } else { dispram [0]=16; dispram [1]=16; dispram [2]=16; dispram [3]=16; }for (i=0;i<300;i++) display(dispram);}}void cs_r(void) interrupt 0{TR0=0;ET0=0;EX0=0;testok=1;}void overtime(void) interrupt 1{EX0=0;TR0=0;ET0=0;testok=2;} NAME CS_T?PR?CS_T?CS_T
SEGMENT CODE PUBLIC CS_T
RSEG ?PR?CS_T?CS_TCS_T: PUSH ACC MOV TH0, #00H MOV TL0, #00H MOV A, #4D SETB TR0CS_T1: CPL p1.0 NOP
NOP NOP NOP NOP NOP NOP NOP NOP DJNZ ACC,CS_T1 POP ACC RET; ENDname delay?pr?_delay?delay segment codepublic _delayrseg ?pr?_delay?delay_delay: push acc mov a,r7 jz dela1 inc r6dela1: mov r5,#50d djnz r5, $ djnz r7,dela1 djnz r6,dela1 pop acc retend NAME DISPLAY?PR?_DISPLAY?display segment code?co?_DISPLAY?display segment data EXTRN CODE (_DELAY) PUBLIC _DISPLAY RSEG ?CO?_DISPLAY?DISPLAY?_display?byte:dispbit: ds 1dispnum: ds 1 rseg ?pr?_display?display_display: push acc push dph push dpl push psw inc dispnum mov a,dispnum cjne a,#4d,disp1DISP1: JC DISP2 MOV DISPNUM,#00H MOV DISPBIT,#0FEHDISP2: MOV A,R1 ADD A,DISPNUM MOV R0,A MOV A,@R0 MOV DPTR,#DISPTABLE MOVC A,@A+DPTR MOV P0,A MOV A,DISPNUM CJNE A,#2D,DISP3 CLR P0.7DISP3: MOV P2,DISPBIT MOV R5,#00H MOV R7,#0AH LCALL _DELAY MOV P0,#0FFH MOV P2,#0FFH MOV A,DISPBIT RL A MOV DISPBIT,A POP PSW POP DPL POP DPH POP ACC RETDISPTABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFHEND
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一单片机控制LED灯来回_百度知道
单片机控制LED灯来回
单片机控制LED灯来回看下这个程序符不符合标题,
#include &reg52.h&
#include&intrins.h&
void main(void)
unsigned int a ,
while(a&1000)
P2=_cror_(P2,1);
我有更好的答案
那个a=1后面没;号,而且没有延时…
那造成只有首尾亮的原因是啥
还有就是A是字符变量,在while里面却判断超过255
为您推荐:
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。基于单片机的超声波测距系统_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于单片机的超声波测距系统
&&基于单片机的超声波测距系统
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩19页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)求助,51单片机通过超声波控制led灯_百度知道
求助,51单片机通过超声波控制led灯
我有更好的答案
什么样的问题呢?具体的描述一下.懂事电子设计 Vgz
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 单片机超声波测距 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信