RS232是PC机与通信应用中应用最广泛的一种串行接口;RS485半双工异步通信总线是在分布系统设计中广泛使用的数据通信总线;而CAN总线是一种可用于远程通信控制的、双向、多主方式的串行现场总线,特别适合于工业设备测控单元的互联。针对上述几种比较通用的串行总线,实现总线之间协议转换的适配器很多,如RS232与RS485之间、RS232与CAN之间、RS485与CAN之间的协议转换器等。本文设计了一种可用于CAN总线、RS232、RS485等三种总线之间的转换器,为多种异型总线之间的互联提供了一种有效的解决方案。
总线转换器的功能
如图1所示的总线转换器的功能框图,总线转换器包括了三种通信网络接口,分别为RS232、RS485和CAN总线接口,能够完成以下几种功能:
图1 总线转换器的功能框图(略)
(1)RS232与RS485之间的通信转换:带有RS232接口的PC操作站、智能网络节点可以通过该总线转换器的RS485接口接入由其构成的RS485网络,实现RS232站点与RS485网络之间的数据通信。
(2)RS232与CAN之间的通信转换:带有RS232接口的PC操作站、智能网络节点可以通过该总线转换器的CAN接口接入到由其构成的CAN网络,实现RS232站点与CAN总线网络之间的数据通信。
(3)RS485与CAN之间的通信转换:通过该总线转换器,RS485网络可以实现与CAN网络之间的连接,完成网络之间数据通信。
总线转换器硬件设计
总 线转换器的硬件原理图如图2所示。它主要由TMS320LF2407A(CPU)及CAN总线接口、RS485接口、RS232接口和电源等几个部分组成。
图2 总线转换器的硬件原理图(略)
TMS320LF2407A的CAN模块是一个16位的外设模块,它完全支持CAN2.0B协议。可外接PHILIPS公司的PCA82C250T作为CAN控制器和物理总线间的接口,其中电阻R1,R2,R3及二极管D1(IN5819)用来实现5V与3.3V之间的电平转换电路。
TMS320LF2407A的串行通信接口(SCI)模块是一个标准的通用异步接收/发送(UART)可编程串行通信接口。通过SCI接口,我们采用了MAX3485实现TTL与RS485电平之间的转换。MAX3485工作于半双工方式下,将TMS320LF2407A的IOPF6引脚同时控制MAX3485的DE和/RE引脚,可实现发送和接收两种控制状态的转换。
由 于TMS320LF2407A只带有一个SCI接口,所以需扩展一个UART接口来实现RS232接口功能。由于总线转换器的通信实时性要求较高,我们采用了扩展异步通信芯片的方法来实现扩展UART接口。异 步通信芯片TL16C550C可实现如下功能:在接收到外部器件或MODEM的数据时,完成串行到并行的转换;在接收到CPU的数据时,完成并行到串行的变换,并进行串行发送。所以在TL16C550C的输出口外接一个RS232电平转换芯片MAX3232,即可实现RS232接口的扩展。当其XIN、XOUT端外接1.8342MHz晶振时 ,将波特率因子寄存器设置为03H,DSP即可实现以38400bps的波特率与 RS232设备通信。同时将TL16C550C的/RXRDY和/TXRDY接入DSP的两个外 部中断,使RS232通信工作于中断方式,这样可有效保证通信的实时性。
总线转换器软件设计
总线转换器主要实现RS232、RS485和CAN总线之间的数据转换与传送。RS232和RS485只定义了物理层协议;而CAN的协议规范定义了其物理层和数据链路层。因此本设计中的重点是要定义和实现RS232、RS485和CAN总线之间的协议转换。
通信协议
(1)CAN通信协议:由于CAN总线数据传输时每帧最多8个字节,所以当CAN通信时传输数据大于8时,必须将数据打包传送。其命令帧和应答帧传输格式定义分别如图3(a)和(b)所示。
图3(a) CAN命令帧格式(略)
图3(b) CAN应答帧格式(略)
(2)RS232与RS485通信协议
RS232与RS485的命令帧和应答帧的数据格式分别如图4(a)和(b)所示。
图4(a) RS232与RS485的命令帧格式(略)
图4(b) RS232与RS485的应答帧格式(略)
(3)有关地址、命令和应答状态的说明
在上述协议格式中,源地址和目的地址定义相同,采用2个字节来实现地址划分,其定义如下:字节1用来区分CAN网络中设备号,而字节2代表总线转换器下的RS485网络中的设备地址(其中0FFH除外,若字节2为0FFH,则代表该总线转换器下的RS232设备)。
在协议格式中,命令包含两种:01H代表发送数据至其他设备,02H代表请求其他设备发送数据。应答状态包含两种:15H代表命令执行成功,19H代表命令执行失败。
通信软件流程设计
软件设计采用模块化设计,按照系统功能可划分为:初始化部分、RS485接口对应的轮询程序和485设备请求发送子程序、RS232接口对应的中断服务程序、CAN接口对应的中断服务程序、RS232、RS485和CAN接口分别对应的数据打包和处理程序以及故障处理程序等。下面就几个关键部分加以叙述。
(1)总线转换器的初始化部分
总线转换器的初始化主要包括RS232、RS485和CAN接口及发送、接收缓冲区的相关参数设置。
对 于RS232接口,DSP需将两个外部中断XINT1、XINT2的优先级设置为高优先级模式;并设置TL16C550C的波特率因子寄存器。
对于RS485接口,将SCI模块设置为多处理器通讯模式;设置串行接口通信寄存器SCICCR为地址位通讯数据格式,设置串行通信接口控制寄存器为禁止SCI口发送和接收中断,以及设置串行通信接口波特率选择寄存器等。
对于CAN接口,主要包括配置位定时器从而设置通讯波特率和邮箱的初始化,其中将邮箱4设置为发送邮箱,邮箱1设置为接收邮箱。CAN邮箱中断设置为低优先级模式。这样总线转换器在轮询485从设备时,优先响应来自RS232接口的控制命令,其次是响应来自CAN接口的控制命令。
(2)RS485接口对应的轮询程序和RS485设备请求发送子程序
如图5所示,我们将总线转换器设计为RS485网络上的主设备,而挂在该接口上的其他RS485设备均为从设备。这样485网络上的通讯任务均由总线转换器发起,通过总线转换器不断轮询485网络上的从设备,从而获得从设备的状态或信息。若从设备工作正常且不主动请求发送信息,则该从设备返回一个运行正常信息给总线转换器。这时总线转换器可以修改轮询设备号,实现下一个从设备的轮询。若从设备需要主动请求发送信息,则总线转换器调用485设备请求发送子程序。对于RS485设备请求发送子程序设计的关键是要进行目的地址的判断。若目的地址不是位于本总线转换器内部 ,则需将数据打包处理后通过CAN接口发送出去;若目的地址位于本总线转换器内,则将数据打包处理后通过485接口或232接口发送出去。限于篇幅,不再详述。
图5 RS485接口对应的轮询程序(略)
(3)RS232接口对应的中断服务子程序
RS232接口通常可以外接PC操作站、智能网络节点等,因此将来自RS232接口的控制命令产生的中断设置为高优先级。RS232接口对应的中断服务子程序如图6所示,当有来自PC操作站、智能网络节点的RS232接口的控制命令时,总线转换器将停止轮询RS485从设备,并产生接收中断,响应该命令。总线转换器首先判断目的地址,若目的地址不在本总线转换器内部,则总线转换器将命令地址打包处理后发送至CAN接口;然后根据命令字将数据信息发送至CAN接口或等待来自CAN接口的数据。若目的地址位于本总线转换器内,则总线转换器将命令地址发送至RS485接口;然后根据命令字将数据信息发送至RS485接口或等待来自RS485接口的数据。最后总线转换器将应答或数据信息送至RS232接口。
图6 RS232接口对应的中断服务子程序(略)
(4)CAN接口对应的中断服务子程序
CAN接口对应的中断服务子程序与RS232接口对应的中断服务子程序基本类似,限于篇幅,不再详述。 |