基於STM32,低速CAN通訊的收發器晶片選擇問題
本電路系統第一版測試電路使用的CAN收發器晶片為philips公司生產的TJA1050,電路參考了戰艦STM32開發版的電路,如下圖。
電路測試沒有問題,但是效能不能滿足工程要求。經測試在STM32F103C8T6晶片上,工作於24MHZ,在程式碼中設定SJW,BS2,BS1,BRP分別為1,8,7,125時可以實現12kbps的速率,可正常傳送與接收資料。在外部條件最優的前提下,12kbps約對應於5KM的理論通訊距離,這顯然距離CAN的5kbps對應的10KM距離還有一定差距。現如今,最低通訊速率為1,8,7,128配置下的波特率,如果再低則無法正常通訊。為達到更遠通訊距離的目的,我們必須想辦法將通訊速率降下來。
開始以為是MCU有問題,後來換了其他型號,發現問題一直存在。查資料之後,發現是CAN收發器限制了通訊速率。
策略:尋策略:找其他替代CAN收發器
據在網上查詢,收發晶片都有速度限制
TJA1050 >60kb/s 此資料為官網datasheet提供資料,貌似有問題,親測12kbps通訊無問題
TJA1040 >40kb/s 此晶片沒實際測試過,具體限制未知
MCP2551 >16kb/s此晶片沒實際測試過,具體限制未知
65HVD230 >60kb/s 此晶片沒實際測試過,具體限制未知
SN65HVD232 相容3.3VI/O,引數未知,未提到速度限制,或者是我沒找到。
TJA1054T <125kb/s 速度滿足,但最多隻能連線32節點,電路複雜
CTM1050 40kbps—1Mbps 可接110節點,但有低速限制,未實測 猜測速度與連線節點之間相互限制,高速收發器可連線110節點,但無法實現低速;低速收發器可實現低速,卻不能連線過多節點。據網上說,PCA82C250等老版晶片無速度限制,但不知連線節點數目和抗干擾性能如何。
後某網友提示,其親測PCA82C250沒有低速限制,且相容3.3VI/O。遂購買PCA82C250和PCA82C251各5片,測試,PCA82C251無法相容3.3VI/O,但是PCA82C250相容!將PCA82C250直接替換TJA1050(就在第一版終端測試電路上),測試可正常收發資料。由於第一版電路下載比較特殊,在替換之後無法下載。故,未測試PCA82C250是否能實現低速CAN收發。
據查詢,許多CAN收發器要求TXD和RXD端為5VI/O,如PCA82C250、PCA82C251等。若要與STM32連線,需接隔離器,或者說是電平轉換器。
最後,經過實測,PCA82C250可以相容3.3VI/O(資料資料提示不相容,實測相容),PCA82C251不相容3.3VI/O
另外,測試發現在低速情況下(10Kbps)以TJA1050、PCA82C250作為收發晶片,TJA1050端可收資料,不能發。MCU同為STM32C8T6,如果收發晶片兩端均為PCA82C250,測試5kbps可相互通訊。未測試更低速率情況是否可以正常通訊,但250的datasheet上沒有寫速率限制,理論上應該是0--1Mbps。
其他經驗:
LOOPBACK正常但NORMAL不正常。這個是由於CAN匯流排在傳送出錯達到一定數量的時候(128?)會自動關閉這個節點來保護整個匯流排不被堵死。 如果只有一個節點的話,一下子就busoff了,當然是看不到波形的。我用的設定程式帖下面,LZ可以參考一下,已經調通了。另外CAN_InitStructure.CAN_ABOM=DISABLE;這句是我當時busoff的主因。 --------------------- 作者:joekuang 來源:CSDN 原文:https://blog.csdn.net/kxc0720/article/details/17054329 版權宣告:本文為博主原創文章,轉載請附上博文連結!