鑒于用戶開(kāi)發(fā)過(guò)程中,經(jīng)常碰到CAN使用的問(wèn)題,故作此筆記。
【資料圖】
1CAN簡(jiǎn)介
控制器局域網(wǎng)總線(CAN,Controller Area Network)是一種用于實(shí)時(shí)應(yīng)用的串行通訊協(xié)議總線,它可以使用雙絞線來(lái)傳輸信號(hào),是世界上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。
CAN協(xié)議用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。該協(xié)議的健壯性使其用途延伸到其他自動(dòng)化和工業(yè)應(yīng)用。
2CAN硬件接口
CAN總線為差分傳輸,可以很好的抵制共模干擾,如圖,CAN-H和CAN-L的波形中間穿插了一個(gè)共模干擾,但是經(jīng)過(guò)差分后的信號(hào),很好的過(guò)濾掉了這個(gè)共模干擾。
需要注意的是,CAN總線有5V和3.3V之分,兩種電壓類型的CAN總線并不兼容,實(shí)際使用的時(shí)候注意區(qū)分。
3CAN數(shù)據(jù)包解析
如圖,一個(gè)CAN總線數(shù)據(jù)包,由仲裁段(ID)、控制段、數(shù)據(jù)段、CRC等部分組成 。
標(biāo)準(zhǔn)幀、擴(kuò)展幀主要是ID不一樣,其它都一樣,每個(gè)數(shù)據(jù)包最大可包含64bit(8byte)的數(shù)據(jù)。
4CAN發(fā)送邏輯
CAN RX接收CAN總線上的波形數(shù)據(jù),故:CAN TX發(fā)送的數(shù)據(jù),也會(huì)被自己RX接收,因此CAN可以監(jiān)控自己數(shù)據(jù)是否發(fā)送成功。
CAN發(fā)送數(shù)據(jù)的時(shí)候,其他CAN設(shè)備接收了數(shù)據(jù)之后,如果CRC校驗(yàn)通過(guò),會(huì)在ACK SLOT時(shí)間發(fā)送“顯性”位填充,因此總線上不能只有一個(gè)節(jié)點(diǎn),因?yàn)闊o(wú)接收節(jié)點(diǎn)在ACK SLOT時(shí)間內(nèi) 發(fā)送“顯性”位填充,而始終保持隱性,發(fā)送方會(huì)認(rèn)為數(shù)據(jù)發(fā)送失敗。
5CAN軟件應(yīng)用
i.采樣點(diǎn)設(shè)置
受總線上容性器件影響,CAN總線波形上升沿下降沿會(huì)變得平滑,采樣點(diǎn)設(shè)置尤其重要,過(guò)前或者過(guò)后采集到的波形可能壓差不符合壓差標(biāo)準(zhǔn)而出現(xiàn)誤采樣數(shù)據(jù)出錯(cuò)的現(xiàn)象,一般推薦采樣點(diǎn)82%左右
程序初始化的時(shí)候,根據(jù)實(shí)際需要的波特率以及采樣點(diǎn)來(lái)確定參數(shù)的大小,計(jì)算的時(shí)候注意CAN模塊寄存器BRP位寬可以滿足設(shè)置的數(shù)據(jù)大小,防止寄存器溢出。
ii.使用邏輯
用戶可以設(shè)置CAN總線的自動(dòng)重發(fā)機(jī)制,如果長(zhǎng)時(shí)間數(shù)據(jù)都沒(méi)有發(fā)送成功,建議取消發(fā)送。
推薦開(kāi)啟Error中斷,當(dāng)總線發(fā)生錯(cuò)誤的時(shí)候,可以提前處理,也可以定期查詢SR,出現(xiàn)Busoff之后做相應(yīng)處理。當(dāng)出現(xiàn)了Error之后,需要排查出現(xiàn)Error的原因,解決了問(wèn)題,才會(huì)使通信變得更穩(wěn)定。
審核編輯:湯梓紅
標(biāo)簽: