在智能化仪器的开发过程中,如何实现测量量程的在线转换,一直是人们所关注的问题。通常的转换方法是采用程控增益放大器,或者是多路输入的形式,这必然以增加电路的复杂性和降低可靠性作为代价。因此,本设计方案的蓄电池监控单元中采用了数字电位计X9241来实现测量量程的在线转换。
数字电位计X9241
X9241的基本功能
XICOR公司的X9241内部集成了四个非易失性E2POT。其中每一个E2POT包含有63个电阻单元,一个滑动端计数寄存器(WCR)和四个可以由用户读出和写入的8位数据寄存器。滑动端计数寄存器的内容用来控制滑动端在电阻阵列中的位置,并且可以和数据寄存器之间进行双向的数据传输。
X9241的通信规约
与工作时序
X9241支持双总线的定向规约,这一规约规定了向总线传送数据时为发送器,而从总线接收数据时为接收器,在这一过程中,控制传输的器件是主机,而被控制的器件则为从机。在本方案中,启动数据的传输以及提供时钟等功能都由单片机提供,因此在这里X9241是一个从属器件。
对X9241进行一次成功的操作必须包括以下几个步骤:
起始条件:当SCL为高时SDA由高至低的跳变;
应答:在主从器件的总线间提供一个握手信号,以表示数据接收成功。单片机在发送8位数据以后释放SDA总线(置SDA为1),同时X9241将在第九个时钟周期内把SDA线拉低,作为成功的接收了前8位数据的响应;
终止条件:当SCL为高时SDA由低至高的跳变。 具体的工作时序如图1所示。
图1 X9241的工作时序
X9241与AT89C51接口
由于常用的AT89C51系列处理器没有I2C接口部件,与X9241的接口很不方便。仔细分析图1的工作时序,可以通过通用I/O总线和一个定时器来模拟I2C总线的功能,即采用P1口的两根线分别作为SDA和SCL总线,通过定时器1产生所需要的时钟。具体电路连接如图2所示。
图2 X9241与AT89C51接口电路
下面就以向滑动端计数寄存器写入一次值的三字节指令为例,给出具体的程序:
SCL BIT P1.6
SDA BIT P1.7
MAIN:
……
MOV TMOD,#02H ;置定时工作方式2,
定时
MOV TH0,#0E8H
MOV TL0,#0E8H
SETB EA ;开中断
SETB ET0
SETB TR0 SETB SCL ;开始一次操作
SETB SDA
CLR SDA
MOV A,#50H ;选择从器件
ACALL WRTA
MOV A,#0C0H ;设置写指令格式
ACALL WRTA
MOV A,#3FH ;为WCR赋值
ACALL WRTA
JNB SCL,$ ;结束本次操作
SETB SDA
CLR SDA
WRTA: MOV R2,#08H
WRTA0: JB SCL,$ ;等待时钟信号上跳沿
RLC A ;将数据逐次送入数字电位器
MOV SDA, C
JNB SCL, $
DJNZ R2, WRTA0
JB SCL, $ ; 等待数字电位器的接收应答
SETB SDA
JB SDA, $
JNB SCL, $
RET
INT: CPL P1.6 ;取反,产生所需时钟信号
RETI
……
X9241在蓄电池监控单元中的应用
从理论上讲,利用数字电位计可以实现任意量程的转换。但由于模数转换器精度的限制以及蓄电池监控单元高实时性的要求,选取过多的转换点反而会收到事倍功半的效果。通过试验发现,只需要1:1,1:2,1:5,1:10,1:20,和1:50六种量程就可以保证输入信号在模数转换器的2/3量程附近,因此,在这里巧妙的利用了滑动端计数寄存器和数据寄存器之间的双向数据传输功能,实现上述六种量程在线转换。实现在线量程转换的具体电路如图3所示。具体的实现方法是:在两个E2POT的R0中存储值为01H,由于上电复位时滑动端计数寄存器会自动装入R0中的值,因此初始化时,放大器为一跟随器,当需要测量微弱电流时,根据初次采集得到的值,与事先设定的参考值进行比较,选择合适的量程进行放大后重新采集。
图3 在线量程转换的实现电路
结语
实验结果表明,用X9241实现测量量程的在线转换非常方便。通过六种量程的实时在线调节,既简化了电路的设计,同时又保证了数据采集的精度。但在试验中发现,有时会在输出端产生振荡,造成输出波形失真,解决方法是在放大器输入和反馈端串联两个电阻,增加其到输入端的衰减通道。