在我工作的Nuvation (EDNT編按:一家成立於1997年、總部位於美國矽谷的電子設計服務業者)中,我們喜歡在工程師同事結婚前做一點點不一樣的事。當然,我們還是會為準新郎辦個標準單身派對「慶祝活動」,但我們也把訂婚當作為藉口,讓我們能夠更加荒唐胡鬧,無所不用其極地施展我們令人恐懼的工程絕技。不過,我很高興現在仍然可以這麼說──到目前為止大家都還活得好好的!

這一次,我的同事和我決定來個綁架意外,然後強行將這位令人欽羨的準新郎關在一個特殊設計的機關中,讓他必須發揮所有工程技能才能逃脫出來。架設這項禁錮機關的任務就落到我和我的同事兼好友Eliot Barker身上了。我負責做韌體部份,而由他處理機械元件,然後我們再共同分擔電子部份的工作。就在這個絕妙的想法成形之際,大約只剩下一週左右的時間可進行這項隔離系統設計了,所以這個惡作劇最後就變成了一項有趣的快速原型應用。

為了完成任務,我們採用基於ARM Cortex-M3的微控制器評估平台。這類簡單易用的開發工具套件是我們「日常工作」中經常使用的快速原型平台。這篇文章接著將揭發我們的設計中魔鬼般殘忍的細節,當然也包括在單身派對上準郎如何脫逃的經過。

展開設計

Nuvation的職員多半都是熱血工程師,我們之中有很多人都把空閒時間花在建造戰鬥機器人、電動車、基於RF/MCU控制的火焰噴射器,以及其他游走於酷炫和致命邊緣的有趣設計。對於這次的單身派對惡作劇,我們想要設計出包括一道謎題的機關,讓即將成為新郎的工程師還有能力去思考其解脫之道。

我們的想法是把準新郎禁錮於客製化打造的大木箱中,他必須謹慎小心地處理箱中的內容物,才能逃脫出這只大箱子。除了完全黑暗的空間以外,工程師首先面對的是木箱中的一個「神秘盒子」;神秘盒子雖然讓人一開始完全無法可理解,但如果能仔細觀察與推敲出其中的因果關係,那麼將可解開這些秘團順利脫逃出來。

這款神秘盒子包括以下物件:

  • 一款4位數字的7段顯示面板;
  • 12個繼電器線路以串聯方式連接,一只12V白熾燈泡在繼電器通電時進行照明;
  • 在7段顯示面板和標示「Test」的繼電器之間安裝一個按鈕;
  • 在神秘盒子底部放入一堆用戶輸入裝置,包括標示「Engage」的按鈕、一副鎖扣,以及一個三連桿螺絲接線端子。

我們還留下了一只神秘牛皮紙袋,隨意的放進一些主動與動電子元件;另外,也在大木箱底板上放置一個麵包板。牆上並釘有數據表為其激發一點靈感。

一旦設定好鎖扣後,7段顯示面板先初始化為3987。按下「Engage」鈕後,顯示器上的數字就開始遞減。「Test」鈕可使繼電器隨機發亮。盒子的功能已經用其它方式加以隱藏了,但我們在此等著看會發生什麼事其實並不是個好辦法。果然,三分鐘後,震耳欲聾的聲音從盒中傳出來,七段顯示面板也閃爍著8888的數字。此時,置身箱中的準新郎唯一可做的事應該就只有用鎖匙重設該裝置,使其回到原先所顯示的3987。

20191220_eeLife_ee01P1

非常「工程師」的單身派對設置

從木箱中逃脫的技巧是必須先弄清楚繼電模式並不是隨機發生的,它實際上是在七段顯示面板上呈現一個12位元2進制的值。然後再依該值解開12個串聯的繼電器,此時七段顯示器必須解讀為0000。換句話說,在下一個3分鐘的時間截止前,這個數字將會遞減3987次。經過一番實驗後,我們很快地斷定出這是一項不可能由手動完成的任務。所以,問題已相當明確了。

解決之道在於放置著雜七雜八電子元件的神秘牛皮紙袋。總之,只要連接振盪器到螺絲接線端子,計數器就能以電子方式遞減。一些採用IN端子和跳線的實驗顯示,它能以和Engage按鈕相同功能的方式來遞減計數器。牛皮紙袋中提供了可打造多種不同振盪器的工具,從環形振盪器、鬆弛振盪器到石英振盪器與555計時器等。然而,最簡單且最準確的解決方案是使用一個普通的繼電器──但在袋中可是個十分獨特的元件。

實際建置

那麼要如何何將這一切兜到一起呢?經過幾個晚上通宵達旦的工作後,我們總算讓它相當漂亮地整合在一起了!

這款神秘盒設計的心臟採用了德州儀器(TI)的LM3S811評估套件。這款工具套件十分便宜、體積小,電路板上還為每個可用的I/O接腳設置0.1吋間距的接腳墊,每一個接腳也都明確標示其週邊功能。PCB板上還直接建置一個JTAG編程器/除錯器。

韌體開發採用StellarisWare週邊驅動程式工具庫,以利用微控制器(MCU)上的每個週邊與系統控制功能。對於大部份的生產應用而言,由於不一定能夠負擔經常性的開銷,因此,工具庫的使用是一個快速開始著手建置以及為基本功能進行原型處理的最佳方法。透過測試板,已知的有效週邊驅動程式庫也意味著不必擔心MCU配置或週邊互動時的錯誤,讓我們能夠更專注於手邊的問題。

以下摘錄用於設置時間以及實現所需週邊功能的「mcu_init()」函數。我們只需要幾個簡單的函數,就可以完成任務開始運作了。

20191220_eeLife_ee01P2

驅動程式庫的簡便性說明了Stellaris系列MCU更廣泛的設計理念。在讀過LM3S811數據表後,我們清楚地瞭解到MCU的設計是以簡化易用(如降低NRE)為目標。其中一例是週邊接腳功能透過一個GPIO可實現多工應用的事實。這樣一來,就不再需要嚴密劃分週邊功能,而且可清楚知道MCU系列中的某個元件可實現什麼樣的功能性。

20191220_eeLife_ee01P3

另一個例子是一組預先設定的可用石英晶體振盪器頻率。限制一組固定的頻率數一開始可能感到綁手綁腳,但這些頻率數與常見的晶體振盪器一致,因而大幅簡化了時脈設置。最終的結果如何呢?快速地啟動、執行並完成C程式碼編寫,而不是被令人沮喪的C程式碼所阻。

回過頭來看看我們的的神秘盒子。七段顯示面板以手動佈線連接到一個控制器IC。繼電器和蜂鳴器透過一組8輸入Darlington電晶體陣列來進行切換。這些陣列可用於進行高電流GPIO緩衝,甚至還內建保護二極體來因應電感負載!燈泡部份則由手動佈線直接連到兩個繼電器輸出之一。

20191220_eeLife_ee01P4

這整個機關裝置在單身派對活動開始的當天上午就以手動佈線完成了,先前在堆疊電子元件時也已逐步完成軟體測試。最後,使用兩塊原型板,並以帶線纜直接連接到MCU評估板,以確保一切乾淨俐落。所有的電子元件來源均採用0.100吋間距(通常是DIP),以確保適合所用的原型板。該原型板本身也採用雙面電鍍,以減少佈線作業。禁錮箱的門鎖採用氣體力學原理,而神秘盒的外表則同時採用軟體與電子元件共同開發而成。

等到為七段顯示驅動時序問題進行除錯後,軟體就能整合地相當好了。基本的程式流程非常簡單,程式邏輯採用輪詢迴圈建置,以確保事情更簡單並避免難以發現錯誤。透過輪詢高低層按鈕/輔助輸入以進行邊緣檢測。

實際應用

我們全心全力地投入這款設計,希望它所帶來的挑戰任務不僅能讓我們的同事感到難忘,同時也兼具挑戰性與創造性。在經過了一個晚上的試驗後,我們把這個箱子帶到了酒吧裡,我們那毫無戒心的準新郎同事本來還以為他已經完成所有的考驗了。我們發現他雖然覺得有一點點不安,卻也沒有太過訝異;他的臉上看來堆滿燦爛的笑容,很高興地看著大家,但已經開始晃神了。

我們這位平常超級智慧、聰明且認真的準新郎當時看來似乎已經再也無法有條理地進行思考,更別提能否巧妙地解決經設計過的工程難題了。在那個時刻,顯然地一切看來可能無法像我們所希望地那樣順利……

然而,當我們「引導」他進入他的「新家」後,果然,他真的打開裝有各種元件的牛皮紙袋。我是怎麼知道這個事實的呢?因為從大木箱的氣孔中傳出來的第一聲尖叫並不是「讓我出去!」或「這裡面好黑啊!」,而是「電解電容器嗎?我最討厭電解電容器了!」

EE人專屬的告別單身派對成功!

本文中文版原刊於EDN姊妹網站,EE Times Taiwan網站;編譯:Susan Hong

(參考原文: Rapid prototyping with TI Stellaris: Easy and…fun?,by)