摘 要:在此提出一種基于AT91RM9200處理器,并以MCP2510為CAN 控制器的智能節(jié)點(diǎn)設(shè)計(jì)方案。首先描述CAN智能節(jié)點(diǎn)硬件的設(shè)計(jì)原理并給出了選用的主要芯片的型號(hào);接著詳細(xì)描述CAN智能節(jié)點(diǎn)軟件設(shè)計(jì)流程;最后說(shuō)明CAN智能節(jié)點(diǎn)軟、硬件的調(diào)試方法。目前已完成CAN智能節(jié)點(diǎn)硬件和軟件的設(shè)計(jì)及調(diào)試,并成功移植到VxWorks 5.5操作系統(tǒng)上運(yùn)行,證明了該設(shè)計(jì)方案正確可行。
關(guān)鍵詞:CAN智能節(jié)點(diǎn); AT91RM9200; MCP2510; PCA82C250
中圖分類號(hào):TP302.1 文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2010)12-0026-03
Design of CAN Smart Node Based on AT91RM9200
HE Bing-lin,ZHANG Huan-wen,LIANG Zhu-yang,DU Qi-zhang
(Guangdong Electronic Technology Research Institute, Guangzhou 510630, China)
Abstract:A design solution of CAN smart node based on AT91RM9200 and MCP2510 is put forward. Firstly, the design principle of hardware for CAN smart node is depicted, and the type of selected chips is also presented. Then, the design flow of software for CAN smart node is depicted in detail. Finally, the debug method of hardware and software for CAN smart node is illustrated. Both the design and debug work of hardware and software for CAN smart node were finished, and it was migrated to run in VxWorks5.5 operating system successfully. The design solution is proved to be proper and feasible.
Keywords:CAN smart node; AT91RM9200; MCP2510; PCA82C250
近年來(lái)工業(yè)測(cè)控系統(tǒng)從傳統(tǒng)的集中測(cè)量控制系統(tǒng)轉(zhuǎn)向網(wǎng)絡(luò)化的集散控制系統(tǒng)[1]。隨著現(xiàn)場(chǎng)總線技術(shù)高速發(fā)展和標(biāo)準(zhǔn)化程度的不斷提高,以現(xiàn)場(chǎng)總線技術(shù)為基礎(chǔ)的開(kāi)放型集散測(cè)控系統(tǒng)得到廣泛應(yīng)用。總線是控制器局域網(wǎng)(controller area network,CAN)屬于現(xiàn)場(chǎng)總線范疇,是一種能有效支持分布式控制的串行通信網(wǎng)絡(luò),可將掛接在現(xiàn)場(chǎng)總線上作為網(wǎng)絡(luò)節(jié)點(diǎn)的智能設(shè)備連接成網(wǎng)絡(luò)系統(tǒng),并進(jìn)一步構(gòu)成集散測(cè)控系統(tǒng)[2]。
CAN智能節(jié)點(diǎn)位于傳感器和執(zhí)行機(jī)構(gòu)所在的現(xiàn)場(chǎng),在集散控制系統(tǒng)中起著承上啟下的作用。一方面,它必須和上位機(jī)進(jìn)行通信,以完成數(shù)據(jù)交換;另一方面,它根據(jù)系統(tǒng)的需要以完成測(cè)量與控制的功能。因此,CAN智能節(jié)點(diǎn)的設(shè)計(jì)在工業(yè)集散測(cè)控系統(tǒng)中有著十分重要的作用。本文將提出一種基于ARM9處理器AT91RM9200和CAN 控制器MCP2510構(gòu)建的CAN智能節(jié)點(diǎn)的設(shè)計(jì)方案,并介紹了該方案的軟硬件設(shè)計(jì)及調(diào)試方法。
1 硬件設(shè)計(jì)
CAN智能節(jié)點(diǎn)的設(shè)計(jì)涉及2個(gè)方面:需要實(shí)現(xiàn)的功能;如何實(shí)現(xiàn)CAN通信。因此本文基于AT91RM9200和MCP2510提出的CAN智能節(jié)點(diǎn)的設(shè)計(jì)框架如圖1所示。在此首先介紹主要芯片的特性,然后再說(shuō)明智能節(jié)點(diǎn)的設(shè)計(jì)原理。
圖1 智能節(jié)點(diǎn)框架
1.1 芯片特性
AT91RM9200是Atmel公司生產(chǎn)的一款A(yù)RM9處理器,它是完全圍繞ARM920T ARM Thumb處理器構(gòu)建的系統(tǒng)。它有豐富的系統(tǒng)與應(yīng)用外設(shè)及標(biāo)準(zhǔn)的接口,從而為低功耗、低成本、高性能的計(jì)算機(jī)寬范圍應(yīng)用提供一個(gè)單片解決方案[3]。
MCP2510是由美國(guó)微芯科技有限公司(Microchip Technology Inc.)生產(chǎn)的一款帶SPI接口的CAN協(xié)議控制器,完全支持CAN總線V2.0A/B技術(shù)規(guī)范;能夠發(fā)送和接收標(biāo)準(zhǔn)和擴(kuò)展報(bào)文,通信速率最高可達(dá)1 Mb/s,同時(shí)具備驗(yàn)收過(guò)濾以及報(bào)文管理功能;通過(guò)SPI接口與MCU進(jìn)行通信,最高數(shù)據(jù)傳輸速率高達(dá)5 Mb/s;包含3個(gè)發(fā)送緩沖器和2個(gè)接收緩沖器,還具有靈活的中斷管理能力[4]。所有這些特點(diǎn)使得MCU對(duì)CAN總線的操作變得非常簡(jiǎn)單。
PCA82C250是由Philips半導(dǎo)體公司生產(chǎn)的一款CAN收發(fā)器,是CAN協(xié)議控制器和物理傳輸線路之間的接口。它可以用高達(dá)1 Mb/s的位速率在2條有差動(dòng)電壓的總線電纜上傳輸數(shù)據(jù)[5]。
1.2 設(shè)計(jì)原理[6]
本文將CAN智能節(jié)點(diǎn)需要實(shí)現(xiàn)的功能統(tǒng)稱為功能模塊。由于AT91RM9200處理器具有豐富的系統(tǒng)與應(yīng)用外設(shè)及標(biāo)準(zhǔn)的接口,因此根據(jù)應(yīng)用的需要很容易就可實(shí)現(xiàn)功能模塊的擴(kuò)展。本文著重說(shuō)明AT91RM9200處理器如何實(shí)現(xiàn)CAN總線的擴(kuò)展。
AT91RM9200處理器提供4個(gè)SPI接口。其中MOSI(主機(jī)輸出從機(jī)輸入)、MISO(主機(jī)輸入從機(jī)輸出)、SPCK(串行時(shí)鐘)3個(gè)引腳信號(hào)由4個(gè)SPI接口共用;而4個(gè)片選信號(hào)NPCS0,NPCS1,NPCS2,NPCS3則用于分別選通4個(gè)SPI接口。而CAN控制器MCP2510的SPI接口引腳定義:SI(數(shù)據(jù)輸入)、SO(數(shù)據(jù)輸出)、SCK(時(shí)鐘輸入)、CS(片選輸入)。該設(shè)計(jì)將AT91RM9200第二個(gè)SPI接口與MCP2510的SPI接口相連(MOSISI,MISOSO,SPCKSCK,NPCS1CS),從而建立了它們之間通信的橋梁。同時(shí)將MCP2510芯片的中斷輸出引腳INT與AT91RM9200芯片的中斷輸入引腳IRQ5相連,從而可將MCP2510芯片產(chǎn)生的中斷(包括發(fā)送、接收、報(bào)文錯(cuò)誤、總線活動(dòng)喚醒、錯(cuò)誤等中斷)事件通知AT91RM9200處理器,讓其作出相應(yīng)的處理。
CAN控制器MCP2510可以通過(guò)串行數(shù)據(jù)發(fā)送引腳(TXCAN)和串行數(shù)據(jù)接收引腳(RXCAN)直接連接到CAN收發(fā)器PCA82C250。該設(shè)計(jì)為了實(shí)現(xiàn)MCP2510與PCA82C250之間的電流隔離,在它們之間放置了2個(gè)光耦。然而,在協(xié)議控制器和收發(fā)器之間使用光耦,通常會(huì)增加總線節(jié)點(diǎn)的循環(huán)延遲。光耦6N137的典型傳播延時(shí)為60 ns[7],比較適合傳輸速率小于等于125 Kb/s時(shí)的中低速應(yīng)用場(chǎng)合;而在傳輸速率在125 Kb/s ~1 Mb/s的高速應(yīng)用場(chǎng)合中,應(yīng)考慮使用傳播延時(shí)小于40 ns的高速光耦,如HCPL-7101。
CAN收發(fā)器PCA82C250通過(guò)有差動(dòng)發(fā)送和接收功能的2個(gè)總線終端CANH和CANL連接到總線電纜。PCA82C250的輸入引腳RS通過(guò)外接電阻Rext到地,可以選擇3種不同的工作模式。第1種是高速模式,支持最大的總線速度和/或長(zhǎng)度;第2種是斜率模式,其輸出轉(zhuǎn)換速度可故意降低以減少電磁輻射;第3種是準(zhǔn)備模式,其在電池供電并對(duì)功耗消耗非常低的應(yīng)用非常適合。該設(shè)計(jì)將PCA82C250的引腳RS外接阻值為47 kΩ的電阻,從而使它工作在斜率模式,這樣可以使用非屏蔽的總線電纜,降低系統(tǒng)的成本。但總線信號(hào)轉(zhuǎn)換速率被故意減低了,因此該設(shè)計(jì)只能應(yīng)用在傳輸速率小于等于125 Kb/s時(shí)的中低速應(yīng)用場(chǎng)合,相應(yīng)光耦選擇6N137即可。
2 軟件設(shè)計(jì) [8]
CAN智能節(jié)點(diǎn)軟件設(shè)計(jì)主要包括2個(gè)方面:CAN通信和CAN節(jié)點(diǎn)功能模塊的軟件設(shè)計(jì)。CAN節(jié)點(diǎn)功能模塊軟件的實(shí)現(xiàn)因需求而異,在此不做介紹。本文著重介紹CAN通信軟件的設(shè)計(jì),它主要由3部分組成:CAN初始化、CAN發(fā)送數(shù)據(jù)、CAN接收數(shù)據(jù)。
2.1 CAN初始化
由圖2(a)可知,CAN初始化主要包括PIOA端口初始化、SPI初始化、MCP2510初始化、中斷初始化。現(xiàn)分別介紹如下:
(1) PIOA端口初始化。由于AT91RM9200每個(gè)引腳可配置為通用功能I/O線或與1個(gè)或2個(gè)外設(shè)I/O復(fù)用的I/O線。因此必須通過(guò)軟件配置PIOA端口:將PA0,PA1,PA2,PA4引腳分別定義為MISO,MOSI,SPCK,NPCS1,從而完成CAN智能節(jié)點(diǎn)SPI接口的定義;將PA3引腳定義為IRQ5,從而完成CAN智能節(jié)點(diǎn)中斷信號(hào)的定義。
(2) SPI初始化。通過(guò)PIOA端口初始化,只是完成SPI接口的引腳定義。為了使SPI接口能夠正常工作,首先配置電源管理控制器(PMC)以使能SPI時(shí)鐘;如果允許SPI中斷請(qǐng)求,必須對(duì)高級(jí)中斷控制器(AIC)進(jìn)行配置;最后通過(guò)SPI的模式寄存器SPI_MR。指定SPI為主機(jī)模式、固定外設(shè)選擇、SPI時(shí)鐘為MCK、片選信號(hào)NPCS1有效;通過(guò)SPI的片選1寄存器SPI_CSR1指定SPCK時(shí)鐘極性、時(shí)鐘相位以支持MCP2510的(0,0)或(1,1)的SPI模式,指定SPI接口以8位數(shù)據(jù)進(jìn)行傳輸匹配MCP2510的命令及數(shù)據(jù)格式,指定SPI的串行時(shí)鐘波特率以匹配與MCP2510的通信。
(3) MCP2510初始化。在完成PIOA端口、SPI初始化的基礎(chǔ)上,即可按照?qǐng)D2(a)虛線框中的流程進(jìn)行MCP2510初始化:首先必須使MCP2510進(jìn)入配置模式;然后對(duì)MCP2510相關(guān)寄存器(位定時(shí)配置寄存器、接收濾波寄存器、接收屏蔽寄存器、引腳控制和狀態(tài)寄存器)進(jìn)行配置;最后使MCP2510進(jìn)入正常模式。根據(jù)MCP2510提供的SPI命令集(讀指令、寫(xiě)指令、請(qǐng)求發(fā)送指令、狀態(tài)讀指令、位修改指令、復(fù)位指令),可以通過(guò)對(duì)AT91RM9200的SPI接收數(shù)據(jù)寄存器SPI_RDR,SPI發(fā)送數(shù)據(jù)寄存器SPI_TDR,SPI狀態(tài)寄存器SPI_SR的操作實(shí)現(xiàn)相應(yīng)的函數(shù):McpRdByte(),McpWrByte(),WriteRTS(),McpRdStatus(),BitModify(),McpReset()。軟件通過(guò)這些基本的指令函數(shù)完成MCP2510相關(guān)寄存器的配置。
(4) 中斷初始化。通過(guò)AT91RM9200的高級(jí)中斷控制器(AIC),首先配置IRQ5中斷的優(yōu)先級(jí)為最高,中斷觸發(fā)類型為下降沿觸發(fā);接著將中斷服務(wù)程序IRQ5_ISR()的地址設(shè)置到中斷向量寄存器;最后使能IRQ5中斷。
2.2 CAN發(fā)送數(shù)據(jù)
當(dāng)完成CAN的初始化后,即可使用3個(gè)發(fā)送緩沖器發(fā)送報(bào)文數(shù)據(jù)。由圖2(b)可知:在發(fā)送數(shù)據(jù)前,首先通過(guò)發(fā)送緩沖器N(N=0,1,2)控制寄存器TXBNCTRL終止報(bào)文發(fā)送,并設(shè)定發(fā)送緩沖器N報(bào)文發(fā)送的優(yōu)先級(jí);接著通過(guò)發(fā)送緩沖器N標(biāo)準(zhǔn)標(biāo)識(shí)符高低位寄存器TXBNSIDH,TXBNSIDL設(shè)定標(biāo)準(zhǔn)標(biāo)識(shí)符,如果報(bào)文采用擴(kuò)展標(biāo)識(shí)符,還需通過(guò)發(fā)送緩沖器N擴(kuò)展標(biāo)識(shí)符高低位寄存器TXBNEID8,TXBNEID0設(shè)定擴(kuò)展標(biāo)識(shí)符。
當(dāng)發(fā)送緩沖器N相關(guān)寄存器初始化后,發(fā)送任務(wù)處于休眠等待狀態(tài)。一旦有數(shù)據(jù)需要發(fā)送,即可將需要發(fā)送的數(shù)據(jù)(每次最多8 B)存放在發(fā)送緩沖器N的數(shù)據(jù)寄存器TXBND7~ TXBND0,并且通過(guò)送緩沖器N的數(shù)據(jù)長(zhǎng)度寄存器TXBNDLC設(shè)定每次發(fā)送的字節(jié)數(shù),最后通過(guò)發(fā)送緩沖器N控制寄存器TXBNCTRL啟動(dòng)數(shù)據(jù)發(fā)送。當(dāng)數(shù)據(jù)發(fā)送完畢,發(fā)送任務(wù)又處于休眠等待狀態(tài)。
2.3 CAN接收數(shù)據(jù)
當(dāng)完成CAN的初始化后,即可使用兩個(gè)接收緩沖器接收?qǐng)?bào)文數(shù)據(jù)。由圖2(c)可知:在接收數(shù)據(jù)前,首先通過(guò)接收緩沖器N(N=0,1)控制寄存器RXBNCTRL,設(shè)定接收緩沖器的工作模式為接收符合濾波條件的所有帶擴(kuò)展標(biāo)識(shí)符或標(biāo)準(zhǔn)標(biāo)識(shí)符的有效報(bào)文;如果允許MCP2510接收中斷,還需通過(guò)中斷使能寄存器CANINTE,允許接收緩沖器N裝入報(bào)文時(shí)產(chǎn)生中斷。
當(dāng)接收緩沖器N相關(guān)寄存器初始化后,接收任務(wù)處于休眠等待狀態(tài)。當(dāng)接收任務(wù)通過(guò)輪詢或中斷方法發(fā)現(xiàn)需要接收數(shù)據(jù)時(shí),它通過(guò)接收緩沖器N標(biāo)準(zhǔn)標(biāo)識(shí)符高低位寄存器RXBNSIDH,RXBNSIDL獲取標(biāo)準(zhǔn)標(biāo)識(shí)符;如果收到的報(bào)文是擴(kuò)展幀,可通過(guò)RXBNSIDL及接收緩沖器N擴(kuò)展標(biāo)識(shí)符中間、低位寄存器RXBNEID8,RXBNEID0獲取擴(kuò)展標(biāo)識(shí)符;通過(guò)接收緩沖器N數(shù)據(jù)長(zhǎng)度碼寄存器RXBNDLC獲取接收到的數(shù)據(jù)字節(jié)個(gè)數(shù),進(jìn)而通過(guò)接收緩沖器N數(shù)據(jù)寄存器RBNDm7~ RBNDm0獲取接收?qǐng)?bào)文中的數(shù)據(jù)信息。當(dāng)數(shù)據(jù)接收完畢,接收任務(wù)又處于休眠等待狀態(tài)。
圖2 軟件流程圖
3 軟硬件調(diào)試
當(dāng)CAN智能節(jié)點(diǎn)的硬件和軟件設(shè)計(jì)完畢,需要對(duì)其進(jìn)行軟、硬件的調(diào)試以驗(yàn)證其設(shè)計(jì)的正確性。CAN智能節(jié)點(diǎn)軟、硬件調(diào)試按以下步驟依次進(jìn)行:
(1)CAN自發(fā)、自收功能調(diào)試。只要在CAN初始化過(guò)程完成MCP2510相關(guān)寄存器的配置,將MCP2510設(shè)置為環(huán)回模式,即可使MCP2510器件內(nèi)部發(fā)送緩沖器和接收緩沖器之間進(jìn)行報(bào)文自發(fā)、自收,而無(wú)需通過(guò)CAN總線。
(2) CAN通信功能調(diào)試。按照?qǐng)D3所示方案進(jìn)行CAN通信功能的調(diào)試。其中USB-CAN適配器采用武漢吉陽(yáng)光電科技有限公司一款帶有USB接口和1路CAN接口的GY8507 USB-CAN總線適配器。通過(guò)該適配器,PC可以通過(guò)USB接口連接一個(gè)標(biāo)準(zhǔn)CAN網(wǎng)絡(luò),從而與CAN智能節(jié)點(diǎn)通信[9]。使用廠家提供的CANTools工具軟件可以方便進(jìn)行CAN智能節(jié)點(diǎn)數(shù)據(jù)的發(fā)送和接收調(diào)試。
(3) CAN功能模塊調(diào)試。由于CAN智能節(jié)點(diǎn)具體實(shí)現(xiàn)的功能各異,不詳細(xì)介紹CAN功能模塊的調(diào)試。
4 結(jié) 語(yǔ)
目前已完成CAN智能節(jié)點(diǎn)通信電路的軟、硬件設(shè)圖3 CAN調(diào)試框圖
計(jì)及調(diào)試,并成功將軟件移植到VxWorks 5.5操作系統(tǒng)上運(yùn)行。基于功能強(qiáng)大的AT91RM9200處理器以及高可靠和強(qiáng)實(shí)時(shí)的VxWorks 5.5操作系統(tǒng)[10],容易構(gòu)建出滿足應(yīng)用需求的CAN智能節(jié)點(diǎn)。
參考文獻(xiàn)
[1]劉學(xué)軍,萬(wàn)曼影,師好智.基于AT91RM9200的CAN-Ethernet間的智能網(wǎng)關(guān)的設(shè)計(jì)[J].微型電腦應(yīng)用,2006,22(4):40-42.
[2]尹曉方.CAN智能節(jié)點(diǎn)的設(shè)計(jì)[J].國(guó)外電子元器件,2004 (5):19-21.
[3]Atmel Corporation. AT91RM9200 datasheet[M]. Atmel Corporation, 2003.
[4]Microchip Technology Inc. MCP2510 datasheet[M]. Microchip Technology Inc, 2004.
[5]Philips Semiconductors. PCA82C250 datasheet[M]. Philips Semiconductors, 2000.
[6]師武旗,孫俊濤,徐洪建,等.一種CAN總線智能節(jié)點(diǎn)的設(shè)計(jì)[J].電子產(chǎn)品世界,2005(10):96-97.
[7]Fairchild Semiconductor Corporation. 6N137 datasheet[M]. Fairchild Semiconductor Corporation, 2005.
[8]周治國(guó),王佳,賀春妮,等.基于ARM9的CAN控制器VxWorks驅(qū)動(dòng)開(kāi)發(fā)[C].上海:中國(guó)儀器儀表學(xué)會(huì)、中國(guó)電子學(xué)會(huì)2008年醫(yī)療儀器學(xué)術(shù)年會(huì),2008.
[9]武漢吉陽(yáng)光電科技有限公司.GY8507 USB-CAN 適配器使用說(shuō)明書(shū)V2.1[M].武漢:武漢吉陽(yáng)光電科技有限公司,2009.
[10]Wind River Systems Inc.. VxWorks programmer′s guide 5.5[M]. Wind River Systems Inc.. 2002.