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
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593193

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

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

收藏 人收藏

    评论

    相关推荐

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

    这意味着变送器通过CAN收发器改变总线电平,并将其信息传输到CAN总线。接收器通过监测总线电平将总线
    发表于 02-19 14:53 1358次阅读
    什么是<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总线连接的节点数量在10个到100个之间。
    的头像 发表于 02-19 14:27 976次阅读

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

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

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

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

    CAN总线共模电感选型

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

    CAN总线和电平逻辑介绍

    CAN总线 CAN是控制器局域网络的简称,是一种能够实现分布式实时控制的串行通信网络。CAN总线
    的头像 发表于 11-09 18:11 860次阅读
    <b class='flag-5'>CAN</b><b class='flag-5'>总线</b>和电平逻辑介绍

    基于CAN总线EPB驻车电流采集节点的设计与研究

    电子发烧友网站提供《基于CAN总线EPB驻车电流采集节点的设计与研究.pdf》资料免费下载
    发表于 11-08 11:13 0次下载
    基于<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>EPB驻车电流采集<b class='flag-5'>节点</b>的设计与研究

    机载CAN总线节点的模块化设计与实现

    电子发烧友网站提供《机载CAN总线节点的模块化设计与实现.pdf》资料免费下载
    发表于 10-31 10:15 0次下载
    机载<b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>节点</b>的模块化设计与实现

    基于CAN总线的智能节点设计

    电子发烧友网站提供《基于CAN总线的智能节点设计.pdf》资料免费下载
    发表于 10-20 14:44 0次下载
    基于<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>的智能<b class='flag-5'>节点</b>设计

    基于单片机CAN总线AO智能节点设计

    电子发烧友网站提供《基于单片机CAN总线AO智能节点设计.ppt》资料免费下载
    发表于 10-20 10:02 0次下载
    基于单片机<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>AO智能<b class='flag-5'>节点</b>设计

    基于ARM和CAN总线的电气信号采集节点的设计

    电子发烧友网站提供《基于ARM和CAN总线的电气信号采集节点的设计.pdf》资料免费下载
    发表于 10-13 11:31 1次下载
    基于ARM和<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>的电气信号采集<b class='flag-5'>节点</b>的设计

    CAN总线通信协议是什么

    ,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。 总结下,当一个节点要向其它节点发送数
    的头像 发表于 07-18 11:10 2916次阅读
    <b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>协议是什么

    一文读懂CAN总线错误处理

    为了防止故障节点干扰甚至阻塞整个CAN网络系统,CAN协议实现了复杂的故障限制机制。为了保证通信的正常,CAN 2.0
    发表于 06-21 17:14 2128次阅读
    一文读懂<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>错误处理

    can总线负载节点数量

    一般来说,CAN总线2可以挂载的节点数量10到110之间。下面采用了64个节点测试数据传输的性能,出现的问题如下。
    的头像 发表于 06-14 09:42 1292次阅读
    <b class='flag-5'>can</b><b class='flag-5'>总线</b>负载<b class='flag-5'>节点</b>数量

    基于FPGACAN总线控制器的设计

    今天给大侠带来基于FPGACAN总线控制器的设计,由于篇幅较长,分三篇。今天带来第一篇,上篇,CAN 总线协议解析以及
    的头像 发表于 05-18 09:21 917次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>控制器的设计