說一個我獲得的教訓,老板的一個朋友委托我們給他做一個小型控制器,因為要求的工期比較急,沒時間做線路板了,所以我們根據他說的要求選了一個我們以前的成型產品做基礎,在這個基礎上改。
同事拿著我做的控制器去操作箱上安裝配線,后來調試的時候同事告訴我說裝置死機了...
我說不能啊,我已經配置了看門狗,正常程序出錯是可以復位的。把同事拿回來的裝置通電測試果然沒有反應了,重新燒寫片子還能正常工作。
是不是靜電搞的鬼?
因為我們的裝置原來是沒有按鍵的,這次的按鍵是在操作箱上接3個按鈕到裝置的CPU管腳上,沒有保護措施,現在冬天空氣干燥,很容易產生靜電。
馬上改!
給3個按鈕都加上了光耦隔離,改好了再裝到控制箱上測試,沒一會的功夫同事又回來了,說又死機了。啊!?這是怎么回事呢?
我有點傻了,難道是我的程序有問題?査吧,把程序從頭到尾看了幾個來回也沒看出毛病。
把死機的片子擦了,重新燒程序還是能正常工作,這就怪了!難道是操作箱有問題?怎么在我這好好的東西上到操作箱上就死機呢?
同事干脆把操作箱從車間運到我的辦公室來,讓我自己做實驗。果然剛燒好的片子上到操作箱上一會功夫就死機了,經過反復的實驗發現是和數字表通訊之后死的,更進一步的確認是跟數字表通訊以后修改了控制器的EEPROM以后死的。去掉了控制器的寫EEPROM程序就不再死機了,難道是GCC的EEPROM庫有問題?先不管,看能正常運行了再說,反正這個功能不重要。重新燒寫芯片,裝到控制箱上,手動操作沒問題!裝置開始自動運行,呀!怎么復位了?是沒看清嗎?
再等一會....又復位了!一波未平一波又起,怎么回事?
這么個小東西程序不超過2K怎么這么多問題?我不至于這么爛吧?這么個小程序都寫不好?還得試找出問題!反復試了幾十次發現規律了,只要是自動狀態的1號狀態再和數字表一通訊就復位,是不是485通訊沒加隔離的問題?動手加隔離(這里要說一下我們的軟硬件是兩個人負責的,我做軟件,另一個同事專做硬件),我的同事剛才加了按鍵的隔離這回又加485的隔離,為了增加隔離電源又在原裝置的基礎上改了電源。改完了裝上測試,還復位!天啊!我同事都不用好眼色看我了!
媽呀,我可怎么辦啊?
從程序上怎么也看不出問題,可惡的M8不支持仿真又看不到C語言程序具體是怎么執行的。沒辦法只好用匯編寫程序吧,這個我熟而且每一步都可控制,肯定不會再出錯了,一個白天加一個晚上把程序就寫出來了,第二天調試通過,上到操作箱上,天啊!又復位了!
不對!一定是硬件有問題,同事說沒關系我給你換CPU板,同事又改了一塊CPU板給我送來,裝上一試,你們猜怎么樣?還是不行!別扔白菜,我真完了 /_\ ,嗚嗚...我心里直哭。
突然我轉念一想,不對就不能還是硬件有問題?
過了大約半個小時,啊!又復位了!
這回我沒緊張,肯定是硬件問題,因為我的程序C語言版和匯編版都試過。拿來示波器看看是不是復位腳有干擾啊?沒有。看看電源呢?啊?CPU的5V電源在復位的時候是個大低谷,持續大約50毫秒...
元兇終于找到了!
是這個電源質量不好,當有繼電器動作,并且來通訊,電源就挺不住了。同事也沒話說了,改造電源吧,給電源變壓器增加容量后,再也不復位了。終于圓滿結束了。
圍著電源的一個小問題,我轉了一大圈,把這個教訓分享出來提醒大家注意。