控制器(CAN)协议概述

内容

什么CAN?

控制器局域网(CAN)总线是用于连接智能设备的高完整性串行总线系统。CAN总线和设备是汽车和工业系统中的常见组件。例如,CAN协议有助于传感器和电子控制单元(ECU)之间的高效通信,以支持高级驾驶辅助系统。使用CAN接口设备可编写与CAN网络通信的LabVIEW应用程序。

CAN历史

CAN协议由Bosch于1985年开发,用于简化车载网络。 过去,汽车制造商使用点对点连线系统连接汽车中的电子设备。制造商开始在汽车中使用越来越多的电子器件,导致笨重和昂贵的线束。他们使用车载网络替代了专用连线,降低了连线成本、复杂度和重量。CAN是一种用于智能设备联网的高完整性串行总线系统,成为标准车载网络。汽车行业很快采用了CAN,并于1993年成为ISO 11898国际标准。自1994年以来,已有多个高层协议在CAN上标准化,如CANopen和DeviceNet。其他市场已广泛采用这些附加议定书,这些附加议定书现已成为工业通信的标准。本白皮书主要介绍CAN作为车载网络。

CAN优点

低成本、网络

CAN提供了一种经济高效、耐用的网络,可帮助多个CAN设备进行通信。这样做的一个优点是,电子控制单元(ECU)可以具有单个CAN接口,而不是系统中每个设备的模拟和数字输入。这降低了汽车的整体成本和重量。 

广播通信

网络中的每个设备都有一个CAN控制器芯片,因此是智能的。网络上的所有设备查看所有传输的消息。每个设备可决定消息是否相关或是否需要过滤。 该结构允许在影响最小的情况下修改CAN网络。 无需修改网络即可添加其他非传输节点。

优先级

每个消息都有一个优先级,因此如果两个节点尝试同时发送消息,则高优先级的节点被传输,低优先级的节点被延迟。 该仲裁是非破坏性的,可保证最高优先级消息的传输不会中断。 这也允许网络满足确定性定时约束。

错误功能

CAN规范包含一个循环冗余代码(CRC),用于对每个帧的内容执行错误检查。 所有节点忽略包含错误的帧,可传输错误帧以向网络发送错误信号。 控制器区分全局和局部错误,如果检测到太多错误,单个节点可能会停止传输错误或完全断开与网络的连接。

网络可显著减少连线

图1:CAN网络大大减少了连线。

CAN应用范例

CAN最早用于汽车领域,因此最常见的应用是车载电子联网。然而,随着其他行业在过去 20 年中认识到 CAN 的可靠性和优势,它们已将总线用于多种应用。有轨电车、有轨电车、地铁、轻轨和长途列车等铁路应用都集成了CAN。您可以在这些车辆的多个网络的不同层次上找到连接车门单元、制动控制器、乘客计数单元等的CAN设备范例。CAN还可用于驾驶舱内带有飞行状态传感器、导航系统和研究PC的飞机。此外,可在许多航空航天应用中找到CAN总线,从飞行数据分析到飞机发动机控制系统(如燃油系统、泵和线性致动器)。 

医疗设备制造商使用CAN作为医疗设备中的嵌入式网络。事实上,有些医院使用CAN管理完整的手术室。医院使用基于CAN的系统控制手术室组件,如灯光、桌子、摄像头、X光机和病人床。电梯和自动扶梯使用嵌入式CAN网络,医院使用CANopen协议连接电梯设备(例如,面板、控制器、门和光栅)并控制它们。CANopen还可用于实验室设备、运动相机、望远镜、自动门甚至咖啡机等非工业应用。

CAN物理层

CAN包含多个不同的物理层。这些物理层对CAN网络的某些方面进行分类,例如电平、信令方案、线缆阻抗、最大波特率等。最常见和最广泛使用的物理层如下:

高速/FD CAN

高速CAN是目前最常见的物理层。高速CAN网络使用两条线实现,通信速率高达1 Mbit/s。高速CAN的其他名称包括CAN C和ISO 11898-2。典型的高速CAN设备包括防抱死制动系统、发动机控制模块和排放系统。 具有灵活数据速率的CAN (CAN FD)是下一代高速CAN通信,其标准不断发展,以实现更高的数据速率。  通过NI-XNET驱动程序使用TJA1041和TJA1043收发器,NI已启用高达8 Mbit/s的速度。  由于收发器供应商符合CAN FD速度要求,NI将在必要时更新文档。

低速/CAN硬件

低速/容错CAN网络也使用两条线实现,可与高达125 kbit/s的设备通信,并提供具有容错功能的收发器。低速/容错CAN的其他名称包括CAN B和ISO 11898-3。汽车中典型的低速/容错设备包括舒适设备。根据打开和关闭车门固有的压力,必须通过车门的导线具有低速/容错能力。另外,对于需要高级安全级别的情况(例如,使用刹车灯),低速/容错CAN提供了一种解决方案。

线CAN硬件

单线CAN接口与设备的通信速率高达33.3 kbit/s(高速模式下为88.3 kbit/s)。单线CAN的其他名称包括SAE-J2411、CAN A和GMLAN。汽车中典型的单线设备不需要高性能。常见的应用包括座椅和镜子调节装置等舒适设备。

通过软件选择CAN硬件

通过NI CAN硬件产品,可将软件可选的CAN接口配置为使用任意板载收发器(高速、低速/容错或单线CAN)。多收发器硬件为需要组合通信标准的应用程序提供了完美的解决方案。通过软件可选的CAN硬件,也可选择自己的外部CAN收发器。

使用LabVIEW其他语言进行CAN编程

NI-XNET软件驱动程序

NI-XNET软件包含在PCI/PXI-851x和NI 986x设备中,可在ni.com上免费下载。该驱动程序用于在Windows和LabVIEW Real-Time操作系统上开发NI LabVIEW、NI LabWindows/CVI和C/C++中的CAN、本地互连网络(LIN)和FlexRay应用程序。作为NI-XNET平台的一部分,NI 851x和NI 986x设备适合需要对数百个帧和信号进行高速实时操作的应用,如硬件在环仿真、快速控制原型验证、总线监控、自动化控制等。

NI-XNET:一个API,多个嵌入式网络

NI-XNET平台将一系列高性能CAN、LIN和FlexRay接口与NI-XNET API结合在一起。NI-XNET API是一组易于使用的函数,用于读取和写入CAN、LIN和FlexRay帧和信号。

更少实现最佳性能

NI-XNET接口集成了底层微控制器编程的性能以及Windows和LabVIEW Real-Time操作系统开发的速度和功能。正在申请专利的NI-XNET设备驱动DMA引擎将系统延迟(基于PC的CAN接口的常见痛点)从毫秒减少到微秒。该引擎使得板载处理器无需中断CPU就能在接口和用户程序之间传输CAN帧和信号,从而最小化消息延迟,使主机处理器有时间处理复杂的模型和应用程序。

关于NI-XNET的优点和应用的更多信息,见NI-XNET CAN、LIN和FlexRay Platform Overview

NI-CAN软件驱动程序

NI的所有NI传统CAN接口都包括NI-CAN驱动程序软件,并在ni.com上免费下载。对于其他CAN接口,如未购买交钥匙软件工具,只能使用一小部分板卡功能。但是,NI CAN板卡的所有功能均已完全开放,因此可以使用所选编程语言开发自定义应用程序。NI-CAN驱动程序提供了易于使用的高层函数,可帮助用户快速开发整个CAN应用程序,从而节省时间和金钱。

NI-CAN驱动程序软件中包含两个API。帧API是用于CAN编程的原始API。在帧API中,可发送和接收包含原始数据字节的CAN帧。程序必须解析和换算这些字节,才能得到换算后的工程单位。关于使用帧API编程的更多信息,见NI CAN软硬件手册的“使用帧API”章节。


NI首次在NI-CAN 2.0驱动程序软件中引入了通道API。可使用数据库文件(.dbc或.ncd)中定义的通道名称读取和写入CAN通道。通道API具有下列优点:

  • 高级编程
  • 易于使用的物理单元
  • 主要用于方便CAN/数据采集同步
  • 集成向量数据库文件的能力

关于使用通道API编程的更多信息,见NI-CAN通道API文档。

CAN协议术语

CAN设备通过CAN网络以称为帧的数据包发送数据。CAN帧由下列部分组成。

  • CAN帧 -- -- 整个CAN传输:仲裁ID、数据字节、确认位等。帧也称为消息。

标准CAN帧格式

图2: 标准CAN帧格式。

  • SOF(帧开始)位-指示消息的起始位置,以主导(逻辑0)位开始。
  • 仲裁ID-标识消息并显示消息的优先级。帧有两种格式:标准,使用11位仲裁ID;扩展,使用29位仲裁ID。
  • IDE(标识符扩展)位-允许区分标准帧和扩展帧。
  • RTR位-用于区分远程帧和数据帧。主(逻辑0)RTR位表示数据帧。隐式(逻辑1)RTR位表示远程帧。
  • DLC(数据长度代码)-表示数据字段包含的字节数。
  • 数据字段-包含0至8字节的数据。
  • CRC(循环冗余检查)-包含15位循环冗余检查代码和隐式分隔符位。CRC字段用于错误检测。
  • ACK (ACKnowledgement)插槽-正确接收消息的任何CAN控制器在消息末尾发送ACK位。发送节点检查总线上是否存在ACK位,如未检测到确认,则重新尝试发送。National Instruments Series 2 CAN接口具有仅侦听模式的功能。在此,监控硬件对ACK位的传输被抑制,以防止其影响总线的行为。
  • CAN信号-包含在CAN帧数据字段中的单个数据。也可将CAN信号称为通道。由于数据字段最多可包含8个字节的数据,单个CAN帧可包含0至64个信号(对于64个通道,它们都将是二进制)。 
在下图中,单个CAN帧的数据字段包含6个通道。每个信号包含8位数据。


信号可定义为CAN帧内的指定位数

图3: 信号可定义为CAN帧内的指定位数。

CAN数据文件

CAN数据库文件是包含CAN帧和信号定义换算信息的文本文件。NI-XNET数据库编辑器软件可识别FIBEX数据库文件(.xml)、向量数据库文件(*.dbc)和NI CAN数据库文件(*.ncd)。

对于每个信号,CAN数据库定义了转换为工程单位的规则。下列数据存储在数据库中:

  • 通道名称
  • 给定消息中通道的位置(起始位)和大小(位数)
  • 字节顺序(Intel/Motorola)
  • 数据类型(有符号、无符号和IEEE浮点)
  • 换算和单位字符串
  • 量程
  • 默认值
  • 备注

使用该信息可轻松将“原始”帧信息(通常是字节)转换为“现实世界”的值。 下图为该转换的范例。

图4: 所有必要的换算数据都包含在数据库中,用于将帧转换为信号。

CAN数据库文件可能包含汽车的帧和信号定义。每个网络都有其唯一的数据库文件。此外,这些数据库文件是供应商特定的,通常为机密文件。

通过将数据库文件用于CAN网络上的许多帧,许多CAN API(如NI-XNET)可以直接将帧信息自动转换为实际值。 这简化了应用程序开发,因为用户无需担心原始帧的值。

CAN通信工作原理

如前所述,CAN是点对点网络。这意味着没有主设备控制各个节点何时可访问CAN总线上的读写数据。当CAN节点准备传输数据时,它会检查总线是否处于忙碌状态,然后将CAN帧写入网络。传输的CAN帧不包含发送节点或任何接收节点的地址。相反,在整个网络中唯一的仲裁ID为帧添加标签。CAN网络上的所有节点都接收CAN帧,根据传输的帧的仲裁ID,网络上的每个CAN节点决定是否接受该帧。

如多个节点尝试同时向CAN总线发送消息,最高优先级(最低仲裁ID)的节点将自动获得总线访问权限。低优先级节点必须等待总线可用后再尝试传输。这样,就可以实现CAN网络,确保CAN节点之间的确定性通信。

可包含内置消息优先级以避免冲突

图5: CAN包含消息的内置优先级,以避免冲突。

National Instruments CAN工具

NI为CAN应用程序开发提供了各种硬件和软件工具。NI提供用于不同平台的CAN接口,包括PCIPXIUSBCompactRIO和CompactDAQ(C系列)。对于PCI、PXI和C系列,可选择高速/FD、低速/容错和单线物理层。对于PCI和PXI,National Instruments提供了业界首个软件可选的CAN接口,其中包含高速/FD、低速/容错和单线收发器,每个板卡、每个端口、单个设备。这意味着用户只需在软件中选择要使用的模式。

NI PCI-8513
图6: NI PCI-8513软件可选(XS) CAN设备


此外,NI还为每个设备提供了相应的驱动程序软件。NI CAN接口驱动程序软件说明如下。 

NI ECU Measurement and Calibration Toolkit将NI LabVIEW、NI LabWindows™/CVI及C/C++开发环境扩展至测量和校准应用程序,用于设计及验证电子控制单元(ECU)。ECU Measurement and Calibration Toolkit提供了基于CAN校准协议(CCP)的高级、易用功能,ECU设计人员、测试人员和工程师可将其用于构建自定义测量和校准应用程序。

 

LabWindows标志经Microsoft公司授权使用。Windows是Microsoft Corporation在美国和其他国家/地区的注册商标。