如何處理不支持網絡過濾的CAN收發器失能問題
在最近的CAN網絡管理開發過程中,我們遇到了一些具有挑戰性的問題。
客戶要求我們的系統支持CAN網絡管理功能,特別是需要使用ID范圍在0X400至0X4FF之間的任意CAN報文來喚醒硬件。為了降低成本,我們選擇了恩智浦的TJA1043T作為CAN收發器。然而,這款收發器并不支持網絡過濾功能,這給我們帶來了不少麻煩。
我們選用的TJA1043T CAN收發器,通過控制其STB(狀態)引腳和EN(使能)引腳,可以切換收發器的工作模式,進而控制INH(抑制)引腳。
我們的目標是通過控制INH引腳來管理8V電源,從而實現對整個硬件電源的控制。
由于TJA1043T不支持網絡過濾,當CAN收發器接收到任意CAN報文后,都會被喚醒并拉高INH引腳開啟8V電源。MCU在上電后會判斷接收到的報文是否為網絡管理報文(ID在0X400至0X4FF之間)。如果不是,MCU會控制收發器的STB和EN引腳再次進入休眠狀態。
然而,在測試過程中我們發現,當低頻率發送非網絡管理報文時,CAN收發器可以正常進入休眠狀態。但當高頻率發送非網絡管理報時,CAN收發器很快就會出現失控現象。
具體表現為:盡管STB和EN引腳的電壓已經被設置為休眠狀態,但INH引腳卻一直保持高電平,無法進入休眠狀態。測量波形如下:
經過深入分析,我們發現導致這個問題的主要原因是:收發器最后保持在Go-to-Sleep模式無法進入休眠模式。
為了緩解這個問題,我們嘗試通過修改CAN收發器INH引腳的阻容電路來加速INH引腳的拉低過程,從而更快地進入休眠模式。
經過實驗驗證,這種改進措施可以在一定程度上優化INH失控的情況,特別是在100ms周期以上發送非網絡管理報文時表現更為明顯。
這種改進措施雖然能夠改善INH失控的現象,但并未從根本上解決問題。收發器在Go-to-Sleep模式下仍然存在無法進入休眠模式的風險。
為了解決這個問題,我們在軟件層面引入了一些異常處理機制。
當檢測到收發器INH引腳失控(即電源一直處于開啟狀態)時,MCU會再次控制收發器的STB和EN引腳由休眠狀態切換到正常工作狀態,然后再重新設置進入休眠狀態。
通過這種方式,我們成功地解決了INH引腳失控的問題。測量波形如下:
雖然TJA1043T CAN收發器在網絡過濾方面存在一些限制,但通過合理的軟件設計和異常處理機制,我們仍然可以實現客戶的網絡管理需求。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。