您好、欢迎来到现金彩票网!
当前位置:秒速快3平台 > 双向总线 >

PC串口与CAN总线接口双向转换卡的设计

发布时间:2019-06-25 08:54 来源:未知 编辑:admin

  PC串口与CAN总线接口双向转换卡的设计_信息与通信_工程科技_专业资料。这是我的一篇旧论文。

  The Design of Converter Card between PC Serial and CAN Bus Wang Ai Jun (Department of Marine Engineering Nantong Shipping College Nantong Jiangsu 226010) Abstract: This paper introduces the design of interface converter card between PC bstract: and CAN bus。The card is simple in structure,and it can be used in the control system with low speed but requiring high reliability。The paper mainly focuses on the design of the communication protocol and the software. words: Key words:RS-232, CAN, Converter Card, Communication Protocol 总线接口双向转换卡的设计 接口双向 PC 串口与 CAN 总线接口双向转换卡的设计 王爱军 (南通航运职业技术学院轮机工程系 江苏 南通 226010) 摘要:本文介绍了一种 PC 与 CAN 总线之间进行通信的接口转换卡的设计。这种转换卡结构 简单, 可以应用在对可靠性要求高而速率要求不高的控制系统中。 本文的设计主要着重于通 信协议的设计和软件的实现。 关键字:RS-232,CAN,转换卡,通信协议 0.引言 CAN 总线是一种性能优异的现场总线,已经广泛应用于各种测控系统。相对于现在工业 控制系统中广泛应用的 RS485 网络来说,CAN 总线工作于多主方式、数据通信具有突出的实 时性和可靠性,可以更好地发挥控制系统的功能。在 CAN 总线测控系统中,一般都要求能与 PC 进行通信,完成数据的采集与处理、各 CAN 节点参数的设置和远程驱动执行器动作,因 此需要一个将 PC 接口与 CAN 总线系统连接起来进行双向通信的装置,也就是我们要设计的 接口转换卡。 PC 端接口可以采用 RS-232 串口、PCI 接口和 USB 接口,后两者的特点是速度快,主要 用于高速 CAN 测控系统。本文采用 PC 串口与 CAN 总线相连的方案,一是实际系统对网络速 度要求不高,二是串口开发硬件结构简单,已经有了比较成熟可靠的方案,开发成本低。本 文将简单介绍转换卡硬件实现框架, 而重点介绍串口通信协议的软件设计和 CAN 总线应用层 协议的简单实现方案。 1.硬件设计 1.硬件设计 本文实现的接口转换卡是一个大型实验教学系统船舶电站模拟器设计的一部分,PC 机 通过接口转换卡与 CAN 总线网络相连的系统如图所示。 PC 机 串口 串口 CAN 接口转换卡 CAN CAN 节点 CAN CAN 节点 CAN CAN 节点 模拟量输入 模拟量输出 开关量输入输出 图 1 PC 作为上位机的 CAN 总线控制系统框图 接口转换卡采用 STC89C52RC 单片机作为控制核心,主要包括 RS-232 接口模块、CAN 控 制器模块和外部数据存储器模块。RS-232 接口电路由 MAX232 芯片构成,负责将单片机串口 的 TTL 电平转换为 RS-232 电平。 控制器采用 Philips 公司的 SJA1000 芯片, CAN 通过 P82C250 物理接口芯片与 CAN 总线相连。 为了解决串行接口与 CAN 总线接口速度的矛盾, 数据的处理 和转换通过软件 FIFO 实现, 因此在转换卡上, 通过地址锁存器外扩了一个静态 RAM 芯片 6264 作为外部数据存储器。接口转换卡的硬件框图如图所示。 CAN 总线 图 2 PC 串口与 CAN 总线接口双向转换卡硬件框图 2.通信协议设计 2.通信协议设计 接口转换卡的主要功能是将 PC 机发出的数据转发到 CAN 总线上,同时将 CAN 总线节点 发到转换卡的数据通过串口送给 PC。可以这么说,结合驱动程序和转换接口卡,PC 上的用 户应用程序完全可以把 PC 当成一个具有 CAN 控制器接口的 CAN 智能控制器。 用户程序需要给某个 CAN 节点发送数据时, 对数据按照 CAN 应用层协议进行封装, 然后 调用 CAN 发送函数发送数据。 通信函数并不执行真正的 CAN 操作, 而是分别利用串行通信应 用层、数据链路层协议将数据封装,通过串行口将数据发给接口转换卡。转换卡接受到主机 数据后, 将数据还原成标准的 CAN 信息帧, 通过执行真正的 CAN 底层通信程序将数据发送到 CAN 总线上。 当接口转换卡从 CAN 总线上接受到数据时,先经过串口通信协议封装,通过串口发给 PC,PC 串口通信将 CAN 信息帧还原,然后系统通知用户程序调用 CAN 接收函数,并对数据 按照应用层协议和用户程序的要求进行处理。 整个过程可以用如下所示框图来表示。 用户 CAN 监控程序 CAN 节点程序 CAN 应用层 CAN 应用层 串口应用层 PC 串口 接口转换卡 8051 串口 串口应用层 CAN 总线接口 CAN 总线 双向转换卡系统协议框图 (1)CAN 应用层协议的制定 应用层协议最主要是信息标识符 ID 的分配,ID 表示了数据的意义,决定了信息的优先 权,同时也影响了 CAN 系统数据交换的方法和报文滤波机制。在本文所涉及的系统中,通信 以点对点方式为主,除了 PC 监控程序接收所有的报文,其他节点只接受发给自己的信息。 同时为了使信息帧的含义更简洁, 节点不使用远程帧, 而把请求数据的要求包含在数据帧功 能中。在本文所制定的协议中信息标识符采用静态分配的策略,采用 SJA1000 所支持的 Pelican 模式,标识符为 29 位,结构如下: 功能码(8 位) 源节点号(8 位) 目标节点号(8 位) 节点外设号(5 位) 信息功能码表示了该信息帧的功能,如功能码 0x00 表示各节点传感器信息帧,节点外 设号表示对应的信息采集点,传感器数据就放在数据场里。功能码 0x01 表示设置节点的输 出,节点外设号表示对应的输出点,设置的状态数据放在数据场里。 每个节点的验收代码寄存器和验收屏蔽寄存器以目标节点号作为滤波依据, 只接受目标 节点号为自身分配号的信息帧,具有多重滤波功能的节点还可以接受广播帧(目标节点号 0xFF),这样可以大大减少节点间无效通信的次数。 (2)串行通信应用层协议的制定 在串行数据通信时, 为了保证通信双方正确地对数据进行传送和接收, 就需要规定统一 的数据帧格式。数据帧一般包括帧首、地址、功能码、长度、数据、校验字节和帧结束标志。 比较典型的串行通信协议如 MODBUS,有 ASCII 和 RTU 两种帧格式,对各个部分都有明确的 规定和要求。 本文所讲的串行通信只在 PC 和接口转换卡之间进行,故将帧格式做了一些简化,采用 如下帧格式: 功能码(1 字节) 长度(1 字节) 数据(字节数不定) 奇偶校验(1 字节) 帧结束(1 字节) 同时为了保证数据通信的透明性,保证接收方不会对数据内容和协议通信的标志相混 淆,借用网络通信早期常用的 SLIP 协议,在数据传送中引入转义字符。举例来说,规定转 义字符为 0xdb,使用 0xc0 作为帧结束标志。当要传送的数据中存在这样的字节时,程序在 发送该数据前需要将 0xdb 转换为 0xdb 0xdd 发送,将 0xc0 转换为 0xdb 0xdc 发送,而数据 的其他部分保持不变。而在接收方,当收到 0xdb 字节时,并不复制到数据帧里面,而是等 接受到下一字节(必须是 0xdd 或 0xdc),再把它还原成 数据。 PC 串口与转换卡串口通信协议除了用于 CAN 数据帧的封装和发送,还用于配置接口转 换卡的参数。比如设置转换卡 CAN 总线通信波特率等,最常用的几个功能码如表所示: 功能码 0x01 0x02 0x03 0x04 定义 设置 CAN 工作模式 设置 CAN 参数 设置串口波特率 CAN 数据帧 功能描述 比如可以让 CAN 工作在静默模式、回环模式 包括时间特性寄存器、输出控制寄存器等 设定 RS-232 串口波特率 将数据发送到 CAN 总线或将 CAN 总线数据帧发送到串口 转换卡在接受到完整的一帧串口数据后,首先分析功能码,如果是配置命令,则调用相 应的功能子程序进行参数设置;如果是 CAN 数据帧,则去掉功能码、长度和校验数据,调用 CAN 发送程序将 CAN 数据帧发送到总线.转换卡软件设计 转换卡 软件主要包括主程序模块、 串口通信模块和 CAN 总线通信模块。 由于串口和 CAN 总线的 数据通信速率相差较大,因此在本例中建立了两个 FIFO 缓冲区,一个用于串口数据的写缓 冲, 一个用于 CAN 总线数据的写缓冲。 接口卡的串口和 CAN 接口都采用中断方式接收信息帧。 当串口接收到帧结束标志时,经过数据校验后,将整个信息帧复制到串口 FIFO 缓冲队列, 同时置位相应标志;当 CAN 接收到 CAN 信息帧时,也将它复制到相应的 CAN 总线 FIFO 缓冲 队列。 主程序模块可以分为初始化部分和循环检测部分。初始化部分完成对串口、CAN 总线的 初始化, 开启 CAN 接口中断和串口中断。 循环检测部分根据串口和 CAN 接口当前的工作状况, 不断调用 UART_FIFO_PeekMSG()和 CAN_FIFO_PeekMSG()两个函数检测缓冲区内是否收到数 据, 如果有数据接收, 则调用 UART_MSGHandler()和 CAN_MSGHandler()两个函数进行分析和 转发。其程序流程图如下: 图 4 主程序模块流程图 串口协议模块将串口应用层数据帧使用 SLIP 协议进行封装后发送,并将接收到的 SLIP 数据帧转换为应用层帧格式存入缓冲区。数据的发送与接收基本在串口中断服务程序中完 成。串口接收中断子程序部分程序如下: void Uart_Receive() //将串口接收字符写入缓冲区 { Unsigned char temp; temp = SBUF; RI = 0; if(db_flag == 1) //上次传入的字节内容为 0xdb(转义字符) { db_flag = 0; if(temp == 0xdd) //0xdb = 0xdb 0xdd { uart_recvbuf[rx_index] = 0xdb; //存入数据 0xdb 到临时缓冲区 rx_index ++; return; } if(temp == 0xdc); //0xc0 = 0xdb 0xdc { uart_recvbuf[rx_index] = 0xc0; //存入数据 0xc0 到临时缓冲区 rx_index ++; return;} rx_index = 0; //出现错误,清空串口临时缓冲区 return; } if(temp == 0xc0) { Uart_CopyToFIFO(); //接收到帧结束标志,调用子程序将串口帧复制到 FIFO return; } if(temp == 0xdb) { db_flag = 1; //接收字节为 0xdb,置标志位 return; } uart_recvbuf[rx_index] = temp; //保存数据到串口临时缓冲区 rx_index ++;} 串口发送中断程序的处理方式与接收中断类似,在此就不再详细分析。 CAN 总线通信模块控制 CAN 控制器 SJA1000 完成 CAN 数据帧的发送和接收任务。 在中断 服务程序中,分别处理接收中断和发送中断。如果为发送中断,则置正在发生标志位为 0, 则在主程序中又可以在 FIFO 队列中取出新的消息进行发送。如果为接收中断,则将接收到 的 CAN 信息帧复制到 CAN 接收缓冲区,并将接收计数值加 1。 在本次设计中, 将串口速率设置为每秒 57600bit, CAN 总线接口的通信速度设置为每秒 125kbit。经过实际检验,在 CAN 系统的发送速率在每秒 100 帧以下时,能够保证上位机接 收到所有的数据帧,而不发生丢帧事故。 4.结束语 4.结束语 这是一种低成本、 高可靠性的 PC 与 CAN 总线系统通信方案, 缺点是通信速率收到 RS-232 接口速率的限制,可以应用在数据量小且数据传输间隔时间较长的场合。在系统升级时,若 是对通信速率的要求提高, 有必要进行转换卡的重新设计, 端采用 PCI 接口或是全速 USB PC 接口。 参考文献: [1] 邬宽明. CAN 总线原理和应用系统设计[M].北京:北京航空航天大学出版社,1999. [2] 柳泉等.基于 PCI 总线的 CAN 卡的设计与实现[J].电子技术应用,2002,12:28-30. [3] 李金刚. 基于 AT89C51 型单片机的 CAN 总线智能节点设计[J],国外电子元器件, 2006, 8(2):26-29. 作者简介:王爱军,(1981.2- ),湖南汉寿人,现任教于江苏省南通航运职业技术学院, 讲师。主要从事电工学、船舶电气设备、嵌入式系统等方面的教学和科研工作。

http://raggedydreams.com/shuangxiangzongxian/276.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有