??? 摘? 要: 介紹了CAN控制器芯片" title="控制器芯片">控制器芯片MCP2510的功能、結(jié)構(gòu)和工作原理,提出了一種利用MCP2510芯片和MSP430單片機(jī)組成遠(yuǎn)程監(jiān)測(cè)系統(tǒng)" title="遠(yuǎn)程監(jiān)測(cè)系統(tǒng)">遠(yuǎn)程監(jiān)測(cè)系統(tǒng)的方案,并通過硬件電路和軟件的實(shí)現(xiàn)證明了其可行性和正確性,同時(shí)列舉了MCP2510在使用中的一些注意事項(xiàng)。
????關(guān)鍵詞: CAN? MCP2510? SPI? 遠(yuǎn)程監(jiān)測(cè)
?
??? 隨著各種復(fù)雜的機(jī)電一體化設(shè)備的不斷發(fā)展,需要有一種智能化程度更高、容錯(cuò)性和可靠性更強(qiáng)的設(shè)計(jì),使各種子系統(tǒng)通過網(wǎng)絡(luò)連接起來,以達(dá)到信息共享、減少布線、降低成本和提高總體可靠性的目的。CAN控制器局域網(wǎng)就是為了滿足這種需要而產(chǎn)生的。由于CAN控制器芯片具有卓越的性能,現(xiàn)已廣泛應(yīng)用于工業(yè)自動(dòng)化、監(jiān)控系統(tǒng)、醫(yī)療儀器、紡織機(jī)械、船舶運(yùn)輸、鐵路信號(hào)傳輸、自動(dòng)販賣機(jī)等眾多設(shè)備以及建筑、環(huán)境控制等領(lǐng)域中。
??? 目前,我國(guó)工業(yè)上應(yīng)用最廣泛的獨(dú)立CAN控制器芯片當(dāng)屬Philips公司的SJA1000。雖然它具有低成本、高可靠性、支持遠(yuǎn)距離通信等特點(diǎn),但它在應(yīng)用中也具有一些缺點(diǎn),比如地址總線和數(shù)據(jù)總線的分時(shí)復(fù)用,常導(dǎo)致接口效率低下;接收和發(fā)送緩沖器的個(gè)數(shù)太少,導(dǎo)致數(shù)據(jù)吞吐率低下;幀屏蔽器和過濾器的設(shè)置不夠靈活,不能滿足同時(shí)需要更多屏蔽和過濾條件的要求等。
??? 為了簡(jiǎn)化CAN總線接口應(yīng)用設(shè)計(jì),同時(shí)提高CAN總線通信的穩(wěn)定性和效率,采用新型的獨(dú)立CAN控制器芯片MCP2510設(shè)計(jì)一個(gè)變電站的CAN總線遠(yuǎn)程監(jiān)測(cè)系統(tǒng),有效地解決了以上問題。本文主要介紹MCP2510的結(jié)構(gòu)、原理及其在CAN總線遠(yuǎn)程監(jiān)測(cè)系統(tǒng)中的應(yīng)用。
1 MCP2510簡(jiǎn)介
??? MCP2510是Microchip公司推出的采用獨(dú)立CAN控制器的CAN總線控制器芯片,它完全符合CAN總線的2.0B技術(shù)規(guī)范,并帶有符合工業(yè)標(biāo)準(zhǔn)的SPI串行接口。MCP2510在目前市場(chǎng)上是體積最小、最易于使用也是最節(jié)約成本的獨(dú)立CAN控制器。將MCP2510和高性能的PIC單片機(jī)或MSP430單片機(jī)結(jié)合使用即可支持基于CAN總線的應(yīng)用。它能應(yīng)用于一些需實(shí)時(shí)控制的局域網(wǎng)場(chǎng)合,如汽車電器控制、樓宇防盜監(jiān)控系統(tǒng)、樓宇自動(dòng)化系統(tǒng)、智能住宅小區(qū)、安防系統(tǒng)、門禁系統(tǒng)等。使用獨(dú)立的CAN控制器的潛在優(yōu)勢(shì),系統(tǒng)設(shè)計(jì)人員可以大大擴(kuò)大單片機(jī)的選擇范圍而不必強(qiáng)求單片機(jī)必須內(nèi)含CAN總線控制模塊,對(duì)軟件稍作修改后就可以通過SPI接口和MCP2510交換數(shù)據(jù)。這樣,不需要更換單片機(jī)就可以在現(xiàn)有的系統(tǒng)上增加CAN總線的通信功能,使得幾乎任何單片機(jī)接入CAN總線都成為可能,系統(tǒng)開發(fā)人員可以從更多種類的單片機(jī)中選擇最合理、最理想的方案,從而達(dá)到了產(chǎn)品的快速更新、縮短上市時(shí)間、提高產(chǎn)品質(zhì)量的目的。MCP2510能夠發(fā)送和接收標(biāo)準(zhǔn)數(shù)據(jù)幀以及擴(kuò)展數(shù)據(jù)幀,并具有接收過濾功能和信息管理的功能。MCP2510通過其SI引腳同單片機(jī)進(jìn)行數(shù)據(jù)傳輸,最高數(shù)據(jù)傳輸速率" title="傳輸速率">傳輸速率可達(dá)1Mbps。單片機(jī)可以通過MCP2510與CAN總線上的其它單片機(jī)進(jìn)行通信。MCP2510內(nèi)含3個(gè)發(fā)送緩沖器,2個(gè)接收緩沖器,并且具有靈活的中斷能力、幀屏蔽和過濾、幀優(yōu)先級(jí)設(shè)定等特性。這些特點(diǎn)使得單片機(jī)對(duì)于CAN總線的操作變得非常簡(jiǎn)單。
??? MCP2510的主要功能如下:
??? ·支持CAN協(xié)議2.0A/2.0B
??? ·最大可編程波特率為1Mbps
??? ·有標(biāo)準(zhǔn)幀和擴(kuò)展幀兩種數(shù)據(jù)幀可供選擇,每個(gè)幀中的數(shù)據(jù)段長(zhǎng)為0-8字節(jié)
??? ·支持遠(yuǎn)程幀
??? ·內(nèi)含3個(gè)發(fā)送緩沖器和2個(gè)接收緩沖器,并且其優(yōu)先級(jí)可編程設(shè)定
??? ·內(nèi)含6個(gè)接收過濾器和2個(gè)接收過濾屏蔽器
??? ·具有Loop-Back(自環(huán)檢測(cè))模式
??? MCP2510的主要電氣特性如下:
??? ·工作電壓:2.7V-5.5V
??? ·具有低功耗睡眠狀態(tài)
??? ·工作電流:5mA(待機(jī)電流在5.5V下為10μA/5.5V)
??? ·工作溫度:I(-40℃-+85℃)、E(-40℃-+125℃)
??? ·具有高速SPI接口(5MHz/4.5V)
??? ·支持SPI 0.0和SPI 1.1兩種模式
??? ·具有6個(gè)中斷接口
??? ·具有可編程分頻系數(shù)的時(shí)鐘脈沖輸出引腳
??? ·具有可選擇使能的中斷輸出引腳
??? ·Buffer Full(接收緩沖器滿)輸出引腳可配置為中斷輸出端或普通數(shù)字輸出端
??? ·Request To Send(請(qǐng)求發(fā)送輸入)引腳可配置為立即發(fā)送數(shù)據(jù)命令輸入端或普通數(shù)字輸入端
2 MCP2510內(nèi)部結(jié)構(gòu)和工作原理
??? 圖1為MCP2510的內(nèi)部結(jié)構(gòu)與工作原理圖,CAN協(xié)議機(jī)主要負(fù)責(zé)與CAN總線的接口,SPI接口邏輯負(fù)責(zé)實(shí)現(xiàn)與單片機(jī)的接口,而緩沖器、過濾器和控制邏輯則負(fù)責(zé)實(shí)現(xiàn)各種工作模式的設(shè)定和操作控制。
?
?
??? MCP2510在CAN總線上的數(shù)據(jù)接收是通過兩個(gè)接收緩沖器、兩個(gè)接收屏蔽器、六個(gè)接收過濾器的組合來實(shí)現(xiàn)的。CAN總線上的幀只有同時(shí)滿足至少任意一個(gè)接收屏蔽器和一個(gè)接收過濾器的條件才可以進(jìn)入接收緩沖器。單片機(jī)通過SPI接口可以讀取接收緩存器數(shù)據(jù)。MCP2510對(duì)CAN總線的數(shù)據(jù)發(fā)送則沒有限制,只要用單片機(jī)通過SPI接口將待發(fā)送的數(shù)據(jù)寫入MCP2510的發(fā)送緩存器,然后再調(diào)用RTS(發(fā)送請(qǐng)求)命令即可將數(shù)據(jù)發(fā)送到CAN總線上。
??? MCP2510具有靈活的中斷管理功能,它有8個(gè)中斷源,包括發(fā)送、接收中斷,各種錯(cuò)誤中斷以及總線喚醒中斷等。單片機(jī)通過設(shè)置MCP2510的中斷允許控制字" title="控制字">控制字CANINTE設(shè)定和屏蔽各種中斷發(fā)生的條件,并通過讀取MCP2510的中斷標(biāo)志位控制字CANINTF判斷當(dāng)前中斷的中斷源。另外,判斷當(dāng)前中斷的中斷源也可以通過MCP2510的Read Status(讀狀態(tài)字)命令讀取CANSTAT控制字中的ICOD部分來完成。
3 遠(yuǎn)程監(jiān)測(cè)系統(tǒng)的硬件實(shí)現(xiàn)
??? 本文提出的遠(yuǎn)程監(jiān)測(cè)系統(tǒng)方案包括一個(gè)主系統(tǒng)控制器(控制臺(tái)工作站)和多個(gè)節(jié)點(diǎn)控制器(CAN遠(yuǎn)程監(jiān)測(cè)節(jié)點(diǎn)),其中面向測(cè)控對(duì)象的節(jié)點(diǎn)控制器由帶有標(biāo)準(zhǔn)SPI接口的MSP430單片機(jī)和MCP2510以及CAN總線接口器件82C250構(gòu)成,如圖2所示。MSP430單片機(jī)通過SPI接口與MCP2510進(jìn)行交互,將采樣并計(jì)算后的數(shù)據(jù)通過MCP2510發(fā)送到CAN總線上,以便被控制臺(tái)工作站監(jiān)控。各個(gè)節(jié)點(diǎn)控制器分布在不同的地理位置上,獨(dú)立地執(zhí)行一個(gè)完整的任務(wù)。在本系統(tǒng)中,節(jié)點(diǎn)控制器可對(duì)電動(dòng)機(jī)的電流、電壓和周圍溫度進(jìn)行監(jiān)測(cè)。利用CAN通信技術(shù)將所監(jiān)測(cè)的對(duì)象聯(lián)網(wǎng),使管理人員在控制臺(tái)的主監(jiān)控工作站上就可以觀察各個(gè)部分的情況,將遠(yuǎn)程和本地系統(tǒng)構(gòu)成一個(gè)整體,便于管理和監(jiān)測(cè)。另外,由于CAN總線是基于發(fā)送報(bào)文的,它不會(huì)對(duì)CAN控制節(jié)點(diǎn)進(jìn)行編碼,因而系統(tǒng)的可擴(kuò)展性比較好;并且,增刪CAN總線上的任何一個(gè)節(jié)點(diǎn)控制器,不會(huì)對(duì)其它的節(jié)點(diǎn)控制器造成任何影響。如果需要進(jìn)一步提高系統(tǒng)的穩(wěn)定性和抗干擾能力,可以在MCP2510和82C250之間再加一個(gè)光電隔離器來實(shí)現(xiàn)。
?
?
??? 圖3是此方案的節(jié)點(diǎn)控制器的硬件接口電路圖。
?
?
4 遠(yuǎn)程監(jiān)測(cè)系統(tǒng)的軟件實(shí)現(xiàn)
??? 由于本方案的數(shù)據(jù)傳輸是在PC機(jī)與單片機(jī)之間進(jìn)行的,并且在PC機(jī)上安裝了三興達(dá)公司的CAN適配卡,CAN適配卡通過雙絞線與CAN控制器接口器件82C250相連,所以PC機(jī)上的通信軟件是用CAN適配卡提供的驅(qū)動(dòng)程序在Visual Basic下編寫的,并且CAN通信的幀封裝和解幀都嚴(yán)格遵循CAN通信最常用的Hilon A協(xié)議。編程中要注意在PC機(jī)的收發(fā)狀態(tài)轉(zhuǎn)換時(shí),需要一定的延時(shí)。CAN總線節(jié)點(diǎn)要有效、實(shí)時(shí)地完成通信任務(wù),節(jié)點(diǎn)控制器的軟件設(shè)計(jì)是關(guān)鍵,也是難點(diǎn)。它主要包括節(jié)點(diǎn)初始化程序、報(bào)文發(fā)送程序、報(bào)文接收程序以及CAN總線出錯(cuò)處理程序等??紤]到本方案硬件電路的實(shí)現(xiàn),在MSP 430和MCP2510的SPI接口數(shù)據(jù)通信方面,將MSP430設(shè)置為主模式,而將MCP2510設(shè)置為從模式。為了最大程度地保證CAN總線通信的穩(wěn)定性和快速性,將MCP2510的數(shù)據(jù)傳輸速率選為80kbps,而將MSP430的UART模塊的波特率選為2Mbps,并結(jié)合MCP2510和MSP430的SPI接口完全實(shí)現(xiàn)了Hilon A協(xié)議棧,用于CAN通信幀的封裝和解包。
??? MCP2510正常工作之前,需要進(jìn)行正確地初始化,包括設(shè)置SPI接口的數(shù)據(jù)傳輸速率、CAN通信的波特率、MCP2510的接收過濾器和屏蔽器以及發(fā)送和接收中斷允許標(biāo)志位等。與SJA1000不同的是,單片機(jī)對(duì)MCP2510的接收緩沖器和發(fā)送緩存器的操作必須通過SPI接口用MCP2510內(nèi)置的讀寫命令來完成。
??? 圖4是MCP2510的SPI接口讀命令的時(shí)序圖。操作時(shí),單片機(jī)在向MCP2510提供時(shí)鐘脈沖SCK的同時(shí),先把讀命令和要讀的首地址發(fā)送到MCP2510的SI引腳,每個(gè)數(shù)據(jù)位在SCK的上升沿被鎖存。MCP2510在接收到讀命令和首地址后,在SCK的下降沿將讀取到的數(shù)據(jù)輸出到SO引腳。在數(shù)據(jù)從SO引腳輸出的過程中,SCK至少要持續(xù)到此數(shù)據(jù)輸出過程完成為止。若單片機(jī)只向MCP2510提供可以輸出一個(gè)字節(jié)數(shù)據(jù)的SCK,就是MCP2510的單字節(jié)讀操作。若單片機(jī)連續(xù)向MCP2510提供SCK,則在MCP2510的SO引腳上將連續(xù)輸出從首地址開始的連續(xù)地址空間的數(shù)據(jù),直到單片機(jī)停止向MCP2510提供SCK為止,這就是MCP2510的連續(xù)地址序列讀操作。而單片機(jī)供給MCP2510連續(xù)SCK的實(shí)現(xiàn)方法也很簡(jiǎn)單,就是一直向MCP2510的SI引腳輸出“0”字節(jié)即可,而每輸出一個(gè)“0”字節(jié),SO引腳上便會(huì)輸出一個(gè)字節(jié)的數(shù)據(jù)。
?
?
??? 圖5是MCP2510的SPI接口寫命令的時(shí)序圖。操作時(shí),單片機(jī)在向MCP2510提供時(shí)鐘脈沖SCK的同時(shí),把寫命令發(fā)送到MCP2510的SI引腳,每個(gè)數(shù)據(jù)位在SCK的上升沿被鎖存。然后再發(fā)送首地址和數(shù)據(jù)。和讀命令相似,如果單片機(jī)只提供可以寫入單字節(jié)的SCK,就是MCP2510的單字節(jié)寫操作。如果單片機(jī)提供連續(xù)的SCK,那么跟在首地址后面的數(shù)據(jù)將被連續(xù)寫入從首地址開始的連續(xù)地址空間,這就是MCP2510的連續(xù)地址序列寫操作。
?
?
??? 在程序設(shè)計(jì)中,對(duì)發(fā)送和接收緩存器的讀寫主要使用了連續(xù)地址序列讀寫操作" title="讀寫操作">讀寫操作,因?yàn)檫@樣可以避免反復(fù)地發(fā)送讀寫命令和地址,大大提高了程序運(yùn)行效率。
??? 除讀寫操作外,MCP2510還具有BitModify(位修改)、RESET(復(fù)位)和Request To Send(請(qǐng)求發(fā)送)等操作,其時(shí)序與讀寫操作差別不大。
??? 另外,在節(jié)點(diǎn)控制器的軟件實(shí)現(xiàn)中需要注意以下幾點(diǎn):
??? (1)MCP2510的Bit Timming(位定時(shí))要按照以下原則設(shè)定,否則將會(huì)造成MCP2510無法與MSP430進(jìn)行正常通信。
??? ·TQ= 2* (Baud Rate + 1)*TOSC
??? ·Nominal Bit Time = TQ * (Sync Seg + Prop Seg + Phase Seg1 + Phase Seg2)
??? ·Prop Seg + Phase Seg1 >= Phase Seg2
??? ·Prop Seg + Phase Seg1 >= TDELAY
??? ·Phase Seg2 > Sync Jump Width
??? 在此程序中,TOSC為0.125μs,將Baud Rate取值為4,則Normal Bit Time為10 TQ。按照以上幾條原則取Sync Seg為TQ、Prop Seg為2TQ、Phase Seg1為3TQ、Phase Seg2為4TQ、Sync Jump Width為3TQ、SAM為3。經(jīng)實(shí)際測(cè)試,以上參數(shù)可以保證正常的CAN總線通信。
??? (2)因?yàn)镸CP2510在初始化完成后默認(rèn)處于Configuration(配置)模式下,所以就需要在MCP2510的初始化完成后將其置為Normal(正常)模式,否則MCP2510將一直停留在Configuration模式下,不能進(jìn)行正常工作。將MCP2510置為Normal模式可通過使用MCP2510內(nèi)置的BitModify(位修改)指令向CANCTRL控制字寫入一個(gè)“0”字節(jié)來實(shí)現(xiàn)。
??? (3)在進(jìn)行MCP2510的“讀”操作時(shí),發(fā)送完“讀”指令及其地址碼之后,仍然需要向MCP2510提供時(shí)鐘,以接收“讀”到的數(shù)據(jù)。這可以通過向MCP2510發(fā)送一個(gè)“0”字節(jié)來實(shí)現(xiàn)。
??? (4)在對(duì)MCP2510做完任意操作后,都要延時(shí)一段時(shí)間,使其有足夠的時(shí)間來準(zhǔn)備接收下次操作的命令,防止出現(xiàn)MCP2510“忙”的情況。
??? (5)在對(duì)MCP2510做任何操作之前,都要由單片機(jī)向MCP2510的片選端CS輸出一個(gè)低電平,使MCP2510被選通。
??? (6)MSP430的UART模塊要選用同步SPI通信模式,以保證和MCP2510的通信是通過SPI接口進(jìn)行的。這可以通過將MSP430的控制字UCTL中的SYNC位置位來實(shí)現(xiàn)。
??? (7)在第一次向MSP430的TXBUF控制字寫入待發(fā)送的數(shù)據(jù)之前,MSP430的發(fā)送中斷允許標(biāo)志位(IE2中的UTXIE1)應(yīng)該處于復(fù)位狀態(tài),這樣可以防止還沒有發(fā)送任何數(shù)據(jù)就直接進(jìn)入發(fā)送中斷服務(wù)程序,造成通信無法正常進(jìn)行的情況。
??? (8)在MSP430的接收中斷服務(wù)程序中,要先處理完接收到的幀,再清除接收中斷標(biāo)志位。因?yàn)槿绻谶€沒有把當(dāng)前的幀數(shù)據(jù)處理完的情況下就清除了接收中斷標(biāo)志位,會(huì)造成立即開始接收新的幀數(shù)據(jù),這樣就很可能會(huì)造成當(dāng)前的幀數(shù)據(jù)在尚未被處理完畢時(shí)被新的幀覆蓋。
??? 以上介紹了CAN控制器芯片MCP2510,提出了一個(gè)利用MCP2510和MSP430單片機(jī)組成遠(yuǎn)程監(jiān)測(cè)系統(tǒng)的方案,并結(jié)合硬件電路和軟件的實(shí)現(xiàn)對(duì)其可行性和正確性進(jìn)行了證明。隨著CAN總線技術(shù)的進(jìn)一步推廣應(yīng)用,基于CAN總線的控制系統(tǒng)將會(huì)有廣闊的應(yīng)用前景,而MCP2510芯片也將在越來越多的領(lǐng)域中得到廣泛應(yīng)用。
參考文獻(xiàn)
1 鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(xué)出版社,1996
2 胡大可. MSP430系列Flash型超低功耗16位單片機(jī).北京:北京航空航天大學(xué)出版社,2001
3 Stand-Alone CAN Controller with SPI Interface.Microchip公司,2002 http://www.microchip.com/download/lit/pline/analog/interfce/can/21291e.pdf
4 Controller Area Network (CAN) Basics.Microchip公司,1999http://www.microchip.com/download/appnote/analog/can/00713a.pdf