单片机课程设计一、需求分析:超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
要求测量围在1m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。
本文旨在设计一种能对中近距离障碍物进行实时测量的测距装置,它能对障碍物进行适时、适量的测量,起到智能操作,实时监控的作用。
关键词单片机AT82S51 超声波传感器测量距离二、硬件设计方案设计思路超声波传感器及其测距原理超声波是指频率高于20KHz的机械波。
为了以超声波作为检测手段,必须产生超生波和接收超声波。
完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。
超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。
超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(time of flight)。
首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离测量距离的方法有很多种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。
因为超声波在标准空气中的传播速度为340米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。
由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波可以用于距离的测量。
利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求。
超声波发生器可以分为两类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。
本课题属于近距离测量,可以采用常用的压电式超声波换能器来实现。
根据设计要求并综合各方面因素,可以采用AT89S51单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距器的系统框图如下图所示:超声波测距器系统设计框图主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
采用AT89S51来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。
单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
三、软件设计方案主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序等部分。
主程序首先对系统环境初始化,设置定时器T0工作模式为16位的定时计数器模式,置位总中断允许位EA并给显示端口P0和P2清0。
然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0.1ms(这也就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。
由于采用12MHz 的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体与测距仪之间的距离,设计时取20℃时的声速为340m/s则有:d=(C*T0)/2 =170*T0/10000cm(其中T0为计数器T0的计数值)测出距离后结果将以十进制BCD码方式LED,然后再发超声波脉冲重复测量过程。
主程序框图如下3. 超声波发生子程序和超声波接收中断程序超声波发生子程序的作用是通过P1.0端口发送2个左右的超声波信号频率约40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。
超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。
进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。
四、调试超声波测距仪的制作和调试,其中超声波发射和接收采用Φ15的超声波换能器TCT40-10F1(T发射)和TCT40-10S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。
若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。
根据测量围要求不同,可适当调整与接收换能器并接的滤波电容的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。
根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。
根据所设计的电路参数和程序,测距仪能测的围为0.27m~5m,测距仪最大误差不超过1cm。
系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。
五、心得体会:超声波测距一个陌生的字眼,当选择它的时候我还不知道它的原理是什么,但我对这五个字很感兴趣,我知道雷达探测就是用的超声波原理。
因为我喜欢所以我选择。
设计过程中所遇到的困难一个接一个,怎么发怎么收,采用什么蕊片,收到回波后怎么样计算。
问题一:发不出去超声波发的40KHZ(通过程序调整占空比,发送,)问题二:不知接没接到65MS中断一次,发送40KHZ脉冲,然后查看电平变化问题三:收到了怎么计算d=(C*T0)/2 =170T0/10000cm(其中T0为计数器T0的计数值)问题四:算完怎么样送显分级除法:100,10采用数码管动显上述一些疑问我曾想过,但没想到做起来会那么困难。
一步一个坎。
一步一个脚印,最终到达了我想要的山顶。
附录1:(程序代码); USE BY :超声波测距器 ; IC :AT89C51 ; TEL : ; OSCCAL :XT (12M) ; display :共阳LED 显示 ;测距围27CM-5M ,堆栈在4FH 以上,20H 用于标志;显示缓冲单元在40H-43H ,使用存44H 、45H 、46H 用于计算距离 ;VOUT EQU P1.0 ; 红外脉冲输出端口speakequ p1.1;****************************;中断入口程序 ;**************************** ORG 0000H LJMP START ORG 0003H LJMP PINT0ORG 000BH reti ORG 0013H RETIORG 001BHLJMP INTT1ORG 0023HRETIORG 002BHRETI;* 主 程 序 START: MOV SP,#4FH MOV R0,#40H ;40H-43H为显示数据存放单元(40H 为最高位)MOV R7,#0BHCLEARDISP: MOV R0,#00H INC R0 DJNZR7,CLEARDISPMOV 20H,#00H MOV TMOD,#11H ;T1为 T0为16位定时器MOV TH0,#00H ;65毫秒初 MOV TL0,#00HMOV TH1,#00H MOV TL1,#00HMOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFHMOV R4,#04H ;超声波肪冲个数控制(为赋值的一半)SETB PX0 SETB ET1 SETB EASETB TR1 ;开启测距定时器start1: LCALL DISPLAY JNB 00H,START1 ;收到反射信号时标志位为1 CLR EALCALL WORK;计算距离子程序clr EAMOV R2,#32h;#64H ;测量间隔控制(约4*100=400MS )LOOP: LCALL DISPLAYDJNZ R2,LOOP CLR 00Hsetb et0 mov th0,00h mov tl0,00h SETB TR1 ;重新开启测距定时器SETB EASJMP Start1 ;;* 中断程序* *;T1中断,发超声波用 ;T1中断,65毫秒中断一次 INTT1: CLR EA CLR TR0 clr ex0 MOV TH0,#00H MOV TL0,#00H MOV TH1,#00H MOV TL1,#00H SETB ET0 SETB EASETB TR0 ;启动计数器T0,用以计 intt11:CPL VOUT ;40KHZ nopnop nopnop nop nop nop nop nop DJNZ R4,intt11 ;超声波发送完毕, MOV R4,#04H lcall delay_250 ;延时,避开发射的直达声波信号 SETB EX0 ;开启接收回波中断 RETIOUT: RETI ;外中断0,收到回波时进入 PINT0: nopjb p3.2,pint0_exit CLR TR0 ;关计数器CLR EA ;CLR EX0 ;MOV 44H,TL0;将计数值移入处理单元MOV 45H,TH0 ;mov th0,#00hmov tl0,#00hjnb p3.2,$SETB 00H ;接收成功标志pint0_exit:RETI显示程序; 40H为最高位,43H为最低位,先扫描高位DISPLAY: MOV R1,#40H;G MOV R5,#7fH;G PLAY: MOV A,R5MOV P0,#0FFHMOV P2,A MOV A,R1MOV DPTR,#TABMOVC A,A+DPTRMOV P0,A LCALLDL1MSINC R1MOV A,R5 JNB ACC.4,ENDOUT;GRR AMOV R5,A AJMP PLAY ENDOUT: MOV P2,#0FFHMOV P0,#0FFHRETTAB: DB 18h, 7Bh, 2Ch, 29h, 4Bh, 89h, 88h, 3Bh, 08h,09h,0ffh;共阳段码表 "0" "1" "2" "3" "4" "5""6" "7" "8""9" "不亮""A""-"; 延时程序*;DL1MS:push 06hpush 07hMOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2DJNZ R6,DL1pop 07hpop 06hRET;*************************** ; 距离计算程序 (=计数值*17/1000cm) *;*************************** work: PUSH ACCPUSH PSWPUSH B MOV PSW, #18h MOV R3, 45HMOV R2, 44HMOV R1, #00D MOV R0, #17D LCALL MUL2BY2MOV R3, #03H MOV R2, #0E8H LCALL DIV4BY2LCALL DIV4BY2MOV 40H, R4MOV A,40HJNZ JJ0MOV 40H,#0AH ;最高位为零,不点亮JJ0: MOV A, R0MOV R4, AMOV A, R1MOV R5, AMOV R3, #00DMOV R2, #100DLCALL DIV4BY2MOV 41H, R4MOV A,41HJNZ JJ1MOV A,40H ;次高位为0,先看最高位是否为不亮 SUBB A,#0AHJNZ JJ1MOV 41H,#0AH ;最高位不亮,次高位也不亮JJ1: MOV A, R0MOV R4, AMOV A, R1MOV R5, AMOV R3, #00DMOV R2, #10DLCALL DIV4BY2MOV 42H, R4MOV A,42H JNZ JJ2MOV A,41H ;次次高位为0,先看次高位是否为不亮SUBB A,#0AHJNZ JJ2MOV 42H,#0AH ;次高位不亮,次次高位也不亮JJ2: MOV 43H, R0POP BPOP PSWPOP ACCRET;* 两字节无符号数乘法程序; R7R6R5R4 <= R3R2 * R1R0;MUL2BY2: CLR AMOV R7, AMOV R6, AMOV R5, AMOV R4, AMOV 46H, #10H MULLOOP1: CLR CMOV A, R4 RLC AMOV R4, AMOV A, R5 RLC AMOV R5, AMOV A, R6 RLC AMOV R6, AMOV A, R7 RLC AMOV R7, AMOV A, R0 RLC AMOV R0, AMOV A, R1 RLC AMOV R1, A JNC MULLOOP2MOV A, R4ADD A, R2MOV R4, AMOV A, R5ADDC A, R3MOV R5, AMOV A, R6ADDC A, #00HMOV R6, AMOV A, R7ADDC A, #00HMOV R7, A MULLOOP2: DJNZ 46H, MULLOOP1 RET四字节/两字节无符号数除法程序;R7R6R5R4/R3R2=R7R6R5R4(商).. .R1R0(余数);DIV4BY2: MOV 46H, #20HMOV R0, #00HMOV R1, #00H DIVLOOP1: MOV A, R4 RLC AMOV R4, AMOV A, R5 RLC AMOV R5, AMOV A, R6 RLC AMOV R6, AMOV A, R7 RLC AMOV R7, AMOV A, R0 RLC AMOV R0, AMOV A, R1 RLC AMOV R1, ACLR C MOV A, R0 SUBB A, R2 MOV B, A MOV A, R1 SUBB A, R3 JC DIVLOOP2 MOV R0, B MOV R1, A DIVLOOP2: CPL CDJNZ 46H, DIVLOOP1MOV A, R4 RLC AMOV R4, A MOV A, R5 RLC AMOV R5, A MOV A, R6 RLC AMOV R6, AMOV A, R7 RLC AMOV R7, A RETdelay_250:push pswpush 07hmov r7,#0ffh delay_250_1: nopnopnopnopdjnz r7,delay_250_1 pop 07hpop psw retEND附录2:(电路原理图)在行动前设定目标10 1112 13。