負載電流的浪一催 系統便莫名跑飛
時間有限,而且電量低也許就是出現這個故障的一個條件呢,所以我沒有打火充電,而是繼續測試了下去。后視鏡展開-后視鏡閉合-后視鏡展開......哎呀,竟然跑飛了!
本文引用地址:http://www.104case.com/article/201903/398125.htm居然跑飛了!我知道會有Bug,可萬萬沒想到會是這么大的Bug!對于嵌入式系統設計人員來說,代碼結構復雜造成的誤解、本身邏輯設計上有錯誤、語句實現上有漏洞這些都不可怕,很容易就能解決掉。但是跑飛,莫名其妙的跑飛就非常讓人頭疼了。
春天是一個生命力獨享風流的季節,天地之間充斥著生的豪情,長風沛雨,艷陽明月,大地和其上的生靈們被喜悅充滿,神采紛揚。身邊佳人在側,微風輕拂,而我卻沒有了欣賞的興致。
我本能地意識到,應該是本就比較低的電池電量被拉低,造成了車身控制器的欠壓復位,一復位,后視鏡驅動自然就斷了,自然就展開不到頭或者折疊不到頭了。可是為什么比后視鏡電機還要耗電的其它負載啟動時,沒有發生這種跑飛復位呢?應該是其它負載驅動電路做得比較好,而后視鏡電機驅動電路沒有處理好。
這就意味著必須改電路,而硬件改版至少需要大半個月的時間,這就跟領導和車廠保證的時間點產生了矛盾,為了拖延時間,要么實話實話(需要分析并修改電路),要么扯謊。而這個問題其實我之前就發現過,只是沒有重視,因為我的疏忽,不僅耽誤將近一個月時間,還惹出那么多口水功夫,一念至此,我的心情更加沉郁了。
5
和領導簡短匯報了情況之后,領導跟我商量半天,意識到確實應該就是硬件設計的問題,于是令我迅速回家,同時安排家里的同事帶著后視鏡負載進行測試,看看能不能復現故障。
在返程的路上,家里的同事一路跟我反饋著測試結果,采用電量較低的鉛酸蓄電池做為電源時,啟動包括后視鏡電機在內的各種負載時都會造成供電電源電壓下拉個兩v左右,但是MCU的5v供電電壓不會受到絲毫影響,所以不會出現我認為的“欠壓復位”。最后,家中這位負責硬件設計的同事李工試圖把鍋重新甩回到我的頭上,讓我再好好看看代碼。
好好看看代碼?你以為代碼像鄰家的大妹子一樣,那么好看嗎?
回到公司,灑家直奔測試臺,李工正嚴陣以待。看我殺過來之后,他調出了示波器測出的已經存儲在電腦上的12v和5v供電電壓的波形以及出現在MCU復位管腳上的復位脈沖波形,悠悠地對我說:“要不咱倆一塊測測?”
灑家眉頭一皺,“這是出現故障時的波形還是正常運行時的波形?”李工嘴角一咧,“自然是出現故障時的波形,要不然呢!”
完了,事情和預想的竟然不一致!憑著想當然的猜測,我從C市直接返回了公司,如果真的是軟件問題,這么大一個烏龍,我怎么向領導交代?!
站在一旁的領導拍了拍我的肩膀,溫和地對我們倆說:“板子確實是在操作后視鏡這個電流并不算太大的負載時復位了,天雷君,你再檢查一下軟件的問題,實在不行找一下MCU廠家的技術支持。李工,你再好好測一下信號地、功率地上的波形。看看是不是把地抬高了。”
6
按照領導的吩咐,我找到了MCU廠家的技術支持,描述了一番問題之后,這位身經百戰的技術支持跟我聊了聊這顆處理器設計上的一些細節信息,最后向我提議,讓我寫一段測試代碼,確認復位的真正原因。該MCU支持好幾個復位源,復位后會有一個寄存器存儲復位源信息,可以通過這個寄存器確認復位的真正原因。
掛掉電話后,我老老實實地寫了段測試代碼,最后確認,確實就是欠壓導致的復位!我把這個信息反饋給領導后,領導和我交流了片刻,然后帶著我去找李工。
找到李工時,他正戴著耳機,面含著笑意刷著手機,領導問起對地波形的測量情況,他支吾半天,老老實實地承認還沒有測試。于是我們一行三人跑到工作臺那里開始測試。
后視鏡折疊-后視鏡展開-后視鏡折疊......終于,故障再現了,在那一瞬間,一個清晰的被抬高了的電壓出現在示波器的界面上。
實錘了,事實證明,確實是后視鏡驅動電路的原因,導致了后視鏡電機啟動時,有時會把地給抬高,從而導致VCC-GND之間的電壓差不滿足MCU的供電要求,觸發了MCU的欠壓復位。
修改倒很簡單,領導在后視鏡供電電源和地之間加了兩個大電容,測試上百次,故障不再復現,搞定!世間事每每如此,找原因時費盡心機,解決時卻毫不費力!
后記
牛掰的工程師不僅可以發現問題,更可以解決問題。我發現了問題,領導解決了問題,事實證明,領導的水平是比我高呢,還是比我高呢:)
評論