基于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手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
通信
节点
设计

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved