CAN控制器局域網學習筆記

2023-08-10 11:17:12 來源:嵌入式BugMaker

CAN控制器局域網(Controller Area NetWork),是由德國Bosch公司制定,是工業以及汽車領域廣泛使用的總線之一。當前許多嵌入式MCU的外設基本都具備有CAN外設。

一般在設計中如果需要用到CAN,并不是MCU具備CAN外設即可,還需要配備CAN收發芯片。因為MCU的TX/RX輸出的CAN信號是TTL電平信號,要發送到總線上的話,需要將其轉化為差分信號,所以外接的收發芯片的作用則是TTL信號和差分信號的相互轉換。


(相關資料圖)

下圖是遵循ISO11898標準的高速/短距離的“閉環總線網絡”。首位兩端各有一個120歐姆的匹配電阻(120歐姆的匹配電阻只是一個經典值,并非固定),總線阻抗測量應為60歐姆,該總線也是工業場景中常用的總線結構。

下圖為遵循ISO11519-2標準的低速,遠距離“開環網絡”。

總線上的匹配電阻的作用,主要有兩個:一.提高抗干擾能力,確保信號快速進入隱形狀態,更快地執行放電動作 二.提高信號質量,吸收信號傳輸到總線兩端后的反射波。

如下圖所示,能明顯看到匹配電阻對信號的質量的實際改善。

上述,CAN有兩個不同的通訊標準,不同的測試標準對于實際差分信號和邏輯電平的要求是不同的,如下圖所示,因為CANH/CANL輸出的是差分信號,當差分信號的電壓差小于下表中的標準值,則認為是隱形電平,代表邏輯電平為1;同理,差分信號壓差的電壓差大于下表中標準值,則認為是顯性電平,代表邏輯電平為0;

所以在實際使用過程中,可通過實際測量MCU出的TX/RX(邏輯電平)和收發芯片出的CAN H/CANL(差分信號),來簡易地判斷板級CAN電路是否工作正常。

CAN的幀類型有數據幀/遙控幀/錯誤幀/過載幀四種主要幀類型,其中應用最廣泛和最復雜的就是數據幀,其中大家比較熟悉的就是數據幀里的標準幀和拓展幀(幀構成區別如下圖所示),對于開發者來說,標準幀和拓展幀最直觀的區別就是標準幀的幀ID范圍:0~0x7ff,拓展幀的幀ID范圍:0~0x1fffffff,數據域的使用是一致的。

標準幀

拓展幀

接下來介紹的也是CAN的配置中最重要的一個內容,就是波特率的配置。CAN的波特率也就是CAN報文的傳輸數量,單位是bps(Bits Per Second)每秒能傳輸的bit數目,目前常見的CAN 2.0理論最大支持到1M bps。接下來基于ST庫函數代碼,來查看CAN的波特率配置過程有哪些變量是需要關注的,且它們的含義是什么。

如上述所言,CAN的波特率即是每秒可傳輸的bit個數,那么可知

BaudRate= 1/BitTime

因此如下圖所示,當分別配置CAN的波特率為125kbps、250kbps以及1Mbps時,可測得單個bit位的傳輸時長分別是8us、4us以及1us,因此這也是可用用作測試波特率是否配置正確的一種方法

如下所示,在實際開發過程中,以ST為例CAN的配置結構體如下所示,其中與波特率相關的變量為CAN_Prescaler/CAN_BS1/CAN_BS2,配置好這幾個數值則可以完成目標波特率的配置。

那上述的這些變量具體可見下圖,每個CAN報文的bit都可以拆成如下段,CAN報文也是通過如下段來決定如何對齊CAN時序、如何實現該bit位電平的采樣。

如圖所示一個bit位進一步拆分成SS段、PTS段、PBS1段(CAN_BS1)、PBS2段(CAN_BS2),每個段的單位為1Tq

Tq = CAN_Prescaler/CAN所在總線頻率 = CAN_Prescaler/Fclk。

綜上可計算公式:

BitTime = (1+BS1+BS2)*Tq = (CAN_Prescaler)(1+BS1+BS2)/Fclk

BaudRate = 1/BitTime = Fclk/ (CAN_Prescaler)(1+BS1+BS2)

舉個例子,若當前CAN所在總線的頻率為45Mhz(即Fclk = 45M),此時若想要配置得到1Mbps的波特率,那么就需要湊出(CAN_Prescaler)(1+BS1+BS2) = 45,如下可知通過選取BS1 = 5、BS2 = 3、CAN_Prescaler = 5的形式來得到5*(1+5+3) = 45,來求的波特率是1Mbps。

由此可知計算波特率的數值取值不是固定的,因為BS1= 6,BS2 = 2也是可得到同樣的波特率,但是這個時候需要引入一個采樣點的概念,即CAN的處理電路什么時候開始判斷當前這個CAN bit是屬于高電平還是低電平,這邊不做更多延伸,采樣點的計算公式如下

Sample = (1+BS1)/(1+BS1 + BS2),所以例子中的采樣率為(1+5)/(1+5+3) = 0.67,則采樣率為67%,一般情況下采樣率最好是配置在75%~85%之間。

不同的芯片廠商的庫函數其含義有些許不同,有的廠商是需要寄存器需要配置的TSEG1、TSEG2,其實就是BS1和BS2,但是例如如果你要配置BS1 = 5,實際賦值需要為TSEG1 = 4。區別就在于需要做加一或者減一的區別,下圖即是公式,由于自己沒有深究過這一塊的區別,有研究的朋友歡迎評論交流。

標簽:

上一篇:三電源切換電路圖和工作原理講解
下一篇:最后一頁