如图2-14所示,CAN总线系统元件主要由K线、控制单元、CAN构件、收发器等组成。
图2-14 CAN总线系统元件
1.K线
K线用于在CAN总线系统自诊断时连接汽车故障检测仪(如VAS5051),属于诊断用的通信线。
2.控制单元
控制单元接收来自传感器的信号,将其处理后再发送到执行元件上。控制单元中的微控制器上带有输入输出存储器和程序存储器。
定期查询控制单元接收到的传感器值(如发动机转速或冷却液温度)并按顺序存入输入存储器。微控制器按事先编制好的程序来处理输入值,处理后的结果存入相应的输出存储器内,然后到达各个执行元件。为了能够处理CAN信息,各控制单元内还有一个CAN存储区,用于容纳接收到的和要发送的信息。
3.CAN构件
CAN构件用于数据交换,它分为两个区:一个是接收区,一个是发送区。CAN构件通过接收邮箱或发送邮箱与控制单元相连,其工作过程与邮局收发邮件的过程非常相似。CAN构件一般集成在控制单元的微控制器芯片内。
4.收发器
收发器就是一个发送-接收放大器,在接收数据时,收发器把CAN构件连续的比特流(亦称逻辑电平)转换成电压值(线路传输电平);当发送数据时,收发器把电压值(线路传输电平)转换成连续的比特流。线路传输电平非常适合在铜质导线上进行数据传输。收发器通过TX线(发送线)或RX线(接收线)与CAN构件相连。RX线通过一个放大器直接与CAN总线相连,并总是在监听总线信号。
(1)收发器的特点 如图2-15所示,收发器的TX线始终与总线耦合,两者的耦合过程是通过一个开关电路来实现的。收发器内晶体管的状态与总线电平之间的对应关系见表2-5。
图2-15 收发器的TX线与总线的耦合
表2-5 收发器内晶体管的状态与总线电平之间的对应关系
(2)多个收发器与总线导线的耦合 当有多个收发器与总线导线耦合时,总线的电平状态将取决于各个收发器开关状态的逻辑组合。下面以3个收发器接到一根总线导线上(图2-16)的情况为例加以说明。
图2-16 3个收发器接到一根总线导线上
在图2-16中,收发器A和收发器B的开关呈断开状态,收发器C的开关呈闭合状态。开关断开表示1(无源),开关闭合表示0(有源)。
由图2-16不难看出,如果某一开关已闭合,电阻上就有电流流过,于是总线导线上的电压就为0V;如果所有开关均未闭合,那么电阻上就没有电流流过,电阻上就没有压降,于是总线导线上的电压就为5V。
3个收发器开关的状态与总线电平的逻辑关系见表2-6。
表2-6 3个收发器开关的状态与总线电平的逻辑关系
如果总线处于状态1(无源),那么该状态可以由某一个控制单元使用状态0(有源)来改写。一般将无源的总线电平称为隐性的,有源的总线电平称为显性的。
其意义体现在:
1)发送传输错误信号时(错误帧故障信息)。
2)冲突识别时(如果几个控制单元想同时发送信息)。
以发动机转速信息的传输过程为例,介绍CAN总线上的数据传输过程。从发动机转速信号获取、接收、传输,直到在发动机转速表上显示出来,从这一完整的数据传输过程中,可以清楚地看出数据传输的时间顺序以及CAN构件与控制单元之间的配合关系。
1.信息格式的转换
首先是发动机控制单元的传感器接收到发动机转速信息(转速值)。该值以固定的周期(循环往复地)到达微控制器的输入存储器内。
由于瞬时转速值不仅用于发动机运转控制、变速器换档控制,还用于其他控制单元(如组合仪表),故该值通过CAN总线来传输,以实现信息共享。于是转速值就被复制到发动机控制单元的发送存储器内。该信息从发送存储器进入CAN构件的发送邮箱内。
如果发送邮箱内有一个发动机转速实时值,那么该值会由发送特征位显示出来。将发送任务委托给CAN构件,发动机控制单元就完成数据传输任务。
如图2-17所示,发动机转速值按协议被转换成标准的CAN信息格式。
在本例中,状态区(标识符)=发动机1,数据区(信息内容)=发动机转速值(即发动机转速为×××r/min)。当然,CAN总线上传输的数据也可以是其他信息(如节气门开度、冷却液温度、发动机转矩等),具体内容取决于系统软件的设定。
图2-17 发动机转速值按协议被转换成标准的CAN信息格式
2.请求发送信息——总线状态查询
如果发送邮箱内有一个发动机转速实时值,那么该值会由发送特征位显示出来——请求发送信息,相当于学生举手向老师示意,申请发言。
只有总线处于空闲状态时,控制单元才能向总线发送信息。如图2-18所示,CAN构件通过RX线来检查总线是否有源(是否正在交换其他信息),必要时会等待,直至总线空闲下来为止。
图2-18 总线状态查询
如果在某一时间段内,总线电平一直为1(总线一直处于无源状态),则说明总线处于空闲状态。
3.发送信息
如图2-19所示,如果总线空闲下来,发动机信息就会被发送出去。
4.接收过程
如图2-20所示,连接在CAN总线上的所有控制单元都接收发动机控制单元发送的信息,该信息通过RX线到达CAN构件各自的接收区。
接收过程分两步,首先检查信息是否正确(在监控层),然后检查信息是否可用(在接收层)。
(1)检查信息是否正确(在监控层)接收器接收发动机的所有信息,并且在相应的监控层检查这些信息是否正确。这样就可以识别出在某种情况下某一控制单元上出现的局部故障。按照CAN总线的信息广播原理,连接在CAN总线上的所有控制单元都接收发动机控制单元发送的信息。数据传输是否正确,可以通过监控层内的CRC校验和数来进行校验。CRC校验即为循环冗余码校验(Cycling Redundancy Check, CRC)。
图2-19 信息发送过程
图2-20 信息接收过程
在发送每个信息时,所有数据位会产生并传递一个16位的校验和数,接收器按同样的规则从所有已经接收到的数据位中计算出校验和数,随后系统将接收到的校验和数与计算出的实际校验和数进行比较。如果两个校验和数相等,确认无数据传输错误,那么连接在CAN总线上的所有控制单元都会给发射器一个确认回答(亦称应答,见图2-21),这个回答就是所谓的“信息收到符号”(acknowledge, Ack),它位于校验和数之后。
图2-21 确认信息已经接收
如图2-22所示,经监控层监控、确认无误后,已接收到的正确信息会到达相关CAN构件的接收区。
(2)检查信息是否可用(在接收层)CAN构件的接收层判断该信息是否可用。如果该信息对本控制单元来说是有用的,则举起接收旗,予以放行(图2-23),该信息就会进入相应的接收邮箱;如果该信息对本控制单元来说是无用的,则可以拒绝接收。
图2-22 监控层对信息进行监控
图2-23 接收层判断信息是否可用
在图2-20中,连接在CAN总线上的组合仪表根据升起的“接收旗”就会知道,现在有一个信息(发动机转速)在排队等待处理。组合仪表调出该信息并将相应的值复制到它的输入存储器内。通过CAN总线进行的数据传输(发送和接收信息)过程至此结束。
在组合仪表内部,发动机转速信息经微控制器处理后到达执行元件并最后到达发动机转速表,显示出发动机转速的具体数值。
上述数据传输过程按设定好的循环时间(如10ms)在CAN总线上周而复始地重复进行。
5.冲突仲裁
如果多个控制单元同时发送信息,那么数据总线上就必然会发生数据冲突。为了避免发生这种情况,CAN总线具有冲突仲裁机制。按照信息的重要程度分配优先权,紧急的信息(如事关汽车被动安全、汽车稳定性控制的信息)优先权高,不是特别紧急的信息(如车窗玻璃升降、车门锁止等)优先权低,确保优先权高的信息能够优先发送。
1)每个控制单元在发送信息时通过发送标识符来标识信息类别,信息优先权包含在标识符中。
2)所有控制单元都通过各自的RX线来跟踪总线上的一举一动并获知总线状态。
3)每个控制单元的发射器都将TX线和RX线的状态一位一位地进行比较(它们可以不一致)。
4)数据传输总线的调整规则:用标识符中位于前部的“0”的个数代表信息的重要程度,“0”的位数越多越优先,从而保证按重要程度的顺序来发送信息。越早出现“1”的控制单元,越早退出发送状态而转为接收状态。基于安全考虑,涉及安全系统的数据优先发送。
例如,由ABS/EDL电控单元提供的数据比自动变速器控制单元提供的数据(驾驶舒适)更重要,因此具有优先权。数据列的状态域是由11位组成的编码,其数据的组合形式决定了数据的优先权,如图2-24所示。3个控制单元同时发送数据列,此时,在CAN-BUS数据传输线上进行一位一位的比较,如果1个控制单元发送了1个低电位而检测到1个高电位,那么该控制单元就停止发送数据列而转为接收器。
图2-24 优先权判定举例
表2-7是3组不同数据列的优先权。例如,如图2-25所示,在数据列的状态域位1,ABS/EDL控制单元发送了1个高电位,发动机控制单元也发送了1个高电位,自动变速器控制单元发送了1个低电位而检测到1个高电位,那么自动变速器控制单元将失去优先权而转为接收器。在数据列的状态域位2,ABS/EDL控制单元发送了1个高电位,发动机控制单元发送了1个低电位并检测到1个高电位,那么,发动机控制单元也失去优先权而转为接收器。在数据列的状态域位3,ABS/EDL控制单元拥有最高优先权并接收分配的数据,该优先权保证其持续发送数据直至发送终了,ABS/EDL控制单元结束发送数据后,其他控制单元再发送各自的数据。
表2-7 3组不同数据列的优先权
图2-25 数据列优先权的判定
为了保证数据的安全性,CAN系统具有很强的内部故障管理功能。这样就可以识别出可能出现的数据传递故障,从而采取相应的措施。无法识别故障的概率,也就是所谓的剩余误差概率<10 -12 。这个概率值相当于每辆车在使用寿命内出现4次数据传递故障。
由于广播的特点(一个发射,其他所有的接收并使用),任何一个网络使用者如果发现一个传递故障,那么其他所有的网络使用者都会立即收到一个信息通知,这个通知称为“错误帧”。于是所有网络使用者就会拒收当前的信息。随后该信息会自动再发送一次,这样的过程其实是完全正常的,其原因可能是由于车上电压波动较大,例如车在起动时或有来自外部的较强干扰。
由于不断识别出故障,因此自动重新发送过程就越来越多,为此每个网络使用者都配有一个内部故障计数器(图2-26),它可以累计识别出的故障,在成功完成重新发送过程后计数器再递减计数。
内部故障计数器只负责内部的故障管理,无法读出其中的内容。当超过某一规定的界限值(相当于最多32次重新发送过程)时,相应的控制单元会得到通知并被CAN总线关闭。两次Bus-Off(总线关闭)状态后(在此期间无通信),故障存储器就会记录一条故障。经过一段固定的等待时间(约0.2s)后,控制单元会自动再接到总线上。
信息的传递一般是按规定的循环时间来进行的,这样才能保证及时地传递相应的信息。如果出现延迟,也就是说:至少有10条信息未收到,那么所谓的时间监控功能(信息超时)就会启动。于是正在接收的控制单元故障存储器内也记录一个故障,这是故障管理中的第二套机构。由此产生如下故障信息,这些信息用于售后服务故障诊断:
1)数据总线损坏。相应的控制单元有严重故障。该控制单元至少两次与总线断开(Bus-Off)。
2)无相关控制单元信息或无法与相关控制单元取得联系。无法及时接收到信息,时间监控启动。
图2-26 内部故障计数器