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

2012-04-22 16:00:18来源: 维库电子

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

0引言

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

1CAN接口硬件设计

1。1CAN节点的系统构成

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

2。1。3接收过程

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

图4接收数据流程图

2。2FPGA顶层模块设计

FPGA顶层的模块设计如图5所示。其中clkdiv模块是将输入的50MHz时钟clock十分频后作为模块基准时钟。SJACTROL模块是控制总线通信的主模块,而R&W模块则是根据主模块的信号生成SJA1000所需要的读写时序信号。SJACTROL模块通过start和iswr两个信号通知R&W模块是否要进行读或写总线操作。若是写操作,则将地址和数据通过Addrout和Dataout传递给R&W,R&W将负责把数据准确地送到SJA1000的数据地址复用总线ADDR,并驱动SJA1000接收数据,在写操作完成后发送writeover信号通知SJACTROL写操作完成。读操作时R&W根据SJACTOL送来的地址,从SJA1000的数据总线上读取数据,并将得到的数据通过Datasave总线返回给SJACTROL。

图5顶层模块设计

SJACTROL的状态机通过5个状态的转换来实现控制:空闲状态、初始化状态、查询状态、读状态、写状态。R&W则是按照SJA1000的芯片数据手册进行时序逻辑设计。在编写模块时,需注意双向总线的编写技巧。双向口最好在顶层定义,否则模块综合的时候容易出错。

3仿真结果

FPGA中利用Verilog编程产生SJA1000的片选信号CS,地址锁存信号ALE,读写信号RD、WR。这些控制信号共同驱动SJA1000进行数据接收和发送。设计选取的是virtex系列的芯片,逻辑开发在ISE平台上进行。在FPGA的调试阶段,使用xilinx的应用软件ChipScopepro(在线逻辑分析仪)来在线观察FPGA设计内部信号的波形,它比传统的逻辑分析仪更方便。图6为在线进行数据传送接收时的实际波形。

图6SJA1000接收和发送数据的时序仿真

图6SJA1000接收和发送数据的时序仿真

4结束语

通过对CAN通信系统的分析,利用FPGA作为CAN通信节点的主控制单元,对CAN节点的硬件接口电路设计方案进行了详细的说明,并编写了CAN节点通信流程中的初始化程序、数据发送接收程序。通过软硬件的联调,实现了CAN总线的通信功能,系统工作状态良好。实践证明CAN通信节点采用FPGA作为核心控制单元,与传统的单片机设计相比,更加灵活并且扩展性更强。

关键字:通信  节点  设计

编辑:eeleader 引用地址:http://www.eeworld.com.cn/gykz/2012/0422/article_9451.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
通信
节点
设计

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved