引言
现场过程检测仪表一般都要求两线制4~20 mA 环路供电,也就是供电直流电压为12~24 V,而环路中的电流为工业用标准4~20 mA,因此整个仪表运行时的电流必须小于4 mA。 为了使仪表工作在低功耗状态,无论在单片机型号、硬件电路芯片、显示屏等的选取上,还是在系统的工作方式和芯片的供电方式等方面,都要进行严格的设计、计算和实验。
1 系统硬件设计
1.1 功能概述
整个系统通过键盘来实现人机交互,可将外部接入的传感器电压信号进行转换及计算,把数据按照用户需要以不同的方式显示于LCD上。用户可以修改系统相关参数,系统将所需的参数、用户设置的参数以及用户需要保存的数据及数据对应的时间一起保存起来,并保证掉电不丢失且上电及掉电瞬间不会发生数据的误操作。可选择两线制环路输出4~20 mA电流,满足工业现场的过程检测仪表的要求,且输出电流可以与用户设置的参数量程相对应。另外,可以根据用户需求为辅助模块部分供电,增加LCD背光显示功能,也可以选择数字量输出到其他相关设备进行处理。
1.2 总体结构
系统结构框图如图1所示。MCU选用Cygnal 公司的C8051F040。该芯片是混合信号高速单片机,片内含有丰富的数字外设,包括2个12位ADC;1个12位ADC和1个8位ADC;64个I/ O 端口,可以同时使用的硬件SMBus(I2C)、SPI 和2个增强型UART 串口;5个通用的16位计数器/定时器,专用的看门狗定时器。该芯片的时钟频率可达25 MHz[1]。
图1 系统结构框图
电压转换模块将24 V供电电压转换为3.3 V,为整个系统供电;4~20 mA输出模块由MCU控制,经电压—电流转换后向环路提供所需电流;LCD模块显示相关数据;传感器为电压型输入,保证输入范围在MCU的A/D模块可承受之内;MAX706为Maxim公司生产的电源管理芯片,负责监视单片机的运行;EEPROM选择FM24C16,为铁电存储芯片,通过I2C总线与CPU通信存取相关数据;RTC(Real Time Clock,实时时钟芯片)选择 DS1302,可以记录所采集数据的时间;简易键盘用通用输入/输出口GPIO(GeneralPurpose I/O)模拟,与系统实现人机交互。
辅助模块一方面可以降低主模块的功耗,使主模块的工作电流(4~20 mA输出模块不工作)保持在4 mA以下;另一方面,可增加LCD背光显示,将采集到的数据按用户需要的数据格式以数字量方式输出。因而辅助模块大大增加了整个系统的功能,并且增强了输出形式的灵活性。
主模块回路中的电流分为两个部分: I1是整个主模块正常工作时的电流;I2是4~20 mA输出模块输出的电流,不工作时静态电流很小。当用户需要根据采集到的数据输出一定量的电流时,此模块就会输出一定的电流,使得环路电流在预期的4~20 mA之内。
1.3 供电模块
主模块要保证4~20 mA环路输出电流功能的实现,就要求正常运行时供电回路中的电流小于4 mA。这是一个很高的指标,所以在主模块中,每一个功能模块都应该选择功耗低的器件,才能满足整体上对于低功耗的需求。供电模块的核心采用Linear Technology公司生产的步降式开关电压转换芯片LT1934[2]。它具有极低的工作电流(静态工作电流仅为12 μA)和很宽的电压输入范围(3.2~34 V),符合系统运行时工作电流低、工作供电电源电压在12~24 V的要求。系统需要3.3 V的供电电压,芯片工作在输出3.3 V时需要一些辅助器件,电路原理如图2所示。
图2 主模块供电部分原理
辅助模块的供电部分与主模块中此部分基本相同,其输出为5 V,区别仅在于个别阻容器件的数值不同,故原理图略去。
1.4 电流输出模块
电流输出模块与供电模块一样,需要宽电压和低电流的工作特性,因此电流输出模块的核心选择BB(BurrBrown)公司生产的XTR115芯片[3]。该芯片有极低的工作电流(200 μA)和很宽的电压输入范围(7.5~36 V),符合本系统工作要求。
如图3所示,XTR115的工作原理是将输入到Iin(引脚2)的电流放大100倍(IIo=100 IIin),从Io(引脚4)输出到供电回路中。Io引脚电流输出的范围为0.25~25 mA,也就是说只要系统的工作电流在3.75 mA以下,就能够实现4~20 mA的输出要求,因而此芯片符合本系统的要求。
图3 电流输出模块电路原理
输入电流与供电电压和电阻的关系为:
其中Vin为加在Iin(引脚2)和IREF(引脚3)之间的电压,Rin为与Iin相连的电阻,为减小误差,此电阻应采用1%的精密电阻。在本系统中选择10 kΩ的电阻。桥式二极管和齐纳二极管起保护作用,晶体管则起散热作用。
在本系统,XTR115的IREF引脚接MCU的DAC1,Iin引脚接MCU的DAC0引脚。根据公式(1),运行时, 控制DAC0 和DAC1之间的压差在0~2.5 V就可以产生0.25~25 mA的输出电流。
通过MCU两个数字电压转换的输出引脚(DAC0 和DAC1)控制输入电流的大小,输出电流也就确定了。
1.5 人机接口及数据存储部分
LCD选择青云创新公司的LCM128645ZK,16×4英文字符显示或8×4中文字符显示。工作在3.3 V时(无背光)电流为1.2 mA。RTC芯片选择Dallas 半导体公司的DS1302,工作在3.3 V时电流仅为0.9 mA。FM24C16为Fairchild半导体公司的铁电存储芯片,3.3 V工作时电流仅为200 μA,数据传输形式为I2C总线方式。MAX706在3.3 V工作电压下电流不超过300 μA,为理想的看门狗芯片。简易键盘可用GPIO模拟,根据需要配置若干I/O口即可。
以上器件或芯片均为较常用芯片,故具体接口电路略去,仅简要介绍一下每个芯片或模块在系统中的作用。
RTC芯片的主要作用是提供一个时间基准。通过MCU控制可实现显示当前时间,记录特定情况出现的时间,以及通过计算得出某几种情况出现的间隔等。
铁电存储芯片主要作用是存储数据,掉电后不丢失。由于其无限次读写的性能和无写等待的高速特性,可通过MCU控制其随心所欲的存取所需数据;更重要的是,应用其无写等待的特性,可在系统掉电的瞬间完成大量数据的稳定写入(400 kHz的总线速度时,写16 KB仅需要47 ms),实现在供电不稳定的情况下不丢失任何数据的功能。
MAX706为看门狗电路,主要作用为电源管理和监测MCU的运行状态。若发现电源供电不足或程序“跑飞”等情况,则复位MCU。
1.6 辅助模块
多数工业仪表由于其功耗的限制,用于显示数据的LCD通常没有背光显示,光线不好时则很难辨认数据;另外仅有模拟量的输出,需要经过二次仪表等设备再转换成需要的数字量。本仪表的辅助模块是针对以上缺陷而设计的。
辅助模块供电回路与主模块不同,这样就避免了增加主模块回路电流(功耗)的后顾之忧。通过LCD背光开关,用户可以选择是否使用背光;若开启,则可以通过键盘输入来控制LCD背光的亮度。如图1所示,背光开关按钮可以手动开启,弥补在光线非常暗的情况下,无法通过按键开启背光的缺点。
若外部设备需要数字量,则可以通过键盘设置将所采集到的数据或一些参数按需要的格式以串口的形式输出。辅助模块中有MAX232和MAX485两种芯片,可以满足不同设备的需要。此外,外部设备可以通过串口与MCU的通信来更改参数。这一功能为远程控制仪表又提供了方便。
1.7 系统主模块功耗分析
系统主要器件的工作电流(理论值)如表1所列。考虑到传感器的工作电流在3.3 V时一般为2 mA以下,所以计算所得的值符合要求。
表1 系统主要器件工作电流估算
经过实验,采用FLOWX3系列流量传感器(意大利F.I.P公司的F3.00型号,3.3~24 V供电)时,整个系统在24 V供电时工作电流为2.10 mA;若系统不加传感器,则24 V供电时工作电流仅为1.35 mA,可见系统电流控制得非常低。前面提到,电流输出模块可输出0.25~25 mA的电流,所以系统电流在3.75 mA以下都能够实现4~20 mA电流的输出。当系统进行不同的操作时,电流会有小的波动,大约为0.01~0.02 mA。由于波动非常小,可以满足工业现场的需求。
2 系统软件设计
本系统的软件编制和仿真均是基于Keil C内核的Silicon Laboratories IDE 环境下实现的,结合JTAG接口可以很方便地将程序下载到MCU的Flash中,并且可进行在线调试。
C8051F040的P0~P3口既可以作为GPIO,又可以作为特殊功能端口,比如UART 、定时器输入等。端口最终是GPIO还是特殊功能口,可通过交叉开关寄存器XBR0、XBR1、XBR2和XBR3的配置决定。程序的初始化函数要先考虑到交叉开关的配置问题。
以下仅给出软件流程及LCD驱动程序。
2.1 LCD驱动程序
如前所述,系统采用青云创新公司的LCM128645ZK液晶模块显示相关数据。液晶模块的数据输入可以选择并行或串行模式,并行模式中可选择4位或是8位。这里采用8位并行模式,由于C8051F040片上资源非常丰富,I/O口很多,所以驱动LCD的控制引脚均用GPIO模拟,而且满足实时显示数据的速度要求。
LCD主要寄存器及控制信号说明如下:
RS与RW为指令控制引脚。当RW=0时,为写操作,反之为读操作。RS=0时为选择指令寄存器,反之为数据寄存器。
当RW=0,RS=0时,可以设置指令寄存器的值,包括清除显示寄存器、位址清零寄存器、功能设定寄存器、设定地址寄存器等。通过设置上述寄存器,可以进行清屏,将地址清零,选择LCD的操作模式,设置当前显示的地址等操作。
当RW=1,RS=0时,读取忙标寄存器。此时数据总线上的最高位(D7)为忙位标志(Busy Flag)。
当RW=0,RS=1时,显示数据寄存器。此时可以将要显示的数据写在数据总线上。
以上只是简单介绍了本系统所采用的LCD模块的几个主要寄存器。对应寄存器操作的驱动程序清单如下:
//Lcdrs、cdcs、cdrw分别接单片机的I/O口
void sendc(uchar c) { //给LCD送命令
SFRPAGE = 0x0f;
//以下实际上是按LCD发送命令的时序图进行操作的
P7=c;
lcdrw=0;
EA=0;//关闭所有中断
lcdcs=1;
lcdcs=0;
lcdcs=1;
lcdrw=1;
P7=0xff;//先置1,后读取
lcdrs=0;
while(P7>=0x80);//读取忙位
lcdcs=0;
lcdcs=1;
EA=1;
if(c==0x01)//若是清屏,则等待2 ms
delay1ms(2);
}
void sendd(uchar c){ //给LCD送数据
SFRPAGE = 0x0f;
EA=0; //关闭所有中断
lcdrs=1;
lcdrw=0;
P7=c; //P7口接数据总线
lcdcs=1;
lcdcs=0;
P7=0xff;//先置1,后读取
lcdrw=1;
lcdrs=0;
lcdcs=1;
while(P7>=0x80); //读取忙位
lcdcs=0;
lcdcs=1;
EA=1;
delay1ms(1);
}
液晶屏上第1行的地址为0x80~0x87,第2行的地址为0x90~0x97,第3行的地址为0x88~0x8f,第4行的地址为位0x90~0x9f。若想在第3行首地址0x90位址写“A”,语句如下:
dispini();//初始化LCD,此函数具体代码略
sendc(0x88);//地址
sendd('A');//数据
2.2 软件流程
上电后单片机初始化各个设置;中断使能;键盘扫描;根据按键选择执行哪个操作,再回到键盘扫描,无限循环。
需要说明的是,A/D部分的数据采集由定时器0产生的中断来控制,D/A部分电压输出由定时器1产生的中断来控制,具体的采样间隔时间按不同的需要而定。本系统设定T0定时器的中断时间为1 ms,T1定时器的中断时间为2 ms。
整体流程及T0、T1中断的流程如图4所示。
图4 软件设计流程
3 结论
本系统以C8051F040为MCU,配合低功耗器件,设计实现了两线制电流环路输出低功耗仪表。该仪表能够在24 V的工作电压下,按照需求环路输出4~20 mA的电流;同时液晶屏显示相关数据,结合辅助模块,可以增加LCD背光及调节功能,增加数字量的输入输出与远程控制功能。由于其具有低功耗、成本低等特点,因而有着较高的应用价值和经济价值。