CAN總線接□模塊工作原理
1.CAN模塊簡(jiǎn)介
控制器局域網(wǎng)(CAN)模塊是用于與其他外圍設(shè)備或單片機(jī)進(jìn)行通信的模塊,這種接口協(xié)議能在較大的噪聲 環(huán)境中進(jìn)行通信,具有良好的擾干擾性能。
CAN模塊是一個(gè)通信控制器,執(zhí)行的是Bosch公司的CAN2.0A/B協(xié)議。它能支持CAN1.2、CAN 2.0A、CAN 2.OB 協(xié)議的舊版本和CAN2.OB現(xiàn)行版本,此控制器模塊包含完整的CAN系統(tǒng)。
CAN模塊由協(xié)議驅(qū)動(dòng)和信息緩沖及控制組成,CAN協(xié)議驅(qū)動(dòng)CAN總線上接收和發(fā)送信息的所有功能。信息裝載 到某個(gè)相應(yīng)的數(shù)據(jù)寄存器后再發(fā)送,通過讀相應(yīng)的寄存器可檢查狀態(tài)與錯(cuò)誤信息。在CAN總線上檢測(cè)到的任 何信息都要進(jìn)行錯(cuò)誤檢查,然后與過濾器進(jìn)行比較,判斷是否被接收和存儲(chǔ)到兩個(gè)接收寄存器之一。
2.CAN模塊支持的幀類型
CAN模塊支持以下幀類型:標(biāo)準(zhǔn)數(shù)據(jù)幀、擴(kuò)展數(shù)據(jù)幀、遠(yuǎn)程幀、出錯(cuò)幀、過載幀和空閑幀。
(1)數(shù)據(jù)幀。
用于各節(jié)點(diǎn)之間傳送數(shù)據(jù)消息,由7個(gè)不同的位場(chǎng)組成:幀起始、仲裁場(chǎng)、控制場(chǎng)、數(shù)據(jù)場(chǎng)、CRC場(chǎng)、應(yīng)答 場(chǎng)和幀結(jié)束。數(shù)據(jù)幀結(jié)構(gòu)如圖1所示。
圖1 數(shù)據(jù)幀組成
(2)遠(yuǎn)程幀。
當(dāng)CAN網(wǎng)絡(luò)上一個(gè)節(jié)點(diǎn)需要其他節(jié)點(diǎn)所擁有的數(shù)據(jù)信息時(shí),可以通過發(fā)送遠(yuǎn)程幀來請(qǐng)求另一節(jié)點(diǎn)發(fā)送。該 遠(yuǎn)程幀的標(biāo)識(shí)符標(biāo)識(shí)了所需數(shù)據(jù)的類型,因此,被送回的數(shù)據(jù)信息的標(biāo)識(shí)符和遠(yuǎn)程幀的標(biāo)識(shí)符完全一致。數(shù) 據(jù)源節(jié)點(diǎn)在接收到遠(yuǎn)程幀后,根據(jù)遠(yuǎn)程幀的標(biāo)識(shí)符判斷所需數(shù)據(jù)信`患類型,并在總線空閑時(shí)將相應(yīng)數(shù)據(jù)送 出。遠(yuǎn)程幀由6個(gè)位場(chǎng)組成:幀起始、仲裁場(chǎng)、控制場(chǎng)、CRC場(chǎng)、應(yīng)答場(chǎng)和幀結(jié)束。除了沒有數(shù)據(jù)場(chǎng)和RTR為 隱性外,遠(yuǎn)程幀結(jié)構(gòu)和數(shù)據(jù)幀完全相同,遠(yuǎn)程幀結(jié)構(gòu)如圖2所示。
圖2 遠(yuǎn)程幀結(jié)構(gòu)
(3)錯(cuò)誤幀。
為進(jìn)行錯(cuò)誤界定,每個(gè)CAN控制器均設(shè)有兩個(gè)錯(cuò)誤計(jì)數(shù)器:發(fā)送錯(cuò)誤計(jì)數(shù)器(TEC)和接收錯(cuò)誤計(jì)數(shù)器 (REC)。CAN總線上的所有節(jié)點(diǎn)按其錯(cuò)誤計(jì)數(shù)器數(shù)值情況可分為3個(gè)狀態(tài):錯(cuò)誤活動(dòng)狀態(tài)、錯(cuò)誤認(rèn)可狀態(tài)和 總線關(guān)閉狀態(tài)。節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換如圖3所示。
圖3 節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換
上電復(fù)位后,兩個(gè)錯(cuò)誤計(jì)數(shù)器的數(shù)值都為0,節(jié)點(diǎn)處于錯(cuò)誤活動(dòng)狀態(tài),可正常參與總線通信,檢測(cè)到錯(cuò)誤時(shí) ,發(fā)送活動(dòng)錯(cuò)誤標(biāo)志。當(dāng)錯(cuò)誤計(jì)數(shù)器任一數(shù)值超過127時(shí),節(jié)點(diǎn)進(jìn)入錯(cuò)誤認(rèn)可狀態(tài)。處于錯(cuò)誤狀態(tài)的節(jié)點(diǎn)可 參與總線通信,但出錯(cuò)后,發(fā)送認(rèn)可錯(cuò)誤標(biāo)志,并在開始進(jìn)一步發(fā)送數(shù)據(jù)之前等待一段附加時(shí)間(暫停發(fā)送 場(chǎng))。
當(dāng)發(fā)送錯(cuò)誤計(jì)數(shù)器和接收計(jì)數(shù)器均小于或等于127時(shí),節(jié)點(diǎn)從錯(cuò)誤認(rèn)可狀態(tài)再次變?yōu)殄e(cuò)誤活動(dòng)狀態(tài)。若發(fā)送 錯(cuò)誤計(jì)數(shù)器數(shù)值超過255后,節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài),既不能向總線發(fā)送數(shù)據(jù),也不能從總線接收數(shù)據(jù)。當(dāng) 軟件執(zhí)行操作模式請(qǐng)求命令,并等待128次總線釋放(BusˉFree)序列(11位連續(xù)隱性位)后,節(jié)點(diǎn)從總線 脫離狀態(tài)重新回到錯(cuò)誤活動(dòng)狀態(tài)。
錯(cuò)誤幀由兩個(gè)不同的位場(chǎng)組成,第一個(gè)場(chǎng)由來自不同的節(jié)點(diǎn)的錯(cuò)誤標(biāo)志疊加而成,第二個(gè)場(chǎng)為錯(cuò)誤界定符 ,錯(cuò)誤幀結(jié)構(gòu)如圖4所示。
圖4 錯(cuò)誤幀結(jié)構(gòu)
(4)過載幀。
超載幀由超載標(biāo)志和超載界定符組成。超載標(biāo)志由6個(gè)顯性位組成,其格式與活動(dòng)錯(cuò)誤標(biāo)志相同。超載界 定符由8個(gè)隱性位組成,其格式與錯(cuò)誤界定符相同。導(dǎo)致發(fā)送超載幀的兩個(gè)條件為:
①一個(gè)接收節(jié)點(diǎn)內(nèi)部接收條件未準(zhǔn)備好,要求延遲下一個(gè)數(shù)據(jù)幀或遠(yuǎn)程幀發(fā)送;
②在間歇場(chǎng)(3位)檢測(cè)到顯性位。
當(dāng)超載標(biāo)志發(fā)出后,每個(gè)節(jié)點(diǎn)監(jiān)視總線狀態(tài),直至檢測(cè)到從顯性至隱性位的跳變,此時(shí),所有的節(jié)點(diǎn)均己 完成了超載標(biāo)志的發(fā)送,隨后所有節(jié)點(diǎn)開始發(fā)送8個(gè)隱性位組成的超載界定符,超載幀結(jié)構(gòu)如圖5所示。
圖5 超載幀結(jié)構(gòu)
(5)空閑幀。
數(shù)據(jù)幀及遠(yuǎn)程幀與前幀消息之間的間隔被稱為幀間空間的場(chǎng)隔開,如圖6所示,幀間
圖6 不包含暫停發(fā)送場(chǎng)的幀間空間
空間由間歇場(chǎng)和總線空閑場(chǎng)組成,前面已經(jīng)發(fā)送過報(bào)文的錯(cuò)誤節(jié)點(diǎn)還包括暫停發(fā)送場(chǎng)。間歇場(chǎng)由3個(gè)隱性位 組成,在此期間,CAN節(jié)點(diǎn)不進(jìn)行幀發(fā)送。間歇場(chǎng)的存在使CAN控制器在下次消息發(fā)送前有時(shí)間進(jìn)行內(nèi)部處理 操作。
總線空閑場(chǎng)可以為任意長度,此時(shí)總線處于空閑狀態(tài),允許任何節(jié)點(diǎn)開始報(bào)文發(fā)送。等待報(bào)文發(fā)送的節(jié)點(diǎn) 緊隨間歇場(chǎng)后啟動(dòng)報(bào)文發(fā)送,即在空閑場(chǎng)第一位期間就啟動(dòng)報(bào)文發(fā)送。
如圖7所示,錯(cuò)誤認(rèn)可節(jié)點(diǎn)完成一個(gè)報(bào)文發(fā)送后,在開始另一次報(bào)文發(fā)送或進(jìn)入總線空閑狀態(tài)之前,緊隨間 歇場(chǎng)發(fā)送8個(gè)隱性位的暫停發(fā)送場(chǎng)。發(fā)送暫停發(fā)送場(chǎng)期間,若其他節(jié)點(diǎn)開始發(fā)送報(bào)文,則本節(jié)點(diǎn)停止送出暫 停發(fā)送場(chǎng),并變?yōu)閳?bào)文接收器。 圖7 包含暫停發(fā)送場(chǎng)的幀間空間 (6)標(biāo)準(zhǔn)數(shù)據(jù)幀。
標(biāo)準(zhǔn)數(shù)據(jù)幀的結(jié)構(gòu)如圖8所示。
圖8 標(biāo)準(zhǔn)幀格式
(7)擴(kuò)展幀。
擴(kuò)展幀的結(jié)構(gòu)如圖9所示。
圖9 擴(kuò)展幀格式
3.傳輸過程中的可靠性和同步問題
(1)可靠性。
CAN網(wǎng)絡(luò)通信要求信息可靠傳送,但由于外界干擾不可避免地會(huì)對(duì)通信線路造成影響,誤碼總是客觀存在 的,所以網(wǎng)絡(luò)通信中必須采取某些差錯(cuò)控制措施。
當(dāng)出現(xiàn)錯(cuò)誤時(shí),及時(shí)發(fā)現(xiàn)錯(cuò)誤并及時(shí)加以糾正。為提高抗干擾能力和數(shù)據(jù)的可靠性,CAN采用了多種錯(cuò)誤 檢測(cè)手段:發(fā)送監(jiān)視、位填充錯(cuò)誤檢測(cè)、CRC校驗(yàn)、格式錯(cuò)誤檢測(cè)以及應(yīng)答錯(cuò)誤檢測(cè)。
為保證CAN網(wǎng)絡(luò)中節(jié)點(diǎn)間的正常通信,必須對(duì)報(bào)文的位定時(shí)作出規(guī)定。接收同步、網(wǎng)絡(luò)傳輸延遲補(bǔ)償及采 樣點(diǎn)定位均由CAN協(xié)議集成電路的可編程位定時(shí)邏輯確定。CAN中正常位速率被定義為:在不需要重同步的情 況下,每秒傳送的位數(shù)。正常位定時(shí)被定義為一位的持續(xù)時(shí)間,實(shí)際上就是正常位速率的倒數(shù)。
(2)同步問題。
位時(shí)間可劃分為4個(gè)互不重疊的時(shí)間段:同步段(SYNC ̄SEG:SynchronizationSegment)、傳播段(PROPˉSEG:Propagation Segment)、相位緩沖段1(PHASEˉSEG:Phase Bufer Segment1)及相位緩沖段2(PHASE-SEG2:Phase Bufer Segment2)。
同步段用于總線上各節(jié)點(diǎn)消息傳輸同步,長度為一個(gè)時(shí)間份額,此段內(nèi)需要一個(gè)跳變沿。傳播段用于補(bǔ)償網(wǎng)絡(luò)內(nèi)的物理延遲時(shí)間,它是信號(hào)在總線上傳播時(shí)間、輸入比較器延遲和輸出驅(qū)動(dòng)器延遲之和的兩倍,長度可被編程為1~8個(gè)時(shí)間份額。實(shí)際上,在CAN協(xié)議集成器件中并沒有定義此段。
相位緩沖段用于補(bǔ)償上升沿或下降沿的相位誤差,通過重同步,這兩個(gè)時(shí)間段可被用戶延長或縮短。相位緩沖段1長度可編程為1~8個(gè)時(shí)間份額,相位緩沖段2長度取值為相位緩沖段1最大值和消息處理時(shí)間之和,消息處理時(shí)間個(gè)于等于兩個(gè)時(shí)間份額(這一點(diǎn)在CAN協(xié)議集成器件中并未嚴(yán)格遵守,實(shí)際應(yīng)用中相位緩沖段1比相位緩沖段2長)。
由采樣點(diǎn)開始,保留用于計(jì)算后續(xù)位電平的時(shí)間段被定義為消息處理時(shí)間,其長度小于或等于2個(gè)時(shí)間份額??偩€電平在采樣點(diǎn)被讀取,所以此點(diǎn)代表該位的數(shù)值大小。采樣點(diǎn)位于相位緩沖段1的末尾處。
時(shí)間份額是由振蕩器時(shí)鐘分頻得出的一個(gè)固定時(shí)間單元,在CAN協(xié)議集成器件中被稱為系統(tǒng)時(shí)鐘周期,可由一個(gè)預(yù)分頻器設(shè)定大小,時(shí)間份額由下式計(jì)算:
時(shí)間份額=m×最小時(shí)間份額
其中m為預(yù)分頻器系數(shù),最小時(shí)間份額在CAN集成器件中被稱為振蕩器時(shí)鐘周期。一個(gè)位時(shí)間中時(shí)間份額總數(shù)必須被編程在8~25之間。
網(wǎng)絡(luò)常采用的同步方式有兩種:準(zhǔn)同步和標(biāo)準(zhǔn)同步。準(zhǔn)同步又稱獨(dú)立同步,各節(jié)點(diǎn)均擁有時(shí)間獨(dú)立的高穩(wěn)定度振蕩時(shí)鐘,它們的頻率并不一定完全相等,但必須時(shí)間相近。準(zhǔn)同步的優(yōu)點(diǎn)是同步體系簡(jiǎn)單,容易實(shí)現(xiàn),缺點(diǎn)是工作可靠性較差。
標(biāo)準(zhǔn)同步又分為主從同步法和相互同步法兩種,主從同步方法中,各網(wǎng)絡(luò)節(jié)點(diǎn)的時(shí)鐘以在網(wǎng)絡(luò)中處于重要位置的節(jié)點(diǎn)時(shí)鐘為基準(zhǔn)。其優(yōu)點(diǎn)是結(jié)構(gòu)相對(duì)簡(jiǎn)單,網(wǎng)絡(luò)穩(wěn)定性好,缺點(diǎn)是網(wǎng)絡(luò)過分依賴于主時(shí)鐘,有全網(wǎng)癱瘓的危險(xiǎn)。
和其他計(jì)算機(jī)網(wǎng)絡(luò)相比,CAN網(wǎng)絡(luò)結(jié)構(gòu)相對(duì)簡(jiǎn)單,所以采用準(zhǔn)同步方式,每個(gè)節(jié)點(diǎn)都擁有自己獨(dú)立的振蕩時(shí)鐘。CAN網(wǎng)絡(luò)中,同步方式又分硬同步和重同步兩種形式,同步過程由器件自身完成。
CAN模塊使用RB3/CANRX和RB2/CANTX/INT2引腳與CAN總線驅(qū)動(dòng)器接口。要配置CANRX和CANTX為CAN接口,需要將TRISB〈3>位置1,TRISB(2)位清0。
分頻器相關(guān)文章:分頻器原理 塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評(píng)論