基于MB90F543微控制器的双CAN冗余设计
时间:03-22
来源:互联网
点击:
虽然CAN协议本身具有较强的检错纠错能力,但在工业控制现场,插头连接的不牢固、传输介质的损坏或总线驱动器的损坏等都会破坏CAN的可靠通信。在要求高可靠性的应用系统中,这些故障如不能自动检测到并采取相应措施克服,将使系统部分甚至完全失去通信能力。解决这一问题的有效途径是采用冗余通信控制。从而保证通信系统主要功能正常运行,以此提高系统的可靠性。
1 系统硬件组成
MB90F543是Fujitsu公司推出的一款带2个CAN控制器的16位微控制器。系统使用两套总线(CAN0、CAN1),每一套包含独立的总线电缆、总线驱动器和总线控制器,可以实现物理介质、物理层、数据链路层及应用层的全面冗余。两套总线采用热备份方式运行:一个CAN控制器作为系统上电后默认的CAN(可称为主CAN);另一个为系统的备用CAN(称之为从CAN),作为主CAN的冗余。系统正常工作时,主CAN总线(CAN0)投入运行。当主CAN总线发生故障时,从CAN总线(CAN1)投入运行。如上电检测到主CAN总线故障,则从CAN总线自动投入运行。这样在一套总线发生故障时,另一套总线自动继续工作,保证整个系统的通信功能正常运行,大大提高了系统的可靠性,实现了CAN总线的全面冗余设计。另外,也可以根据需要,由软件设定采取冗余方式或非冗余方式。对于非冗余方式只采用主CAN总线运行。本系统的结构方案如图1所示。
图1 系统结构框图
RT为总线终端匹配电阻,用于抑制信号发射干扰,RT =100Ω或120Ω。网络采用屏蔽双绞线作为通信介质。
CAN控制器集成了CAN协议的物理层和数据链路层功能,可完成对数据通信的成帧处理,包括位填充、数据块编码、CRC校验和优先级判别等工作。
CAN控制器具有以下主要特点:
◇ 符合CAN2.0A和CAN2.0B协议;
◇ 支持数据帧和远程帧的发送和接收;
◇ 16个收发信息缓冲器,支持11位或29位标识符,支持多级信息缓冲器结构;
◇ 支持满位比较、满位屏蔽和位屏蔽验收三种验收标 识选择方式;
◇ 两个验收标识寄存器支持标准帧或扩展帧格式;
◇ 波特率从10Kbps~1Mbps可编程。
总线驱动器采用PCA82C250作为CAN控制器与物理总线间的接口,以提升总线的差动发送和接收能力。
CAN驱动电路如图2 所示。
图2 CAN驱动电路
2 系统软件设计
2.1 实现双CAN冗余控制功能
在双CAN冗余系统中,较之硬件结构而言,软件设计相对复杂得多。一般的CAN总线通信程序必须包括 CAN初始化程序、CAN发送程序和CAN接收程序三个基本部分。在本冗余系统软件设计中,上面三部分作为三个最基本的模块,供系统其它软件模块调用。
MB90F543可以处理256种中断源,与CAN控制器相关的硬件中断有四个:CAN0 RX(CAN0 接收完全中断)、CAN0 TX /NS(CAN0 发送完全/节点状态改变中断)、CAN1 RX(CAN1 接收完全中断)、CAN1 TX /NS(CAN1 发送完全/节点状态改变中断)。在本软件设计中,采用查询发送,中断接收。节点状态改变中断子程序,用于对节点状态改变的处理。这是因为在CAN2.0协议中规定节点处于下面三种状态之一:错误激活态、忽略错误态、脱离总线态。在MB90500系列中还多规定了一种警告态,它表明发送/接收错误计数器的值超过96。节点状态改变会引起相应中断。
由于系统采用双CAN冗余热备份方式运行,所以两个CAN控制器必须都处于热备份状态。系统中所有节点的两个CAN控制器经初始化后都随时准备接收信息,但有且只有一个CAN控制器在发送信息。换言之,在一个时间点上,系统中有且仅有一路 CAN通道在工作,另一路处于监听状态(正常工作时),或故障状态(发生故障时)。
双CAN冗余控制系统较之单CAN控制系统在软件设计上的复杂之处,关键在于CAN系统故障检测及CAN系统自动切换。由于采用两套完全独立的传输介质、总线驱动器和总线控制器,因此它们能分别独立检测到自己通道的故障,比如CANH与CANL短路,CANH或CANL断开、CANH与地短路、CANL与电源短路、总线驱动器损坏等。实际调试中发现, 如果CANH、CANL断开或只有一个发送器在总线上,均会造成发送/接收错误计数器不断增加到128,使节点处于忽略错误态;而CANH与CANL短路、CANH与地短路或CANL与电源短路均会造成发送/接收错误计数器不断增加到256,使节点处于总线脱离态。所以,通过节点状态改变中断子程序中调用CAN冗余模块,可以达到实现上述故障自动检测及CAN系统自动切换的目的。CAN0节点状态改变中断子程序如下:
__interrupt void NodeStateTransmitInt0(void)
{
if (CSR0_NT) /*节点状态改变*/
{
CSR0_NT = 0; /*中断标志复位*/
if ( (CSR0_NS = =2 ) (CSR0_NS = =3 ) ) /*断路或短路引起*/
{
NoWaitFlg = 1; /*一个互斥标志*/
Bus0Error( ) ; /* Bus0Error( )停止CAN0, 启动冗余CAN1子程序*/
}
}
ICR00 =3; /*改变中断优先级,使定时器0中断优先*/
ICR03 =2;
}
此外,在CAN总线通信过程中,当某个信息缓冲器的数据发送完成后,发送完成寄存器中相应的位将被置为1。在查询发送过程中,通过判断这一寄存器可以知道该次发送是否完成。但如果发送不成功,则会使系统一直在等待,造成系统死机。所以软件必须在这里设定一个等待时段,超过这一时段则调用CAN冗余系统,停止主CAN通道,启用从CAN通道。
软件设计中还要注意这样一个问题,备用CAN切换完成后,如何恢复原来的通信任务。解决办法是编制一个任务标志列表,备用CAN切换后,读该表即可获取系统原来进行的任务,实现原来通信任务的可靠切换。
2.2 实现总线管理功能
在本系统的软件设计中,除了用于数据发送和接收的实时数据通信程序外,还包括用于对各个节点进行管理的通信管理程序。所有节点分为主节点和从节点。它们的区别在于主节点具有总线管理功能,可以进行在线节点统计,识别离线节点并采取处理措施;而从节点没有这个功能。主节点只设一个,而允许多个从节点。总线管理功能程序供主节点每隔一段时间调用,来判断所有的节点是否都在线:如果所有节点都在线,则认为总线正常;否则识别离线节点,并作相应处理。设计思路是系统主节点定时向总线上所有从节点发送一远程帧,各个从节点收到后,将自己的节点编号放在一数据帧中发送给主节点,主节点根据收到的节点编号来判断是否有节点故障离线。在本系统中,节点编号(模块地址)由模块上的DIP开关设定。主节点通信流程如图3所示。
图3 主节点通信流程图
软件调试过程中,虽然各个节点的硬件结构相同,但由于电路板布线和元器件分散性存在着差异,常会致使并非所有从节点能都收到主节点发送的信息,或者主节点并非都能收到所有从节点发送的信息,即存在帧丢失问题。通过软件延时和优化接收中断程序,这一问题已得到很好的解决。
1 系统硬件组成
MB90F543是Fujitsu公司推出的一款带2个CAN控制器的16位微控制器。系统使用两套总线(CAN0、CAN1),每一套包含独立的总线电缆、总线驱动器和总线控制器,可以实现物理介质、物理层、数据链路层及应用层的全面冗余。两套总线采用热备份方式运行:一个CAN控制器作为系统上电后默认的CAN(可称为主CAN);另一个为系统的备用CAN(称之为从CAN),作为主CAN的冗余。系统正常工作时,主CAN总线(CAN0)投入运行。当主CAN总线发生故障时,从CAN总线(CAN1)投入运行。如上电检测到主CAN总线故障,则从CAN总线自动投入运行。这样在一套总线发生故障时,另一套总线自动继续工作,保证整个系统的通信功能正常运行,大大提高了系统的可靠性,实现了CAN总线的全面冗余设计。另外,也可以根据需要,由软件设定采取冗余方式或非冗余方式。对于非冗余方式只采用主CAN总线运行。本系统的结构方案如图1所示。
图1 系统结构框图
RT为总线终端匹配电阻,用于抑制信号发射干扰,RT =100Ω或120Ω。网络采用屏蔽双绞线作为通信介质。
CAN控制器集成了CAN协议的物理层和数据链路层功能,可完成对数据通信的成帧处理,包括位填充、数据块编码、CRC校验和优先级判别等工作。
CAN控制器具有以下主要特点:
◇ 符合CAN2.0A和CAN2.0B协议;
◇ 支持数据帧和远程帧的发送和接收;
◇ 16个收发信息缓冲器,支持11位或29位标识符,支持多级信息缓冲器结构;
◇ 支持满位比较、满位屏蔽和位屏蔽验收三种验收标 识选择方式;
◇ 两个验收标识寄存器支持标准帧或扩展帧格式;
◇ 波特率从10Kbps~1Mbps可编程。
总线驱动器采用PCA82C250作为CAN控制器与物理总线间的接口,以提升总线的差动发送和接收能力。
CAN驱动电路如图2 所示。
图2 CAN驱动电路
2 系统软件设计
2.1 实现双CAN冗余控制功能
在双CAN冗余系统中,较之硬件结构而言,软件设计相对复杂得多。一般的CAN总线通信程序必须包括 CAN初始化程序、CAN发送程序和CAN接收程序三个基本部分。在本冗余系统软件设计中,上面三部分作为三个最基本的模块,供系统其它软件模块调用。
MB90F543可以处理256种中断源,与CAN控制器相关的硬件中断有四个:CAN0 RX(CAN0 接收完全中断)、CAN0 TX /NS(CAN0 发送完全/节点状态改变中断)、CAN1 RX(CAN1 接收完全中断)、CAN1 TX /NS(CAN1 发送完全/节点状态改变中断)。在本软件设计中,采用查询发送,中断接收。节点状态改变中断子程序,用于对节点状态改变的处理。这是因为在CAN2.0协议中规定节点处于下面三种状态之一:错误激活态、忽略错误态、脱离总线态。在MB90500系列中还多规定了一种警告态,它表明发送/接收错误计数器的值超过96。节点状态改变会引起相应中断。
由于系统采用双CAN冗余热备份方式运行,所以两个CAN控制器必须都处于热备份状态。系统中所有节点的两个CAN控制器经初始化后都随时准备接收信息,但有且只有一个CAN控制器在发送信息。换言之,在一个时间点上,系统中有且仅有一路 CAN通道在工作,另一路处于监听状态(正常工作时),或故障状态(发生故障时)。
双CAN冗余控制系统较之单CAN控制系统在软件设计上的复杂之处,关键在于CAN系统故障检测及CAN系统自动切换。由于采用两套完全独立的传输介质、总线驱动器和总线控制器,因此它们能分别独立检测到自己通道的故障,比如CANH与CANL短路,CANH或CANL断开、CANH与地短路、CANL与电源短路、总线驱动器损坏等。实际调试中发现, 如果CANH、CANL断开或只有一个发送器在总线上,均会造成发送/接收错误计数器不断增加到128,使节点处于忽略错误态;而CANH与CANL短路、CANH与地短路或CANL与电源短路均会造成发送/接收错误计数器不断增加到256,使节点处于总线脱离态。所以,通过节点状态改变中断子程序中调用CAN冗余模块,可以达到实现上述故障自动检测及CAN系统自动切换的目的。CAN0节点状态改变中断子程序如下:
__interrupt void NodeStateTransmitInt0(void)
{
if (CSR0_NT) /*节点状态改变*/
{
CSR0_NT = 0; /*中断标志复位*/
if ( (CSR0_NS = =2 ) (CSR0_NS = =3 ) ) /*断路或短路引起*/
{
NoWaitFlg = 1; /*一个互斥标志*/
Bus0Error( ) ; /* Bus0Error( )停止CAN0, 启动冗余CAN1子程序*/
}
}
ICR00 =3; /*改变中断优先级,使定时器0中断优先*/
ICR03 =2;
}
此外,在CAN总线通信过程中,当某个信息缓冲器的数据发送完成后,发送完成寄存器中相应的位将被置为1。在查询发送过程中,通过判断这一寄存器可以知道该次发送是否完成。但如果发送不成功,则会使系统一直在等待,造成系统死机。所以软件必须在这里设定一个等待时段,超过这一时段则调用CAN冗余系统,停止主CAN通道,启用从CAN通道。
软件设计中还要注意这样一个问题,备用CAN切换完成后,如何恢复原来的通信任务。解决办法是编制一个任务标志列表,备用CAN切换后,读该表即可获取系统原来进行的任务,实现原来通信任务的可靠切换。
2.2 实现总线管理功能
在本系统的软件设计中,除了用于数据发送和接收的实时数据通信程序外,还包括用于对各个节点进行管理的通信管理程序。所有节点分为主节点和从节点。它们的区别在于主节点具有总线管理功能,可以进行在线节点统计,识别离线节点并采取处理措施;而从节点没有这个功能。主节点只设一个,而允许多个从节点。总线管理功能程序供主节点每隔一段时间调用,来判断所有的节点是否都在线:如果所有节点都在线,则认为总线正常;否则识别离线节点,并作相应处理。设计思路是系统主节点定时向总线上所有从节点发送一远程帧,各个从节点收到后,将自己的节点编号放在一数据帧中发送给主节点,主节点根据收到的节点编号来判断是否有节点故障离线。在本系统中,节点编号(模块地址)由模块上的DIP开关设定。主节点通信流程如图3所示。
图3 主节点通信流程图
软件调试过程中,虽然各个节点的硬件结构相同,但由于电路板布线和元器件分散性存在着差异,常会致使并非所有从节点能都收到主节点发送的信息,或者主节点并非都能收到所有从节点发送的信息,即存在帧丢失问题。通过软件延时和优化接收中断程序,这一问题已得到很好的解决。
总线 CAN总线 电阻 电路 CSR 仿真 C语言 单片机 嵌入式 相关文章:
- 热插拔和缓冲I2C总线 (04-14)
- PCIe总线何时突破Unix服务器坚冰(02-03)
- TMS320VC5402 HPI接口与PCI总线接口设计(04-12)
- 基于Nios II的I2C总线接口的实现(04-09)
- 双口RAM CY7C026在高速数据采集系统中的应用(04-12)
- 计算机在新型多电机同步系统中的应用(07-08)