CAN總線調試---節點掉線問題


CAN總線調試心得

 

2013-9-13 調試成功

 

       這個問題糾結了好幾天,哎,,在群里問,大家各種建議都有,感謝群里的前輩提供的建議,在這里願上帝祝福他們。

       先描述一下我搭建的總線。

目的:實現一主多從通信,主要是火情系統傳感器主動向主控設備傳送數據。

解決:485總線一主多從效率不高。

方案:三個節點,A、B、C;A只接受數據(主控板角色),B只負責發送(剛開始沒有接收),C只負責發送(剛開始沒有接收)。總線上還掛着一個CAN分析儀。

 

       首先,運行節點A和節點B,接入CAN分析儀,自動識別波特率,識別成功以后,選擇一個波特率應用,然后CAN分析儀開始抓包。

       接入節點C,然后就出現問題了,節點A沒有問題,能正常接收數據,通過485總線顯示在PC機的串口調試終端。但是節點B死機(我認為)了。我在把節點C移除總線,節點B也不能恢復了,這時總線上只有節點A、節點B、CAN分析儀正常運行,CAN分析儀發送數據的時候,節點B也死掉了,死機的節點只有通過硬件上的復位才能正常重啟。

 

       自己搗鼓了好久,沒有解決問題,在群里提問,群友給出了幾種解決方案:

1、  可能是位填充錯誤(這個方法我沒有試驗);

2、  可能是CAN控制器的TX端在每次初始化時會拉低總線,需要在TX端加上一個上了電阻。

我試了第2中方法,還是不管用,繼續在群里提問,有提示使用示波器觀察總線,看看新節點接入總線時,總線上的變化,我也沒有這樣做(因為就在這個時候,我把問題解決了)。

 

   原因:節點B和節點C沒有實現接收,或者可以說沒有對接收郵箱里的數據進行處理,導致接收溢出,然后節點自動離線,我是這么認為的。

      

       解決:最后在CAN軟中接收函數中實現處理接收郵箱的數據
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);

 

這樣每個節點添加這個函數以后,總線就不會出現這個問題了,現在總線上跑了6個節點。

 

感謝神


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM