APP下载

基于C8051F310的PCA模块在Modbus通信网络中的应用

2015-01-27王德志

自动化与仪表 2015年2期
关键词:计数器寄存器端口

王德志

(包头职业技术学院 电气工程系,包头 014030)

Modbus的分布式应用及标准协议使得控制器之间、控制器与网络和其它设备之间通讯成为可能。因此,不同厂家的控制或测量设备可以连成工业网络,进行集中监控或数据反馈。为了使终端设备具有更好的系统兼容性和市场竞争力,监测设备应具有多种方便通讯的外部接口。模拟量信号如0~10 V,4~20 mA,数字量信号如脉冲频率信号输出接口应用广泛,而Modbus通讯协议及RS485接口作为分布式控制系统的通用标准,可以进一步满足现代设备的智能化联网要求。

本文提出了一种脉冲频率信号精确转换为Modbus协议帧数据的方案,以具备脉冲输出功能的磁漩涡流量计为实验载体,利用C8051F310中的PCA捕捉/比较模块的边沿触发捕捉功能,计算出单位时间内脉冲的个数和对应的脉冲频率,以RS485为电气接口,Modbus ASCII码为传输方式构成工业网络中的1个节点完成即时通讯。该方案增强了终端监测设备的通用性和友好度,提高了系统整体的智能化监测和控制水平。

1 C8051F310中PCA定时器/计数器功能简介

1.1 C8051F310 MCU

C8051F31x系列器件使用Silicon Labs的专利CIP-51微控制器内核。CIP-51与MCS-51TM指令集完全兼容,可以使用标准803x/805x的汇编器和编译器进行软件开发。CIP-51内核具有标准8052的所有外设部件,包括4个通用的16位计数器/定时器、1个具有增强波特率配置的全双工UART、1个增强型SPI端口、1280 B内部RAM、128 B特殊功能寄存器(SFR)地址空间及29/25个I/O端口等,特殊功能可编程计数器/定时器阵列(PCA)具有5个捕捉/比较模块和看门狗定时器功能。

1.2 PCA定时器/计数器功能

可编程计数器阵列(PCA)提供增强的定时器功能,与标准8051的计数器/定时器相比,它需要较少的CPU干预。PCA由1个专用的16位计数器/定时器和5个16位捕捉/比较模块组成,捕捉/比较模块有单独的I/O线(CEXn),这些I/O线在被使能时通过交叉开关连接到端口I/O。因此,较传统的通过检测I/0口高低电平的方式对外部输入脉冲计数,PCA计数器/定时器通过对输入信号捕捉并进入中断的方式检测脉冲信号,可以获得更高精度的检测值。

捕捉/比较模块0的I/O线CEX0通过交叉开关连接到端口I/O。因此,程序中设置端口I/O交叉开关寄存器 1:XBR1 的位 6:XBARE=1,交叉开关使能;位 2-0:PCA0ME=1,CEX0连接到端口引脚。为使CEX0连接到端口P1.0,须令端口0跳过寄存器P0SKIP=0xCF。由于P0.4,P0.5连接UART0的TX0和RX0,为防止URAT0功能关闭,P0.4,P0.5不能被交叉开关跳过。利用Config2软件对C8051F310的port I/O口进行配置。

16位的PCA计数器/定时器由2个8位的SFR组成:PCA0L和PCA0H。读PCA0L时,“瞬象寄存器”自动锁存PCA0H的值。由于读PCA0H或PCA0L不影响计数器工作,保证读操作不会造成对脉冲计数的延时,进一步保证检测精度。置ECCF0位=1将允许模块的CCF0中断。本方案应用捕捉/比较模块0的正边沿触发捕捉模式。

PCA的捕捉方式原理如图1所示,PCA0捕捉/比较寄存器 PCA0CPM0的位 5:CAPP0=1,使能PCA0的正边沿捕捉功能;位0:ECCF0=1,允许CCF0的捕捉/比较标志中断请求。因此,程序中设置PCA0CPM0=0x21。当CEX0引脚上出现正边沿跳变(从低电平到高电平跳变)时,PCA捕捉PCA0L和PCA0H的值并将其装入到对应模块的16位捕捉/比较寄存器(PCA0CPL0和PCA0CPH0)。捕捉发生时,CCF0被置为逻辑‘1’并产生1个中断请求,并在中断服务程序中对CCF0位清0。帧的数据位中,完成数据的传输。

图1 PCA捕捉方式原理框图Fig.1 Principle diagram for the captureway in PCA

2 Modbus通讯协议应用

2.1 Modbus通讯协议层

Modbus遵从主从控制策略,只有1个主机,可支持多达247个远程从属控制器或节点。此协议要求从机具备单独的设备地址,可由主机巡测并实时回应。Modbus协议帧数据包由地址码、功能码、数据位、校验位等组成。

ASCII码传输模式中每个ASCII码字符都由1个16进制字符组成。每个字节包括1个起始位,7个数据位,1个奇偶校验位(无校验则无),1个停止位和错误检测域。数据校验方式一般为CRC或LRC。

Modbus支持多种电气接口,如RS232、RS485等,其中RS485作为工业总线应用更为广泛。RS485二线制(AB)接法可实现多点双向主从通信,总线可连接多达32个有效负载,特性阻抗为120 Ω,信号最大传输距离为1219 m,最大传输速率为10 Mb/s。基于RS485总线通信的稳定性和现场布网方便等优点,被广泛应用于分布组网系统中。

2.2 Modbus协议在接口数据传输中的应用

在C8051F310中开启PCA捕捉/比较模块0的边沿触发捕捉功能,在E2PROM中更新CEX0端检测到的单位时间内脉冲个数值,结合频率脉冲转换算法,将计算得出的流量值信息打包储存在Modbus

3 Modbus通信基板电路硬件设计

3.1 PCA捕捉外部脉冲信号接口电路

信号捕捉电路采用光耦隔离的方式对输入信号进行处理。采用光耦传输的优点是信号单向传输,输入端与输出端完全实现电气隔离,输出信号对输入端无影响,抗干扰能力强,无触点,传输效率高。此处应用的TLP521光耦合器的主要作用是实现信号隔离和电平转换。PCA捕捉外部信号的电路图如图2所示,PULSE为外部信号输入接口,端口P1.0连接捕捉/比较模块0的CEX0。

图2 PCA捕捉外部信号的电路图Fig.2 PCA capture external signal circuit diagram

3.2 隔离RS-485接口电路

图3 典型的UART0 RS232转RS485通讯电路Fig.3 Typical communication circuit of UART0 RS232 turn to RS485

如图 3所示,C8051F310的 UART0串口的RXD,TXD通过光电隔离芯片HCPL0600连接半双工SN65HVD3082E芯片的RO,DI引脚,控制信号RS485_0同样经光电隔离电路连接485芯片的DE和RE引脚。DE=RE=1时,485芯片的发送器有效,接收器禁止;DE=RE=0时,485芯片的接收器有效,发送器禁止。

连接至A引脚的上拉电阻R22、连接至B引脚的下拉电阻R20用于保证无连接的485芯片处于空闲状态,提供网络失效保护,以提高RS485节点与网络的可靠性。使用DC-DC隔离器件如MORNSUN公司的WRF0505S-1WR2可以产生1组与微处理器电路完全隔离的电源输出,用于向RS485收发器电路提供+5 V电源。该隔离RS485接口电路实现了信号和电源的双隔离,可广泛应用于煤矿井下防爆或本质安全型产品中。

3.3 C8051F310 UART0接口电路

C8051F310的UART0接口电路通过设置端口I/O交叉开关寄存器0:XBR0=0x01;使UART TX0、RX0连接到端口引脚的P0.4和P0.5。设置端口0输出方式寄存器P0MDOUT=0x12;使TX0和P0.1端口为推挽方式输出。

4 软件设计

通信基板电路的软件设计主要包括硬件初始化程序、脉冲频率信号与Modbus协议帧数据转换程序、脉冲频率捕捉算法设计和RS485收发子程序等。

4.1 主程序设计

主程序流程图如图4所示,主要包括系统初始化函数、I/O端口初始化函数、UART0初始化函数,以及PCA0脉冲检测函数等。完成系统初始化扫描后,系统等待PCA0中断触发。当检测到外部脉冲信号时,即跳入PCA0脉冲检测与Modbus转换子程序。

图4 主程序流程图Fig.4 Flow chart of the main program

4.2 PCA0脉冲检测捕捉算法与Modbus转换子程序

PCA0初始化函数允许PCA0 CEX0口每次捕捉到正边沿跳变时进入捕捉中断 (中断标志位CCF0),在中断函数中,当捕获到程序设定的固定脉冲个数goal时,记录此时PCA0CPL0和PCA0CPH0的值。PCA0定时器时钟f为系统时钟12分频:f=SYSCLK/12=3.0625 MHz/12,捕捉到第goal个正边沿脉冲时tf的值:tf=SH×256+SL,则goal个正边沿脉冲的总周期:T=tf/f,单个方波脉冲的周期:t=T/goal,方波脉冲的频率F=1/t;程序表达如下:

PCA0脉冲检测与Modbus转换流程图如图5所示。

图5 PCA0脉冲检测与Modbus转换流程图Fig.5 Flow chart of PCA0 pulse detection and the Modbus conversion

4.3 RS-485收发子程序

Modbus协议帧数据以ASCII码形式传输,应答机制为主机发送后目标接收器应答。主机发送码格式一般为:[从机地址][功能码][n位数据][CRC校验]。该方案中,设置的主机发送码格式为***ZSQ01回车。若从机地址对应,则从机01响应主机巡测,应答码为***SQ”流量值”回车。从机UART0中断函数中响应主机发送码程序为

485接收利用UART0中断,在中断程序内读取缓存区SBUF0中的值。RS485收发子程序流程图如图6所示。

图6 RS485收发子程序流程图Fig.6 Flow chart of the RS485 transceiver subroutine

5 信号转换电路检测数据实验验证结果

现场安装的被测流量计的管径为DN25,仪表系数为160。实验过程中记录的3组数据如表1、表2和表3所示。

表1 流量计实验数据组1Tab.1 Experimental data of flow meter as group 1

表2 流量计实验数据组2Tab.2 Experimental data of flow meter as group 2

表3 流量计实验数据组3Tab.3 Experimental data of flow meter as group 3

由以上3组数据可以看出,Modbus通信基板检测到的流量计脉冲频率与流量计实际输出的脉冲频率间的误差在实际应用要求的范围之内。

6 结语

基于C8051F310中PCA0计数器/定时器功能的Modbus协议帧数据转换已经成功应用在磁漩涡流量计通信基板电路中。通过硬件设计和软件编程,实现了脉冲频率信号向RS485信号精确的数据传输,并完成与主机系统联网稳定通讯。该方案在一定程度上提高了终端设备的智能化水平和组网能力。

[1]新华龙公司.C8051F310/1/2/3/4/5/8/16 KB ISP FLASH微控制器数据手册[M].2004:167-177.

[2]江贤志,刘华章,张教育,等.基于C8051F020单片机的RS485串行通信设计[J].电子测量技术,2014,3(1):24-28.

[3]王永力,任开春,何春晗.基于C8051F060单片机的CAN/RS485转换器的设计与实现[J].工业控制计算机,2009,9(1):47-49.

[4] 刘晓峰,耿蒲龙.基于C8051F040单片机的CAN/RS-485转换模块设计[J].科学之友,2012,5(2):29-33.

[5]沈金鑫,夏静.基于C8051F350的多路高精度数据采集系统及应用[J].电子设计工程,2014,5(1):26-28.

[6]宁占彬,曾新顺.基于STM32F050的RS485数据转发器设计[J].电脑编程技巧与维护,2013,14(4):35-37.

猜你喜欢

计数器寄存器端口
采用虚拟计数器的电子式膜式燃气表
一种有源二端口网络参数计算方法
一种端口故障的解决方案
关于74LS90计数器的Multisim仿真分析
Lite寄存器模型的设计与实现
多按键情况下,单片机端口不足的解决方法
二进制翻译中动静结合的寄存器分配优化方法
移位寄存器及算术运算应用
SR620型与53230A型计数器的性能测试
算盘是个“小气鬼”