新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于FPGA的CAN总线通信节点设计

基于FPGA的CAN总线通信节点设计

作者:时间:2012-04-19来源:网络收藏

摘要:以代替传统的单片机和外围扩展芯片,给出了的详细方案。其中以SJA1000为控制器、为主控制器,实现的硬件接口电路。控制器的功能分析,并应用Verilog语言进行软件,从而实现CAN之间的功能。

本文引用地址:http://www.eepw.com.cn/article/149205.htm

0引言

CAN总线允许高达1Mbit/s通讯速率,支持多主通讯模式,有高抗电磁干扰性而且能够检测出通信过程中产生的任何错误,已被广泛应用到各自动化控制系统中。在项目的特殊环境要求下,CAN总线通信要求使用作为系统中的主控制器,较之传统设计使用的单片机,FPGA能够在速度和体积上有更好的适应性。FPGA一方面减少了电路板的复杂程度,缩短了实现周期;另一方面,其丰富的资源、超高的性能和灵活的可编程性,提高了整个设备的可靠性,大大增强了电路板设计的灵活性和可扩展性。文中通过设计FPGA的接口电路,并利用Verilog语言来编程实现CAN节点之间的通信功能。

1CAN接口硬件设计

1。1CAN节点的系统构成

一般来说,每个CAN模块能够被分成3个不同的功能块,其结构如图1所示。CAN总线收发器提供CAN协议控制器与物理总线之间的接口,控制从CAN控制器到总线物理层或相反的逻辑电平信号。它的性能决定了总线接口、总线终端、总线长度和节点数,是影响整个总线网络通信性能的关键因素之一。CAN控制器执行在CAN规范里规定的完整的CAN协议,它通常用于报文缓冲和验收滤波,对外具有与主控制器和总线收发器的接口。主控制器负责执行应用的功能,例如控制命令的发送、读传感器和处理人机接口等。它通过对CAN控制器进行编程,来控制CAN总线的工作方式和工作状态,以及进行数据的发送和接收。

图1 CAN 模块系统构成

图1CAN模块系统构成

1。2接口电路设计

接口电路如图2所示。SJA1000的AD0~AD7地址数据复用端口、ALE地址锁存端口、RD、WR、片选CS端口均通过转换芯片与FPGA的I/O口相连。SJA1000的中断输出信号INT连入FPGA,使CAN通信可以采用中断或查询方式。RST端口的电路实现SJA1000的上电自动复位功能。MODE模式选择端接+5V,设置SJA1000控制器为Intel模式。SJA1000的时钟晶振采用16MHz,频率调整电容取15pF。R16为终端电阻,设计中取120Ω。CAN驱动器PCA82C250的RS脚为工作模式选择位,接地工作于高速模式,接高工作于待机模式。系统通过电阻R14将芯片设定于斜率控制模式,电阻值为47kΩ,这时CAN总线应工作于低速模式,可提高CAN总线抵抗射频干扰的能力。在这种情况下,可直接使用非屏蔽双绞线作为总线。

设计中有2点需要特别注意:第一点是FPGA并没有与SJA1000直接相连。这是因为对于设计选取的FPGAXCV600,其接口电平不支持5VTTL的I/O标准,如果与5VI/O标准的SJA1000直接相连,将可能导致FPGA管脚电流过大,造成器件锁死或者烧毁。为此采用双向总线收发器74ALVC164245,把SJA1000的5VTTL电平信号AD0~AD7、

、ALE转换成3。3VI/O标准信号,连接到FPGA的引脚上。74ALVC164245有2个8位电平转换端口,可独立操作。其中电平信号AD0~AD7必须按顺序连接在总线收发器的一个8位端口上,不可以分开。第二点是:在CAN控制器与收发器之间不采用光电隔离。这是因为增加光电隔离虽然能增强系统的抗干扰能力,但也会增加CAN总线有效回路信号的传输延迟时间,导致通信速率或距离减少。82C250等型号的CAN收发器本身具备瞬间抗干扰、降低射频干扰(RFI)以及实现热防护的能力,它具有的电流限制电路还提供了对总线的进一步保护功能。如果现场传输距离近、电磁干扰小,可以不采用光电隔离,以使系统达到最大的通信速率或距离。

图2 接口电路

图2接口电路

2系统软件设计

2。1设计流程

FPGA对CAN总线通讯模块的控制主要包括3部分:CAN总线节点初始化、报文发送和报文接收。由于通讯模块对接收数据的实时性要求并不是很高,因此CAN总线的数据接收和发送采用查询方式。

2。1。1初始化过程

系统上电后首先对82C250和SJA1000进行初始化,以确定工作主频、波特率、输出特性等。SJA1000的初始化只有在复位模式下才可以进行,初始化主要包括工作方式的设置、验收滤波方式的设置、验收屏蔽寄存器(AMR)和验收代码寄存器(ACR)的设置、波特率参数设置和中断允许寄存器(IER)的设置等。在完成SJA1000的初始化设置以后,SJA1000就可以回到工作状态,进行正常的通信任务。设计中使SJA1000工作在PeliCan的方式下。

2。1。2发送过程

发送时,用户只需将待发送的数据按特定的格式组合成一帧报文,送入SJA1000发送缓冲区中,然后启动SJA1000发送即可。当然,在往SJA1000发送缓存区送报文之前,必须先判断发送缓冲区是否锁定,如果锁定则等待;判断上次发送是否完成,未完成则等待发送完成。FPGA通过SJA1000向CAN总线进行数据发送的流程图如图3所示。

图3 发送数据流程图

图3发送数据流程图

2。1。3接收过程

接收子程序负责节点报文的接收以及其他情况处理。接收子程序比发送子程序要复杂一些,因为在处理接收报文的过程中,同时要对诸如总线关闭、错误报警、接收溢出等情况进行处理。只有在总线正常,没有错误报警,并且接收缓冲区中有新报文,才开始进行数据接收操作。对接收缓冲区的数据读取完毕后释放CAN接收缓冲区。FPGA通过SJA1000接收CAN总线上的数据流程图如图4所示。

图4接收数据流程图


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭