如何进行汽车CAN总线开发?

如题所述

接上一篇:

我们先研究数据帧吧。

一,数据帧由7 个不同位场组成(帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结尾)。

这里的位场,就是不同位的组合,这名字起的很烂,让人看了感觉很抽象。我们来看看这些个不同的位场吧。一开始是一位帧起始,也叫SOF。它用显性位表示,也就是0;它告诉我们,两个线上有电压差了,也就是有数据了。

这个帧起始看起来只有一位,其实不简单了。为了让所有的分站都同步于发送报文的发送站,好接收数据,有很多要考虑的地方。

报文的数据帧结构

然后下一个场是仲裁场。这个仲裁很抽象,其实在这里就是为了解决一个问题。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突,那么仲裁机制就是用来根据标识符优先级来一个一个的去掉低级别的数据。我们可以详细的描述这场生动的争抢总线的战斗。

当总线处于空闲状态时呈隐性电平,此时任何节点都可以向总线发送显性电平作为帧的开始。2个或2个以上的节点同时发送开始争抢总线,但是总线只能被一个人抢走。这时候到底怎么决定谁留下,谁滚蛋呢。我们开始思索,我们以前定义了标识符,标识符有优先级,它越小,它优先级越高。那么怎么实现的呢。看下面图:

首先搞明白两点,

一、下图中,低波形代表0(显性),高波形代表1(隐性);

二、当隐性碰到显性,就变为显性。

如图所示,节点 A 和节点B 的标识符的第10、9、8位电平相同,因此两个节点侦听到的信息和它们发出的信息相同。第7位节点B发出一个“1”,但从节点上接收到的消息却是“0”。

为什么呢,因为A 节点同时发出显性位,让总线也变成显性了,也就是0。节点B 会退出发送处于单纯监听方式而不发送数据;节点A 成功发送仲裁位从而获得总线的控制权,继而发送全部消息。

总线中的信号持续跟踪最后获得总线控制权发出的报文,本例中节点A的报文将被跟踪。这种非破坏性位仲裁方法的优点在于,在网络最终确定哪个节点被传送前,报文的起始部分已经在网络中传输了,因此具有高优先级的节点的数据传输没有任何延时。

在获得总线控制权的节点发送数据过程中,其他节点成为报文的接收节点,并且不会在总线再次空闲之前发送报文,在这逐位的比较中,最终节点B 因为第七位的偏差丢掉了总线。从此单纯监听,江山就拱手让给了节点A 了。这就是仲裁机制

上面我们说过,报文有两种格式,标准和扩展。这里,不同的格式仲裁场是不一样的。标准格式下,仲裁场由11位识别符和RTR 位组成。

但在扩展格式里,包括29位识别符、SRR 位、IDE 位、RTR 位。

RTR 位,Remote Tranmission Request BIT 全称为远程发送请求位。它在数据帧里必须为显性0,但在远程帧里为隐性1。

我晕,为什么这么搞呢,不急,先留着这个问题。

SRR 位,替代远程请求位,SRR 是一隐性位,也就是1,它在扩展格式的标准帧RTR 位位置,那么标准帧怪不得优先于扩展帧了,因为在传输完11位标识符之后(扩展帧的后18位在最后发送,先发送11位标识符),轮到标准帧的RTR 位和扩展帧的SRR 位了。

这时候,标准帧的RTR 为显性,而扩展帧SRR 为隐性,这样,总线自然就被标准帧占据。

同时上面那个问题,也一目了然了,CAN 总线协议设计者,肯定是设计了数据帧优先于远程帧。所以IDE(Identifier Extension Bit),全称识别符扩展位,它属于扩展格式的仲裁场

对于扩展格式,IDE位属于仲裁场;对于标准格式,IDE位属于控制场。标准格式的IDE位为“显性”,而扩展格式的IDE

位为“隐性”。

标准格式中的数据帧

拓展格式中的数据帧

控制场

控制场由6个位组成,标准格式和扩展格式的控制场格式不同。标准格式里的帧包括数据长度代码、IDE位(为显性位)及保留位r0。扩展格式里的帧包括数据长度代码和两个保留位:r1和r0。其保留位必须发送为显性,但是接收器认可“显性”和“隐性”位的任何组合。其结构如图所示:

控制场结构

数据长度代码(标准格式以及扩展格式)DLC,如下表所示

数据帧长度代码DLC

数据长度代码指示了数据场里的字节数量。其中:d—“显性”, r—“隐性”,数据帧允许的数据字节数为{0,1,...,7,8}。其他的数值不允许使用。

数据场

数据场由数据帧里的发送数据组成。它可以为0~8个字节,每字节包含了8个位,首先发送最高有效位(MSB)。

循环冗余码CRC场

是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

CRC场包括CRC序列(CRC Sequence),其后是CRC界定符(CRC Delimiter),结构如图:

生成 CRC 码的基本原理:

任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

参考一下下面的例题,自已再领悟一下吧!已知信息位为1101,生成多项式G(x)= x3+x+1,求CRC 码。

要传输的信息序列为1101,在末尾添加所给多项式的最高次阶个0,如本题为x^3,则添加3个0,变为:1101000;

由多项式G(X)=X3+X+1,得其阶数为1的二进制编码为:1011;1101000对1011进行模二除法,所得到的余数即为校验码,把校验码添加在原数据尾部即为所求的编码,则实际发送的数据序列为1101001。校验码计算过程如图所示:

模二除法

应答场(ACK Field)

应答场长度为2个位,包含应答间隙(ACK Slot)和应答界定符(ACK Delimiter),如图所示。在ACK场(应答场)里,发送节点发送两个“隐性”位。

当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK Slot)期间向发送器发送一“显性”位以示应答。

帧结尾

每一个数据帧和远程帧均由一标志序列界定。这个标志序列由7个“隐性”位组成。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-26

电动知家,一个有价值的微公号!

更多新能源电动汽车、无人驾驶最新行业资讯和专业知识,请关注“电动知家”微公号

常规CAN收发器支持的节点数最多为110个,但实际使用时需要合理的布局组网,选用合适的收发器、线缆、匹配好终端等才能保证网络中的各个节点之间可靠通信。

一、影响CAN总线节点数的因素

影响总线节点数的因素有多种,本文我们从满足接收节点的差分电压幅值方面来讨论,只有满足了这个前提条件,我们才能考虑总线的其他因素如寄生电容、寄生电感对信号的影响。

1、发送节点的CAN接口负载

为何考虑CAN接口负载?

CAN接口负载即为CANH、CANL之间的有效电阻值大小,该电阻会影响发送节点输出的差分电压的幅值,组网后网络中各个节点的负载电阻 RL接近,如图1我们测试了CTM1051M小体积CAN隔离模块在不同负载下的输出差分电压幅值。

图1不同负载下的差分电压

在负载电阻由45Ω不断增大到66Ω时,节点的输出差分电压也随着由1.84V增大到2.16V,两者近似线性关系。为了使发送节点的输出差分电压不至于过低,实际组网时负载电阻应在图1测试的范围内波动。我们分析RL的组成有3个:终端电阻、总线节点的差分输入电阻、总线本身的有效电阻。

终端电阻:总线两端均需要增加终端电阻,当总线距离长时,总线有效电阻大,损耗大,可以适当增加终端电阻值以减小总线有效电阻的损耗,如150Ω~300Ω。

差分输入电阻:ISO 11898中规定的收发器差分输入电阻范围为10kΩ~100kΩ之间,CTM1051M系列收发器的差分输入电阻为19kΩ~52kΩ,其典型值为30 kΩ,如果我们以最多节点组网,按典型值考虑,则整个总线的差分输入电阻会达到30 kΩ/110=273Ω,与终端电阻并联时会显著增加节点的负载。

总线有效电阻:使用较小截面积的双绞线,其有效电阻达到几十欧姆,长距离通信,总线对差分信号的影响会很大,如常用的RVS非屏蔽双绞线的电阻从8.0Ω/km到39.0Ω/km不等。严重时会使接收点的电平达不到识别范围。

差分电压除负载电阻的影响外,还会受到供电电压的影响,如图2我们测试了CTM1051M模块在不同电压,不同负载下的差分电压幅值,可以看到电源电压升高0.5V,差分电压幅值会升高约0.3V。

图2不同供电电压下的差分电压

2、接收节点的识别电平

接收节点有一定的电平识别范围,CTM1051M的CAN接口典型参数如表1所示。节点输入显性电平应大于0.9V。ISO 11898中,总线上的任意点的最小电平应大于1.2V,组网时我们应使差分电压大于此值。

表1 CAN接口典型参数

3、实际组网分析

目前收发器的最大组网节点数为110个,组网时我们考虑以上的电阻参数,确保总线上的差分电压在合理的范围内即可。

图3为CTM1051M推荐的组网拓扑,我们要考虑总线电阻,终端电阻,发送点,接收点电压参数。画出其等效电路如图4所示。

图3 CTM1051M推荐组网

图4 CTM1051M组网等效电路

根据等效电路,我们可以调整的参数有终端电阻RT、发送节点电压VOUT、总线有效电阻RW。

图4中,各节点的RW、RIN难以准确确定,组网时以公式计算较为繁琐,简便的方法便是测量总线两端的节点电压。如网络的总线电阻过大时,节点1到节点n总线对信号的损耗会很大,当节点n接收的差分电压低于1.2V时,需要增大终端电阻。

在使用浪涌抑制器的场合,比如在图4的节点1和节点2之间增加SP00S12信号浪涌抑制器,其直流等效电阻为9.5Ω,可以将其等效为总线的有效电阻,当节点1收到的电压过低时可通过减小总线有效电阻,提高节点1处的终端电阻来弥补浪涌抑制器带来的损耗。

二、总结

无论总线网络长短,网络两端都需要加终端电阻。

通讯距离长时,适当增加终端电阻值,减少总线电阻对信号的衰减,如150Ω~300Ω。

有强烈干扰的场合使用屏蔽双绞线,屏蔽层单点接大地。

收发器CAN接口输出的差分电平会随着供电电压的变化而变化,应确保供电电压在手册规定范围内。(来源:电动汽车资源网EV江湖 ZLG致远电子)

第2个回答  2017-12-26

汽车总线诊断——高速CAN总线(一)

为何汽车中使用总线系统?

目前,从小型车辆到高级车辆都使用了大量的电子装置。由此实现的复杂功能必然要求控制单元之间进行数据交换。通常情况下,通过信号线路传输数据。但由于控制单元的功能越来越复杂,因此只能以更高的成本实现这种数据传输方式。

各控制单元原本独立的处理过程通过各种总线系统相互联系起来。也就是说,对处理过程进行分配、在整个车载网络系统内完成处理过程,并使这些过程共同发挥作用。

如果不使用总线系统,车辆之间的数据交换会如下图所示,极其复杂。

使用总线的优点:

提高整个系统的可靠性

降低布线成本

减少各种电缆数量

灵活布线

进行系统变更时灵活性较高

随时能够扩展数据范围

为客户实现新功能

总线系统的种类

现代的车辆,一般有以下几种总线系统

今天我们主要介绍高速CAN总线系统

高速CAN原理:

关于高速CAN总线是由2条相互绞接的导线并联所有的控制单元。系统通过计算CAN-H和CAN-L之间的信号差来判断所传输的信号。

所有的控制单元之间是并联关系,它们是平级关系,没有主或者辅控制单元之分,在CAN-H和CAN-L的两个端点分别带有一个120欧姆的终端电阻(很多终端电阻位于2个控制单元内部),用来吸收信号反馈的干扰。

如果观察控制单元里面如何处理信号,其原理如下图所示:

这是一个非常复杂的电路,为了更容易理解该信号处理过程,我们可以将该电路简化为如下:

根据这个图我们可以看出来,当没有信号产生时,CAN-H和CAN-L的电压都为2.5V,当CAN-H产生信号时,其电压升高到3.7V;而此时CAN-L电压降低到1.2V。

如果使用示波器测量H和L的波形,正常的波形如图所示。

当系统休眠的时候,CAN-H和CAN-L的电压都会下降到0V。

诊断:

了解了高速CAN系统的原理后,对于诊断网络系统的故障就可以应用不同的方法进行诊断。

测量电阻法:

使用万用表的电阻档功能,测量任何一个控制单元或者线路的CAN-H和CAN-L之间的电阻值,由于系统是由2个120欧姆的电阻组成,并联测量得到的正常电阻值应该在60欧姆左右。当然测量电阻时一定将点火开关关闭,同时拆掉蓄电池的负极后测量。如果得到的值为120欧姆,则说明其中有断路的地方,如果测量得到的是无穷大,则说明H和L同时断路;如果测量得到的是0欧姆,说明H和L之间有短路发生。也就是可以通过测量电阻值简单判断系统是否正常。

测量电压法:

使用万用表的电压档测量任何一个控制单元或者线路的CAN-H与地线,CAN-L与地线之间的电压值。正常情况下CAN-H的电压值在2.6V左右,CAN-L的电压值在2.4V左右。如果某个电压为12V,则说明该线路对电源短路;如果如何一个电压为0V则说明该线路对地线短路。当系统休眠时,CAN-H和CAN-L的电压值都应该为0V。

测量波形法:

使用示波器,采用双通道,测量CAN-H和CAN-L的波形,如果波形不是上面描述的标准波形,则说明系统有故障。

在实际维修工作中还会有多种情况发生:

如果出现接地或者电源短路故障,则电阻测量法如何甄别?

如果电压测量法测量出的电压是2.7V和2.3V说明什么?

如果使用示波器测量波形,如何判断与电源短路故障?

与地短路故障?

断路故障?

我们会在后面的节目中与各位一一分享,敬请期待!

感谢您的观看本期栏目!

我们将坚守无私传承的精神,

将UE Auto Training越办越好!

欢迎大家给我们留言,你的问题可能就是大家的问题!

第3个回答  2017-12-26

来由:

伴随着汽车的技术水平不断提高,车内成千上百个控制单元之间的信息交换也越来越密集。比如一个发动机转速信号,仪表、变速箱、ABS等各个控制单元都需要得到发动机转速的信号。那么问题来了?10个控制单元互相传递信号需要连10*9*8*….1=3628800根线,这对于一台汽车简直是不可思议的,难道车辆要造成这个样子?

错综复杂的布线

应运而生:

为了解决这个问题,这家老牌技术大牛公司德国BOSCH设计提供了CAN-BUS(Controller Area Network)数据通信的解决方案。什么意思呢?就如同它的名字BUS(公交车系统),公交车走的路线是一定的,任何人或者都可以从某个站台或者节点上车和下车。而汽车系统里面的各种信息也同样可以通过总线进行高效地传输、交换、共享和逻辑控制!

CAN总线架构

这样整个数据系统就变成今天我们汽车网络的雏形了。在CAN总线中,每个控制单元不指定接收者,把所有的信息都往外发送,由接受控制器自主选择是否需要接收这些信息。称为控制单元的局域网,是车用控制单元传输信息的一种传送形式。CAN-BUS最早可是由大众公司在97年的PASSAT的舒适系统上使用的哦。

CAN总线的解决方案

系统组成:

那么这个系统是怎么工作的呢?它主要是由以下这几个部件组成的。

CAN总线组成

CAN总线收发器:安装在控制器内部,同时兼具接受和发送的功能,将控制器传来的数据转化为电信号并将其送入数据传输线。

数据传输终端:电阻,防止数据在线端被反射,以回声的形式返回,影响数据的传输。

数据传输线:双向数据线,由高低双绞线组成。Can总线的基本颜色:Can-Low总是棕色;Can-High:驱动系统(黑色);舒适系统(绿色);信息系统(紫色);使用双绞线是为了消除外界的干扰。

数据乘客:

万事具备,只欠东风。所有的数据乘客们必须统一下服装配饰凭票上车啊!

数据乘客

对的,所有的数据必须穿成这样:共7个数据段,分别储存有开始区(1位),有限级别区(11位),检验区(6位)数据区(64位),安全区(16位),确认区(2位)和结束区(7位)。所有的信息其实都是0和1组成的,顺序不同代表的信息都不同了,在这里我先向冯诺依曼老头子表示一下敬意,然后再向电子晶体管的制造商表示感谢。因为0和1这样的数据只有通过CAN的收发器转换为差分形式的高低电平信号才能在总线上进行下图式的传输。

电平信号

站点换乘:

由于不同区域的公交路线速度不同啊,比如汽车上各系统CAN总线系统设定的5个不同的区域,其速率分别为(Kbit/s)(硬件实现最大速度是1000)的速率如下。

CAN总线系统速度

那么一个信号要从一个总线进入到另一个总线区域,怎么进行换乘呢?这项工作就要交给网关了。网关可以把信号的速率和优先级进行改变,能够让另一个运输线路接受。棒!

网关的作用

还有问题吗?

由于Can总线采用的串行数据传递(单根数据线)方式,如果有多个控制器同时需要发出信号,那么在总线上一定会发生数据冲突。这么多的信号在总线上总归会造成交通拥堵了,如果紧急的信号不能及时的传送到关键部门,车辆会出问题的。而有的信号乘客有大把时间可以错峰出行啊。

优先级

所以车辆网络上的每一个数据都有它的优先级。当有多个控制器试图发送信息时,它们自己的接收器为信息优先级进行仲裁,当其他控制器发送的信息优先级高于自己控制器发送信息时,通知自己发送器停止发送,整个控制器进入接收状态。在信息数据列中有11位的状态区,这11位二进制中前7位既是发送信息的控制器标识符,同时又表示了它的优先级,即从前往后数,前面零越多,优先级越高。而后4位则是这个控制器发送不同信息的编号,如发动机控制单元既要发送转速信号,又要发送水温等信号,则后4位就有所不同。比如车辆发生相撞事故,气囊控制单元会发出负加速度传感器的信号,这个信号的优先级在驱动系统是非常高,但转到舒适系统后,网关调低了它的优先级,因为它在舒适系统功能只是打开门和灯。

优先级

【特别说明:Autodestiny原创作品,侵权必究,转载请注明出处】

第4个回答  2017-12-26

细心的车友和维修师傅会发现,现代汽车上有一种“双绞线”,分布在各个不同电脑间,这就是CAN总线,全称为“控制器局域网总线”技术。

图一、汽车上的CAN总线是双绞线

CAN总线将多个电脑象结葫芦那样连接起来,请参见图一所示,其作用主要是可用于车上各种传感器数据的传递。现代汽车的电脑控制单元越来越多,如EFI电控燃油喷射系统、ABS车轮制动防抱装置、AT自动变速器控制系统、安全气囊、电动门窗及中控锁、汽车主动悬架等等。每个控制单元都可看做一台独立的电脑,它接受和处理信息,然后发出相应的指令给执行器,达到不同的控制目的。每个电脑均需要各种传感器实时监测车辆的状态信息,并将这种信息传输至相对应的电脑中,这就需要大量的传感器信息。

比如控制发动机工作的电脑,需接受进气流量传感器或进气压力传感器、水温和进气温度传感器、油门踏板位置传感器、凸轮轴位置传感器和曲轴转速传感器等等的信息,在经过分析处理和计算后,发送指令来控制发动机喷油器的喷油量、点火提前的正时等等。其它电脑控制的工作也都类似于发动机电脑。

图二、相同的信息要传输到不同的电脑

但有些传感器信息,如发动机转速、水温与油门踏板位置这三个信号,除了供给发动机电脑,自动变速器电脑也需要这些信号,其他电脑也同样需要某些传感信号。为减少相同传感器数量,自然人们考虑传感信号的共享问题,而CAN总线就是用于传感器数据共享的。

过去的信息传递,均采取独立电线进行的传输方式,控制一个顶灯开关或传输水温信号,都要用专门的电线,就是一线一用的方式。信息的种类越多,传输电线的数量也相应增加。

图三、CAN双绞线可传输所有信息

而CAN总线的原理就是改一线一用为一线多用制,某公路既可运输煤炭,也可运送旅客或百货。与道路可运送多种物质一样,当然导线也可传输多种不同的信息,这就是信息高速公路的概念。

CAN总线就是信息的高速道路,所有的信息,不管信息容量的大小,均可通过这两条双绞线进行传递,这可提高整个系统的运行效率。大大减少电线的数量和布线。将每个控制单元都连接到这两条CAN总线上,从而实现多个电脑间的信息共享。

现代汽车使用CAN总线系统,其优点是明显的。比传统的布线方式相比,大大简化了线路的布局,数据传输速度更高更智能和精确。

相似回答