引言
现场总线技术因其具有较强的开放性、可操作性、通信实时性以及对环境的适应性等特点,被广泛应用于工业控制领域。鉴于现场总线的多样性,研究不同标准的现场总线的互联变得尤为重要。本文以CAN总线和PROFIBUSDP总线为例,研究总线协议转换的设计方法,采用STM32处理器和专用协议芯片构建协议转换器,并配置相关存储电路,可实现数据暂存、断点重发功能以及诊断信息的存储。

图1 CANPROFIBUSDP协议转换器硬件结构图
1 总体方案
1.1 设计原理
在OSI参考模型中,CAN总线和PROFIBUSDP总线都只定义了物理层和数据链路层[12],但是两者在数据链路层的规范和协议完全不同,要进行两者之间的通信必须进行协议转换。协议转换器的作用是,接收到一种现场总线设备发送来的数据,经过解析数据包后获得用户所需的信息,再按照另一种总线协议对其进行打包,然后发送到该总线对应的设备。
1.2 系统结构
该CANPROFIBUSDP协议转换器主要包括:微处理器电路、总线驱动电路、外扩大容量FIFO电路、FLASH及液晶屏接口等,硬件结构如图1所示。
其中,微处理器选用带有CAN控制器的ARM核芯片STM32F103VET6。其内部CAN总线控制器电路是根据CAN总线规范而设计,可以完全实现CAN总线协议。PROFIBUSDP协议的实现则由它的专用芯片和微处理器内的用户程序共同完成。外扩大容量FIFO电路由CPLD和SDRAM构成。
2 硬件设计
系统的硬件除了电源部分之外,根据功能主要分为三大部分:一是CAN总线接口电路,完成CAN总线数据收发与控制;二是PROFIBUSDP总线接口电路,完成PROFIBUS总线数据的收发与控制;三是存储系统,由外扩大容量FIFO电路和FLASH组成,FIFO作为数据交换时的缓冲,FLASH用来存储配置信息及错误诊断信息。LCD则显示转换状态及错误诊断信息。
2.1 电源部分
双24 V电源接入后,分别通过两个二极管,组成双路冗余电源电路,得到一组24 V电源的输出。24 V接入后级,使用两个电源模块LM25965 V,把24 V输入转为双5 V输出。得到双5 V的目的是后面还有一级的双路冗余电源电路。这组双路冗余电路由LTC4416和SI7495DP搭建,双5 V经过双路冗余电源电路之后,就得到了整个系统需要的5 V电源,即原理图中VCC和GND。如图2所示。

图2 双路冗余电源电路
2.2 CAN总线通信
为了提高CAN总线节点抗干扰能力,应保证各节点之间在电气上完全隔离和独立,所以选用了高速CAN总线隔离收发器CTM1050。又由于CAN总线控制器已集成在STM32内部,所以不必使用“CAN总线控制器+光耦隔离+CAN总线驱动”的方式与CAN总线通信,也不需要另加一组隔离电源。
2.3 PROFIBUSDP总线通信的实现
PROFIBUSDP总线分两部分:RS485驱动和PROFIBUSDP协议芯片。为了防止总线电压变化影响电路板上元器件,应采取相应的隔离措施。本协议转换器选取了带隔离功能的RS485驱动芯片ADM2486,省去了光耦隔离电路。PROFIBUSDP协议芯片选用SPC3[3],与微处理器接口电路如图3所示。
STM32与SPC3之间连接存在电平匹配的问题,SPC3供电为5 V,STM32供电为3.3 V,为解决电平匹配问题,需添加电平转换芯片,本设计选用SN74HC244和SN74HC245来完成STM32驱动SPC3中5 V CMOS时的连接。
PROFIBUSDP协议芯片SPC3与微处理器STM32接法:数据总线与地址总线直接与STM32连接,其他控制部分引脚通过电平转换芯片与STM32连接。
2.4 存储部分
存储系统由CPLD和外部SDRAM构成的大容量异步FIFO[4]及FLASH组成。异步FIFO用来缓存两种总线之间的数据,完成不同的时钟域数据快速准确的传输,实现数据暂存和断点重发功能,FLASH用来存储配置信息及错误诊断信息。
3 软件设计
为了满足协议转换器的实时性要求,方便多任务管理,将移植μC/OSII到该系统中[5]。操作系统功能结构如图4所示。
3.1 初始化
μC/OSII的初始化主要完成系统运行需要的变量和数据结构的初始化,并创建信号量和任务。主要创建的是PROFIBUSDP和CAN初始化任务、PROFIBUSDP总线通信任务、CAN总线通信任务和数据处理任务等。这些任务之间的通信机制选用信号量和消息队列。

图3 SPC3与STM32接口电路

图4 操作系统结构图
3.2 数据处理
数据处理模块是协议转换器的核心部分,主要完成两侧总线的数据格式转换和转发。当PROFIBUSDP主站向某个CAN总线节点请求数据传输时。PROFIBUS总线上数据通过带隔离功能的RS485驱动电路传输至PROFIBUSDP专用协议芯片。SPC3解析出请求数据的内容,然后由用户程序提取出所需地址、数据信息,写入外部FIFO作为缓冲,然后再读出,以CAN总线协议标准根据此信息加上标识符、校验码等内容,组装成标准的CAN总线帧格式,通过高速CAN总线隔离收发器发送到相应的CAN总线节点。CAN总线节点收到此报文后,产生相应的应答报文,该报文也通过协议转换器传送给PROFIBUS主站。以PROFIBUS总线数据向CAN总线传输为例,图5、图6分别完成了一次数据写入和读出FIFO的过程。

图5 PROFIBUS数据写入FIFO流程
空满标志的判断是FIFO设计的重点。FIFO本设计将采用如下方法,把整个FIFO按地址指针的最高两位分成4部分[6]。当写地址高两位的值比读地址高两位的值小1时,意味着写地址即将追上读地址,发出“即将满”信号,同时设置方向标志为1;当读写地址完全相等并且方向标志为1时,FIFO处于满状态,设置满标志为1。FIFO的空状态判断方法同上,只是方向标志设置为0,FIFO处于空状态时,设置空标志为1。与传统方法相比,不需要每一位读写地址都经过2级锁存,这样大大减小了面积。需要注意的是,进行满状态判断时,将读地址同步到写时钟域;进行空状态判断时,将写地址同步到读时钟域。
结语
基于ARM的CANPROFIBUS协议转换器除了可以很好地完成总线协议的转换工作,还具有数据暂存和断点重发功能,并且可以显示在数据传输过程中的警告、出错信息以及转换状态。鉴于目前工业领域多种总线共同发展而各种总线又具有不同优势的现状,研究各总线之间的互联和信息交换有很大意义。此方法对于研究其它总线的协议转换也有一定的参考价值。

图6 PROFIBUS数据读出FIFO流程