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