




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單片機和MCP2510的CAN總線通信模塊設計 單片機和MCP2510的CAN總線通信模塊設計 CAN(Controller Area Network)總線,即控制器局域網。由于具有高性能、高可靠性以及獨特的設計,CAN總線越來越受到人們的重視。德國的Bosch公司最初為汽車監控和控制系統設計了CAN總線,現在,其應用已面向過程工業、機械工業、紡織工業、農用機械、機器人、數控機床、醫療器械及傳感器等領域發展。CAN總線已經形成國際標準,并已經公認為是最有前途的現場總線之一。CAN總線規范已經被國際標準化組織制訂為國際標準
2、ISO11898,并得到眾多半導體器件廠商的支持,推出各種集成有CAN協議的產品。CAN總線系統智能節點是網絡上報文的接收和發送站,一般由單片機和CAN控制器或二者合二為一組成。 MCP25l0是Microchip公司生產的一種獨立的可編程CAN控制器芯片。本文將介紹新型的獨立CAN通信控制器MCP2510,并給出其在CAN總線系統智能節點中的應用實例。 1.MCP2510芯片介紹 MCP25lO是一種帶有SPI接口的CAN控制器,DIP封裝如圖1所示。它支持CAN技術規范V2.OA/
3、B,能夠發送或接收標準的和擴展的信息幀,同時具有接收濾波和信息管理的功能。MCP2510通過SI接口與MCU進行數據傳輸,最高數據傳輸速率可達5 Mbps,MCU可通過MCP2510與CAN總線上的其他MCU單元通信。MCP2510內含3個發送緩沖器和2個接收緩沖器,同時還具有靈活的中斷管理能力,這些特點使得MCU對CAN總線的操作變得非常簡便。 1.1 MCP2510的主要特點 支持CANV 2.0A/B; 具有SPI接口,支持SPI模式0,0和1,1;
4、0; 內含3個發送緩沖器和2個接收緩沖器,可對其優先權進行編程; 具有6個接收過濾器,2個接收過濾器屏蔽; 具有靈活的中斷管理能力; 采用低功耗CMOS工藝技術,其工作電壓范圍為3.05.5 V,有效電流為5 mA,維持電流為10A; 工作溫度范圍為-40+125。 1.2 結構及工作原理 MCP2510有PDIP、SOIC和TSSOP三種封裝形式。圖2是MCP2510的內部結構框
5、圖。CAN協議機負責與CAN總線的接口,SPI接口邏輯用于實現同MCU的通信,而寄存、緩沖器組與控制邏輯則用來完成各種方式的設定和操作控制?,F結合其工作過程將各部分的功能、原理作一介紹。 (1) 收發操作 MCP251O的發送操作通過3個發送緩沖器來實現。這3個發送緩沖器各占據14字節的SRAM。第1字節是控制寄存器TXBNCTRL,該寄存器用來設定信息發送的條件,且給出了信息的發送狀態;第26字節用來存放標準的和擴展的標識符以及仲裁信息;最后8字節則用來存放待發送的數據信息。在進行發送前,必須先對這些寄存器進行初始化。&
6、#160; (2) 中斷管理 MCP25lO有8個中斷源,包括發送中斷、接收中斷、錯誤中斷及總線喚醒中斷等。利用中斷使能寄存器(CANINTE)和中斷屏蔽寄存器(CANINTF)可以方便地實現對各種中斷的有效管理。當有中斷發生時,INT引腳變為低電平并保持在低電平,直到MCU清除中斷為止。 (3) 錯誤檢測 CAN協議具有CRCF錯誤、應答錯誤、形式錯誤、位錯誤和填充錯誤等檢測功能。MCP2510內含接收出錯計數器(REC)和發送出錯計數器(TEC)兩個錯誤計數器
7、。因而對網絡中的任何一個節點來說,都有可能因為錯誤汁數器的數值不同而使其處于錯誤一激活、錯誤一認可和總線-脫離3種狀態之一。 2.MCP2510在智能節點中的應用實例 利用MCP2510和CAN總線收發器TJA1050可構成一個CAN總線分布式測控網絡。系統可包括一個主控制器和多個節點控制器,這種節點控制器可對電動機的電流、電壓及周圍的溫度進行監控,其結構如圖3所示。 這種網絡拓撲結構采用了總線式結構和無源抽頭連接,且結構簡單、成本低,因而系統的可靠性較高。其信息傳輸采用CAN通信協議,
8、通信介質采用雙絞線。由于CAN總線是基于發送報文的編碼,不對CAN控制節點進行編碼,故系統的可擴充性比較好,同時增刪CAN總線上的控制節點不會對系統的其余節點造成任何影響。節點控制器的MCU可選用具有SPI接口的微處理器,也可采用不帶SPI接口的微處理器。本系統采用的是不帶SPI接口的微處理器AT89C51。AT89C51可通過P1口與CAN控制器的SPI接口直接相連,并用軟件算法來實現SPI接口協議。CAN總線收發器TJA1050則作為MCP25l0與物理總線的接口。如果需要進一步提高系統的抗干擾能力,則可在MCP2510和TJAl050之間再加一個光電隔離器。
9、60; 智能節點電路原理圖如圖4所示。 2.1 軟件設計 MCP2510正常工作之前,需要進行正確的初始化,包括設置SPI接口的數據傳輸速率、CAN通信的波特率、MCP2510的接收過濾器和屏蔽器以及發送和接收中斷允許標志位等。與SJA1000不同的是,單片機對MCP2510的接收緩沖器和發送緩沖器的操作,必須通過SPI接口用MCP2510內置讀寫命令來完成。其讀、寫命令時序圖如圖5和圖6所示。 本文中MCP2510主要采取中斷模式進行總線數據的接收和發送。整個系統主序提供兩種中斷:定時
10、器中斷和外部中斷。定時器中斷的中斷子程序主要負責處理來自模擬通道AIN0AIN7的A/D數據,向MCP2510發送“數據發送請求命令”以及發送數據。外部中斷的中斷處理子程序主要包括CAN總線錯誤處理子程序和數據接收子程序。 2.2 軟件主體設計流程 軟件主體設計流程如圖7所示。軟件設計時需要注意以下問題: 因為MCP2510在初始化完成后處于默認Config-uration模式下,所以就需要在MCP2510的初始化完后將其置為Normal模式,否則MCP2510將一直停留在Configu
11、ration模式下,不能正常進行工作。將MCP2510置Normal模式可通過使用MCP2510內置的BitModify(位修改)4指令向CANCTRL控制字寫入一個0字節來實現。 在對MCP2510進行任何操作之前,都要由微處理器向MCP2510的片選CS輸出一個低電平,使得MCP2510選通。 在執行MCP2510的“讀”操作時,發送完讀指令及其地址碼之后,仍然需要向MCP2510提供時鐘,以接收“讀”到的數據。可以通過向MCP2510發送一個0字節來實現。 在對MCP2510完成任
12、意操作后,都要延時一段時間,使其有足夠的時間來準備接收下次操作的命令,防止出現MCP2510“忙”的情況。 3.總結 CAN總線已被公認為是最有前途的幾種現場總線之一。因其性價比高、實現簡單等突出優點深受越來越多的研發人員的青睞。本文的智能節點可聯結多個集散控制系統,其軟硬件電路的設計方法同樣適合于其他基于CAN總線的分布式控制系統的節點設汁。<<上一頁 / =CAN通信程序= #include <PIC.h>#include <PIC16f87x.h>#include <mcp2
13、510.h> / MCP2510寄存器定義 / =常數和變量定義= #define READ 0x03 / 讀MCP2510指令代碼 #define WRITE 0x02 / 寫MCP2510指令代碼 #define RESET 0xC0 / 復位MCP2510指令代碼 #define RTS 0x80 / MCP2510請求發送指令代碼 #define STA2510 0xA0 / 讀MCP2510狀態指令代碼 #define BITMOD 0x05 / MCP2510位修改指令代碼 int a12; / SPI發送或接收數據寄存器int b8; / 發送或接收的數據int c8; /
14、 發送或接收的數據int i; / 臨時變量int count; / 發送接收計數器int count1=0; / for testint RecID_H=0;int RecID_L=0;int DLC=8;void SPIINT();void TMR1INT();void CCP1INT();void SPIEXCHANGE(int count);void WAIT_SPI();void RESET2510();int RD2510(int adress,int n);void WR2510(int adress,int n);void RTS2510(int RTSn);int GETS2
15、510();void BM2510(int adress,int mask,int data);void SETNORMAL();void TXCOMPLETE(int adress);void TXMSG(int DLC);int RXMSG();void INIT2510();void INIT877();void INITSPI();void ACK();void wait();/ =主程序= main(void) int l,detect=0; SSPIE=1; TMR1IE=1; CCP1IE=1; CCP2IE=1; PEIE=1; ei(); / 開中斷 INIT877(); /
16、 初始化PIC16F877芯片 INITSPI(); / 初始化SPI接口 INIT2510(); / 初始化MCP2510芯片 flag1=0; flag2=0; CCP1CON=0x05; CCP2CON=0x04; while(1) RXMSG(); TXMSG(8); / =中斷服務程序= / SPI中斷服務子程序 void SPIINT() SSPIF=0; ai+=SSPBUF; / 數據暫存a中 count-=1; if(count>0) SSPBUF=ai;/ 未發送完,繼續 else RE2=1; / 否則,片選信號置高電平 return;/ TMR1中斷服務子程序 v
17、oid TMR1INT() TMR1IF=0; T1CON=0; if(!flag1) TMR1H=0xfe; / 512 s 脈沖寬度 TMR1L=0x00; T1CON=0x01; PORTD=0xff; / 輸出所有通道 flag1=1; else flag1=0; PORTD=0; T1CON=0; return;/ CCP1中斷服務子程序 void CCP1INT() CCP1IF=0; T1CON=0x01; return;/ CCP2中斷服務子程序 void CCP2INT() CCP2IF=0; T1CON=0x01; return;/ 中斷入口,保護現場,判中斷類型 void
18、 interrupt INTS() di(); if(TMR1IF) TMR1INT(); / 定時器TMR1中斷 else if(CCP1IF) CCP1INT(); / 電壓過零捕捉中斷1 else if(CCP2IF) CCP2INT(); / 電壓過零捕捉中斷2 else if(SSPIF) SPIINT(); / SPI接口中斷 ei();/ =子程序= / 啟動SPI傳送 void SPIEXCHANGE(count) int count; if(count>0) / 有數據可送? i=0; RE2=0; / 片選位置低電平 SSPBUF=ai; / 送數 else ; /
19、否則,空操作,并返回 return;/ 等待SPI傳送完成 void WAIT_SPI() do ; while(count>0); / 當count!=0時,等待 to add "CLRWDT" return;/ 對MCP2510芯片進行復位 void RESET2510() a0=RESET; count=1; SPIEXCHANGE(count); / 送復位指令 WAIT_SPI(); return;/ 讀取從地址"adress"開始的寄存器中的數據,共n個,存放在數組bn中 int RD2510(adress,n) int adress;
20、 int n; int j; a0=READ; a1=adress; for(j=0;j<n;j+) aj+2=0; count=n+2; / 指令、地址和要得到的數據量n SPIEXCHANGE(count); WAIT_SPI(); for(j=0;j<n;j+) bj=aj+2;/ 數據存到數組b中 return;/ 向從地址"adress"開始的寄存器寫入數據,共n個,數據存放數組bn中 void WR2510(adress,n) int adress; int n; int j; a0=WRITE; a1=adress; for(j=0;j<n;
21、j+) aj+2=bj; count=n+2; / 指令、地址和要寫入的數據量n SPIEXCHANGE(count); WAIT_SPI(); return;/ MCP2510芯片請求發送程序 void RTS2510(RTSn) int RTSn; a0=RTSRTSn; count=1; SPIEXCHANGE(count); / 發送MCP2510芯片,請求發送指令 WAIT_SPI(); return;/ 讀取MCP2510芯片的狀態 int GETS2510() a0=STA2510; a1=0; count=2; SPIEXCHANGE(count); / 讀取MCP2510芯片
22、狀態 WAIT_SPI(); b0=a1; / 狀態存到數組b中 return;/ 對MCP2510芯片進行位修改子程序 void BM2510(adress,mask,data) int adress; int mask; int data; a0=BITMOD; / 位修改指令 a1=adress; / 位修改寄存器地址 a2=mask; / 位修改屏蔽位 a3=data; / 位修改數據 count=4; SPIEXCHANGE(count); WAIT_SPI(); return;/ 設置MCP2510芯片為正常操作模式 void SETNORMAL() int k=1; BM2510
23、(CANCTRL,0xe0,0x00); / 設置為正常操作模式 do RD2510(CANSTAT,1); k=b0&0xe0; while(k); / 確認已進入正常操作模式 return;/ 對MCP2510進行初始化 void INIT2510() RESET2510(); / 使芯片復位 b0=0x02; b1=0x90; b2=0x07; WR2510(CNF3,3); / 波特率為 125 kbps b0=0x00; b1=0x00; WR2510(RXM0SIDH,2); b0=0x00; b1=0x00; WR2510(RXF0SIDH,2); / RX0接收,屏蔽位為0,過濾器為0 b0=0x00; WR2510(CANINTE,1); / CAN中斷不使能 SETNORMAL(); / 設置為正常操作模式 return;/ MCP2510芯片發送完成與否判斷,郵箱號為adress void TXCOMPLETE(adress)int adress; int k=1; do RD2510(adress,1); k=b0&0x08; while(k); / 確認是否已發送完畢 to add CLRWDT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國電建集團貴陽勘測設計研究院有限公司招聘筆試參考題庫含答案解析
- 2025年福建平潭綜合實驗區堤防工程建設有限公司招聘筆試參考題庫含答案解析
- 2025年浙江衢州開化縣城市建設投資集團有限公司招聘筆試參考題庫含答案解析
- 航天時代的增材制造-助力航空航天行業技術革新
- 半年財務工作回顧
- 2025年中國語音自動查詢系統市場現狀分析及前景預測報告
- 2025年中國螺旋絲型氣管插管項目投資可行性研究報告
- 2025年中國自行式升降機市場調查研究報告
- 2025年中國肌鈣蛋白Ⅰ檢測板血清市場調查研究報告
- 2025年中國經濟型固定式終端市場調查研究報告
- 活動安保方案及應急預案
- 2023-2024學年蘇州市振華中學中考沖刺卷數學試題含解析
- 牛津3000核心詞匯表注釋加音標1-4 完整版
- 某水電廠水工管理制度匯編
- 銀川傳統文化研究報告
- 農貿市場經營管理方案
- 老年人的跌倒預防培訓課件
- 醫院宣傳片拍攝方案
- 中國中產階級旅游調研報告旅行方式與關注景點分析
- 錯頜畸形預防課件
- 外立面改造方案
評論
0/150
提交評論