1. 程式人生 > >基於STM32,低速CAN通訊的收發器晶片選擇問題

基於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  版權宣告:本文為博主原創文章,轉載請附上博文連結!