在现实中制作Minecraft中继器

前言:
很早以前我曾经想过在现实中做个Minecraft的中继器,不过在前段时间在某些人的激发下,重新启动这个计划,投入的大量时间和精力去制作以致整个暑假都没有时间去玩MC。在此对各位粉丝道个歉。
当一切准备就绪,插上电的一刻,我还是感到失望,电路并没有想象中正常运行,而是出现各种各样的bug。经过各种调试,我还是放弃了。
(´・_・`)
因为往后要开学,我没时间去弄这玩意,视频也可能没得发了。不过心仍有一些不甘,还是决定发一个专栏,把问题留下,以待日后解决。
感谢名单:
感谢以下各位在我制作中继器时提供帮助。
飞机: https://space.bilibili.com/34465848/
影叔: https://space.bilibili.com/13658976/
瓜君: https://space.bilibili.com/7486276/

成品图:



中继器,尺寸4500x4500 mil(约11.43x11.43 cm)
20HZ时钟,尺寸 2900x2700 mil (约7.366x6.858 cm)
开关电源,尺寸 7500x3900 mil (约19.05x9.906 cm)
PS:1mil=0.001英寸;1英寸=25.4毫米

提示:
以下内容将在Minecraft和现实电路之间穿插,阅读起来可能稍显困难。为了方便阅读,部分文字或有关Minecraft的内容会使用颜色标注。
分析&思路:
要制作Minecraft中继器,首先要了解Minecraft中继器的特性。
在Minecraft中,中继器具有以下功能:
1、中继:把红石信号(强度1--15)提升到15并且向外输出。
2、延迟:中继器接收红石信号后,会延迟一段时间再向外输出,延迟时间由中继器上的档位决定,共四个档位(1 redstonetick--4 redstonetick)
3、单向传导:其作用类似于二极管,信号只能单向传递
4、锁存:当中继器侧边受到别的中继器(比较器)强充能时,会锁住目前的输出状态,不会改变。
更多详细的内容可翻阅wiki查询
在现实中制作中继器要解决哪些问题呢?
1、现实电路不同于Minecraft,现实电路至少要两条导线形成回路。任何电路需要有电源供电才能工作,VCC(+)和GND(-)两线必不可少。
2、Minecraft中的信号强度在现实中可以使用电压和电流来体现。Minecraft中,红石信号每走一格(假设一格对应现实1m),信号强度降低1。现实中若要完全实现,需要电每通过1m导线,电压(或者电流)降低1V(A)。这个只能精确设计电路达成。(其实也可以把红石线当做一个元件专门弄个电路)
3、单向传导在现实中很容易实现,用二极管就是了。(别忘了二极管有正向导通压降)
4、延迟和锁存可以使用复杂的电路来实现。

这里观察Minecraft中中继器对不同强度信号的响应情况,当中继器输入1--15强度信号时,中继器亮;只有中继器输入0强度信号时,中继器不亮。这时,这么多不同强度的信号可以简化成ON和OFF的区别。对应现实就是高电平和低电平的区别。这时,一切对电压(电流)的精确控制显得没有意义甚至是浪费精力和时间。现实中,中继器只要分辨高电平和低电平即可。
(这也是我没有弄比较器的原因)
值得注意的是,Minecraft是按照gt为单位来更新的,中继器在每gt更新一次,而游戏正常情况下1s=20gt(电脑卡例外)。这不禁让我想到可以使用20HZ的时钟来更新中继器。
于是,一个大体的电路出来了

这里不同于游戏,单独一个中继器并不能工作,单独的中继器只是实现游戏中的基本功能,但是需要外部提供VCC、GND以及20HZ的时钟。
按照图中方式,单独出来的电源和20HZ时钟发生器,可以轻易的为大量的中继器提供电能、参考地和同步信号。
以下就是我的个人设计了。

实际电路分析之,20HZ时钟发生器

可以说20HZ时钟发生器相对于中继器和电源是最简单的电路了,制作难度也是最低的。
整个20HZ时钟发生器可以分成4个部分:振荡器、降频电路、图腾柱、供电电源。

这里我直接使用NE555来产生时钟信号,该电路震荡周期以及频率为:

因为20HZ的时钟频率是在是太低,电容选取上需要选用大容量电容器,比如铝电解电容,但是铝电解电容的误差是很大的,并不适合用来做时钟电容。这里我选用100nF的CBB电容,当然频率自然会上去,这里我使用了一个10K可调电阻来调节振荡频率,将其设置成320HZ。

这里我使用了4个D触发器,组成4个二分频电路,把频率降低至20HZ。

因为D触发器输出的电流非常有限,为了能够带动大量的中继器,这里我自己瞎弄了一个图腾柱,用于大功率输出信号。

由于D触发器工作需要严格的5V电压,低于4.75V和高于5.25V都不可以(TTL系列芯片),这里使用78L05三端稳压器来产生稳定且精确的5V电压(实测4.98V)。输入端二极管防呆不防傻,防止正负极接错导致电容爆炸。输出端的5.1V稳压二极管作保险用,一旦稳压器出现故障输出高电压,稳压二极管直接导通短路,把电压钳在5.1V,保护芯片防止被烧毁。

实际电路分析之,中继器

整个中继器主要分成7个部分:电源,输入电路,延迟电路,调档电路,择档电路,输出电路,锁存电路。

电源部分功能同上,也是用于产生稳定5V电压。(稳压二极管还是有的,这里没截到)

Minecraft中一旦中继器接收到红石信号,就会加入到NTE列表中,无论那个信号是常规高电平,还是0t脉冲。现实中我使用RS锁存以锁住输入信号,等效于Minecraft中中继器计入NTE列表中。
输入部分我原计划是使用RS锁存的,但是为了偷懒,利用了下NE555内部的RS锁存电路,当有输入时,通过NPN三极管把2脚拉到低电平置位,3脚输出高电平进入后方电路。

中继器延迟电路中我采用D触发器。因为Minecraft中有4个档位,最大档位延迟4 redstonetick,等于8gt,理应使用8个D触发器串联。20HZ时钟激活所有D触发的CLK。图中我使用了SN74175芯片,内置4个D触发,两个刚好满足要求。从中取出四条线引入后方电路。

这里为中继器的调档电路,玩家每按一次按钮,则改变档位一次。等于Minecraft中玩家按一次右键中继器改一次档位。这里使用SN7474中的两个D触发器组成两个二分频电路,玩家每按4次归位,每按一次,其AB两端依次输出00、11、01、10,依次循环。不同的二进制信号对应一个档位,分别输入到后方电路中。
PS:最好在电阻(R18)两端接一个电容,容量可在100nF左右,主要是消除手按开关时的抖动导致信号反复跳变。

这个为择档电路,图中使用与门结构,芯片为SN7408,第一级由4个与门组成,用于筛选调档电路发来的00、11、01、10信号,一个与门只对应一种信号,最终结果只有一个与门导通,同时输出给LED指示,指示中继器目前的设置档位。第二级也是由4个与门组成,用于筛选延迟电路发来的信号,同样也只会有一个与门导通,允许对应档位的信号通过。

同样,芯片输出的功率很小,一旦带载过重,会被严重拉低输出电压,最终电压甚至到不了高电平(<3.5V)。这里我使用图中电路,4个NPN三极管组成的结构具有或门的作用,一旦有一个与门输出,NPN三极管集电极都会拉到低电平,导致PNP三极管导通。PNP三极管发射极直接接入VCC而不接入+5,中继器直接输出VCC电压(略低一点),带载能力大大提高。同时,输出电压也会经过一个电阻后传输给一盏红色的LED灯,指示中继器目前正在输出。(图中没有截到)

Minecraft中中继器被锁存就直接锁住了输出状态,而且锁存优先级是最高的。这里我干脆就是把20HZ时钟断掉,这时整个中继器没有了时钟更新,其输出也无法改变。当锁存输入后,三极管VT9导通,三极管VT7基级被拉到低电平,这时时钟信号无法通过VT7影响延迟电路。

Minecraft中继器当NTE更新后,若后方没有信号输入,中继器再次进入NTE,等待下一次更新停止输出。同样在电路中,当中继器输出时,PNP三极管VT5集电极输出高电平,该电信号输给NE555的6脚。若2脚处于高电平(外部没有输入),NE555复位,3脚输出低电平,经过一定延迟后停止输出。若外部仍然有输入(Minecraft中就是持续输入),2脚仍然在低电平,即使6脚处于高电平,3脚依然输出高电平,直到2脚恢复高电平(停止输入),3脚才会停止输出。
关于输入端接个5.1K电阻和加个二极管的作用:
由于很多信号输出时我设计是以VCC输出,VCC电压高于5V,而且功率较大。三极管只需要很小的基级电流即可启动,5.1K电阻用于限流防止电流过大烧毁三极管。当输入电压有5V时,基极电流约1mA,三极管的β值很大,集电极允许通过电流能有50mA以上,足以把集电极拉到低电平。三极管的be结导通压降有0.7V。我粗暴的再加个二极管,利用二极管也要0.7V的导通压降,制造一个1.4V的阈值。只有输入电压高于1.4V才能启动三极管,防止过低的电压就启动。

实际电路分析之,开关电源

这部分已经和Minecraft没什么关系了,不过包含在计划中,也就顺便提提。
中继器最终需要电源供电,这个开关电源负责输出VCC电压。电能取自家中易得的220V AC 50HZ电。由于我没有玩强电的经验,为了安全起见。我使用工频变压器把220V AC 50HZ变成36V AC 50HZ(顺带隔离作用)。经过空气开关后进入该电路,整流成50V DC电,再经过DC to DC降压至低压直流供中继器使用。
因为VCC→5V途中有个二极管和三端稳压器。考虑到二极管有0.7V导通压降和三端稳压器也需要一定压降才能正常工作,VCC电压应在7V左右或者更高。但是VCC电压不宜过高(最好不要过9V),过高电压会在三端稳压器上产生巨大耗散,散热跟不上会导致三端稳压器温度急剧升高以致异常(像我这个78l05 TO-92封装的温度都能飙到80℃以上)。同样VCC电压绝对不能高于三端稳压器承受电压的最大值,以免发生击穿。


实际制作布线
实际操作时可以使用万能的面包板或者是洞洞板。但是面对过于复杂的电路,我还是选用PCB电路板。我看中的是PCB电路板能有Top Layer 和Bottom Layer双层布线(层数其实还可以更多),这样布线难度能下降许多。而且工厂机械生产,质量保证,比自己在洞洞板上焊强多了。
PS:回想起自己焊接芯片时那些密密麻麻的走线和经常熔错短路要毁锡重焊的惨痛经历。
下图就是我的PCB工程图了,为了方便给你们看我没有铺铜,实际最后我还是铺了铜的。
图中红色代表Top Layer层(顶层布线层),蓝色代表Bottom Layer层(底层布线层),黄色代表Top Overlay层(顶层丝印层)




↑这个是铺了铜后的中继器
生产
最后就是把PCB文件转化成Gerber文件,检查无误后把Gerber文件打包送到PCB工厂进行打样。工厂将按照Gerber文件生产电路板。最后你将至少得到5块绿油油的PCB电路板。(你也可以选择别的颜色)(为什么5块?因为工厂最少都要生产5个)





焊接、上电
当得到板子后,就可以根据电路图把元件焊上去了,如果已经有十足的把握,那么通电后有很大概率是正常工作。当然还有各种各样的可能,比如爆炸、冒烟、熔断、跳闸、无响应或者有各种各样的bug。总之,祝好运,安全第一。

最终失败分析、bug报告
这也许是我最不想要的结果,整整48天和700多块钱的投入最终以这个结果收场,不过有很多地方应该要总结一下的。
20HZ时钟故障:
当时出现了降频电路不能正常降频的现象,320HZ→160HZ→80HZ→40HZ→0HZ???最终检查发现,在PCB画线时,我眼瞎漏掉了一条线没有连接。
(ノ`⊿´)ノ
过后我自己外部搭线让其正常工作
中继器故障:
当中继器输出后,PNP三极管集电极输出VCC电压给NE555的6脚。按照技术手册中,当6脚电压>2/3VCC而且2脚电压>2/3VCC的时候,3脚电压输出低电平。实际情况并未如此。实验时VCC电压为4.98V,2脚电压为4.96V,6脚电压为8.42V,一段时间后,VCC电压急剧降低到1.12V,电流暴增到0.4A,NE555变身铁板烧,三端稳压器也急剧升温(这里的VCC指NE555的8脚电压,不是上文提及的VCC电压,两者不同)。猜测NE555属于CMOS芯片,整个芯片发生短路现象,必须断电重启。目前我仍未单独实验我的NE555的6脚电压高于8脚电压时是否会发生故障。如果由此原因引起,更改输入6脚的电压即可。但是PCB电路板只能全部报废!
开关电源故障:
开关电源使用buck拓扑结构,开关管使用增强型N沟道MOS管,置于高端位置。输出电压最大升至7V(设计值30V),且没有带载能力(一盏LED带的起,电动机带不起)。可以推出MOS管没有正常开启(或者说无法正常开启)。检测到PWM控制器SG3525有输出PWM信号,但因没有示波器无法查知其波形以及占空比。MOS驱动器使用IR2110,采用自举升压结构。目前无法检测其能否正常工作。
(´・_・`)
结语
我觉得飞机一些忠告可以采纳下

大体上能交代的都交代完了,如果以后有时间(和资金)的时候,我可能会考虑重启这个计划,如果有更多想法或建议的欢迎在评论区留言。
(°∀°)ノ
HD-nuke8800
2019/8/25