路上刷到一個“如何實現(xiàn)三個開關(guān)控制一盞燈”的帖子,一時起興抡柿,有此文
1個開關(guān)控制一盞燈
先考慮最簡單的情況舔琅,1個開關(guān)控制一盞燈。直接在一個通路中放入一個開關(guān)洲劣,在這里直接控制電路的開閉即可备蚓。抽象一點,開關(guān)作為二值狀態(tài)控制器囱稽,0斷1通
2個開關(guān)控制一盞燈
如下圖所示郊尝,電路中的兩個開關(guān)都可以輸出0/1兩種狀態(tài),當(dāng)它們同時輸出00或者11時战惊,電路連通流昏。
這其實就是兩個開關(guān)output的異或值
3個開關(guān)控制一盞燈
這種情況乍一想感覺比較復(fù)雜
首先的想法是認(rèn)為三個開關(guān)互相對稱,于是考慮一個邏輯上三者對稱的電路拓?fù)浣Y(jié)構(gòu)样傍,想了蠻久沒有想出具體實現(xiàn)的方式
其實再多思考一下横缔,增加到4個開關(guān)、5個開關(guān)衫哥、乃至100個茎刚、n個開關(guān)怎么辦?從電路門外漢的角度看撤逢,要設(shè)計出n維對稱的電路是做不到的
這里其實陷入“三個開關(guān)互相對稱”的復(fù)雜設(shè)定中膛锭,沒有跳出來去把復(fù)雜問題轉(zhuǎn)換成已知簡單問題粮坞。既然我們已經(jīng)知道了2個開關(guān)控制一盞燈是怎么做的,那么一個更可靠的思路應(yīng)該是把問題想辦法轉(zhuǎn)換成已有解決方案的已知問題
要不斷縮減問題規(guī)模初狰,把大問題變成小問題莫杈,把未知問題變成已知問題,類似將問題向下遞歸的思想
把3個開關(guān)中的2個開關(guān)先看作1個邏輯開關(guān)奢入,于是問題就變成了筝闹,這個邏輯開關(guān)需要輸出0/1兩種狀態(tài),非0即1腥光,0表示選擇上路線关顷,1表示選擇下路線,但絕不可以什么都不輸出
嘗試1
如圖所示武福,第一版嘗試议双,phy switch1 和 phy switch2 按最簡單的方式組合起來,存在兩個明顯的問題
- 問題1. 邏輯開關(guān)只有一種output捉片,對外而言平痰,它作為一個整體只有一種輸出,無法輸出0/1兩種狀態(tài)
- 問題2. 邏輯開關(guān)內(nèi)部可能存在斷路的情況伍纫,正如圖中所示宗雇,那么這個邏輯開關(guān)就什么也沒輸出,違背了“絕不可以什么都不輸出”的原則
嘗試2
對于問題1翻斟,顯然這個邏輯開關(guān)需要兩個output線路逾礁。于是得到下面的v1.5版本
現(xiàn)在说铃,這個邏輯開關(guān)已經(jīng)存在兩個output访惜,phy switch1可以控制輸出0還是1,并且任意時刻都有輸出腻扇,問題2也得到解決债热。那么,問題就是如何設(shè)計和擺放 phy switch2
到這里幼苛,問題逐漸清晰起來窒篱。顯然,phy switch2只能放在如下藍(lán)圈位置:
那么舶沿,phy switch2的輸入和 phy switch1就不一樣了---- phy switch2 有兩種input墙杯,而 phy switch1 只有一種input
phy switch2接在phy switch1后面,顯然任意時刻必有一種input±ǖ矗現(xiàn)在的要求是高镐,對于同一input,phy switch2可以切換到不同output畸冲。那簡單了嫉髓,phy switch2就是一個改向器:
當(dāng)phy switch2關(guān)閉時观腊,phy switch1的output1和output2正常直線輸出;當(dāng)phy switch2打開時算行,phy switch1的output1和output2被顛倒后再輸出
于是梧油,這個邏輯開關(guān)就實現(xiàn)了:
- 存在二值output,并且時時刻刻都有output
- 控制任何一個物理開關(guān)州邢,都可以切換output值
于是儡陨,3個開關(guān)控制一盞燈的電路設(shè)計就實現(xiàn)了
n個開關(guān)控制一盞燈
n個開關(guān)控制一盞燈都可以收斂成2個開關(guān)控制一盞燈的情況,加入足夠多的改向開關(guān)就可以了