0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

FPGA设计论坛 来源:未知 2023-06-18 11:15 次阅读

点击上方蓝字关注我们

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

0 引言

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

1 CAN 接口硬件设计

1.1 CAN 节点的系统构成

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

图1 CAN 模块系统构成

1.2 接口电路设计

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

设计中有2点需要特别注意:点是FPGA 并没有与SJA1000直接相连。这是因为对于设计选取的FPGAXCV600, 其接口电平不支持5 V TTL的I/O 标准, 如果与5 VI/O标准的SJA1000直接相连, 将可能导致FPGA 管脚电流过大, 造成器件锁死或者烧毁。为此采用双向总线收发器74ALVC164245, 把SJA1000的5 V TTL电平信号AD0 ~ AD7、、ALE 转换成3.3 V I/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 和S JA1000 进行初始化, 以确定工作主频、波特率、输出特性等。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.2 FPGA 顶层模块设计

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

图5 顶层模块设计

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

3仿真结果

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

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

4 结束语

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






有你想看的精彩



基于FPGA的图像实时处理系统设计
至芯科技FPGA就业培训班——助你步入成功之路、6月27号北京中心开课、欢迎咨询!
FPGA是什么(超级详细)







扫码加微信邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!


点个在看你最好看






原文标题:基于FPGA的CAN总线通信节点设计

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21665

    浏览量

    601776

原文标题:基于FPGA的CAN总线通信节点设计

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CAN总线通信原理介绍 CAN总线模块选择指南

    CAN总线(Controller Area Network)是一种串行通信协议,主要用于汽车电子控制单元之间的通信。它由Bosch公司在20世纪80年代初开发,因其可靠性、实时性和灵活
    的头像 发表于 11-21 10:21 139次阅读

    如何使用Arduino实现CAN总线通信

    CAN总线(Controller Area Network)是一种多主控制的串行通信协议,广泛应用于汽车电子、工业自动化等领域。它以其高可靠性、实时性和灵活性而受到青睐。Arduino作为一个
    的头像 发表于 11-12 10:09 306次阅读

    CAN总线通信协议详解

    一、CAN总线概述 CAN总线是一种多主控制的串行通信协议,它允许多个设备共享同一通信线路,而无
    的头像 发表于 11-12 09:46 258次阅读

    CAN总线是如何通信的#CAN #常学常新

    CAN总线
    北汇信息POLELINK
    发布于 :2024年11月07日 16:34:29

    CAN总线错误状态的种类

    CAN总线错误状态的种类主要包括以下几种,每种状态都反映了CAN总线网络中节点总线的不同错误情
    的头像 发表于 09-03 14:17 896次阅读

    can总线隔离模块的作用

    CAN总线隔离模块是一种用于保护CAN总线通信系统的电子设备,它通过在CAN
    的头像 发表于 06-16 10:32 1336次阅读

    can总线中断状态什么意思呢?

    CAN总线(Controller Area Network)是一种广泛使用的现场总线通信协议,主要用于汽车、工业控制等领域。在CAN
    的头像 发表于 06-16 10:21 1506次阅读

    CAN-bus应用笔记:节点

    CAN-bus电路设计中,理论上收发器支持节点数最多可做到110个,但实际应用中往往达不到这个数量。今天我们就来谈谈如何通过合理的CAN-bus总线设计,保证
    的头像 发表于 05-12 08:24 505次阅读
    <b class='flag-5'>CAN</b>-bus应用笔记:<b class='flag-5'>节点</b>篇

    什么是CAN总线通信CAN总线工作原理

    这意味着变送器通过CAN收发器改变总线电平,并将其信息传输到CAN总线。接收器通过监测总线电平将总线
    发表于 02-19 14:53 6029次阅读
    什么是<b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>?<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>工作原理

    找到CAN总线(故障)节点的三种办法

    找到CAN总线(故障)节点的三种办法  CAN总线是现代汽车电子系统中常见的通信协议,用于车载电
    的头像 发表于 02-02 10:35 1387次阅读

    CAN总线最大能够带多少节点?CANFD相对于CAN2.0有哪些差异呢?

    CAN总线最大能够带多少节点?CANFD相对于CAN2.0有哪些差异呢? CAN总线最大能够带多
    的头像 发表于 01-31 14:08 3309次阅读

    CAN总线系统需要使用中继器进行信号增强和延长?

    和延长。 首先,我们需要了解CAN总线系统的基本原理。CAN总线系统是基于多主动和多被动的原则运作的,因此需要在多个节点之间进行
    的头像 发表于 01-31 13:46 846次阅读

    CAN总线可以通过PCB走线(背板)连接多个can节点组网吗?

    CAN总线是一种分布式串行通信协议,它允许多个节点同时连接在一个总线上,并通过差分信号进行通信
    的头像 发表于 01-30 13:49 2277次阅读
    <b class='flag-5'>CAN</b><b class='flag-5'>总线</b>可以通过PCB走线(背板)连接多个<b class='flag-5'>can</b><b class='flag-5'>节点</b>组网吗?

    CAN总线共模电感选型

    CAN总线共模电感的定义和作用 CAN总线共模电感是一种用于CAN总线
    的头像 发表于 01-05 13:42 3852次阅读

    CAN总线的特点和FPGA实现

    我们根据can总线具有的一些特性可知:CAN总线肯定具有分层结构,而且参考OSI模型(OSI参考模型介绍)是肯定的,我们可以看一下相关的文档可知:C
    的头像 发表于 01-05 09:40 916次阅读
    <b class='flag-5'>CAN</b><b class='flag-5'>总线</b>的特点和<b class='flag-5'>FPGA</b>实现