【融资24小时】2022年4月28日投融资事件汇总及详情
06-18
本文提出了一种投票式单片多机冗余设计方案。
该方案与中央系统的多机冗余设计不同。
大规模系统冗余大多采用完整、复杂的机间通信协议来实现系统重构,不太注重系统的实时性。
该方案结构简单,易于实现,实时性强,电子开关切换总线无咔嗒声输出。
单片机低廉的价格和灵活的功能也使得这种设计在类似于仪器仪表的小型系统中应用成为可能。
1 设计原理 设计结构如图1所示。
完成整个冗余设计的电路放置在一个核心控制模块中。
如果这个模块是用FPGA实现的,那么它就是一个芯片。
在图1中,假设MCU 1、2和3为三个冗余MCU。
它们的输入总线并联,接收核心控制模块中输入缓冲器的输出。
输出总线分别连接至模块的输出总线仲裁器。
核心控制模块包括输入缓冲器、输出总线仲裁、电源控制、时钟产生、复位电路和报警控制输出六部分。
1.1 输入缓冲器 为了消除输入端并联输入阻抗的影响,在输入端增加了一级缓冲器,以减少外围电路的影响。
利用输入缓冲,可以实现微控制器和外围电路的输入隔离。
1.2 输出总线仲裁 这种总线仲裁基于所有微控制器在时钟级别的同步,通常采用总线投票方式。
即同一输出总线上的值作为仲裁结构输出,不同的输出总线作为错误被阻塞。
所有输出均不同且具有相同的故障状态,并且没有投票输出。
当然,不能用软件比较来实现投票。
我们以三个微控制器系统之一为例来介绍投票方法。
假设位输入变量为X1、X2、X3,输出为Q,状态指示为:正常N,X1错误E1,真值表如表1所示,位仲裁单元如图2. 显然用数字电路来实现上述微控制器是很困难的。
稍后给出整体的VHDL语言描述。
总线仲裁由多个这样的位单元组成,其数量由单片机输出总线的最大数量n决定。
除了n条输出线外,仲裁器还将每个位单元的状态位进行逻辑组合,输出三种状态指示:正常、错误和故障。
故障信号还用作报警保护控制输出,或用作复位输出。
故障输出有效时,输出无效。
以具有三个单片机的系统为例,如果某一时刻仲裁器的三个总线的输入被视为n位二进制变量X,Y,Z。
如果X,Y,Z相同任何时钟一点一点,系统处于正常工作状态。
如果三个变量中有两个逐位相同而另一个不同,则系统处于错误状态。
如果三者不一致,系统就会失败。
正常和错误状态都可以运行,而故障状态必须受到保护和处理。
FPGA技术的发展使得设计中的比较、决策等数字电路的设计和实现变得非常容易,而且系统简单可靠。
如果采用中等规模的集成电路来实现,将会相当繁琐和复杂。
1.3 单片机时钟级同步的实现 系统中所有单片机都必须实现时钟级同步。
单片机使用相同的型号(可以是不同的制造商)、完全相同的程序和相同的机器时钟。
时钟相同是实现时钟同步的第一步。
时钟产生电路在控制模块中产生并发送至各单片机的时钟输入端。
要求微控制器可以连接到外部时钟输入。
时钟同步并不容易。
以89C51为例。
51系列单片机上电后,振荡器启动并输出。
ALE脉冲是由时钟通过分频电路得到的。
机器周期脉冲和时钟脉冲之间的相位关系一旦形成,就固定下来,不受复位电路的影响。

受影响直至断电。
第二步,实现机器周期脉冲同步。
MCS51的一个机器周期包括6个状态周期,每个状态周期包括2个节拍,对应2个时钟节拍的有效期。
换句话说,一个机器周期包括12个振荡周期。
这些指令按时钟节拍工作,同时按机器周期同步工作。
无论是单字节指令还是双字节指令,指令周期都是机器周期的1、2、4倍。
为了同步微控制器节拍,必须同步机器周期。
考虑到上电时间可能存在差异,采用先上电后添加时钟脉冲的方法。
上电时,确保时钟输入端没有引入干扰脉冲。
所有单片机内部分频电路的起始点在上电后都是一致的。
然后添加时钟脉冲,每个微控制器获得同步的机器周期。
第三步,同步指令周期。
指令的同步需要依靠复位电路来实现。
当时钟脉冲正常输入且分频电路正常工作时,通过在复位端加上至少2个机器周期的复位电平来实现复位操作。
复位信号从核心控制器发送到每个微控制器。
复位后,芯片上主要寄存器的内容统一,所有单片机程序都从起始位置开始执行。
单片机时钟级同步的实现主要依靠硬件三部分:电源控制、时钟产生、复位电路。
1.3.1 电源控制 三个单片机的电源由控制模块控制。
主遥控装置需要保证足够的电流容量,可以采用功率晶体管或场效应晶体管来实现。
继电器不能用于避免接触功率跳变。
1.3.2 时钟产生 采用晶振输出脉冲作为单片机时钟,中间增加了可控缓冲级。
缓冲级可以增加时钟信号的输出负载能力,并且可以由控制模块控制。
1.3.3 复位电路 三个单片机的复位端并联到同一个复位端。
复位信号在信号极性和脉冲宽度方面满足单片机的复位要求,驱动能力满足多种单片机的需要。
复位电路也由控制模块控制,实现单片机同步。
1.4报警与控制 核心控制模块在不同状态下有不同的信号输出,异常状态也是报警信号。
正常状态输出绿灯,错误状态输出黄灯,故障状态输出红灯。
当黄灯输出时,系统可以暂时继续工作,当系统空闲或允许时可以纠正错误。
当红灯输出时,系统立即进入保护状态,输出端处于高阻状态。
如有必要,可以立即纠正错误并恢复系统。
系统恢复需要重置控制模块。
复位脉冲可以是其自身的故障状态输出,也可以是错误脉冲输出和其他信号的组合。
控制模块的复位实际上是重新对齐各个单片机的时序,并重置单片机程序。
这里的设计需要根据具体的使用场合来考虑。
2 控制模块的VHDL语言描述 该控制模块主要采用VHDL语言描述。
库ieee; 使用ieee.std_.all; 使用ieee.std_logic_unsigned.all; 实体redu_control是 端口(a_bus,b_bus,c_bus:in std_logic_vector(7-三个输入) Bus, --本设计为8位) o_bus: out std_logic_vector(7 downto 0);--8位输出总线 error_out,fail_out:out std_logic;--错误,失败输出 reset_in ,clock_in: in std_logic;--复位,时钟输入 power,clock,reset:out std_logic;--电源,时钟,复位输出 ) end; redu_control_is 的 architecture control_pro of redu_control_is signal int: std_logic; begin bus_pro:process(a_bus,b_bus,c_bus) - 总线控制进程 begin if a_bus=b_bus then o+总线'z'); fail_out<='1'; 结束如果 结束进程bus_pro; --总线进程结束 start_pro进程 -启动进程 开始 等到reset_in='1'; --等待外部复位启动 power<='0'; 时钟<='0'; 重置<='0'; --3s后停止电源、时钟、复位输出 power<='1'; --3s后输出电源信号 clock<=6s后的clock_in; --6s后输出时钟信号 9s后 复位<='1'; --9s后输出复位信号 10s后 reset<='0'; --复位信号恢复高电平 结束进程start_pro; --启动流程结束 结束; 本文描述的时钟对齐方法实现起来相对简单,但并不独特。
更复杂的方法可以使用不同的时钟输出到不同的微控制器。
比较反馈后,调整时钟输出的数量以达到调整目标。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现