摘 要: 本文给出了一种利用软件实现4~20mA传感器数据转换的方法,消除了硬件电路中电压放大器输出端的残留电压,保证了数据转换精度。
关键词: 压力传感器;模拟信号,数字信号;单片机控制
引言
在单片机控制的许多应用场合,都要使用传感器来将单片机不能直接测量的信号转换成单片机可以处理的电模拟信号,如压力传感器、温度传感器、流量传感器等。早期的传感器大多为电压输出型,即将测量信号转换为0-5V电压输出,通过模拟数字转换电路转换为数字信号供单片机读取、控制。但在信号需要远距离传输或使用环境中电网干扰较大的场合,电压输出型传感器的使用受到了限制,暴露了抗干扰能力较差等缺点,而电流输出型传感器以其具有较高的抗干扰能力得到了广泛应用。
电压输出型压力传感器抗干扰能力差,有时输出的直流电压上还叠加有交流成分,使单片机产生误判断,控制出现错误,严重时还会损坏设备。
电流输出型传感器的输出范围常用的有0~20mA及4~20mA两种,传感器输出最小电流及最大电流时,分别代表传感器所标定的最小及最大额定输出值。
如测压范围为以0~35Mpa的输出压力传感器为例进行叙述。对于输出0~20mA的传感器0mA电流对应0MPa压力值,输出4~20mA的传感器4mA电流对应0MPa压力值,两类传感器的20mA电流都对应35MPa压力值。
对于输出0~20mA的传感器,在电路设计上我们只需选择合适的降压电阻,通过A/D转换器直接将电阻上的电压转换为数字信号即可,电路调试及数据处理都比较简单。
对于输出4~20mA的传感器,电路调试及数据处理上都比较烦琐。但这种传感器能够在传感器线路不通时,通过是否能检测到正常范围内的电流,判断电路是否出现故障,因此使用更为普遍。
4~20mA传感器的一般处理方法
由于4~20mA传感器输出4mA时,在取样电阻上的电压不等于0,直接经模拟数字转换电路转换后的数字量也不为0,单片机无法直接利用,通过公式计算过于复杂。因此一般的处理方法是通过硬件电路将4mA在取样电阻上产生的电压降消除,再进行A/D转换,工作原理如图1。
图1(略)
在图1中,由压力传感器产生的4~20mA电流与13VG形成电流回路,从而在取样电阻上产生一定压降,并将此电压值输入到放大器LM358的3脚。图1中方框内的电阻分压电路用来在集成电路LM358的2脚产生一个固定的电压值,用于抵消在取样电阻上4mA电流产生的压降。所以当压力传感器为最小值4mA时,LM358的3脚与2脚电压差基本为0V。图1中LM358与其相连接的电阻构成可调整电压放大电路,将压力传感器电流在取样电阻上的电压值进行放大并通过LM358的1脚输出至模拟数字转换电路,供单片机CPU读入,通过查表法或其它的数据处理方法将压力传感器的4-20mA电流在屏幕上以压力值的形式显示出来。
但是这个电路存在以下问题:
1、4mA不能完全消除,电压放大器输出端总会有残留电压存在;
2、LM358放大器随着放大倍数增加,线性也越发不好;
3、为了尽量减小放大器放大倍数非线性所带来的误差,不得不通过电阻、稳压管等器件降低模拟数字转换电路原有的基准电压,使得基准电压变得不稳定,电路也复杂化了。
4~20mA传感器数据处理新途径
通过上述分析我们了解到,图1中的电路由于电压放大器的非线性及基准电压的改动,使读入的数据变得稳定性较差,同时电路比较复杂,调整起来比较麻烦。由于读入信号的不稳定,数据存在一定的误差,因此,本文采用了一种全新的方法进行数据处理--利用软件的方法实现数据转换。
图2(略)
为了提高模-数转换的精确度,在硬件电路设计上,必须保持原有模拟数字转换电路的基准电压不变,并将放大电路取消,将压力传感器电流在取样电阻上的压降直接加到模拟数字转换电路的输入端,见图2。单片机读入数据后采用软件对其进行处理。计算转换后,将0-35Mpa的压力值在屏幕上显示出来。
图3中画有两条线段AB和CD,线段AB任一点在横坐标上的值为从取样电阻上的读入电压值,简称为读入值;线段CD任一点在横坐标上的值为转换后的电压值,简称为转换值;现在的关键问题是如何找出转换值与读入值之间存在的关系。
为了在最大电流值20mA处得到最大的电压值V20mA ,需要选择合适的降压电阻R:
公式(略)
20mA时所使用的压力传感器的压力为35Mpa,可以取最大的电压值为3.5V,经计算电阻为175 。输入电流为4mA时对应的输出电压V4mA=R
0.004A=0.7V。即当电流值为4~20mA时,从取样电阻上读出电压为0.7V-3.5V。
公式(略)
下面以图3为例说明这个关系的推导过程。
图3(略)
将V4mA=0.2V20mA带入式中,再经变换,可以得到的新的等式:
公式(略)
为了证明上述关系的正确性,可举例进行证明。设定V20mA =3.5V,则所选电阻为175 ,V4mA=0.7V。当电流为中间值12mA时,对应的读出值是12mA
175 =2.1V。根据上述公式可以得到转换值为:
公式(略)
根据3.5V(20mA时压降)表示35Mpa的线性关系,2.1V(12mA时压降)表示17.7Mpa,与计算出的真实压力值相符。同样根据4
mA产生的0.7V压降计算出的真实压力值为0Mpa。
根据我们具体选定的35Mpa压力传感器及取样电阻, V20mA=3.5V,经进一步简化该公式,可以得出:
公式(略)
如果选取不同的取样电阻,该公式中的常数0.875会不同,但读入值前的系数保持不变。 在程序中,将读入值通过将数据右移2次的方式进行运算,再进行1次加法和1次减法就可以将转换值计算出来,再通过与实际压力值线性关系的处理转换,将0-35Mpa的压力值在屏幕上显示出来。由此可见,通过软件程序进行计算也是比较简单的。
实用程序
MDR DATA 3CH ;运算结果区(8字节)
MD2 DATA 44H ;运算区2(5字节)
MD1 DATA 49H ;运算区1(5字节)
;
;转换数据子程序
;调用前清运算区,从模数转换器读回的16进制数送MD2、MD2+1
;16进制数转换为BCD码运算结果存于MDR+1~MDR,供显示使用。
HSJ:
MOV MD1+1,MD2+1
MOV MD1,MD2
CLR C ; 将原数据右移一位,除2
MOV A,MD1+1
RRC A
MOV MD1+1,A
MOV A,MD1
RRC A
MOV MD1,ACLRC ; 再将数据右移一位,除2
MOV A,MD1+1
RRC A
MOV MD1+1,A
MOV A,MD1
RRC A
MOV MD1,A
MOV A,MD2 ;原数据加四分之一原数据,
和存MD2、MD2+1
ADD A,MD1
MOV MD2,A
MOV A,MD2+1
ADDC A,MD1+1
MOV MD2+1,A
MOV A,MD2 ;减875(036BH),差存MD2、
MD2+1
CLR C
SUBB A,#6BH
MOV MD2,A
MOV A,MD2+1
SUBB A,#03
MOV MD2+1,A
LCALL HTBCD ;转换为BCD码
RET
;
;四字节16进制数转换为五字节整数BCD码
;程序中使用寄存器R0,R1,R5,R6,R7
;调用前清运算区,16进制数据传送至MD2+3~MD2
;运算结果 存于MDR+4~MDR
;
HTBCD: MOV R7,#20H ;四字节二进制数共32位
HTBCD1: MOV R6,#04H ;二进制数字节数
MOV R0,#MD2 ;二进制数末址
CLR C
HTBCD2: MOV A,@R0
RLC A
MOV @R0,A
INC R0
DJNZ R6,HTBCD2
MOV R5,#05H ;BCD码字节数
MOV R1,#MDR ;BCD码末址
HTBCD3: MOV A,@R1
ADDC A,@R1
DA A
MOV @R1,A
INC R1
DJNZ R5,HTBCD3
DJNZ R7,HTBCD1
RET
END
结论
本文对4~20mA电流传感器的数据处理方法提出了新的思路,大量实验已经证明这种方法在实际应用中是正确的。与以前检测电压的电路及软件程序相比,它具有设计简单,电路稳定、抗干扰能力强,数据准确可靠等优点。
|