我也正在学习超声波的模块,买了两款共四个模块做实验,一款HC-SR04a 能够接3.3V用,与这款原理一样,看电路图,STC11应该是负责振荡发出40k的讯号,送给max232发射,max232不是普通的IC, 而是能够自主升压输出高压去推动超声波喇叭(因为需要高输出才能测得远),另外STC11通过PNP管直接控制MAX232的电源决定超声波是否输出,TL074是一枚运算放大器,负责把回声放大到TTL电平一输入到单片机,单片机内部的程序应该相当复杂,不是我们所知,我用开发板实验后能工作,但不理想。
我要测的距离只是2cm到5mm之间,就是用手掌在距离2cm到5cm之间移动,希望能测出至少1mm的变化,也就是有30个数值的变化,目的是要用来控住电子琴的声量,另外还想用两个模块距离5mm(手掌的宽度)一起使用,测定手掌的倾斜度(两个模块测出的数字差),控制电子琴的滑音,丰富演奏的表情。
根据资料,声波340米每秒,34cm每毫秒,340mm每毫秒,0.34mm每微秒,大概3毫秒有1mm, 声波来回每1mm有6微妙的时间差,这样的时间单片机应该能分辨出来,我看市面上并没有采用超声波来控制电子琴音量的产品,肯定是有一些困难,所以我打算自己画一个超声波的底板来试验,正在找电路资料模仿,所以就看得懂这个电路了。
这是简单的实验程序,结果输出通过、uart2输出到电脑:
ULTRA:
SETB P1.7
LCALL DELAY4 ;SHORT DELAY
CLR P1.7
WAITECHOH:
MOV A, P1
ANL A, #01000000B
JZ WAITECHOH
MOV 30H,#0
WAITECHOL:
MOV A, P1
ANL A, #01000000B
JNZ WAITECHOL
MOV 32H, 30H
CPL P0.1
;------
SETB P3.7
LCALL DELAY4 ;SHORT DELAY
CLR P3.7
WAITECHOH2:
MOV A, P3
ANL A, #01000000B
JZ WAITECHOH2
MOV 31H,#0
WAITECHOL2:
MOV A, P3
ANL A, #01000000B
JNZ WAITECHOL2
MOV 33H, 31H
CPL P0.1
CLR C
MOV A, 32H
SUBB A, 33H
LCALL SENTONEBYTE2
MOV A, 32H
;LCALL SENTONEBYTE2
MOV A, 33H
;LCALL SENTONEBYTE2
LCALL DELAY3 ;LONG DELAY
JMP ULTRA
TIMER_1: ;USE FOR MICRO CLOCK 1MS 184, 30 ,100US=248 250
PUSH ACC
INC 30H
INC 31H
TIMER_1EXIT:
MOV TH1, #255
MOV TL1, #200
POP ACC
RETI
SENTONEBYTE2: ;A SENT OUT
PUSH ACC
;MOV IE2, #00H ;DISABLE THE SECONDARY UART INTERRUPT, ES2=0
MOV S2BUF, A ;LOAD A TO BUFFER
MOV A, S2CON ;1111,1101, CLEAR SECONDARY UART TRANSIMIT INTERRUPT FLAG
ANL A, #0FDH
MOV S2CON, A
UART2WAIT:
MOV A, S2CON
ANL A, #02H ;0000,0010
CJNE A,#02H, UART2WAIT
MOV A, S2CON
ANL A, #0FDH ;1111,1101, CLEAR SECONDARY UART TRANSIMIT INTERRUPT FLAG
MOV S2CON, A
;MOV IE2, #01H ;ENABLE THE SECONDARY UART INTERRUPT, ES2=1
NOP
NOP
POP ACC
RET
|