基于MCF52259的RS232串口-CAN转换器的实现

2011-01-11 02:03郑洪静
苏州市职业大学学报 2011年4期
关键词:电平中断串口

郑洪静,屯 娜

(1.苏州市职业大学 计算机工程系,江苏 苏州 215104;2.甲骨文(中国)软件系统有限公司,江苏 苏州 215104)

传统异步串行通信RS232接口是单个设备接入计算机时常采用的一种接入方式,由于接口和通信协议比较简单,因而在计算机串行通信领域得到了广泛的应用.但是随着自动化需求的日益增加,该通信方式的弊端也逐渐暴露,如通信距离短,只能进行点到点通信,不能直接组建多点通信网络等.在嵌入式系统应用中,大部分终端都支持RS232接口通信,因此在保持原有接口应用的基础上,对这些终端进行性能和应用的升级,无疑成为工业控制领域研究的热点.与此同时,CAN(control area network)现场总线作为一种高性能串行数据局域通信网络,已成为国际上应用最广泛的现场总线之一[1-3].它广泛应用于汽车电子、电梯控制、安全监控等领域,且具有高速、短距离、稳定可靠等特点.CAN总线的应用研究逐渐受到业界的重视.早期的CAN应用,尚需专门的CAN控制芯片与MCU相连,但随着嵌入式微控制器制造技术的发展,一些新出品的芯片内部已经集成了CAN模块.因此,无论是自身技术发展的需要还是应用领域的需求,CAN总线会越来越受到人们的欢迎.根据中国知网数据统计,近10年针对RS232应用的文献有200多篇,有关CAN总线应用的文献有40多篇,但关于RS232接口与CAN总线转换的研究很少,根据市场调研分析,设计一款RS232-CAN转换器将在工业控制领域具有实际应用价值.本设计采用CAN总线作为RS232串口设备组网的接入方案,以飞思卡尔公司2009年2月推出的高性能微控制器(MCU)MCF52259芯片作为主控芯片,设计并实现RS232串口-CAN协议互转的数据转换器,弥补了RS232串口设备通信在实时性、可靠性和互操作性等性能上的不足[4].

1 功能设计方案

RS232串口-CAN协议互转的数据转换器包括两大功能模块:RS232串口模块和CAN总线模块.串口模块由MCF52259的UART(异步串行通信)控制器和其外围电平转换电路构成,CAN总线模块由MCF52259的CAN控制器和其外扩的CAN收发器组成.该转换器包括4个缓冲区:UART用户接收、发送缓冲区和CAN用户接收和发送缓冲区.UART用户接收、发送缓冲区,分别用来存放从RS232总线上接收来的数据和准备发送到RS232上的控制信息.CAN用户收发缓冲区,其功能与UART的类似.为了提高系统性能,防止转换器成为通信瓶颈,设计时采用“收到数据立即转发”的处理方式,即实时对RS232和CAN总线进行监听,一旦检测到某一侧上有数据收到,立即对其解析,并装入各自缓冲区,然后按设定的工作方式处理并转换发送到另一侧总线,实现数据转换.RS232串口-CAN协议转换器的功能结构如图1所示.

图1 RS232串口-CAN协议转换器的功能结构

2 硬件电路设计

2.1 UART模块外围电路设计

MCF52259包含3个独立的带有DMA请求能力的UART模块,可支持全双工的数据通信,每个UART接口都有发送引脚UTXDn和接收引脚URXDn,它们是TTL电平引脚,而UART接口所连外设上的发送/接收电平是232电平.在RS232-CAN协议转换器上设计了以MAX232芯片为核心的驱动电路,用于串口通信时的电平转换,如图2所示.当转换器的串口端作为发送端时,由该驱动电路将板上TTL电平转换成232电平;而当转换器的串口端为接收端时,该电路将232电平转换成TTL电平.

2.2 CAN模块外围电路设计

MCF52259的CAN控制器有发送CANTX和接收CANRX两个引脚,其逻辑电平为LVTTL,也就是说MCF52259的CAN控制器只是协议控制器,在实际使用时需要与之相适应的总线收发器实现物理层的实际驱动能力.

图2 UART接口电平转换电路

图3 CAN总线物理层收发电路

采用德州仪器公司生产的SN65HVD230 CAN总线收发器,该芯片在不同的速率下均有良好的差分收发能力,最高速率达1 Mb/s,可用于较高干扰环境下,因此无需额外连接隔离芯片,不仅简化了电路设计,而且使通信系统更可靠.以SN65HVD230为核心的CAN总线物理层收发电路如图3所示.SN65HVD230需要3.3 V的工作电压,在电源和地引脚之间还需接0.1 µF的滤波电容以降低高频噪声干扰.CAN控制器的输出引脚CANTX接到SN65HVD230的数据输入端D,将此CAN节点发送的数据传送到CAN网络中;CAN控制器的接收引脚CANRX与SN65HVD230的数据输出端R相连,用于接收数据.Rs引脚接47 kΩ斜率电阻,使SN65HVD230工作在斜率控制模式下.CAN设备连接器采用9芯串口头.

值得注意的是SN65HVD230的CANH和CANL与物理总线相连,按照CAN2.0协议规定,CANH只能是高电平或悬浮状态,CANL只能是低电平或悬浮状态.这就避免了当系统发生错误,多节点同时向总线发送数据时,可能导致的总线短路现象的发生,避免了节点的损坏.而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会因个别节点出现问题,使得总线处于“死锁”状态.

3 软件设计

RS232串口-CAN协议转换功能的软件主要由RS232串口转CAN程序和CAN转RS232串口程序组成.

3.1 RS232串口和CAN的帧结构

为了保证数据通讯的实时性和正确性,设计时将UART数据封装成固定格式的帧,具体的帧结构定义为

数据帧和命令帧的帧头长度为2个字节,它标志着一个完整帧的开始,其值固定为0x57和0x58.类型字段长度为1个字节,标识了帧类型,数据帧值为0x01,命令帧为0x02.数据帧中设置了1个字节的数据长度字段,标识了实际要传送数据的长度,其最大值为255,表示数据帧一次传送的数据最多为255字节;紧随数据长度字段的就是实际需要传送的数据;最后一个字段为校验字段,长度为1个字节,存放从帧类型到数据域的校验结果.为了保证数据传输的实时性,本设计放弃使用复杂的CRC校验方法,而是采用从帧类型域到数据域的字节相加再取反的方法来校验帧数据的正确性.命令帧设计较简单,类型字段后就只有命令字段,如0x01 就是一个“请求发送新数据”的命令.CAN总线通信主要使用标准和扩展数据帧类型,这两种帧结构在CAN2.0协议中有完整定义,规定了4种报文帧[5],包括数据帧、远程帧、错误帧和过载帧,本文只涉及数据帧的传输,数据帧的结构由7个位场组成:帧起始SOF、仲裁场、控制场、数据场、CRC场、应答场和帧结束EOF.

3.2 RS232串口到CAN协议转换程序设计

RS232串口到CAN协议转换程序将RS232串口方式接收的应用数据流(如:1位开始位、8位数据位和1位停止位)转换为CAN控制器能识别的数据帧结构.这一过程将由主函数、UART接收中断完成.主函数执行流程如图4所示,处理函数会根据系统功能参数的不同置位不同标志位,这里将置位UART_CANRev.UART中断接收1帧数据存入UART用户接收缓冲区,主函数查询到UART_CANRev被置位后,计算校验码,判断数据帧是否正确,过滤错误帧并请求重发.由于每个CAN数据帧最多只能传送8 bit数据,所以要将串口帧分成1组或多组CAN帧分别发送.最后向串口总线请求新数据帧.

3.3 CAN到RS232串口协议转换程序设计

CAN到RS232串口协议转换程序将CAN控制器能识别的帧结构转换为RS232串口方式接收的应用数据流.这一过程将由主函数、CAN接收完成中断和CAN错误中断处理函数完成,程序执行流程如图5所示.CAN控制器成功接收到数据后,发生接收数据完成中断,在该中断中将帧信息和数据部分从帧格式中取出,并将要转发的数据存入CAN用户接收缓冲区,然后把这些数据封装成串口帧,发送到RS232总线上.最后向CAN总线查询发送请求新数据帧.

图4 RS232串口到CAN协议转换程序流程

3.4 通信过程中的流量控制与错误控制

RS232串口-CAN协议转换器采用“发送方发完一帧数据停止发送,等转换器转发成功后,向发送方发送请求新数据的命令帧”的流量控制方法.考虑到串口通信较为稳定,一般不采用特别的监控方法,只对接收到的数据进行校验检查,因此错误控制就是对CAN通信的错误控制.具体控制方法和流程是:在接收数据时,一旦发生错误,CAN控制器会自动对错误进行标定,同时产生中断,此时系统将停止数据转发,并放弃当前处理的帧,进行报错和显示故障灯信号;在发送数据时,采用查询发送方法,若在规定的时间内没有发送成功,系统进行报错处理,根据情况请求重发或停止转发,并显示故障灯信号.

4 RS232串口-CAN协议转换器的系统测试

为了验证系统能否正常工作,本文首先进行模块测试,然后再进行总体功能可行性测试.

4.1 RS232接口的测试

针对RS232接口,本文设计了2组测试实例,第1组:转换器的串口端采用查询接收方法从串口调试工具接收固定长度数据,并向PC实时传回接收到的数据;第2组:转换器采用中断接受方法接收变长数据,其他一样.

经过大量的实验,对于第1组测试实例,使用本文设计的驱动函数和查询接收方法已表现出很好的性能,在速率高达115 200 bps下传输大量数据,没有丢包现象.

图5 CAN到RS232串口协议转换程序流程

对于第2组测试实例,如果在中断服务程序中直接调用接收函数,会出现数据丢包现象.因此在中断接收时,在中断服务程序中应直接将数据从接收缓冲寄存器中读出,并写入发送缓冲寄存器,这样就免去了调用函数时压栈和出栈时间,使中断处理时间最小化,避免中断的丢失.此外,不能在中断处理程序中清接收器准备完毕位,因为在读接收缓冲寄存器时,该位已被自动清零,如果再手动清,也可能会丢失中断,造成数据丢失.经过多次调试后,串口已经能稳定地收发数据.

4.2 CAN接口的测试

针对转换器的CAN接口的设计,本文先搭建1个CAN通信网络,使用3块带有CAN接口的转换器作为3个通信节点,并分别标记为节点A、B、C,组成一个CAN通信网络.3节点通信均使用标准数据帧.节点A的ID设为0,节点B的ID设为1,节点C的ID设为2.节点A接收所有节点发送的帧,并将接收到的数据内容通过串口发送到PC机.节点B每隔10 ms向节点A发送ID为1,数据为“IamNodeB.”的帧,节点C每隔20 ms向节点A发送ID为2,数据为“IamNodeC.”的帧.节点A收到B节点发来的数据帧则向B发送一个数据为“HelloNodeB.”的帧握手,收到C节点发来的帧则向C发送一个数据为“HelloNodeC.”的帧握手.节点A使用MB0作为发送缓冲区,使用MB1作为接收节点B数据的接收缓冲区,使用MB2作为接收节点C数据的接收缓冲区.而B和C节点使用各自的MB0作为发送缓冲区,MB1为接收缓冲区.在调试过程中,CAN的接收数据不太稳,有时会收不到数据,经过反复试验,在每次读数据之前重新配置接收报文缓冲区,解决了该问题.

4.3 转换器的测试

为了保证RS232串口-CAN协议转换器可以正常稳定工作,本文设计了如图6所示的用于系统测试的PC机端软件.由于PC上一般没有CAN接口,无法将CAN出来的数据传递给PC显示,在测试这两种功能时,转换器的CAN接口与另一块MCF52259EVB CAN设备B相连,转换器的RS232接口通过串口线与PC串口相连,PC端的数据“Data is sent from uart to CAN.”通过转发器发给CAN设备B,B接到数据后回发信息“Hello,CAN device A!Data has been received!”给转换器,再由转换器通过串口发给PC在串口接收窗口中显示.按照如上测试方案分为5组进行测试,并且每组连续测试时间为一周,在测试期间转换器能够正确稳定地工作.由于在模块化测试的基础上再对本文设计的转换器进行测试,同时转换器设计时在软件上采用了流量控制和错误控制,所以转换器在运行时极少发生丢包和数据错误现象.

图6 数据转换器测试过程界面

5 结 论

本文给出了基于MCF52259的RS232串口与CAN互转的详细设计方案和实现过程.对协议转换层的数据结构进行了合理的设计并结合流量控制和错误控制机制,保证了系统的实时性、稳定性和可靠性.在PC方编写了转换器功能、参数配置程序和数据通信测试程序后,配合数据转换器的使用和测试,经大量数据测试,RS232串口-CAN数据转换器运行状况良好,这也验证了本文设计的底层软件构件已具有较高的可用性和稳定性.

[1] SCHARBARG Jean-Luc,BOYER Marc,FRABOUL Christian. CAN-Ethernet architectures for real-time applications[C]// Dans:IEEE international conference on emerging technologies and factory automation(ETFA),Catania,Italy:IEEE Computer Press,2005:245-252.

[2] NOVAK Jin. New measurement method of sample point position in controller area network nodes[J]. Measurement,2006(11):11-13.

[3] KALLEL H S, KBAIER O, RAHMED S B. An implementation of a proposed modification of CAN protocol on CAN fieldbus controller component for supporting a dynamic priority policy[C]//38th IAS Annual Meeting of Industry Applications Conference, Salt Lake City, USA: IEEE Computer Press, 2003:23-31.

[4] 赵志军,王建英. RS232/CAN智能协议转换器及其通信网络[J]. 中国铁道科学,2007(5):134-139.

[5] 史久根,张培仁,陈真勇. CAN现场总线系统设计技术[M]. 北京:国防工业出版社,2004.

[6] FREESCALE. MCF52259 ColdFire Integrated Microcontroller Reference Manual [EB/OL]. (2010-05-30)[2011-01-20]. http://cache.freescale.com/files/32bit/doc/data_sheet/MCF52259.pdf?pspll=1.

猜你喜欢
电平中断串口
浅谈AB PLC串口跟RFID传感器的通讯应用
跟踪导练(二)(5)
千里移防,卫勤保障不中断
NPC五电平Z源逆变器的设计研究
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
基于三电平光伏并网逆变器控制系统的研究与实践
基于NPC三电平变换器的STATCOM研究
一种多电平逆变器及其并网策略