<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基礎知識之CAN總線(xiàn)

基礎知識之CAN總線(xiàn)

作者: 時(shí)間:2024-04-09 來(lái)源:電子森林 收藏

- 英文Controller Area Network(控制器局域網(wǎng))的縮寫(xiě),是一種串行的車(chē)輛標準,旨在允許微控制器和設備在沒(méi)有主機的情況下與彼此的應用程序進(jìn)行通信。它專(zhuān)為比較惡劣的環(huán)境下還能夠保持可靠且靈活的性能而設計,比較適合于工業(yè)和汽車(chē)領(lǐng)域。

本文引用地址:http://dyxdggzs.com/article/202404/457293.htm

最早是由Bosch發(fā)明,后成了標準ISO11898-1,它定義了開(kāi)放系統互聯(lián)模型(OSI)中的數據鏈路和物理層,為高速車(chē)內通信提供了一種底層的網(wǎng)絡(luò )方案。值得一提的是,被設計為減少電纜的連線(xiàn),因此車(chē)內不同的電氣控制單元(ECUs)可以通過(guò)只有一對電纜進(jìn)行通信。

車(chē)載診斷 (OBD) 是車(chē)輛的診斷和報告系統,幫助技術(shù)人員通過(guò)診斷故障代碼 (DTC) 排除問(wèn)題。 當“檢查發(fā)動(dòng)機”燈亮起時(shí),技術(shù)人員通常會(huì )使用手持設備讀取車(chē)輛的發(fā)動(dòng)機代碼。 在最低層,該數據通過(guò)信令協(xié)議傳輸,大多數情況下是使用CAN。

DeviceNet是工業(yè)應用中使用的高級網(wǎng)絡(luò )協(xié)議。 它大大減少了控制系統和I/O設備之間所需的接線(xiàn)。 設備可以通過(guò)四線(xiàn)連接器連接在一起并連接到 PLC 上的網(wǎng)絡(luò )掃描儀,而不是將每個(gè)設備連接到 PLC I/O 模塊上的單獨輸入/輸出。 在最低層,我們發(fā)現CAN在DeviceNet協(xié)議中發(fā)揮著(zhù)其魔力。 圖 2 顯示了PLC掃描通過(guò)DeviceNet進(jìn)行通信的工業(yè)設備網(wǎng)絡(luò )。

CAN總線(xiàn)采用雙絞線(xiàn)提供抗共模干擾能力強的差分信號傳輸,線(xiàn)的兩端分別接有120歐的電阻,每個(gè)模塊都有兩個(gè)腳分別連在這兩根線(xiàn)上,對于每個(gè)模塊的內部,都包含一個(gè)CAN收發(fā)器。 CAN總線(xiàn)一般分為低速和高速,低速CAN傳輸速率<125kbps, 高速CAN傳輸速率<1Mbps,目前還有一種CAN FD可以視為CAN的升級版,傳輸速率<5Mbps。

那么CAN消息實(shí)際上是什么樣子的呢? 最初的ISO標準制定了所謂的標準CAN。 標準CAN對不同的報文使用11位標識符,總共有211個(gè),即2048個(gè)不同的報文ID。 CAN后來(lái)做了修改,標識符擴展為29位,得到229個(gè)標識符。 這稱(chēng)為擴展 CAN。 CAN使用多主總線(xiàn),所有消息都在整個(gè)網(wǎng)絡(luò )上廣播。 標識符提供仲裁的消息優(yōu)先級。

CAN使用具有兩種邏輯狀態(tài)的差分信號,稱(chēng)為隱性和主導。 隱性狀態(tài)表示差分電壓小于最小閾值電壓。 主導狀態(tài)指示差分電壓大于此最小閾值。 有趣的是,主導狀態(tài)是通過(guò)將邏輯“0”驅動(dòng)到總線(xiàn)上來(lái)實(shí)現的,而隱性狀態(tài)是通過(guò)邏輯“1”來(lái)實(shí)現的。 這與大多數系統中使用的傳統高和低相反。 重要的是,在仲裁過(guò)程中,主導狀態(tài)優(yōu)先于隱性狀態(tài)。

標準CAN

標準CAN消息幀由許多位字段組成。 這些如圖3所示。

第一位是幀開(kāi)始 (SOF)。 該主導位代表CAN消息的開(kāi)始。 接下來(lái)是11位標識符,它確定CAN消息的優(yōu)先級。 標識符越小,消息的優(yōu)先級越高。

遠程傳輸請求(RTR)位通常為主導位,但當一個(gè)節點(diǎn)向另一節點(diǎn)請求數據時(shí),該位會(huì )變?yōu)殡[性。 當發(fā)送標準CAN幀而非擴展幀時(shí),標識符擴展(IDE)位占主導地位。 r0 位被保留,當前未使用。 數據長(cháng)度代碼 (DLC) 半字節表示此消息中有多少個(gè)數據字節。

接下來(lái)是數據本身,其字節數與 DLC 位中表示的字節數相同。 循環(huán)冗余校驗 (CRC) 是一個(gè) 16 位校驗和,用于檢測傳輸數據中的錯誤。 如果消息被正確接收,接收節點(diǎn)將用顯性位覆蓋隱性確認位 (ACK)。 ACK 還包含一個(gè)分隔符位以保持同步。 幀結束 (EOF) 表示 CAN 消息的結束,為 7 位寬,用于檢測位填充錯誤。 CAN 消息的最后一部分是幀間空間 (IFS),用作時(shí)間延遲。 該時(shí)間延遲正是 CAN 控制器將接收到的消息移至緩沖區以進(jìn)行進(jìn)一步處理所需的時(shí)間量。

擴展CAN

擴展CAN使用29位標識符以及一些附加位。 擴展消息在11位標識符后面有一個(gè)替代遠程請求 (SRR) 位,它充當占位符以保持與標準CAN相同的結構。 這次標識符擴展(IDE)應該是隱性的,表示后面跟著(zhù)擴展標識符。 RTR 位位于 18 位 ID 之后,后面是第二個(gè)保留位 r1。 消息的其余部分保持不變。

FlexCAN是一種CAN總線(xiàn)的擴展,它是一種嵌入式網(wǎng)絡(luò )架構,由凱特林大學(xué)的胡安·皮門(mén)特爾博士設計的,它的靈感來(lái)自于FlexRay以及通過(guò)CAN網(wǎng)絡(luò )提供更具確定性行為的需求。 其重點(diǎn)是硬件級別的冗余以及協(xié)議級別基于時(shí)間的優(yōu)先通信。

關(guān)于FlexCAN參見(jiàn)文章FlexCAN: A Flexible Architecture for Highly Dependable Embedded Application

CAN消息類(lèi)型

CAN允許四種不同的消息類(lèi)型。 它們是數據幀、遠程幀、過(guò)載幀和錯誤幀。

標準CAN數據幀使用標識符、數據和數據長(cháng)度代碼、循環(huán)冗余校驗和確認位。 RTR和IDE位在數據幀中均占主導地位。 如果接收端的隱性確認位被顯性位覆蓋,則發(fā)送器和接收器都認為這是成功的傳輸。

CAN遠程幀看起來(lái)與數據幀類(lèi)似,只是它不包含任何數據。 發(fā)送時(shí)RTR位處于隱性狀態(tài),這表明它是一個(gè)遠程幀。 遠程幀用于從節點(diǎn)請求數據。

當節點(diǎn)檢測到CAN總線(xiàn)上的消息中存在錯誤時(shí),它會(huì )發(fā)送錯誤幀。 這會(huì )導致所有其他節點(diǎn)發(fā)送錯誤幀。 此后,發(fā)生錯誤的節點(diǎn)重新傳輸該消息。 過(guò)載幀的工作原理類(lèi)似,但當節點(diǎn)接收幀的速度快于處理幀的速度時(shí)使用。 該幀提供了時(shí)間緩沖區,以便節點(diǎn)可以趕上。

CAN 是一種 CSMA/CD 協(xié)議,這意味著(zhù)總線(xiàn)上的每個(gè)節點(diǎn)都可以檢測沖突并在嘗試重新傳輸之前后退一定時(shí)間。 這種沖突檢測是通過(guò)基于消息標識符的優(yōu)先級仲裁來(lái)實(shí)現的。 在討論仲裁之前,讓我們仔細看看 CAN 總線(xiàn)上使用的顯性位和隱性位。

反相邏輯

CAN 總線(xiàn)的一個(gè)有趣的方面是它使用具有兩種狀態(tài)(顯性狀態(tài)和隱性狀態(tài))的反轉邏輯形式。 下面的圖 5 顯示了 CAN 收發(fā)器輸出和輸入的簡(jiǎn)化版本。 “101”比特流來(lái)自/去往 CAN 控制器和/或微控制器。 請注意,當控制器發(fā)送位流時(shí),這些位流會(huì )被補充并放置在 CANH 線(xiàn)上。 CANL 線(xiàn)始終是 CANH 的補充。 為了使仲裁正常工作,CAN 設備必須監控它正在發(fā)送的內容以及當前總線(xiàn)上的內容,即它正在接收的內容。

圖 6 同時(shí)顯示了 CANH 和 CANL 信號,以便您可以看到 CAN 總線(xiàn)的運行情況。 總線(xiàn)信號下方繪制的是與 CAN 信號的顯性和隱性狀態(tài)相對應的差分電壓。 時(shí)間上的前三個(gè)段 t1–t3 被繪制為與圖 5 中所示的三個(gè)位相匹配。我們將從輸出驅動(dòng)器的角度來(lái)看待這一點(diǎn)。 驅動(dòng)器的輸入最初看到“1”,并將其補為零,然后將其放置在 CANH 上。 CANL 看到 CANH 的補碼并走高。 這如圖 6 中的 t1 所示。請注意,CANH 和 CANL 電壓彼此偏移。 在時(shí)間 t1 期間,CANH – CANL 非常接近于零,因為 CANH 和 CANL 的電壓幾乎相同。 驅動(dòng)器發(fā)送邏輯“1”導致 CANH 和 CANL 接近相同電壓的這段時(shí)期,就是我們所說(shuō)的 CAN 隱性狀態(tài)。

發(fā)送的下一位是“0”。 CANH 得到其補碼,CANL 再次得到 CANH 的補碼。 請注意,這次 CANH 和 CANL 電壓并不接近。 因此,差分電壓(VDIFF)較大。 這是 CAN 主導狀態(tài)。 我們說(shuō)邏輯是顛倒的,因為“1”使總線(xiàn)處于低電平,而“0”則使總線(xiàn)處于高電平。 輸入接收器以類(lèi)似的方式工作。

優(yōu)先級仲裁

正如前面提到的,11 位標識符越小,消息的優(yōu)先級就越高。 節點(diǎn)傳輸的每一位都會(huì )受到監控。 這就是節點(diǎn)檢測總線(xiàn)上正在放置更高優(yōu)先級消息的方式。 當節點(diǎn)發(fā)送隱性位但在總線(xiàn)上檢測到顯性位時(shí),它就會(huì )后退。 這稱(chēng)為非破壞性仲裁,因為勝出的消息將繼續傳輸,沒(méi)有任何問(wèn)題。 請注意,隱性邏輯“1”輸給了顯性邏輯“0”。 這是有道理的,因為較低的標識符值代表較高的優(yōu)先級。 為了更好地了解這意味著(zhù)什么,請查看圖 7,其中顯示了 CAN 總線(xiàn)上嘗試控制的三個(gè)節點(diǎn)。 請務(wù)必記住,每次顯示隱性位時(shí),控制器都會(huì )發(fā)送“1”,而顯性位對應于發(fā)送“0”。

節點(diǎn) 1-3 都在發(fā)送比特流。 該位流代表消息標識符及其優(yōu)先級。 首先,所有三個(gè)節點(diǎn)均發(fā)送“1”,該值在 CAN 總線(xiàn)上表示為隱性位。 接下來(lái),每個(gè)節點(diǎn)發(fā)送“0”或顯性位。 總線(xiàn)上放置的第三位是另一個(gè)“1”,或隱性位。 此時(shí),沒(méi)有一個(gè)節點(diǎn)檢測到與總線(xiàn)上的另一個(gè)節點(diǎn)有任何沖突,因此它們繼續傳輸。

對于第四位,節點(diǎn) 1 發(fā)送“0”或顯性位。 節點(diǎn) 2 傳輸隱性位,但檢測總線(xiàn)上的顯性位。 它立即后退,知道當前正在發(fā)送更高優(yōu)先級的消息。 節點(diǎn) 3 繼續發(fā)送,因為它讀回了與發(fā)送的相同的顯性位。 當第五位被放置在總線(xiàn)上時(shí),節點(diǎn) 3 就會(huì )識別出它的優(yōu)先級較低并停止傳輸。 節點(diǎn) 2 和節點(diǎn) 3 都會(huì )等待一定時(shí)間,然后再次嘗試。 如圖 7 的右半部分所示,節點(diǎn) 3 贏(yíng)得了仲裁。 正如您所看到的,與較低消息標識符相對應的邏輯“0”顯性位允許進(jìn)行仲裁。

CAN控制器

CAN控制器用于將欲收發(fā)的消息(報文),轉換為符合CAN規范的CAN幀,通過(guò)CAN收發(fā)器,在CAN-bus上交換信息。 CAN控制器芯片分為兩類(lèi):

  • 獨立的控制器芯片,如SJA1000

  • CAN控制器集成在微控制器中,如NXP半導體公司的Cortex-M0內核LPC11Cxx系列微控制器、LPC2000系列32位ARM微控制器。

CAN控制器工作原理圖

  1. 接口管理邏輯: 用于連接外部主控制器,解釋來(lái)自主控制器的命令,控制CAN控制器寄存器的尋址,并向主控制器提供中斷信息和狀態(tài)信息。

  2. CAN核心模塊:收到一個(gè)報文時(shí),CAN核心模塊根據CAN規范將串行位流轉換成用于接收的并行數據,發(fā)送一個(gè)報文時(shí)則相反。

  3. 發(fā)送緩沖器:用于存儲一個(gè)完整的報文,當CAN控制器發(fā)送初始化時(shí),接口管理邏輯會(huì )使CAN核心模塊從發(fā)送緩沖器讀CAN報文。

  4. 驗收濾波器:可以根據用戶(hù)的編程設置,過(guò)濾掉無(wú)須接收的報文。

  5. 接收FIFO:是驗收濾波器和主控制器之間的接口,用于存儲從CAN 總線(xiàn)上接收的所有報文。

  6. 工作模式:CAN控制器可以有兩種工作模式(BasicCAN和PeliCAN)。BasicCAN僅支持標準模式,PeliCAN支持CAN2.0B的標準模式和擴展模式

CAN收發(fā)器

CAN收發(fā)器是CAN控制器和物理總線(xiàn)之間的接口,將CAN控制器的邏輯電平轉換為CAN總線(xiàn)的差分電平,在兩條有差分電壓的總線(xiàn)電纜上傳輸數據。

CAN收發(fā)器的類(lèi)型 汽車(chē)車(chē)載網(wǎng)絡(luò )CAN收發(fā)器也分為獨立型與組合型兩大類(lèi)。由于前者應用靈活,可以與多種CAN控制器進(jìn)行連接使用,故應用最廣泛。后者通常與CAN控制器組合在一起,形成一個(gè)具有CAN收發(fā)功能的CAN控制器組件。

CAN是一種強大的串行通信總線(xiàn),主要用于汽車(chē)和工業(yè)環(huán)境。 它使用差分信號,具有更強的抗噪聲能力,并采用優(yōu)先仲裁方案來(lái)實(shí)現無(wú)損消息傳輸。 CAN非常適合處于危險環(huán)境或存在大量電磁干擾的區域的嵌入式應用。



關(guān)鍵詞: CAN 總線(xiàn)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>