2002年春天,我的公司著手開發新一代稅控收銀機(fiscal cash register)大約一年的時間;所謂的稅控收銀機需要經過營運所在地的政府主管機關認證,並且符合相關的製造規格以及運作模式規範。通常主管機關會核發給收銀機供應商一張期限三年的銷售許可證,在期間內,供應商不能對硬體或韌體進行任何修改,有任何改變都需要重新認證,這不僅花時間也會產生額外成本,所以我們需要確保我們的設計沒有潛在問題。

在某個長周末的前一天,每個人都很開心地期待放假;不過大約中午的時候,生產部門通知我們有一款收銀機的主機板在測試中出現問題,有超過一半的板子連初步基本測試都無法通過,也就是組裝後的第一道測試程序。

20190718_cashregister_NT01

過去這種測試失敗案例通常是零件安裝的問題,例如在組裝過程中沒有裝好或是損壞;但是這次一切看來都很OK,我們的一個同事檢查了電路板上的零件,都沒有看到問題。於是我們的第二個想法是,測試機台可能壞了;而我們注意到,有的時候同一塊電路板再試一次就會通過測試。在連結示波器並進行多次嘗試後,我們發現問題的根源在於一顆可程式化邏輯晶片(GAL16V8),它不能總是把關鍵訊號傳播至其他晶片。

乍看之下問題似乎很明顯──那顆通用邏輯陣列(GAL)元件在焊接前沒有進行編程,或者是包含了錯誤的內容,因此無法正確運作。但是當我們把一些GAL元件拔下來檢查,發現它們的內容都是正確的,也都通過了測試向量程序,但是在電路板上就無法運作…是零件本身的問題?因為我們在其他不同型號的收銀機上也用同樣的零件,所以我們決定去檢查其他的電路板,但只發現其中有一款出現相同的症頭。

於是我們準備了一個特別版本的故障電路板──配備GAL元件插槽,然後收集不同版本的GAL晶片開始測試;在幾分鐘之後,我們發現只有一個最新版的GAL元件會導致問題──這幾乎是不可能的,一顆被妥善編程的GAL元件,在編程器中以特別準備的測試向量進行測試,有一半的時間卻無法順利運作?

分析了元件運作中的電路板配置,我們注意到該GAL元件只會在扮演位址解碼器的功能時出問題;當GAL元件在電路板上的功能是多工器與解碼器時,問題就不存在。這個發現解釋了為何只有兩種採用了新款GAL元件的電路板有問題,但我們還是要找出電路板有時候無法通過測試的原因所在。

我們將電路板與測試機台連結,在重複測試中觀察GAL元件的電源;事實證明,只有在重新開始測試前將GAL上的電源降到1V以下時(較舊版本的GAL元件是2V),電路板才能通過測試。這意味著收銀機在這樣的條件下無法運作,也就是如果有人很快關閉收銀機又很快打開,這種情況就可能會發生。在一個快速的開關機週期中,GAL元件的電壓不會降到1V之下,收銀機就會掛點。

為了可靠地在生產測試中模擬這個問題,我們準備了一個特別的測試電路,並將我們對GAL行為的觀察告知製造廠;在此同時,我們還得準備好一個補救措施,把GAL元件「修理好」,不會再出現相同的故障。經過多次嘗試之後,我們發現只要(在通電後)改變GAL元件的輸入狀態,就足以讓它恢復正常運作。我們小修改了電路板;該GAL元件有一個閒置的接腳,我們將之與微控制器的重設訊號連結。生產部門現在應該可以繼續進行組裝了。

幾個禮拜之後,我們收到了GAL元件製造商對於該元件出現奇怪行為的可能原因;最新版本的GAL元件內部結構有過最佳化,再加上一些其他更動,改變了其內部電路的重設閾值,這可能是讓我們的電路板發生問題之緣由。我們從這件事學到的教訓是:單一零組件的改善,不一定會讓整個系統設計也跟著改善。

在另一篇文章中,我會再跟讀者們分享我們遇到的另一個收銀機電路板問題,敬請期待!

編譯:Judith Cheng

(參考原文: Cashing in on lessons in electronic design, part 1 ,by Andrzej Winczura;本文作者是來自波蘭的工程師,自稱在青少年時期就中了「電子桿菌」,在波蘭一家電子收銀機製造商ELZAB工作了20年,一開始是硬體與韌體設計師,過去六年則是為嵌入式系統開發應用程式)