当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于FPGA的CAN总线通信节点设计

摘要:以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接收数据流程图[!--empirenews.page--]

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接收和发送数据的时序仿真

4结束语

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭