CAN总线控制器如何实现网络协议ISO 11898?
扫描二维码
随时随地手机看文章
CAN 总线允许高达1M bit /s通讯速率, 支持多主通讯模式, 有高抗电磁干扰性而且能够检测出通信过程中产生的任何错误, 已被广泛应用到各自动化控制系统中。在项目的特殊环境要求下, CAN总线通信要求使用FPGA作为系统中的主控制器, 较之传统设计使用的单片机, FPGA能够在速度和体积上有更好的适应性。FPGA 一方面减少了电路板的复杂程度, 缩短了实现周期;另一方面, 其丰富的资源、超高的性能和灵活的可编程性, 提高了整个设备的可靠性, 大大增强了电路板设计的灵活性和可扩展性。文中通过设计FPGA 的接口电路, 并利用Verilog语言来编程实现CAN节点之间的通信功能。
CAN总线控制器实现网络协议ISO 11898–1的所有低级功能,同时收发器与物理层通信。不同的物理层需要不同的收发器,如高速can、低速容错can、高速可变数据速率can。
在一个典型的实现中,CAN总线控制器和微处理器被统一成一个启用CAN的微控制器。市面上有带SPI接口的外部CAN总线控制器,主要由微芯片制造,但它们往往会增加不必要的成本和复杂性。
在本文中,我们将研究从收发器到can总线连接器的电路设计。是时候把我们的手弄脏,设计我们的CAN总线电路!
第一步-选择正确的IC
所有的CAN总线收发器的工作原理类似,因为它们位于实现CAN总线控制器的微控制器(或FPGA)和CAN总线本身之间。不过,还是有一些不同之处,你应该仔细考虑。
快速搜索合适的八角分类揭示了CAN总线收发器的主要制造商按提供的集成电路数量降序排列为NXP半导体、微晶片、德州仪器、Maxim Integrated、模拟器件和ST微电子。
所有这些收发器看起来都很相似,但它们的特性和性能却各不相同。
ESD保护
市场上第一个CAN总线收发器包括很少的ESD(静电放电)事件保护。它们要求所有的I/O保护都要用外部组件来实现。
在实际选型过程中,我们需关注CMC的多个关键特性,包括电感值、漏感(leakage inductance)、直流电阻(DC resistance)以及模式转换特性(mode conversion characteristics),以确保所选CMC能够最优化地满足系统的EMC需求。
1.1、电感值
在选取CMC电感值时,我们首要考虑的是其对总线共模噪声的抑制能力。为了有效抑制共模噪声,CMC在共模噪声频率处应具备尽可能高的电感值,从而呈现高阻抗状态,阻止噪声传播。然而,电感值的选择并非越大越好,过大的电感值会带来尺寸和成本上的挑战。
综合考虑,针对500kbps的CAN通信,推荐使用51uH电感值的CMC;而对于2Mbps的CAN FD通讯,则建议采用100uH电感值的CMC,以实现共模噪声的有效抑制并兼顾尺寸与成本。
1.2、泄漏电感
泄漏电感,亦称为差模电感,对差模信号具有一定的抑制效果。然而,过大的泄漏电感可能会引发CAN信号的振铃现象,从而干扰CAN总线的正常通讯。与此同时,适量的泄漏电感又能有效抑制CAN总线中的差模电流,进而提升系统的整体EMI性能。
因此,在权衡泄漏电感的影响时,我们应确保其既能发挥差模抑制作用,又不至于在总线信号上产生显著的振铃,确保CAN总线的正常通讯不受干扰。适度的泄漏电感对于优化系统性能是有益的。
1.3、直流电阻
共模电感的直流电阻对总线信号的损耗具有直接影响。随着直流电阻的增大,总线信号的损耗也会相应增加,从而导致传输效率降低。因此,在确定了共模电感的电感值之后,选择直流电阻尽可能小的CMC显得尤为重要。
这样做可以有效减少总线信号的损耗,提高信号传输效率,确保CAN总线通信的稳定性和可靠性。
1.4、CMC的模式转换特性
共模电感的模式转换特性揭示了其上下线圈的对称程度,这一特性通过Ssd12/Sds21参数来衡量。当Ssd12/Sds21参数的差异较大时,意味着模式转换特性更为显著,可能表明CMC的上下线圈存在较大的不对称性。这种不对称性会在CAN总线通信过程中引入额外的共模噪声,从而降低CMC的EMI滤波效能。因此,在选择CMC时,我们应倾向于选择那些Ssd12/Sds21参数接近的器件,以优化EMI性能。
如下图所示的DLW32SH101XF2阻抗与频率特性曲线,清晰地展示了CMC在共模噪声频率下的高共模阻抗Zc,这有助于有效抑制共模噪声。同时,在CAN总线通信频段内,CMC保持了较低的差模阻抗Zd,确保在抑制共模噪声的同时,不会对总线的正常通讯造成不利影响。
在CAN网络的正常通信过程中,若总线遭遇异常故障,例如短路至BAT或Vcc,CMC的存在可能导致总线上产生接近或超出总线耐受电压的瞬态电压。对于NOVOSENSE系列的CAN收发器而言,此类因总线短路而在CMC上产生的瞬态过压,恰好满足芯片总线引脚内部ESD防护电路的启动条件。
因此,由CMC感生的过压能量将通过内部ESD防护电路得到完全泄放,确保芯片免受任何损害,从而保障了收发器的可靠性和稳定性。
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作为控制单元, 与传统的单片机设计相比, 更加灵活并且扩展性更强。