日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

王超的小站
認(rèn)證:VIP會(huì)員
所在專題目錄 查看專題
MCU擴(kuò)展CAN/CAN FD接口方案-MCP2518FD+ATA6563
MCU擴(kuò)展CAN/CAN FD接口方案-MCU軟件動(dòng)手實(shí)驗(yàn)
作者動(dòng)態(tài) 更多
PIC24 & dsPIC33 MCU Bootloader開發(fā)
2021-11-08 15:12
PIC16 & PIC18 MCU Bootloader開發(fā)
2021-11-08 15:00
Python開發(fā)環(huán)境搭建(for Bootloader)
2021-11-08 14:58
Python開發(fā)環(huán)境搭建 (for Control)
2021-01-27 18:43
MCU擴(kuò)展CAN/CAN FD接口方案-MCU軟件動(dòng)手實(shí)驗(yàn)
2020-11-25 14:11

MCU擴(kuò)展CAN/CAN FD接口方案-MCP2518FD+ATA6563

“本文介紹MCU通過SPI串口擴(kuò)展CAN/CAN FD接口擴(kuò)展方案,該方案基于MCP2518FD+ATA6563,可快速部署應(yīng)用于實(shí)際項(xiàng)目。”

本文連載,歡迎讀者關(guān)注(所有分享不丟失)、點(diǎn)贊、收藏、轉(zhuǎn)發(fā)和評(píng)論!  

1. CAN FD和CAN 2.0的區(qū)別

      CAN FD解決了CAN總線上日益增長的帶寬需求。相比于CAN2.0主要有2點(diǎn)增強(qiáng):

  • 將數(shù)據(jù)位段增加到最多64數(shù)據(jù)字節(jié)(CAN 2.0最大為8個(gè)數(shù)據(jù)字節(jié))。
  • 標(biāo)稱位和數(shù)據(jù)位使用不同的比特率,標(biāo)稱位的比特率和CAN2.0相同,數(shù)據(jù)位的比特率可達(dá)8Mbps。

      下圖顯示由于較高的數(shù)據(jù)比特率和每幀增加的數(shù)據(jù)字節(jié)而可能增加的有效比特率,該圖使用的CAN FD為11位標(biāo)識(shí)符標(biāo)準(zhǔn)幀,借此大家可直觀的體會(huì)CAN FD如何增加CAN總線的帶寬。

2. CAN FD在電源項(xiàng)目中的可能優(yōu)勢(shì)

      這里以CAN FD在三相逆變電源領(lǐng)域可能的應(yīng)用場景為例,以往在用CAN 2.0做逆變器均流控制方案時(shí),一般傳遞均流信息為Id、Iq和Iz 6個(gè)字節(jié),這樣一幀即可完成均流信息傳遞,不需拆包。但存在個(gè)弊端,那就是在不平衡負(fù)載時(shí)Id、Iq和Iz含有交流成分,并不能精確做不平衡負(fù)載的均流控制。那么在應(yīng)用CAN FD后,可以在一幀中輕松傳遞每一相的有功和無功電流(IAp、IAq、IBp、IBq、ICp和ICq),這些信息都是直流量,因此方便做不平衡載的均流控制,此時(shí)一幀總共的數(shù)據(jù)字節(jié)也僅為12個(gè),離CAN FD最多64個(gè)數(shù)據(jù)字節(jié)還有很大裕量,因此還可以繼續(xù)增加字節(jié)傳遞其它輔助邏輯處理信息。同時(shí)因?yàn)閼?yīng)用了CAN FD,其有效比特率相比CAN 2.0大幅提高,那么帶寬提高的好處便是同樣的軟件卻可以實(shí)現(xiàn)更多模塊的并機(jī)操作。所有這些丁點(diǎn)的優(yōu)勢(shì)匯聚到一起可能就是潛在的產(chǎn)品競爭力,況且現(xiàn)在主流MCU已經(jīng)默認(rèn)帶CAN FD外設(shè),并且您將CAN FD的外設(shè)當(dāng)成CAN 2.0用也不成問題, 所以在當(dāng)前的電源產(chǎn)品設(shè)計(jì)中可直接選擇帶CAN FD外設(shè)的MCU,如dsPIC33CK256MP506和dsPIC33CH512MP508等。

3. CAN/CAN FD接口擴(kuò)展硬件實(shí)現(xiàn)

      萬一不巧在您的項(xiàng)目中MCU沒有CAN FD外設(shè)或CAN FD外設(shè)數(shù)量不夠,那么此時(shí)用MCP2518FD來實(shí)現(xiàn)CAN FD功能是個(gè)不錯(cuò)的選擇(MCP2518FD也支持CAN 2.0B,所以本文后續(xù)內(nèi)容將CAN或CAN FD均簡稱為CAN),MCP2518FD是一個(gè)低成本小封裝的CAN控制器,其通過SPI接口與MCU進(jìn)行通信。在實(shí)際應(yīng)用中,除了CAN控制器MCP2518FD,額外還需一顆CAN收發(fā)器和時(shí)鐘振蕩器。對(duì)于CAN收發(fā)器的選擇可以參見下圖,且所有收發(fā)器均滿足車規(guī)標(biāo)準(zhǔn),大家可以根據(jù)需要自由選擇。對(duì)于時(shí)鐘振蕩器,可選擇MEMS振蕩器DSC60XXB系列,推薦選擇40M振蕩器。

      MIKROE公司提供的MCP2518FD CLICK板可用于快速評(píng)估該方案,其原理圖如下。

      本文的實(shí)驗(yàn)驗(yàn)證基于如下開發(fā)套件,借助32bit Coretx-M0+ MCU ATSAMD21G17D通過SPI操作MCP2517FD實(shí)現(xiàn)MCU的CAN/CAN FD接口擴(kuò)展。因我這里沒有MCP2518FD Click板,只找到MCP2517FD的,但是MCP251xFD可共用驅(qū)動(dòng)API程序,因此對(duì)于文章脈絡(luò)沒有影響,所以下文提及時(shí)仍說MCP2518FD。請(qǐng)大家參見如下Github鏈接獲得例程源碼,上面同時(shí)也有基本的軟硬件說明及開發(fā)環(huán)境說明。

      ATSAMD21G17D和MCP2518FD的軟硬件接口表如下。

      ATSAMD21G17D和ATA6563的軟硬件接口表如下。

4. CAN/CAN FD接口擴(kuò)展軟件實(shí)現(xiàn)

      介紹完了硬件平臺(tái)及軟硬件接口情況,我們看下示例工程軟件的代碼結(jié)構(gòu)示意圖。其中“CAN FD Application”層為應(yīng)用程序,包括MCP2518FD的初始化程序和測試程序,測試程序?yàn)樽约合劝l(fā)一幀數(shù)據(jù)后通過外部環(huán)回模式接收該幀數(shù)據(jù),因?yàn)槲覜]有2個(gè)節(jié)點(diǎn),所以通過外部環(huán)回模式完成測試。“DRV_CANFDSPI”層為MCP2518FD不局限于具體MCU的驅(qū)動(dòng)層,這四個(gè)文件保持固定即可。“DRV_SPI”和“I/O PLIB”層為MCU硬件驅(qū)動(dòng)層,直接驅(qū)動(dòng)MCU SPI外設(shè)和IO。例程代碼除了“CAN FD Application”和“DRV_CANFDSPI”層的共6個(gè).c和.h文件外其他工程代碼全部為MAPLAB X IDE的Harmony v3環(huán)境配置生成的。

4.1 MCP2518FD SPI通訊

      操作MCP2518FD的基礎(chǔ)就是其與MCU要可靠通信,所以首先看下MCP2518FD對(duì)SPI的時(shí)序要求,SPI僅支持模式0和模式3,同時(shí)要求SPI時(shí)鐘速率FSCK最高20MHz且FSCK 必須小于等于FSYSCLK/2。這里FSYSCLK可以設(shè)計(jì)為10、20和40MHz,但一般取40MHz。

      為了更好的理解SPI的模式0和模式3,進(jìn)一步看下ATSAMD21G17D的Datasheet中對(duì)于SPI模式的說明,可以看出MCP2518FD選取的2種模式均是在上升沿實(shí)現(xiàn)對(duì)輸入數(shù)據(jù)的采樣,在下降沿實(shí)現(xiàn)對(duì)輸出數(shù)據(jù)的改變。這2種模式的差別僅在空閑狀態(tài)時(shí)時(shí)鐘信號(hào)的狀態(tài),模式0空閑狀態(tài)時(shí)時(shí)時(shí)鐘信號(hào)SCK為低電平,而模式3空閑狀態(tài)時(shí)時(shí)鐘信號(hào)SCK為高電平。

      MCU操作MCP2518FD的SPI協(xié)議幀格式和相關(guān)指令含義如下圖所示。

      在“DRV_CANFDSPI”層中的drv_canfdspi_api.c文件即描述了根據(jù)上述SPI協(xié)議幀格式實(shí)現(xiàn)的所有操作MCP2518FD的指令,如復(fù)位指令及相應(yīng)的讀寫指令。例程中就是借助這些函數(shù)實(shí)現(xiàn)對(duì)SFR和RAM的訪問。但需要注意的是SFR訪問是面向字節(jié)的,可以使用一條指令讀取或?qū)懭肴我鈹?shù)量的數(shù)據(jù)字節(jié)。在每個(gè)數(shù)據(jù)字節(jié)后,地址自動(dòng)遞增1,地址從0x3FF計(jì)滿返回至0x000,從0xFFF計(jì)滿返回至0xE00。報(bào)文存儲(chǔ)器(RAM)訪問是面向字的(一次4個(gè)字節(jié)),可以使用一條指令讀取或?qū)懭氪笮?個(gè)數(shù)據(jù)字節(jié)任意倍數(shù)的數(shù)據(jù)。在每個(gè)數(shù)據(jù)字節(jié)后,地址自動(dòng)遞增1,地址從0xBFF計(jì)滿返回至0x400。

      而支撐上述指令實(shí)現(xiàn)的底層驅(qū)動(dòng)代碼為“DRV_SPI”中plib_sercom1_spi_master.c中的如下函數(shù)。若您在其他MCU平臺(tái)應(yīng)用該方案,那么您需自己實(shí)現(xiàn)這個(gè)函數(shù),以支撐drv_canfdspi_api.c中相關(guān)函數(shù)的實(shí)現(xiàn)。

4.2 MCP2518FD初始化代碼分析

      初始化函數(shù)為CANFDSPI_Init(),涉及到的步驟如下:

1. 復(fù)位操作:所有SFR和狀態(tài)機(jī)都會(huì)像上電復(fù)位期間一樣復(fù)位,器件會(huì)立即轉(zhuǎn)換為配置模式。

2. 使能ECC(ECC邏輯支持單個(gè)位錯(cuò)誤糾正和雙位錯(cuò)誤檢測),并將RAM空間初始化為初值0xFF。

3. 器件配置:使能CAN FD幀中的ISO CRC位,CRC字段中包含填充位計(jì)數(shù),使用非零CRC初始化向量(符合ISO11898-1:2015規(guī)范);同時(shí)不將發(fā)送的報(bào)文保存到TEF中,也就不在RAM中預(yù)留TEF空間;發(fā)送隊(duì)列TXQ不使能,同樣也不在RAM中預(yù)留TXQ空間。同時(shí)需要注意的是TXQ相當(dāng)于32個(gè)FIFO的FIFO0,是一個(gè)特殊的發(fā)送FIFO,它根據(jù)隊(duì)列中存儲(chǔ)的報(bào)文的ID發(fā)送報(bào)文,優(yōu)先發(fā)送ID最小的報(bào)文。而其他31個(gè)FIFO,才是真正意義的FIFO,當(dāng)配置為發(fā)送FIFO時(shí),基于優(yōu)先級(jí)位域采用先進(jìn)先出的方式發(fā)送報(bào)文。

4. 發(fā)送FIFO配置:采用FIFO2作為發(fā)送FIFO,F(xiàn)IFO深度8個(gè)報(bào)文(最多32個(gè)報(bào)文),有效負(fù)載大小位64個(gè)數(shù)據(jù)字節(jié),重發(fā)嘗試次數(shù)不受限制,報(bào)文優(yōu)先級(jí)配置為較低優(yōu)先級(jí)1(0最低優(yōu)先級(jí),31最高優(yōu)先級(jí))。

5. 接收FIFO配置:采用FIFO1作為接收FIFO,F(xiàn)IFO深度16個(gè)報(bào)文(最多32個(gè)報(bào)文),有效負(fù)載大小位64個(gè)數(shù)據(jù)字節(jié),不捕捉時(shí)間戳。

6. 接收濾波器設(shè)置:采用FILTER0作為接收濾波器(共32個(gè)接收濾波器可用),僅匹配帶有標(biāo)準(zhǔn)標(biāo)識(shí)符的報(bào)文,報(bào)文ID 0x300。

7. 接收屏蔽器設(shè)置:采用MASK0作為接收屏蔽器(共32個(gè)接收屏蔽器可用),僅匹配與過濾器中EXIDE位對(duì)應(yīng)的報(bào)文類型,這里便是匹配標(biāo)準(zhǔn)標(biāo)識(shí)符報(bào)文,且11位標(biāo)識(shí)符的低3位被屏蔽,所以可以接收ID為0x300~0x307的報(bào)文。

8. 將接收濾波器與接收屏蔽器與接收FIFO綁定,則滿足接收濾波器和接收屏蔽器規(guī)則的報(bào)文會(huì)在相應(yīng)的FIFO接收。

9. 設(shè)置位時(shí)間,標(biāo)稱位比特率500Kbps,數(shù)據(jù)位比特率2Mbps。在數(shù)據(jù)階段的傳播延遲可能長于比特時(shí)間,此時(shí)將產(chǎn)生位錯(cuò)誤,所以對(duì)于數(shù)據(jù)位采樣不是在DTSEG1后采樣,而是要加上延遲TDCV和TDCO在二次采樣點(diǎn)采集。這里采用自動(dòng)測量發(fā)送器延時(shí)的方式實(shí)現(xiàn)二次采樣點(diǎn)采集數(shù)據(jù)位。對(duì)于不同比特率下如何合理設(shè)置波特率預(yù)分頻比位BRP、時(shí)間段1 TSEG1、時(shí)間段2 TSEG2和同步跳轉(zhuǎn)寬度SJW的值,在drv_canfdspi_api.c均已經(jīng)實(shí)現(xiàn)了,大家可以直接參考。

10. 設(shè)置發(fā)送和接收中斷:GPIO0配置為發(fā)送中斷輸出(低電平有效),當(dāng)發(fā)送FIFO未滿時(shí)GPIO0為低電平,可以往發(fā)送FIFO繼續(xù)寫入報(bào)文;GPIO1配置為接收中斷輸出(低電平有效),當(dāng)接收FIFO非空時(shí)GPIO1為低電平,說明FIFO有接收到報(bào)文可以讀取。

11. 將工作模式從配置模式切換到正常模式,若前期調(diào)試階段只有一個(gè)CAN節(jié)點(diǎn),則可以配置為外部環(huán)回模式先調(diào)試軟件。

4.3 MCP2518FD發(fā)送和接收CAN報(bào)文代碼分析

      報(bào)文發(fā)送和接收代碼體現(xiàn)在CANFDSPI_Test()函數(shù)中。報(bào)文發(fā)送環(huán)節(jié)首先是操作txObj對(duì)象對(duì)發(fā)送報(bào)文進(jìn)行配置,如標(biāo)準(zhǔn)幀還是擴(kuò)展幀IDE、標(biāo)識(shí)符ID、比特率切換BRS、CAN和CAN FD格式的FDF位和數(shù)據(jù)長度碼DLC。在發(fā)送或接收期間,若DLC大于FIFO元素的PLSIZE會(huì)置位CiBDIAG1寄存器中的DLC不匹配位。接著對(duì)發(fā)送的數(shù)據(jù)txd進(jìn)行賦值。最后若GPIO0的中斷輸出電平(低電平)或者讀取FIFO狀態(tài)寄存器判斷出發(fā)送FIFO未滿,則將報(bào)文加載到FIFO,并且將UINC置1 FIFO頭部遞增一個(gè)報(bào)文,同時(shí)將TXREQ置1請(qǐng)求發(fā)送報(bào)文實(shí)現(xiàn)報(bào)文最終發(fā)送。

      報(bào)文接收環(huán)節(jié)首先是判斷GPIO0的中斷輸出電平(低電平),或者讀取FIFO狀態(tài)寄存器判斷出接收FIFO非空,則從FIFO讀取報(bào)文,前面發(fā)送報(bào)文的txObj信息存儲(chǔ)在RxObj中(注意接收?qǐng)?bào)文可能會(huì)根據(jù)時(shí)間戳使能位RXTSEN的值在RxObj中多一個(gè)時(shí)間戳),發(fā)送數(shù)據(jù)txd存儲(chǔ)在rxd中。報(bào)文讀取之后要將UINC置1 FIFO尾部遞增一個(gè)報(bào)文。

4.4 MCP2518FD發(fā)送和接收CAN報(bào)文驗(yàn)證

      最終實(shí)驗(yàn)結(jié)果體現(xiàn)如下,標(biāo)識(shí)符ID為0x300~0x307的CAN FD報(bào)文可以接收,而標(biāo)識(shí)符ID為0x308~0x30F的CAN FD報(bào)文被濾波器和屏蔽器攔截?zé)o法存儲(chǔ)到接收FIFO中。


      最后若您真的不需要CAN FD,僅需擴(kuò)展CAN接口,并且堅(jiān)持不用MCP2518FD來實(shí)現(xiàn)CAN 2.0B(MCP2518FD可能更便宜),那么您可以使用MCP2515或MCP25625,相關(guān)例程可參見如下Github鏈接

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 5
收藏 4
關(guān)注 43
成為作者 賺取收益
全部留言
0/200
  • Westbrook 2020-11-22 12:00
    跟著大佬學(xué)習(xí)!
    回復(fù)
  • 星球居民-RsPeIyMH 2020-11-22 09:59
    跟著大佬學(xué)習(xí)
    回復(fù)