打印
[开发工具]

控制器双冗余系统

[复制链接]
楼主: goodluck09876
手机看帖
扫描二维码
随时随地手机跟帖
41
goodluck09876|  楼主 | 2019-7-3 15:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
      (1)掉电;
      (2)控制器本身出现硬件故障;
      (3)接口模块出现故障。
    除此之外,还存在一些由于设计本身而引入的潜在故障。接下来先就故障(1)
和故障(2)进行具体分析。如果在与对方控制器通信时发现对方控制器未响应,
要从三方面进行分析,首先怀疑是否是通讯链路的问题,若排除了这种可能,则
J环疑是否是对方控制器坏掉,如若这种情况也排除,就认为是对方控制器掉电。
在双方通信时,如若真的是链路出现问题,那么只有接收方才能发现问题,所以
在设置断点时,控制器的串口1,串口2和串口3的接收、发送端与连接器之间
均接有自锁式按键开关,用以模拟链路的通断。在电路板的电源输入端也接有自
锁式开关,方便模拟电路掉电。
    如果是接口模块故障,则有可能是接口模块单片机坏掉或CAN通讯通道出
现故障(CAN收发器的故障)。如果是CAN通讯通道出现问题,首先由CAN控
制器发现,之后再由接口模块的单片机将故障上报给本地控制器,进行下一步的
处理。为了模块CAN通讯通道的问题,在CAN控制器与CAN收发器的接收、
发送数据端接有自锁式开关,以开关的通断表示链路的通断,也即收发器是否坏
掉。设计中选用的自锁式开关图片如图3-8所示。

使用特权

评论回复
42
goodluck09876|  楼主 | 2019-7-3 15:02 | 只看该作者

使用特权

评论回复
43
goodluck09876|  楼主 | 2019-7-3 15:02 | 只看该作者
      (1>报警电路设计
    在以往的各种设计中,当机器完成一项工作或是出现某问题时,总会发出各
种提示音,用以提示人们当前机器的运行状态。例如生活中最常见的汽车防盗器,
无论是何种外力对汽车进行攻击,报警器总会发出“滴滴”的响声提示车主。还
有我们经常在楼道里面见到的火灾报警器,当烟雾量达到一定程度时,报警器会
发出尖啸刺耳的声音,提示人们有火灾发生。诸如此类的例子数不胜数,可见报
警电路的重要性。
    无论本控制器双冗余系统工作在何种场合,当控制器出现故障时能够及时通
知工作人员,都可以使工作人员在第一时间对故障进行处理,所以本设计也在电
路中设计了报警电路。
    STM32单片机的电平标准是LVTTL电平,高电平是是3.3 V,驱动_5 V的
蜂鸣器不够,所以采用单片机控制晶体管开关的电路。蜂鸣器选用的是_5 V有源
蜂鸣器,相对于无源蜂鸣器需要加正弦波或者方波驱动,有源蜂鸣器有内置的振
荡电路,直接加电源就能正常发出声音,通常情况下所发出声音的频率是固定的。
所以设计中选用的是NPN型三极管,三极管的基极接单片引脚,集电极接_5 V
电源和蜂鸣器。通过单片机引脚的高低电平控制三极管的开关,以此来控制蜂鸣
器的工作状态。报警电路如图3-9所示。

使用特权

评论回复
44
goodluck09876|  楼主 | 2019-7-3 15:03 | 只看该作者
    为了能够方便消除报警,使系统工作在正常模式,电路中设计了消除报警的
按钮,按钮的一端接地,另一端接控制器的引脚,当此按钮按下时产生一个下降
沿触发外部中断,蜂鸣器停止报警。
      (2)故障指示电路设计
    当电路出现故障时,会启动故障诊断程序,根据诊断结果,蜂鸣器会报警,
同时相应的故障指示灯会点亮。故障指示电路如图3-10所示。

使用特权

评论回复
45
goodluck09876|  楼主 | 2019-7-3 15:03 | 只看该作者
    当故障诊断程序诊断出本地接口模块控制器出现故障时,会点亮BJ-LED灯;
当故障诊断程序诊断出对方接口模块控制器故障的消息后电路DJ-LED灯;当故
障诊断程序诊断出对方控制器出现故障时,点亮DK-LED灯;当故障诊断程序
诊断出本地的总线驱动出现故障时,点亮BDR-LED灯;当接收到对方总线驱动
出现故障的消息后,点亮DDR-LED灯;当故障诊断程序诊断出两控制器的串口
1之间的链接出现问题时点亮UA 1-LED灯;当故障诊断程序诊断出两控制器的
串口2之间的链接出现问题时点亮UA2-LED灯;当故障诊断程序诊断出控制器
与本地接口模块的串口3之间的链接出现问题时点亮UA3-LED;当故障诊断程
序诊断出两接口模块的串口1之间的链接出现问题时点亮JUA 1-LED灯。

使用特权

评论回复
46
goodluck09876|  楼主 | 2019-7-3 15:03 | 只看该作者
    控制器双冗余工作流程的设计,如图4-1所示,主备控制器都执行读取输入
信息、执行用户程序、分析对方的工作状态、拷贝数据和输出信息等操作,可
见冗余功能主要是体现在拷贝冗余数据和分析对方的状态这两方面。另外,本课
题的设计有两个原则,其一,冗余功能的加入不影响用户本身需实现的功能;其
二,不会因为备控制器的误判断而导致误切换使系统运行紊乱。

使用特权

评论回复
47
goodluck09876|  楼主 | 2019-7-3 15:04 | 只看该作者
    对于第一个原则,含义是不会因为冗余功能而导致系统死机,也即虽然程序
执行过程中有两控制器的相互协调,互相通信,但不会由于协调不成功或通信失
败而使程序处于死循环。对于第二条原则,是本设计需要考虑的一个重要问题,
主控制器故障后备控制器接替工作是设计的重点和最终目标,但是如果由于错误
的判断而导致控制器切换这将是很严重的问题,所以设计时在这个问题上做了充
分的思考和工作。后续的论述中会详述针对这一原则所采用的相关措施。

使用特权

评论回复
48
goodluck09876|  楼主 | 2019-7-3 15:04 | 只看该作者
    首先进行系统时钟的初始化,STM32控制器的时钟配置为可运行的最高时
钟72MHz;在此基础上对串口进行初始化,串口1,2,3的波特率都配置为9600bpso
除此之外,还对外部中断触发的引脚进行了初始化,其中取消报警按钮
Key_nobell链接的是PC3引脚,如前所述,该引脚按下时是低电平,所以设置
为下降沿触发中断;还有一个外部中断是在故障诊断及处理的程序中,当一个控
制器启用故障诊断程序时,将该标志位置位,通知另一个控制器开始进行故障诊
断,该外部中断是上升沿触发。
    除此之外,在初始化程序中还设置了控制字和状态字,以此来控制控制器双
冗余系统的运行,或者标志控制器双冗余系统的运行状态。
    状态字的定义及含义如表4-1所示。所有的标志位均是1有效。若主控标志
位MASTER若有效,说明当前控制器是主控制器;若备控制器标志位RESERVE
若有效,说明当前控制器是备控制器;若单机工作标志ALONE有效,说明当前
是单机工作模式,另一个控制器出现故障停止工作;若停止工作标志位STOP有
效,说明两控制器之间的链接可能出现问题,导致控制器双冗余系统无法正常运
行,而当前控制器在之前是以备用控制器的身份运行,所以现在只能停止工作,
等到冗余链接正常时在投入工作;若冗余打开标志REDUN有效,说明当前控制
器双冗余系统的冗余有效,也即所有的冗余链接均正常;若冗余链接1存在标志
REDUN_ LINE1有效,说明串口1之间的链接正常;若冗余链接2存在标志
REDUN_ LINE2有效,说明串口2之间的链接正常;若冗余链接3存在标志
REDUN_ LINE3有效,说明控制器与接口模块之间的串口3通讯正常;若接口模
块存在标志PORT有效,说明接口模块工作正常。
    控制字的定义及含义如表4-2所示,若禁止主备切换控制字NO_ CHANGE
有效,则即使主控制器出现故障也不允许切换;若启用主备切换控制字
USE_ CHANGE有效,则允许主备控制器切换;若激活主备切换控制字
ACTIVE_ CHANGE有效,则在USE_ CHANGE有效的情况下将进行主备控制器
的切换。

使用特权

评论回复
49
goodluck09876|  楼主 | 2019-7-3 15:04 | 只看该作者

使用特权

评论回复
50
goodluck09876|  楼主 | 2019-7-3 15:05 | 只看该作者

使用特权

评论回复
51
goodluck09876|  楼主 | 2019-7-3 15:06 | 只看该作者
    本控制器双冗余系统的控制器间进行状态监测或者进行故障诊断时,需要多
方面通讯,并且每次通讯的目的和方式都有所不同。如果在通讯指令中包含了通
讯的对象和目的,在需要故障诊断时,根据最后一次通讯指令调用故障诊断函数,
可以快速定位故障所在,从而减少故障诊断时间,同时也可以减少控制器切换时
间。另外,指令定义的规范化,也可以使程序的可读性提高。因此,在本设计中
根据通讯对象和通讯目的将通讯指令进行规范化定义。
    在设计之初指令是根据通讯方式、发送者的身份(主备控制器)、指令的作
用以及结尾的字符(OxOd} OxOa),将指令定义为_5个字节,第一个字节表示通
讯方式,即根据是控制器的串口1, 2, 3之间还是接口模块之间的通信来确定指
令的第一个字节,根据发送者的身份,主控制器、备控制器或还没有确定主备,
以此来确定第二个字节,第三个字节就是根据特定情况所制定的指令,最后两个
字节是结束标志符。
    但是由于_5个字节数量较多,考虑到通讯方式和发送者的身份可以用一个字
节来表示,故可将指令缩减到4个字节,使通讯时间减少了0.83ms(波特率是
9600bps),指令头(指令的第一个字节)的0}7各位代表的意义各不相同,指令
头是根据实际的通讯方式及发送指令方的身份来确定的,具体的各位的定义如图
4-2所示。
    指令头的各位是“1”有效,比如当前控制器若是主控制器,且与备控制器
之间通过串口1进行通讯,则bit4和bit0为1,则指令头为0x11,以此类推,得
到所有可能的指令头,由此得到的所有指令头的定义如表4-3所示。表中的通讯
码都是形如0x11 COx31)的格式,0x11是根据指令头的各位的定义得到的指令
头,小括号里面的代码表示实际通讯中采用ASCII码,也就是说实际通讯中发
送的是0x31,所以0x31是指令头0x11的通讯码。

使用特权

评论回复
52
goodluck09876|  楼主 | 2019-7-3 15:07 | 只看该作者
    控制器系统初始化过后,需要保证两控制器能够同步运行,即互相发送心跳
信号来监测对方。在双方还没有确认身份(主控制器或者备控制器)时,双方互
相发送心跳信号,当收到对方发过来的心跳后再继续下面的工作。当主备控制器
确认之后,主备控制器需要进行同步运行的协商,此举是为了消除两控制器间上
电的时间差异,消除此差异保证两控制器是同步运行后,启动定时器,每2_Sms
向对方发送一次心跳信号,并检测对方的心跳信号。若备用控制器在两个周期内
没有收到主控制器发送过来的心跳信号,将向主控制器提交故障诊断申请。若主
控制器两个周期内没有收到备用控制器的心跳信号则开始进行故障诊断。
    上电后需要确定主备控制器,在最初的设计中该过程是通过两控制器进行协
商来确定主备控制器的。但是由于协商的过程需要多次通讯来确认,最终导致协
商失败,可能导致两个控制器都是备用控制器也可能都是主控制器。为了保证每
次系统上电时都可以保证两个控制器分别以主、备用控制器工作,在硬件上选一
个特定的引脚,当该引脚是高电平时该控制器将作为主控制器工作,若为低电平,
则将以备用控制器工作。

使用特权

评论回复
53
goodluck09876|  楼主 | 2019-7-3 15:07 | 只看该作者
    控制器系统初始化过后,需要保证两控制器能够同步运行,即互相发送心跳
信号来监测对方。在双方还没有确认身份(主控制器或者备控制器)时,双方互
相发送心跳信号,当收到对方发过来的心跳后再继续下面的工作。当主备控制器
确认之后,主备控制器需要进行同步运行的协商,此举是为了消除两控制器间上
电的时间差异,消除此差异保证两控制器是同步运行后,启动定时器,每2_Sms
向对方发送一次心跳信号,并检测对方的心跳信号。若备用控制器在两个周期内
没有收到主控制器发送过来的心跳信号,将向主控制器提交故障诊断申请。若主
控制器两个周期内没有收到备用控制器的心跳信号则开始进行故障诊断。
    上电后需要确定主备控制器,在最初的设计中该过程是通过两控制器进行协
商来确定主备控制器的。但是由于协商的过程需要多次通讯来确认,最终导致协
商失败,可能导致两个控制器都是备用控制器也可能都是主控制器。为了保证每
次系统上电时都可以保证两个控制器分别以主、备用控制器工作,在硬件上选一
个特定的引脚,当该引脚是高电平时该控制器将作为主控制器工作,若为低电平,
则将以备用控制器工作。

使用特权

评论回复
54
goodluck09876|  楼主 | 2019-7-3 15:08 | 只看该作者
    数据传输过程中,由于外界因素影响或自身故障而造成数据传输错误,为确
保收到的数据与发送的数据一致,需要添加校验位,常用的校验方式有奇偶校验,
MD_5,循环冗余CRC码等,经过比较各种校验方式的优缺点,最终选择了循环
冗余CRC码。
    根据CRC的定义,有三种计算方法,按位计算、按字节计算和按半字节计
算,第一种适用于程序运行空间非常有限,且对于CRC计算速度的要求不是很
高的微控制器系统;第二种计算方法用于程序运行空间较大,而且对于CRC计
算速度的要求较高的计算机或是微控制器系统;第三种适用于程序运行空间不大,
且CRC计算速度不可以太慢的微控制器系统。根据我们选取的控制器的特点,
选取第二种计算方法,可最大程度缩短CRC计算时间。

使用特权

评论回复
55
goodluck09876|  楼主 | 2019-7-3 15:09 | 只看该作者
    接口模块是一个智能接口模块,有以下三个作用:
      (1)作为控制器与总线之间的桥梁,实现控制器与CAN总线之间的通信;
    C2)是隔离控制器与CAN总线,即当控制器坏掉时,不会影响总线正常
    通讯;
    (3)防止由于备用控制器的误判断而造成的控制器误切换。
    接口模块的程序设计是从两方面设计的,接收到来自控制器数据的工作流程
及接收来自总线数据的工作流程。

使用特权

评论回复
56
goodluck09876|  楼主 | 2019-7-3 15:09 | 只看该作者
    与控制器初始化类似,主要对以下几个方面进行初始化:
    (1)系统时钟配置为STM32最高可运行的时钟72MHz;
    C2)串口3和串口1的波特率均初始化为9600bps;
    (3)配置MAS CPCO), RES  CPC1)、ALONE (PC2 ) , PB 13为上升沿触
发的外部中断;
    (4)  CAN通讯初始化。
    本设计中CAN控制器选用的是STM32控制器内部集成的CAN控制器,该
CAN控制器有三个工作模式,初始化、正常和睡眠模式。CAN控制器的初始化
在硬件处于初始化模式时进行。CAN初始化的具体流程如图4-_5所示。

使用特权

评论回复
57
goodluck09876|  楼主 | 2019-7-3 15:09 | 只看该作者
    与控制器初始化类似,主要对以下几个方面进行初始化:
    (1)系统时钟配置为STM32最高可运行的时钟72MHz;
    C2)串口3和串口1的波特率均初始化为9600bps;
    (3)配置MAS CPCO), RES  CPC1)、ALONE (PC2 ) , PB 13为上升沿触
发的外部中断;
    (4)  CAN通讯初始化。
    本设计中CAN控制器选用的是STM32控制器内部集成的CAN控制器,该
CAN控制器有三个工作模式,初始化、正常和睡眠模式。CAN控制器的初始化
在硬件处于初始化模式时进行。CAN初始化的具体流程如图4-_5所示。

使用特权

评论回复
58
goodluck09876|  楼主 | 2019-7-3 15:09 | 只看该作者

使用特权

评论回复
59
goodluck09876|  楼主 | 2019-7-3 15:11 | 只看该作者
    接收到来自总线的数据后,首先将数据从接收FIFO中取出来,并释放接收
FIFO,主接口发送询问给备用接口,确定其是否正常工作,备用接口在收到主
接口的询问后,需要发送回应信号给主接口。在确认双方无误的情况下,同时向
本地控制器发送数据,即主接口发送给主控制器,备用接口发送给备用控制器。
如此先发送询问信号再发送数据的目的是为了保证两控制器能够同步运行,若
把数据发送给控制器之后再询问,这种情况下,接口模块一好一坏的话,会造成
控制器不能同步运行,且等控制器发现问题后在进行故障诊断更加浪费时间;若
先询问后发送可以连同通讯结果一同发送给控制器,控制器之间进行通讯时出现
问题在查找问题就容易了。备用接口的具体工作流程如图4-6所示,主接口的具
体工作流程如图4-7所示。

使用特权

评论回复
60
goodluck09876|  楼主 | 2019-7-3 15:49 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则