1、引言

can 总线是由德国 bosch 公司为现实汽车测量和执行部件之间的数据通讯而设计的、支持分布式控制及实时控制的串行通讯网络。can 总线通讯的波特率可高达 1mbps,最远距离可达 10km;can 总线通讯采用短帧结构,数据传输的时间短,受干扰的几率低;can 总线协议有良好的检错措施,可靠性较高;can 总线通讯对于传送帧可以设定不同的优先级,通过总线仲裁机制使高优先级的信息能够被优先及时传送,增加了 can 总线通讯的实时性;can 总线的完善可靠的通信协议主要由接口器件完成,降低了软件开发的难度。此外,can 总线网络中的每节点对应一个地址,理论上基于 can 总线的网络上可以添加删除任一节点,通讯方式可以为点对点的通讯也可以为广播方式,可以为单主方式也可以是多主方式,因此 can 总线通讯有相当的灵活性。


can 总线开始主要应用于自动化电子领域的汽车发动机部件、传感器、抗滑系统等应用中,但随着 can 的应用普及,其应用范围已不局限于汽车行业,正在向过程控制、机械、纺织等行业发展,应用领域从高速网络到低成本的多线网络。而且 can 总线的实时性以及抗干扰能力强等优点也逐步为航天领域所认可。1995 年 sstl(surrey 大学卫星技术公司)将 can 作为星载遥测 / 遥控信道,随之 sstl 开发了基于 can 的分布式解决方案。至今 sstl 已经在 uosat-12,snap-1,aisat-1,ukdmc,nigeriasat-1,bilsat-1 等 6 颗 leo 卫星中应用了 can 总线网络,用于实现星载计算机与其他任务节点之间的通信;esa 在 smart-1 上也将 can 作为系统总线和有效载荷总线,实现数据交换和控制命令的传送。在国内,can 总线技术在小卫星中也得到了实际的应用。

 

本文在分析 can 总线航天应用的基础上,从硬件原理设计、cpu 与 can 总线接口实现以及 can 总线通信软件设计等方面进行了论述。

 

表 1 can 总线故障及其影响分析

 

2、can 总线工作原理

can 总线的多主站工作方式的发送原理采用“载波侦听多路访问 / 冲突检测”(csma/cd:carrier sense multiple access with collision detect)技术实现。利用 csma 访问总线,可对总线上信号进行检测,只有当总线处于空闲状态时,才允许发送。利用这种方法,可以允许多个节点挂接到同一网络上。当检测到一个冲突位时,所有节点重新回到‘监听’总线状态,直到该冲突时间过后,才开始发送。在总线超载的情况下,这种技术可能会造成发送信号经过许多延迟。为了避免发送延时,可利用 csma/cd 方式访问总线。当总线上有两个节点同时进行发送时,通过“无损的逐位仲裁”方法来使有最高优先权的报文优先发送。在 can 总线上发送的每一条报文都具有唯一的一个 11 位或 29 位数 id。can 总线状态取决于二进制数‘0’而不是‘1’,所以 id 号越小,该报文拥有越高的优先权。

 

can 总线的多主站工作方式的接收原理是通过验收滤波器来实现的。独立的 can 控制器 sja1000 设置了一个多功能的验收滤波器,该滤波器允许自动检查标识符和数据字节。使用验收滤波器的滤波方法可以防止对于某个节点无效的报文或报文组存储在接收缓冲器里,因此降低了主控制器的处理负荷。滤波器由验收码寄存器(acc)和屏蔽寄存器(amr)组成。在 basiccan 模式里的验收滤波,其判据为:(acc(7:0) ⊙ id(10:3))+amr(7:0)。如果判据的结果为“11111111”,则表示该帧数据是其他节点传送给本节点的数据,本节点 can 总线控制器将接收本帧数据,在 crc 校验无误后于应答间隙产生应答信号。

 

3、can 总线航天应用分析

esa 开展的 can、1553b、spacewire 技术研究表明以差分信号传输的高速串行总线用于星载设备之间的数据传输能保证通信的及时性, 利于降低星载设备的功耗,有助于获得低噪声、抗电磁干扰性强、emi 低、信号不受电源开关状态变化影响等优势, 具有良好的航天应用前景。

 

can 总线作为一种专为汽车工业设计的现场总线,具有很多适合航天应用的特点:作为多主站方式的串行通讯总线,can 总线具有低成本,高抗电磁干扰性,高总线利用率,很远的数据传输距离(长达 10km),高速的数据传输速率(高达 1mbps),可根据报文的 id 决定接收或屏蔽该报文,可靠的错误处理和检错机制,发送的信息遭到破坏后,可自动重发,节点在错误严重的情况下具有自动退出总线的功能等特点。

 

iso11898 建议的 can 总线的物理电气性能,能够保证在总线发生某些故障时不至于中断通信,而且可以为故障的定位提供可能。表 1 列出了 can 总线可能发生的各种开路和短路故障,以及在该故障模式下 can 总线受影响的情况。

 

can 总线具有安全可信性。从协议分析,can 总线的每个 ecu 具备错误检测、标定和自检的强有力措施。检测错误包括:发送自检、crc 校验、位填充和报文格式检验。其错误检测具有如下特性:其一, 所有全局错误都可以检测;其二,发送器的所有局部错误都可以被检测;其三,报文中 5 个以内的随机分布错误都可以被检测到;其四,报文中长度小于 15 的突发性错误都可以被检测得到;其五,报文中任何奇数个错误都可以被检测得到;其六,没有检测出的已损报文的剩余错误概率为报文出错率的 4.7×10-11。

 

sstl 经过研究发现,在 600 公里~1000 公里的空间领域,空间辐射对卫星的影响相对较小。在这个高度上,总剂量为每年 1krad 左右(其量级相当于增加 5mm 的铝屏蔽层),seu 发生率相当于每天每 mbyte 一次(此数据来源于试验观察),并且观测到的 sel 发生概率非常低,在 sstl 整个记录中只记录到 3 到 4 次值得怀疑的情况(确定的只有 4 次)。sstl 还发现几乎所有的商业 cmos 器件,在经受 10 krad 辐照后其性能并无明显下降。sstl 在低轨道小卫星采用工业级 can 控制器芯片构建卫星 can 总线网络的成功,验证了上述结论。表 2 为 sstl 在近年来采用的 cots can 器件。

 

表 2 surrey 大学采用的 cots can 器件统计列表

 

器 件 飞行任务次数

 

philips can 收发器:当前主流产品 4

 

philips pca82c250 10

 

philips p87c592 10

 

philips can 8 位外设:产权主流产品 4

 

philips pca82c200:can 8 位外设 6

 

infineon:8 位 can 微控制器(a/d,pwm,例如 8051) 6

 

microchip can spi 外设 4

 

4 、 星载计算机中的双冗余容错 can 总线设计

图 1 描述了基于 can 的双冗余总线结构。基于 can 总线的双冗余系统通信总线的基本设计思想是在卫星各功能模块之间布下两条基于 can 的系统通信总线,即用两套 can 总线控制模块分别连接到总线 bus0 和 bus1 上。正常情况下优先在一条总线上通信,这条总线出现故障时通过另一条进行通信并重新初始化出错的总线以备将来再用。这样即使一条通信通道故障后不会影响整个系统的数据交换,大大提高了通信的可靠性。

 

图 1 基于 can 的双冗余总线结构

 

图 2 can 总线硬件设计原理简图

 

图 2 为星载计算机中 can 总线硬件设计原理框图。 can 总线协议控制芯片选用 philip 的工业级器件 sja1000,收发器选用 philip 的 pca82c250。cpu 与 sja1000 的接口控制逻辑通过 actel 的反熔丝 fpga 实现。sja1000 工作在 intel 模式,工作时钟为 7.3728mhz。复位信号通过 max708 产生。为了有更好的 emc/emi 性能和抑制比较器的噪声,vdd 通过 rc 滤波器退耦。

 

SJA1000 的 RX1 信号处理非常关键。如果使用外部集成收发器电路而且没有在时钟分频寄存器里使能比较器旁路功能,RX1 输出要被连接到 2.5V 的参考电压(82C250 的 Vref 输出)。图 3 显示了 CBP 的两种设置所对应的电路。对于使用 82C250 集成的收发器电路,SJA1000 的相关数据手册建议使用旁路功能,即 CBP 设置为 1,在这种情况下,SJA1000 的比较器旁路功能有效,减少了内部传播延迟,即 td2

 

图 3 SJA1000 的接收输入比较器旁路设计

 

82C250 的 RS 信号通过电阻 Rext 接地。RS 管脚的电流决定了传输介质上传输信号的信号沿的陡峭程度,Rext 阻值的大小必须根据 CAN 总线的工作速度及其工作环境进行设计和选择,具体可参见 SJA1000 的数据手册或者应用文档。

 

5、 CPU 与 SJA1000 的接口逻辑设计

星载计算机的 CPU 不同于 8086,采用的是独立地址和数据总线。CAN 总线控制器 SJA1000 采用地址 / 数据总线复用方式,需要将 CPU 的总线信号经过适当逻辑处理后才能够满足 CAN 总线控制器的时序要求。图 4 和图 5 是 SJA1000 在 Intel 模式下的读写时序。

 

图 4 SJA1000 读时序(Intel 模式)

 

图 5 SJA1000 写时序(Intel 模式)

 

按照 SJA1000 的数据手册,确保 SJA1000 的读写正确,如下的时序参数必须满足:

 

l tW(AL):必须保证 ALE 的时间,最小不能小于 8ns;

 

l tLLRL/tLLWL:读写时 ALE 无效到读写信号有效的时间,最小不能小于 10ns;

 

l tLCRL/tLCWL:片选信号有效后读写信号有效的时间,最小不能小于 0,即片选有效必须出现在读写信号有效前;

 

l tW(R):读信号有效宽度,最小不能小于 40ns;

 

l tW(R):写信号有效宽度,最小不能小于 20ns;

 

l tWHLH:写信号无效到下一次 ALE 有效的时间,最小不能小于 15ns;

 

l th(AL-A):在 ALE 为低电平后地址应该保持时间,最小不能小于 2ns。

 

CPU 和 CAN 总线接口采用地址直接映射。接口时序设计重点是接口控制逻辑必须产生符合上述关键参数的读写时序。如果简单的按照 ALE《=not nADS 方法处理,不满足要求时序关系,这在调试过程中已经得到验证。为此,在设计中采用了 FPGA 技术,以求很好地解决 CAN 总线与 CPU 的接口问题。图 6 描述了通过 VHDL 编写实现接口电路的状态转移图和 FPGA 设计产生的读写 CAN 总线时序,其中时钟周期不低于 67ns,该时序满足 SJA1000 要求。

 

图 6 CAN 总线接口时序设计的状态转移和时序

 

6、 CAN 总线通讯软件的设计

双冗余总线结构的通讯软件主要由初始化、接收和发送三个模块组成,控制流图见图 7。在程序设计时采用了 SJA1000 的 Basic 模式,初始化中需要对 BUS0 和 BUS1 分别进行初始化,包括 SJA1000 的控制寄存器、接收代码寄存器、接收屏蔽寄存器、总线时序寄存器等。

 

图 7 CAN 总线通讯软件的控制流图

 

发送模块采用主动发送方式,BUS0 为优先通讯通道,若 BUS0 通道状态不正常,则启动 BUS1 通道进行通讯,并对 BUS0 通道进行初始化以备下次通讯时使用。

 

接收模块采用中断接收方式,为了保证接收到的数据被实时处理,CAN 总线的接收中断被设置为高优先级中断。在接收中断中首先判断接收通道是 BUS0 还是 BUS1,然后从接收通道按数据长度进行数据接收。

 

7 、结束语

CAN 总线技术的诸多优点如实时性好,通信速率高,抗干扰能力强,低廉的价格等使它不仅广泛应用于工业控制领域,而且开始向航天领域进军。其 COTS 工业级器件 SJA1000 经过飞行也得到了验证,CAN 总线适宜航天应用的特点得到了充分的展示和飞行验证。