不久前,在本地的一家ITT技術學院( ITT Technical Institute)邀請我去講課,我打算趁此機會讓學生們真正「動手」體驗——看一看、摸一摸像繼電器和真空管這一類的元件。在我的辦公室中現在就有幾個繼電器(不過,哪個工程師沒有呢?),但這些小小的繼電器有點兒太摩登了,例如它可能裝在透明的塑膠包裝中,我擔心没法完全像我想地那樣展示給學生,傳達我真正的想法。

為此我專程跑了一趟五金行,這家Mock Electronics店中常有一些讓我愛不釋手的「老古董」。我問他們有沒有一些老式的繼電器,別說還真有,當他們拿出來下面這個可愛的小東西時,我一點兒也不驚訝。

20191230TA01P1

首先,它有一個線圈纏繞在一根軟鐵芯上,能以兩個觸點‘C1'和‘C2'通電(我一回到辦公室,好友Ivan立刻將這個小東西裝到他的電源上。我們發現它的開關電壓約4V,僅消耗20mA電流。因此,我們猜測它實際上是為5V操作而設計的。)此外,它還有一個軛鐵,可為磁通量提供低磁阻路徑。

然後是電樞,圍繞軛鐵的左側轉動。當線圈上無任何電壓施加時,彈簧拉動電樞,使其緊靠觸點‘A'。這意味著無論施加到「輸入」觸點‘A'的電壓值如何,都會通過電樞傳導至「輸出」觸點‘Y'。

吸住圖示上方的電樞末端,將它向右拉。由於電樞繞著軛鐵轉動,使圖示下方的電樞末端向左移動,從而脫離觸點‘A'並壓到觸點‘B'上。現在,無論「輸入」觸點‘B'上的電壓值如何,都會透過電樞傳導到「輸出」觸點‘Y'。

令人稱奇的是,圖中的Mock繼電器是簡單(功能)與複雜(實現)的完美結合。我們來看如何快速輕鬆地調節繼電器,例如觸點的位置和彈簧的張力。

根據接線方式的不同,它可以充當一個簡單的隔離緩衝器:如果線圈未通電,則輸出‘Y'= 0V (邏輯0),如果線圈通電了,則輸出‘Y'=5V (邏輯1);也可以充當反相器:當線圈未通電時,輸出‘Y'= 5V (邏輯1),如果線圈通電了,則輸出‘Y'= 0V (邏輯0)。由此,我們可以建構AND、OR、NAND和NOR閘; XOR和NXOR閘;或暫存器等。

當然,你應該很瞭解我……現在我夢想著可以得到數千個這樣的小東西,用它們來做一些有趣的東西,例如簡單的4位元處理器,不過這件事我們留待以後再說。

讓我們再回來看看這個問題:僅使用上圖所示的這類繼電器來實現邏輯閘和暫存器。如果你從來沒用過繼電器,我敢打賭,你下意識地就會想到使用繼電器跟使用電晶體開關的情況差不多,但這通常並不是那麼簡單。很快你就會發現,用繼電器來建構邏輯函數是簡單性和複雜性的奇怪又奇妙組合。我們得跳脫既定思維來想。

好了,我就不在這裡喋喋不休地解釋了,一起來做點兒有意思的事兒。首先,你能不能提出電路符號和真值表,簡潔明瞭地表示該繼電器的操作?能否為每個緩衝器畫出電路圖,然後畫出這三個緩衝器串聯的電路圖?接下來,你能否為每個反相器畫出電路圖,然後再畫出這三個反相器串聯的電路圖?

還有,是否也能為2輸入AND、NAND、OR和NOR閘畫出電路圖?包括(a)以隔離方式;(b)驅動一個緩衝閘,以及(c)驅動一個反相器閘。

針對本文發出的挑戰,一起來看看美國工程師讀者的回應:

@ betajet: 你可以透過2:1匯流排開關(例如Fairchild Semi NC7SB3257)得到繼電器的功能。如同上述繼電器一樣,在公共端子Y與NC/NO端子A和B之間產生雙向流動。

我還記得上高中時玩繼電器箱的事。雜訊很多,但也很有趣。在學習VLSI設計時,我也關注於繼電器邏輯,因為傳輸電晶體可以做很多事,例如用任意數量的DPDT開關取代TTL閘來控制燈。

僅使用兩個Mock繼電器就可以得到非常好的XOR。首先是梯形圖:

|---[ A]----[/B]--+--( )----|
|---[/A]----[ B]--+

如果A & !B或!A & B即可導通。接著,考慮到繼電器可以透過NO和NC連接往任一方向導通,我們將一組單刀雙擲(SPDT)觸點用於A和!A (將COM連接到左側端子),並將另一組單刀雙擲觸點用於B和!B (將COM連接到右側的繼電器線圈)。然後,只需將兩個繼電器的NO/NC觸點相互連線,就可以交換NO/NC線來得到XNOR。如此則可取決於連接方式的不同,得到奇數同位檢查或偶校驗功能。

這跟從兩個位置控制電燈所使用的開關方式相同。若是想從兩個以上的位置進行控制,就需要DPDT開關作為中間開關,這需要成對的Mock繼電器。

@ rjs20: 20191230TA01P2 串聯觸點建置“AND”函數。 並聯觸點實現“OR”函數。 當繼電器通電時,它們會閉合常開觸點(並斷開常閉觸點)。

@ Weatherbee: 雖然你對NC7SB3257的觀察很仔細,但不完全正確。實際上,繼電器的描述是這樣的:如果線圈在邏輯電壓下工作,相當於2:1多工器(就像你提到的)加上2:1多工器控制接腳前面的XOR閘。這是因為繼電器線圈對極性不敏感,因此只要每條接腳的輸入相反,磁場就會將Y觸點從A移到B。因此,使用一個繼電器就可以實現XOR閘。

C1=輸入1,C2=輸入2,Y=輸出,A=GND,B=+5V。

這表明使用一個繼電器甚至可以得到不止一個XOR,因為此時A和B是靜態連接的。

與非三態閘邏輯相較(假設所有觸點始終必須具有有效的邏輯電平),繼電器接頭C1、C2、A和B是輸入,而Y是輸出。因此,可以實現很多4輸入、1輸出函數。如果允許A、B和Y被動,那麼可能還會有一些2輸出函數。

下面的C程式碼可以快速為Mock繼電器產生真值表:

20191230TA01P3

真值表如下:

20191230TA01P4

編譯:Jenny Liao

(參考原文:The Magic of Mock Relays,by Max Maxfield)