对于所有节点来说,双CAN总线有同时运行和热备份两种运行方式。由于采用双驱动器冗余,只有一个总线控制器,所以每个节点不能同时从两路总线接收数据,故本文的驱动器冗余方式不能实现严格意义上的同时运行方式。另外,同时运行方式功耗大,总线通信利用率低。
若采用图3所示的电路,只能实现表1中的方式5和6,若采用图4所示的电路,只能实现表1中的方式1和4。方式2和3具有非常特殊的作用:a.双总线同时运行时,可以为两个不同的节点传递报文,提高总线通信利用率;b.可能实现单节点调试。因为单节点采用其他方式调试时,报文发送后由于得不到应答而会检测到错误并不断重发报文,节点转为被动出错节点。
3 软件编程
CAN总线节点的通信程序主要包括初始化、报文发送和报文接收三部分。
(1)CAN节点初始化主要是配置控制组寄存器。在初始化前,必须确保CAN控制器进入复位模式。初始化主要有:配置总线定时器BTR0和BTR1,设定总线通信波特率;配置输出控制寄存器OCR,设定控制器输出管脚CTXO和CTX1的输出模式;配置验收码寄存器ACR和验收屏蔽码寄存器AMR,设定验收码和验收屏蔽码。
(2)报文发送程序将报文(目标节点ID、数据长度和数据)送入发送缓冲器,然后启动发送指令即可,CAN控制器能自动报文发送过程。报文发送可通过中断和查询两种方式实现,但是中断方式效率高,采用较多。
(3)报文接收程序是从CAN控制器的接收缓冲器读取节点需要的数据并保存。数据接收也可通过中断和查询两种方式实现,普遍采用效率高的中断方式。
4 结 论
本文所设计的驱动器冗余电路简单,能较好地提高硬件可靠性,相对降低了成本,同时,为双总线运行提供了更多的方式,使得编程更加灵活,可以提高总线通信利用率。除此之外,在报文发送出现冲突时,还可以通过软件转移负荷,平衡双总线的通信负荷。