EDA365电子工程师网
标题:
单片机构成的精确测距系统
[打印本页]
作者:
jerryli
时间:
2016-8-15 15:48
标题:
单片机构成的精确测距系统
实际工作中常常需要自动测量两点间的距离,如液面的高度、机动车倒车时与障碍物间的距离等等。在这类距离的测量中,一点是可达到的,另一点则是不可到达的。因此,测量时,从可到达的一点发射一定频率的信号波,经不可到达的一点反射回来,由接收电路接收回波信号。单片机准确计算信号在两点间传播所用的时间,再根据发射波的传播速度,计算出两点间的距离。
' |6 p9 k, w& X! e) h
设计电路时,首先分析测量的对象,选择合适的信号波发射器(如发射声波、红外线、超声波等)。若所选信号波传播速度较慢,可通过单片机对发射波与回波的查询或由发射波与回波触发中断,开关定时器完成计时功能。当波的传播速度很快时(如超声波),测出的误差很大。原因在于:其一,不管是查询发射波与回波,还是由之触发单片机中断再通过软件启停定时器均需要一定的时间(中断的方式误差相对要小);其二,相对而言,单片机的时间分辨率不是太高,如晶振频率为12MHz,则时间分辨率为1μs。
" T X( `0 G9 o' ]( v- P- j9 S& z! ~
引入专用的定时/计数器8254进行计时,可大大提高测距系统的精确性。8254的每个定时器都有一个GATE门控信号,可用发射波与回波直接启停8254,而不必把发射波与回波接至单片机,通过中断或查询再发出定时器启停信号。同时,8254具有更高的工作频率,时间的分辨率更高,如输入4MHz的工作频率,时间分辨率为0.25μs。
2 i0 a7 [4 U3 c1 o
一、硬件结构
! p. o- C# L3 _
电路如附图。图中8254的地址为7CH(0#定时器)、7DH(1#定时器)、7EH(2#定时器))、7FH(控制口),其工作频率CLK0由外部电路提供4MHz的脉冲信号(该信号为计时的基准信号,频率要求精确,可用4060等分频器实现)。受发射波与回波控制的JK触发器的输出作为8254 0#定时器的门控信号GATE0,回波信号同时作为单片机INT0的中断响应信号。初始化时,由单片机的P1.0口控制JK触发器的初态为0,8254的T0不计时;发射波产生后,JK触发器翻转,T0开始工作,计数初值不断减1;收到回波信号后,JK触发器再次翻转,8253的T0停止工作,同时触发单片机中断,在中断服务程序中读出时标(计数初值中所剩余的值),然后由数据处理子程序计算出距离。若增加LED显示电路,则可将测出的距离显示出来。
! x3 \# M3 m* I' y
如果波的来回传播时间超过了8254一次计时的最大范围,可将其定时器的OUT引脚接至单片机的INT1,由中断累加计时。
. A4 T4 }5 ?5 S; |( F
二、软件编程
1 `1 D! M' v: B/ y% @6 W
主要程序清单如下:
7 v# n0 r/ z( W L7 b7 a
ORG 0000H
' g( H# z9 X: T: L7 n2 u
AJMP START
6 x& j" x, o( L( p( E& s& O! d7 W& W X
ORG 0003H
- z+ a+ `5 }, w% o4 O
AJMP WBZD
$ z' P8 H Z% {# N5 N3 [
START:CLR P1.0;JK触发器初态置0
& z: B! r; I0 y" y
MOV R0,#7FH;8254工作方式:T0方式0,16位
) Y4 `% V5 _) w& d7 L0 R: i
MOV A,#00110000
# I, l4 `! [0 R0 T
MOV @R0,A
. \1 @- A0 g( e( c: z
MOV R0,#7CH
8 a6 L5 d2 V6 u4 Q! O, v
MOV A,#0FFH
3 y) z1 a+ O; o( j; W, x
MOV @R0,A;置T0计数初值低8位
& C- E; d4 M* j7 }$ x, g' M
MOV @R0,A;置T0计数初值高8位(最大范围)
- U$ [- o& ^, Y1 f
SETB IT0;/INTO下跳沿触发
+ {4 e+ V/ i& l3 T8 m" I) f6 t A
SETB EA
2 g2 s( f7 g# _+ i9 q
SETB EX0;开/INT0中断
# ]/ R2 `# C! V4 G2 U$ W* I
TAB: ACALL ;数据处理子程序
a' t5 B- O7 y4 y2 O
ACALL ;键盘处理子程序
* r; |# G) i1 Q q
AJMP TAB
* ?9 ]. T' x T' _7 V3 s( Q" U
WBZD: MOV R0,#7CH;中断服务子程序
$ O4 I- V8 j# Y1 I5 E
MOV A,@R0
" s1 g, E! W+ Y% B5 m* r' o
MOV 20H,A;读出低8位时标送20H
) e$ Y8 \; O% b! s0 ?) V/ Y. V) x
MOV A,@R0
: z8 `; l. c, P) I+ x* C
MOV 21H,A;读出高8位时标送21H
$ X: X# S5 P8 E8 t2 @ }6 f
MOV A,#0FFH
1 X9 M- p0 l8 ~: A- G/ u
MOV @R0,A
: I5 d, l9 G' [. y. t# [ O
MOV @R0,A;重装计数初值
+ k3 j7 R9 w; Z8 h! h8 y: J# b
CLR P1.0;JK触发器初态置0
/ s/ T- o- }! }& I H* b
RETI
1 `) _8 Y6 }' J5 H ^: T- ?
END
作者:
Gegu
时间:
2016-8-16 10:35
学习中,谢谢分享
: E; s9 l( ~. n# H; }7 G9 _
作者:
ygcgsa
时间:
2016-11-30 10:42
谢谢分享
欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/)
Powered by Discuz! X3.2