朱思荣,周万里,毕春元,赵晓华,高广恒,刘仲汇
(山东省科学院生物研究所,山东省生物传感器重点实验室,山东 济南 250014)
在工业控制系统中,串口通讯是最常用的多机通讯手段,特别是较长距离的信号传输,使用485总线的数据变送器较4~20mA摸拟信号传输抗干扰能力更好,精度更高,调试也更方便。但常用的单片机、DSP或PLC控制器串口通讯能力却先天不足,通常只有一个串口,多的也只有2个,常需要对串口进行扩展才能满足系统需求。在一款带有生物传感器检测系统的发酵过程控制器的设计中,系统的2个空气流量变送器、生物传感器检测系统、上位PC机通讯均使用485总线,彩色LCD显示器的触摸屏输出也是串行信号。由于上位PC机通讯需要独占一个串口,触摸屏的突发通讯也不能与其它设备共用串口,生物传感检测系统和空气流量计具有完全不同的通讯协议,所以系统需要进行串口扩展才能满足设计需求。
对于串口扩展,常用的方法有硬件扩展和软件模拟。硬件扩展又分并口扩展和子串口扩展,如intel 8251用并口扩展1个全双工串口,TL16C554用并口同时扩展4个全双工串口,并口扩展需占用较多的端口资源和外部中断;子串口扩展法则用1个高速串口扩展出多个低速子串口,如SP2338扩展3个子串口,SP2538和GM8125扩展5个子串口,子串口扩展电路简单,也需要占用I/O端口资源控制串口切换,并在使用中有一定的条件限制。软件模拟法通常采用定时器模拟,用查询或中断方式接收发送数据,采用中断方式接收数据起始位也要占用外部中断[1-5]。
在本系统设计中,使用Silicon Labs公司的C8051F120高速8位单片机[6]作为主控制器,单片机本身具有2个串口,再采用PCA模块软件模拟扩展法扩展1个串口,用单串口多路485总线扩展方法扩展3路485总线,成功解决了系统串口资源不足的问题。
软件模拟串口是根据串口接收和发送原理,通过定时控制在通用I/O口按位顺序读取或发送数据。通常用子程序接收或发送数据[7],也可通过中断实现,但需要占用一个外中断和定时中断[8],本项目中,利用C8051F120单片机的PCA模块既可捕获脉冲,又可作定时器使用的特点,只用PCA的1个模块完成1个半双工串口的模拟接收和发送。把PCA模块设置为下降沿捕获模式等待接收数据,当接收到起始位的下降沿信号,进入PCA模块中断,把PCA模块改为定时器模式,并把定时时间设定到下一数据位的中间位置,以后每次到定时时间,读取1位数据,并预置下次定时时间,直到接收完一个字节。如要继续接收数据,再把PCA模块设置为下降沿捕获模式。发送数据在PCA模块定时模式下进行,启动发送时发送低电平起始位,预置PCA模块定时时间,以后每次进入PCA模块中断发送1位数据,都预置下次定时时间,直到发送完停止位。
对于采用不同协议的下位机的数据通讯,如用1个串口进行顺序通讯可用硬件进行通道切换[9]来实现,本项目中因为下位机均为485总线,而MAX485[10]芯片的输入和输出可以单独使用,采用直接控制方式可实现多个通道切换,当前未通讯的下位机通过I/O端口禁止MAX485的输入和输出,使数据的发送或接收只针对指定的下位机。
与PC机通讯以PC机作为上位机,本机作为下位机,使用1个独立串口。与空气流量变送器和生物传感器检测系统的通讯,使用1个独立串口,本机作为上位机控制数据读写,空气流量变送器和生物传感器检测系统作为下位机,构成多机通讯系统。485总线本身是多机通讯总线,但在本系统中因为空气流量变送器采用MODBUS工作协议,与生物传感器检测系统不一致,并且在与流量计的通讯中,主机应答等待时间长达0.2 s以上,如采用单总线循环轮询通讯,通讯的速度就比较慢。所以本设计为每个设备采用独立的485接口,并在与流量计通讯等待应答的时间内插入与生物传感器检测系统的通讯,提高系统的通讯效率。系统与LCD触摸屏的通讯采用PCA模块0模拟,PCA模块0的CEX0作为串口输入,任选一I/O口作为串口输出,本系统中因为触摸屏不需要输入信号,实际模拟串口只使用了接收功能。图1为本设计的硬件接口图,其中下位机485接口输出端用3个1 kΩ电阻分压为485总线提供一个基础电平,防止本机读数据时下位机还未切换到输出状态,总线处于不确定状态。
本系统用PCA模块0模拟扩展1个半双工串口,用于触摸屏通讯,系统的数据接收和发送均采用中断方式,除接收或发送1个数据中断次数较多外,其它与系统硬件串口完全一样。对于C8051F120这样的高速处理器,收发1个数据位的中断处理只需几个微秒的时间,不会影响到系统其它任务的执行,为保证数据收发定时准确,PCA中断必须设为高级中断,系统中其他高级中断的处理时间不能超过模拟串口位发送间隔的1/3。
图1 发酵控制系统串行接口硬件电路Fig.1 Hardware circuit of serial interface of fermentation control system
把PCA模块0设为下降沿捕获模式,即把模拟串口切换到接收起始位模式,在该模式下PCA模块捕获起始位下降沿脉冲信号开始1个字节的接收,数据接收和接收初始化均在PCA中断进行。模拟串口的发送初始化需要发送起始位信号并初始化发送数据,以“9600,N,8,1”模式串口通讯为例,发送初始化首先把PCA模块0设为定时中断模式,置发送端口为低电平发送起始位,设置捕获寄存器值为当前PCA计数器值+位接收延时(1/9600 s的PCA计数值),然后初始化发送数据,把要发送的数据放入发送寄存器,并初始化发送中断计数10,以处理包括起始位和停止位共10位数据的发送。
串口数据的接收或发送在PCA中断程序中执行,PCA中断程序流程如图2所示。
在捕获起始位后,初始化延时为位接收延时的1.5倍,使串口数据的读取时间位于该数据脉冲的中部位置,正好是数据最稳定的时候,用以消除串口波特率偏移带来的数据读出错误。图2流程中“字节接收处理”和“字节发送处理”同正常硬件串口的中断处理程序。
图2 模拟串口PCA中断处理程序流程Fig.2 Flow chart of PCA interruption process of analogue serial port
本设计中,因为下位机485通讯接口是独立的总线结构,每个总线的输入和输出均可以禁止,所以系统具有最大的灵活性,与下位机通讯可以采用不同的通讯协议和不同的通讯速率。与生物传感器检测系统的通讯为高速通讯,每秒与主机通讯4次,每次至少读出一次状态和即时数据,如指令缓冲区有数据,在完成读出状态和即时数据后再发送一条指令。与空气流量计的通讯为低速通讯,每秒读一次流量数据。本设计中与下位机的通讯由定时中断启动,每秒启动2次,第1次启动与流量计1的通讯,第2次启动与流量计2的通讯,在发送流量计通讯连络信号后,立即启动一次与生物传感器检测系统的通讯,在完成与生物传感器系统通讯后切换回流量计通讯,读出流量的应答信息,读出流量的应答后再启动一次与生物传感器系统的通讯。定时中断同时处理子机通讯的超时,保证在某一子机通讯故障的情况下不会影响与其他子机的通讯,图3为定时中断对串口处理流程图,图4为定时中断中串口超时处理方法。
设备工作正常时,在串口发送或接收1个数据同时初始化系统的超时延时寄存器,所以不会产生串口通讯超时,定时中断仅启动与流量计1和2的通讯,与生物传感器的通迅在串口中断中启动。图5为串口1的通讯程序流程。如某个设备故障或未连接,则通讯在等待应答过程就会超时,定时中断的超时处理就终止该设备的通讯进程,启动与下一设备的通讯或清除串口忙标志,使通讯循环正常进行。
图5 串口1多下位机通讯工作流程Fig.5 Flow chart of serial port communications with multiple lower computers
PCA是8051单片机的常用功能模块,一般的增强型8051单片机都带PCA功能,通常每个PCA有3个以上的捕捉/比较模块,按本设计方法,每个模块均可扩展1个半双工的串口,并且利用PCA扩展的串口。因为采用中断方式,通讯时占用的CPU时间很少,占用的I/O端口也少,每个串口只需2个I/O口,如串口不需要发送,则只占1个I/O口,基本不影响系统的其它功能的执行,用2个PCA模块还可以实现全双工串口,是比较理想的多串口扩展方案。用本方案扩展串口占用系统资源少,较硬件扩展法可降低产品成本,并提高系统的可靠性,特别是对有小型化要求的产品,缩小了线路板的面积,可使产品设计得更加小巧。
对于485接口的下位机数据通讯,采用独立总线的方法,虽然使用I/O端口较多,但可以把通讯协议完全不同的下位机连接在1个串口中,并根据实际需求合理调整不同子机的数据处理频率,增加了系统应用的灵活性,特别适合于从485总线数据变送器中读出检测数据。如本项目的空气流量计,当1个串口接8只流量计时,采用单总线读出方式,由于变送器应答等待时间长,4 s才轮询一次,但使用多总线结构,可以通过定时发送指令的方式,先完成8个流量计的的数据读出指令发送,再顺序接收8个流量计的返回数据,这样每秒至少可以轮询2次,提高了串口通讯效率。
[1]景鑫.51单片机的串行口扩展方法[J].微计算机信息,2005,21(8-2):58-59.
[2]鲍梦,刘智萍.51系列单片机的串口扩展方案[J].软件导刊,2008,7(5):135-136.
[3]戚建宇,何松.基于TL16C554的嵌入式系统的多串口扩展[J].计算机与信息技术,2011(6):9-12.
[4]孟涛,王福虎,陈森.微控制器的多串口扩展设计[J].舰船防化,2009(5):45-51.
[5]钱震宇,肖昌汉.基于GM8125的单片机多串口通讯电路的设计与实现[J].船电技术,2011,33(11):22-24.
[6]Silicon Labs.C8051F120/1/2/3/4/5/6/7,C8051F130/1/2/3,Mixed signal ISP flash MCU family[EB/OL].[2012 - 05 - 06].http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F12x -13x.pdf.
[7]李玮,杨红霞.基于51单片机的软串口设计[J].安阳工学院学报,2011,10(4):32-33.
[8]程频,高伟.基于PIC单片机的软串口的实现[J].计算机与数字工程,2005,33(10):150-153.
[9]林志强.单片机多协议串行通信接口扩展技术[J].福建电脑2009,(9):40-41.
[10]Maxim Intergrated.Low-Power,Slew-Rate-Limited RS-485/RS-422 Transceivers[EB/OL].[2012 - 05 - 06].http://datasheets.maxim-ic.com/en/ds/MAX1487-MAX491.pdf.