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

    关注

    1655

    文章

    22280

    浏览量

    630045

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ZPS-CANFD总线分析仪:一键操作,全面评估CAN/CANFD节点健康状态

    本文导读在现场进行节点测试时,工程师们时常面临挑战:节点通信不稳定、信号质量不佳、故障定位困难。这些常见问题往往需要耗费大量时间和精力进行排查。ZPS-CANFD总线分析仪提供一键生成
    的头像 发表于 09-26 11:46 348次阅读
    ZPS-CANFD<b class='flag-5'>总线</b>分析仪:一键操作,全面评估<b class='flag-5'>CAN</b>/CANFD<b class='flag-5'>节点</b>健康状态

    三格电子CAN总线通信原理及在消防领域中的应用

    多个节点(最多可达110个),实现设备间稳定、高效的双向通信。在消防系统中,烟感、温感、报警器、灭火设备等都可以挂载在CAN总线上,形成可靠的火灾监控和联动控制网络。  
    的头像 发表于 09-02 15:11 787次阅读
    三格电子<b class='flag-5'>CAN</b><b class='flag-5'>总线</b><b class='flag-5'>通信</b>原理及在消防领域中的应用

    120Ω的秘密:CAN总线终端电阻的重要性

    CAN总线作为一种广泛应用的工业通信协议,其终端电阻的作用不容忽视。本文将详细探讨CAN总线终端电阻的重要性及其在
    的头像 发表于 08-08 11:35 781次阅读
    120Ω的秘密:<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>终端电阻的重要性

    CAN总线采样点不一致的危害

    CAN协议规定,节点在检测到过多错误后会进入错误被动状态或总线关闭状态。在总线关闭状态下,节点停止参与
    发表于 06-07 08:55

    如何评估CAN总线信号质量

    关闭 :严重错误导致节点总线断开。 这些问题可能导致重传、带宽减少,甚至完全通信中断。因此,监控和维护良好的信号质量对于确保CAN总线网络
    发表于 06-07 08:46

    CAN总线故障排查:从问题到解决的实战案例

    视频推荐在工业现场的煤安监控网络中,CAN总线通信常因复杂环境出现数据丢失问题。本文以一起煤安监控网络中CAN总线数据丢失的故障排查案例,简
    的头像 发表于 02-28 11:37 1400次阅读
    <b class='flag-5'>CAN</b><b class='flag-5'>总线</b>故障排查:从问题到解决的实战案例

    磁致伸缩位移传感器与CAN总线系统协议

    磁致伸缩位移传感器与CAN总线结合,实现高效通信和数据传输,适用于工业自动化等领域。CAN总线具高实时性、多
    的头像 发表于 02-10 14:27 520次阅读

    CAN通信节点多时,如何减少寄生电容和保障节点数量?

    导读在汽车电子与工业控制等领域,CAN通信至关重要。本文围绕CAN通信,阐述节点增多时如何减少寄生电容的策略,同时从发送、接收
    的头像 发表于 01-03 11:41 3528次阅读
    <b class='flag-5'>CAN</b><b class='flag-5'>通信</b><b class='flag-5'>节点</b>多时,如何减少寄生电容和保障<b class='flag-5'>节点</b>数量?

    CAN总线模拟器的使用指南 CAN总线网络的安全性分析

    CAN总线模拟器的使用指南 CAN总线模拟器(如ICSim)是一种用于模拟CAN总线
    的头像 发表于 12-23 09:16 3627次阅读

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

    CAN(Controller Area Network)总线是一种常用于汽车和工业控制系统的串行通信协议,以其高可靠性和实时性而闻名。Arduino,作为一种流行的开源微控制器平台,可以通过附加
    的头像 发表于 12-23 09:06 2804次阅读

    CAN总线的扩展功能及其应用

    通信协议,它允许多个节点共享同一通信介质(如双绞线)。CAN总线的主要特点包括: 多主控制 :任何节点
    的头像 发表于 12-23 09:04 2248次阅读

    基于Xilinx的A7系列FPGACAN总线协议开发

    过多”、“通过多个 LAN ,进行大量数据的高速通信”的需要。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。 CAN控制器根据两根线上的电位差来判断
    的头像 发表于 12-21 14:49 3065次阅读
    基于Xilinx的A7系列<b class='flag-5'>FPGA</b>的<b class='flag-5'>CAN</b><b class='flag-5'>总线</b>协议开发

    CAN总线与其他通信协议对比

    在现代工业和汽车领域,通信协议扮演着至关重要的角色。它们允许不同的电子控制单元(ECU)之间进行数据交换,确保系统的正常运行和协调。CAN总线作为一种成熟的现场总线技术,以其高可靠性、
    的头像 发表于 12-20 17:59 2603次阅读

    CAN总线工作原理分析 CAN总线在汽车工业中的应用

    CAN总线系统由以下部分组成: 节点(Node) :每个ECU都是一个节点,可以发送和接收信息。 总线(Bus) :所有
    的头像 发表于 12-20 17:33 4446次阅读