EDA365电子工程师网

标题: 单片机构成的精确测距系统 [打印本页]

作者: jerryli    时间: 2016-8-15 15:48
标题: 单片机构成的精确测距系统
实际工作中常常需要自动测量两点间的距离,如液面的高度、机动车倒车时与障碍物间的距离等等。在这类距离的测量中,一点是可达到的,另一点则是不可到达的。因此,测量时,从可到达的一点发射一定频率的信号波,经不可到达的一点反射回来,由接收电路接收回波信号。单片机准确计算信号在两点间传播所用的时间,再根据发射波的传播速度,计算出两点间的距离。. w6 S* X! K( r* ?# a' T. m
    设计电路时,首先分析测量的对象,选择合适的信号波发射器(如发射声波、红外线、超声波等)。若所选信号波传播速度较慢,可通过单片机对发射波与回波的查询或由发射波与回波触发中断,开关定时器完成计时功能。当波的传播速度很快时(如超声波),测出的误差很大。原因在于:其一,不管是查询发射波与回波,还是由之触发单片机中断再通过软件启停定时器均需要一定的时间(中断的方式误差相对要小);其二,相对而言,单片机的时间分辨率不是太高,如晶振频率为12MHz,则时间分辨率为1μs。
, t4 e- {1 |4 h/ X! ]! j  F    引入专用的定时/计数器8254进行计时,可大大提高测距系统的精确性。8254的每个定时器都有一个GATE门控信号,可用发射波与回波直接启停8254,而不必把发射波与回波接至单片机,通过中断或查询再发出定时器启停信号。同时,8254具有更高的工作频率,时间的分辨率更高,如输入4MHz的工作频率,时间分辨率为0.25μs。/ h) Q. Z% A1 L
    一、硬件结构/ B* O& r+ D% g( w$ ?
    电路如附图。图中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显示电路,则可将测出的距离显示出来。" b7 L+ N" d% @% }4 n
    如果波的来回传播时间超过了8254一次计时的最大范围,可将其定时器的OUT引脚接至单片机的INT1,由中断累加计时。# k2 Z9 ]0 n& S# K' w6 U
    二、软件编程
2 V( [* I* E6 S& V9 m. Y) a, ?    主要程序清单如下:8 S1 J4 [: n8 i# B. g2 h
            ORG 0000H4 t) S# N) i6 n1 [4 ?! F
            AJMP START
+ V+ a1 p  @& Q1 w, f! M' K. P            ORG 0003H- e$ I5 U4 y' x# g! s, R2 w' J5 ~0 ]
            AJMP WBZD
0 B2 ?( C; q' C$ V) }9 ~3 I* \: USTART:CLR P1.0;JK触发器初态置0
$ [5 q/ W2 d/ s% x            MOV R0,#7FH;8254工作方式:T0方式0,16位
* U" K4 f1 `9 U  b            MOV A,#00110000
4 l$ s$ U9 K2 `. U( D            MOV @R0,A% t1 ~0 n; g) u9 J& ~
            MOV R0,#7CH
: s, t8 ^- _3 ^" O4 u% |9 b            MOV A,#0FFH
3 d. n. D& _, n4 b            MOV @R0,A;置T0计数初值低8位
1 Z: C" [' d& N' }+ \5 n            MOV @R0,A;置T0计数初值高8位(最大范围)3 Z. Y% D6 L8 Y
            SETB IT0;/INTO下跳沿触发
& P6 m! o  k& k( d, f            SETB EA
5 R- X7 ]+ q6 ?% j0 L2 t$ E, x! j            SETB EX0;开/INT0中断
% O$ f, k+ S# pTAB:    ACALL  ;数据处理子程序
6 [- V5 T9 G( \2 h# X' {8 Y            ACALL  ;键盘处理子程序; _; ]# ^+ c1 l
            AJMP TAB4 n3 J) P! o/ z3 Z# c; v; l/ [
WBZD:  MOV R0,#7CH;中断服务子程序
! ^* t7 s2 s3 k: W9 {            MOV A,@R0
6 u0 s' i4 j+ i3 o* z5 ^            MOV 20H,A;读出低8位时标送20H
4 }6 D1 P# Z" U$ u  V3 }            MOV A,@R0% T) }/ h3 ?  ^: p( h
            MOV 21H,A;读出高8位时标送21H" F& c( E+ i, f
            MOV A,#0FFH1 |8 O* I: L4 B3 m; q- O2 F+ D& j
            MOV @R0,A
* J) Z, k! U. c            MOV @R0,A;重装计数初值$ I, m# G! {) p' X9 |4 m; k
            CLR P1.0;JK触发器初态置0
5 Z2 V3 n9 Z5 \  q8 D- R1 a+ p            RETI
3 C, K* `. w1 D( _            END
作者: Gegu    时间: 2016-8-16 10:35
学习中,谢谢分享
# `( I9 M; s$ g) T8 J( i
作者: ygcgsa    时间: 2016-11-30 10:42
谢谢分享




欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2