一种高精度智能毫秒计的设计
2006-05-07 来源:电子产品世界
毫秒计时的启、停控制逻辑
毫秒计在电力行业中通常用于测量继电器或某个控制装置从发出启动指令到实际执行完成的间隔时间,因其间隔时间为毫秒级,故计时器通常采用毫秒计。在实际使用中,计时器的启动与停止控制不是仅仅由一级开关量(某一个单独的开关)所控制,而常常是由二级开关量控制,即先由两个开关量决定计时器的启、停控制逻辑,再由这个启、停控制逻辑控制计时器的启动与停止。
设启动开关量为A,停止开关量为B,启、停控制逻辑为C(C=“1”为计时,C=“0”为停止计时),则有:
其中;开关量A可有两个逻辑状态(“1”或“0”),同样开关量B也可有两个逻辑状态(“1”或“0”),这样,计时器的启、停控制逻辑有下列真值表。
状态 | 启动(C=“1”) | 停止(C=“0”) |
1 | A=“1”∧B=“0” | B=“1”vA=“0” |
2 | A=“1”∧B=“1” | B=“0”vA=“0” |
3 | A=“0”∧B=“0” | B=“1”vA=“1” |
4 | A=“0”∧B=“1” | B=“0”vA=“1” |
为了精确地获得控制逻辑C,我们必须通过硬件逻辑电路,将A、B两个开关量转换成控制逻辑C。利用TTL集成电路工作电压为+5V时,其逻辑“1”的电平为+3V~+5V、逻辑“0”的电平为0V~+2V的特性,并设开关量“闭合”为“1”、“断开”为“0”。则对控制逻辑C 可作如下(图2)设计:
在“状态1”图中,R1的作用是当A、B都闭合时作限流之用,R2的作用是当A、B都断开时作下拉电阻之用。因此,R1、R2应满足5V×R2/(R1+R2)>3.0V;5V/R1<2mA。同样,在“状态2”图中,R1、R2应满足5V×R2/(R1+R2)>3.0V;5V/(R1+R2)<2mA。在“状态3”图中,R1应满足5V/R1<2mA。在“状态4”图中,R1、R2应满足5V×R2/(R1+R2)>3.0V;5V/R1<2mA。
受单片机控制的启、停控制逻辑实际电路
在MCS-51系列单片机中,其CTC(定时/计数器)的工作方式寄存器中有一GATE位,该位为“1”时所对应CTC的启动与停止可由特定的外部引脚上的逻辑电平所控制,“1”为启动,“0”为停止。有了这个控制逻辑C,我们就可以将它引入单片机,由单片机作精确计时。四种计时状态也可由单片机来选择。为了简化设计并方便使用,笔者采用了四片4066(四双向模拟开关)对图2中的R1、R2进行了四种组合(见图3),以满足四种状态的逻辑要求。计时器为8031的T0,故计时器的启动与停止由P3.2引脚上的逻辑电平所控制。
图中4066(1)~4066(4)分别由P3.0、P3.1、P3.4、P3.5控制,P3.0、P3.1、P3.4、P3.5在任一时刻仅有其中的一个有效(“1”有效)。当4066的第5、6、12、13脚为高电平(“1”)时,则1~2、3~4、8~9、10~11引脚连通,为低电平(“0”)时则断开。这样,任一时刻就只能有一片4066有效。实际中,A、B开关的一端通常是要接地的,所以笔者使用了两片4N30对开关量A、B的接法作了一个转换,当开关闭合时c、e连通,反之,则c、e断开。当P3.0为“1”时,4066(1)被选中,其它无效。此时,A、B开关量与计时器启、停控制逻辑的关系就是图2中的状态1(此时R1=2kΩ、R2=3.3kΩ)。同样,当4066(2)、4066(3)、4066(4)分别被选中时,就分别对应图2中的状态2至状态4。图3中的74LS04是对启、停控制逻辑电平进行整形,使8031的P3.2引脚获得标准的逻辑电平。
软件设计
软件任务主要有三个:①键盘扫描,确定计时方式;②精确计时;③显示计时结果。为节省篇幅,在此仅介绍软件的关键之处和特色部分。
现对8031的资源作如下分配:T0用作计时器;8位初值自动装入;定时方式(计算8031的机器周期);门控(P3.2为高电平计数);初值9CH(-100 MHz);5位BCD码显示窗口;显示缓冲区为R7、R6、R5(R7为高位字节,但最高四位不是显示缓冲区的一部分);软计数器为R4、R3、R2(R4为高位字节)。
为了做到精确计时,其设计原则是计时器的启、停控制及计时过程中无需软件干涉,以克服由指令的延时所带来的误差。上述提到的启、停控制逻辑以及T0的初值自动装入就是为满足这个设计原则而设置的。由于8031的晶振频率为12MHz,故每个机器周期为1μs。T0的初值为-100,每当T0归零并产生中断时,即表示到达100μs(0.1ms)的计时时间。
由于T0是每100μs中断一次,所以T0的中断服务程序的执行时间必须要在100μs以内。T0的中断服务如下:
CTC0:PUSH PSW
PUSH A
MOV A,R2
ADD A,#01
DA A
MOV R2,A
MOV A,R3
ADDC A,#00H
DA A
MOV R3,A
MOV A,R4
ADDC A,#00H
DA A
MOV R4,A
POP A
POP PSW
RETI
通过查表得知,执行以上程序所需时间为22μs,小于100μs,符合计数要求。T0的中断服务程序在计数的过程中已将计数结果调整成BCD码,从而使显示程序在显示这部分数据时无需进行从二进制到BCD码的转换。
结束语
以上述设计制成的毫秒计,其精度取决于8031的晶振的精度以及4N30的延时特性,实际误差仅在2μs以内。
- 祛魅固态电池:一文看懂这项大火的技术