资讯详情

单片机超声波传感器测量距离

一、设计要求

设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.10-3.00m,测量精度1cm,与被测物体无直接接触,能清晰稳定地显示测量结果。

二、设计思路

超声波传感器及其测距原理

超声波是指频率高于20KHz的机械波。以超声波为检测手段,必须产生超声波并接收超声波。该装置是超声波传感器,通常称为超声波传感器或超声波探头。超声传感器有发送器和接收器,但超声传感器也可以发送和接收声波。超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。

超声波测距的原理一般采用跨越时间法TOF(timeofflight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离

测量距离的方法有很多,比如短距离、激光测距等。超声波测距适用于高精度中长距离测量。因为标准空气中超声波的传播速度是331.单片机负责计时45米/秒,单片机使用12米.0M晶论上,该系统的测量精度可达毫米级。

由于超声波指向性强,能耗慢,在介质中传播距离长,可用于测量距离。超声波检测距离设计方便,计算处理简单,测量精度也能满足要求。

超声波发生器可分为两类:一类是电气产生超声波,另一类是机械产生超声波。本课题属于近距离测量,可采用常用的压电超声传感器实现。

可根据设计要求和各种因素综合使用AT89S51单片机作为主控制器,采用动态扫描法实现LED超声波驱动信号由单片机定时器完成,超声波测距器的系统框图如下图所示:

afe9ea1326d97a6f36374d8df0fe16b5.png

超声波测距器系统设计框图

三、系统组成

硬件部分

主要由单片机系统和显示电路、超声波发射电路和超声波检测接收电路组成。采用AT89S51来实现对CX20106A红外接收芯片和TCT控制40-10系列超声转换模块。单片机通过P1.0引脚通过反相器控制超声波的发送,然后单片机不断检测INT0引脚,当INT0引脚的电平由高电平变为低电平,超声波已经返回。计数器计算的数据是超声波经历的时间,传感器与障碍物之间的距离可以通过转换获得。

软件部分

主要包括主程序、超声波发生子程序、超声波接收中断程序和显示子程序。

四、系统硬件电路设计

1.单片机系统和显示电路

单片机采用89S51或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。单片机用P1.超声波转口输出超声波转换器所需KHz超声波接收电路输出的返回信号采用外中断0口检测。四位共阳显示电路简单实用LED数码管,段码74LS244驱动,位码使用PNP三极管驱动。如下图所示

afe9ea1326d97a6f36374d8df0fe16b5.png

单片机和显示电路原理图

2.超声波发射电路原理图参考期刊如图所示:

超声波发射电路原理图

压电超声波转换器的功能:压电晶体谐振工作。如上图所示,内部结构有两个压电晶片和一个共振板。当其两极加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会产生共振,驱动共振板振动产生超声波,即超声波发生器;如果没有电压,当共振板接收超声波时,将压电振荡器振动,将机械能转换为电信号,成为超声接收转换器。超声波发射转换器与接受转换器其结构稍有不同。

3.超声波检测接受电路

红外转换接收期刊的电路采用集成电路CX20106A,这是红外检波接收的专用芯片,常用于电视红外遥控接收器。考虑到红外遥控器常用的载波频率38KHz超声波频率400KHz可作为超声波检测电路使用。实验证明其灵敏度高,抗干扰能力强。适当改变C4的大小可以改变接收电路的灵敏度和抗干扰能力。

超声接收电路图

五、系统程序设计

超声测距软件设计主要由主程序、超声发射子程序、超声接收中断程序和显示子程序组成。以下是超声测距器算法、主程序、超声发射子程序和超声接收中断程序。

1.超声波测距器算法设计

下图显示了超声波测距的原理,即超声波发生器T在某一时刻发出的超声波信号,当超声波遇到被测对象时反射回来,被超声波接收器R接受。这样,超声波发生器与反射对象之间的距离就可以生信号到接收返回信号的时间。

距离计算公式:d=s/2=(c*t)/2

*d被测物与测距器的距离,s声波的来回路程,c为声速,t声波来回使用的时间

声速C与温度有关。如果温度变化不大,可以认为声速基本不变。若测距精度要求较高,则应通过温度补偿进行校正。声速确定后,只要测量超声波往返时间,就可以得到距离。在系统中添加温度传感器来监测环境温度,可以补偿温度。这里可以用DS18B测量环境温度,根据不同的环境温度确定一声速,提高测距的稳定性。软硬件应采取抗干扰措施,以提高系统的可靠性。

超声波声速表在不同温度下

温度/

-30

-20

-10

0

10

20

30

100

声速c(m/s)

313

319

325

323

338

344

349

386

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.0端口发送约2个超声信号的频率约为40KHz脉冲宽度为12的方波us同时左右计数器T打开计时。超声波测距器主程序使用外部中断0检测返回超声波信号,一旦接收返回超声波信号(INT引脚低电平),立即进入中断程序。中断后立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果超声波返回信号尚未在计时器溢出时检测到,则定时器T0溢出中断关闭外中断0,测距成功标志字赋值2表示测距失败。

六、软硬件调试及性能

超声波发射和接收采用超声波测距仪的生产和调试Φ超声波换能器15TCT40-10F1(T发射)和TCT40-10S1(R接收)中心频率kHz,两个换能器个换能器的中心轴线应平行4~8cm,其它部件没有特殊要求。用金属壳屏蔽超声接收电路,可提高抗干扰能力。滤波电容器可根据测量范围的不同要求适当调整并接收换能器C为了获得适当的接收灵敏度和抗干扰和抗干扰能力。

硬件电路制作调试完成后,可将程序编译下载到单片机试运行。每次超声波发生子程序的脉冲宽度和两次测量的间隔时间可根据实际情况进行修改,以满足不同距离的测量需要。根据设计的电路参数和程序,测距仪的测量范围为0.07~5.5m,最大误差不超过1cm。系统调试后,应对测量误差和重复一致性进行多次实验分析,不断优化系统,以满足实际使用的测量要求。

后续工作只有在实验后才能验证

根据参考电路和集成的电路器件测距范围有限10m以内为好。

程序清单

以下是用汇编语言编写的超声测距控制源程序:

采用AT89S51 12MHz晶振

40H~43H显示缓冲单元,内存44H、45H、46H用于计算距离

20H用于标志

VOUT EQU P1.0 ;脉冲输出端口

*中断入口程序*

ORG 0000H

LJMP START

ORG 0003H

LJMP PINT0

ORG 000BH

LJMP INTT0

ORG 0013H

RETI

ORG  001BH

LJMP  INTT1

ORG  0023H

RETI

ORG  002BH

RETI

*主程序*

START: MOV  SP, #4FH

MOV  R0, #40H   ;40~43H为显示数据存放单元(40为最高位)

MOV  R7,#0BH

CLEARDISP: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, #0FFH

MOV  P1, #0FFH

MOV  P2, #0FFH

MOV  P3, #0FFH

MOV  R4, #04H        ;超声波脉冲个数控制(为赋值的一半)

SETB  PX0

SETB  ET0

STEB  EA

CLR   00H

SETB  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                ;开启发超声波用定时器T1

OUT:        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, #14H

DL1:         MOV  R7, #19H

DL2:         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, #TAB

MOVC  A, @A+DPTR

MOV     P0, A

LCALL DLIMS

INC              R1

MOV     A, R5

JNB       ACC.0, ENDOUT;G

RR         A

MOV     R5, A

AJMP    PLAY

ENDOUT;           MOV     P2, #0FFH

MOV     P0, #0FFH

RET

TAB; 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, #10H

MULLOOP1:       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, A

MULLOOP2:       DJNZ    46H, MULLOOP1

RET

*四字节/两字节无符号数除法程序*

DIV4BY2:            MOV    46H, #20H

MOV    R0,  #00H

MOV    R1, #00H

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

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, A

DIVLOOP2:         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 long

extern void cs_t(void);

extern void delay(uint);

extern void display(uchar*);

//data uchar display(uchar*);

data uchar testok;

void main (void)

{

data uchar dispram[5];

data uint i;

data ulong time;

P0=0xff;

P2=0xff;

TMOD=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_T

CS_T:                PUSH      ACC

MOV       TH0, #00H

MOV       TL0, #00H

MOV       A, #4D

SETB       TR0

CS_T1:               CPL        p1.0

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DJNZ       ACC,CS_T1

POP        ACC

RET

;

END

name   delay

?pr?_delay?delay   segment   code

public   _delay

rseg    ?pr?_delay?delay

_delay:    push   acc

mov a,r7

jz   dela1

inc   r6

dela1:   mov   r5,#50d

djnz   r5, $

djnz   r7,dela1

djnz    r6,dela1

pop   acc

ret

end

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  1

dispnum:   ds  1

rseg    ?pr?_display?display

_display:  push acc

push  dph

push  dpl

push  psw

inc   dispnum

mov a,dispnum

cjne  a,#4d,disp1

DISP1:    JC  DISP2

MOV  DISPNUM,#00H

MOV  DISPBIT,#0FEH

DISP2:     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.7

DISP3:       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

RET

DISPTABLE:     DB      0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFH

END

标签: 传感器按能量关cs系列速度传感器传感器屏蔽线四线r3传感器参数金属管接近传感器传感器pr9268201

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台