張 君,郭陽(yáng)寬,祝連慶,那云,孟曉辰
(北京信息科技大學(xué)儀器科學(xué)與光電工程學(xué)院,北京 100192)
CAN總線(xiàn)具有傳輸距離遠(yuǎn)、傳輸速率高、抗干擾能力強(qiáng)、易于組網(wǎng)、成本低等優(yōu)點(diǎn)[1]。目前CAN總線(xiàn)與PC連接普遍采用RS232、RS485和ISA等傳統(tǒng)接口技術(shù),它們存在著傳輸速度慢、功耗高、安裝復(fù)雜等缺點(diǎn)。USB接口技術(shù)以其傳輸速度快、集成化程度高、支持熱插拔、即插即用、無(wú)需外接電源和連接簡(jiǎn)單等優(yōu)點(diǎn)得到了廣泛的應(yīng)用[2]。因此,使用USB作為CAN總線(xiàn)與PC連接的接口,將極大提高通信的速度和通信的可靠性。DSP具有成本低、功耗低、處理消息速度快等優(yōu)點(diǎn),在通信和工業(yè)產(chǎn)品中得到了廣泛的應(yīng)用。用DSP作為USB與CAN之間的微處理器,可以完成信息的實(shí)時(shí)讀取、處理和傳輸?shù)墓δ堋?/p>
1.1總體結(jié)構(gòu)
如圖1所示,系統(tǒng)主要由USB總線(xiàn)接口、微處理器TMS320F2812和 CAN總線(xiàn)接口組成。
圖1系統(tǒng)框圖
其中USB總線(xiàn)接口負(fù)責(zé)PC和微處理器TMS320F2812之間消息的交換;CAN總線(xiàn)接口負(fù)責(zé)CAN節(jié)點(diǎn)與微處理器TMS320F2812之間消息的交換;微處理器TMS320F2812用于將USB總線(xiàn)接口和CAN總線(xiàn)接口連接起來(lái),實(shí)現(xiàn)對(duì)USB與CAN總線(xiàn)上消息的讀取,處理和傳輸?shù)墓δ堋?/p>
1.2USB總線(xiàn)接口的硬件設(shè)計(jì)
USB總線(xiàn)接口的硬件電路連接框圖如圖2所示,主要由USB接口芯片CY7C68013和微處理器TMS320F2812構(gòu)成。CY7C68013內(nèi)部集成了USB2.0收發(fā)器、SIE、增強(qiáng)的8051微控制器和可編程的外圍接口。工作在48MHz晶振下時(shí),指令執(zhí)行的速度遠(yuǎn)快于標(biāo)準(zhǔn)的8051單片機(jī)。設(shè)計(jì)采用CY7C68013的SLAVE FIFO模式,在此模式下,CY7C68013內(nèi)部CPU不參與消息的傳輸,而是由外部的微處理器直接控制CY7C68013 中FIFO消息的讀寫(xiě)。微處理器TMS320F2812作為控制核心,產(chǎn)生USB的片選信號(hào)、端點(diǎn)選擇和讀寫(xiě)信號(hào)控制CY7C68013進(jìn)行消息傳輸。
圖2 硬件電路連接框圖
在圖2中,CY7C68013經(jīng)過(guò)16位雙向數(shù)據(jù)總線(xiàn)FD連接至TMS320F2812,通過(guò)SLOE引腳控制輸出。FIFOADR[1:0]引腳用于選擇4個(gè)FIFO端點(diǎn)緩沖區(qū)中的一個(gè)與XD總線(xiàn)連接。SLRD和SLWR分別是FIFO的讀寫(xiě)選通信號(hào)。FLAGA-C用于表示CY7C68013芯片內(nèi)部數(shù)據(jù)緩沖區(qū)的狀態(tài),其直接與DSP的IO引腳相連。
1.3CAN總線(xiàn)接口的硬件設(shè)計(jì)
TMS320F2812芯片上集成了一個(gè)完整的增強(qiáng)型CAN控制器,即eCAN,其為CPU提供了完整的CAN2.0B協(xié)議,因此,設(shè)計(jì)電路時(shí)不必外接控制器就可以實(shí)現(xiàn)CAN總線(xiàn)的底層協(xié)議[3]。TMS320F2812內(nèi)部CAN控制器只有通過(guò)CAN收發(fā)器才能與外部進(jìn)行通信,因此采用外接PCA82C250作為CAN的收發(fā)器。PCA82C250是CAN協(xié)議控制器和物理總線(xiàn)間的接口,該器件對(duì)總線(xiàn)提供差動(dòng)發(fā)送能力,對(duì)CAN控制器提供差動(dòng)接收能力,負(fù)擔(dān)著節(jié)點(diǎn)邏輯電平和CAN總線(xiàn)差動(dòng)電平之間的電平轉(zhuǎn)換任務(wù)。PCA82C250可以增大通信距離,提高系統(tǒng)的瞬間抗干擾能力,保護(hù)總線(xiàn),降低射頻干擾實(shí)現(xiàn)熱防護(hù)[4]。基于TMS320F2812的CAN總線(xiàn)接口硬件電路如圖3所示。
圖3 CAN總線(xiàn)接口硬件電路圖
在圖3中,引腳CANRX,CANTX分別是DSP內(nèi)部CAN控制器模塊的接收、發(fā)送引腳,其直接與PCA82C250的RXD和TXD引腳相連。CANH和CANL為差分輸出,2個(gè)引腳分別通過(guò)1個(gè)限流電阻與CAN總線(xiàn)相連,該限流電阻可以克服長(zhǎng)線(xiàn)效應(yīng),減小通信介質(zhì)中信號(hào)的反射。引腳RS用于工作模式的選擇。通過(guò)外接1個(gè)22 kΩ的斜率電阻,使系統(tǒng)工作在斜率模式下,該模式允許使用非屏蔽雙絞線(xiàn)或平行線(xiàn)作為總線(xiàn),可降低射頻干擾。
系統(tǒng)軟件設(shè)計(jì)主要包括CY7C68013固件程序的設(shè)計(jì)、CAN程序的設(shè)計(jì)以及應(yīng)用程序的設(shè)計(jì)。
2.1固件程序設(shè)計(jì)
固件程序是指存儲(chǔ)在USB接口芯片內(nèi)部,用于輔助設(shè)備完成預(yù)期功能的程序。該程序主要完成USB接口芯片內(nèi)部的初始化,處理主機(jī)的設(shè)備請(qǐng)求,以及完成外圍電路的控制等[5]。Cypress公司為CY7C68013的固件開(kāi)發(fā)提供了固件程序框架和相關(guān)的庫(kù)文件,為了實(shí)現(xiàn)特定的功能,只需要在TD_Init()、TD_Poll()等函數(shù)中配置需要使用的端點(diǎn),選擇合適的傳輸方式,添加實(shí)現(xiàn)功能的代碼等[6]。
系統(tǒng)上電后,固件程序首先初始化內(nèi)部的狀態(tài)變量,然后調(diào)用初始化函數(shù)TD_Init(),當(dāng)程序從此函數(shù)返回后,固件程序就會(huì)設(shè)置USB接口成為未配置的狀態(tài)并且使能中斷,接下來(lái),在1 s的間隔內(nèi)重新列舉設(shè)備,并直到端點(diǎn)0接收到設(shè)置封包為止。一旦設(shè)置封包被檢測(cè)到,固件程序?qū)㈤_(kāi)始交互的任務(wù)調(diào)度[6]。為使系統(tǒng)能夠快速、可靠地傳輸消息,采用自動(dòng)批量傳輸。將端點(diǎn)2設(shè)置為OUT型,負(fù)責(zé)傳輸PC的消息;將端點(diǎn)6設(shè)置為IN型,負(fù)責(zé)接收CAN總線(xiàn)上的消息。以下是在Keil C51環(huán)境下編寫(xiě)的以C語(yǔ)言為基礎(chǔ)的固件程序的主要代碼。
void TD_Init(void)
{IFCONFIG |= 0xCB;//異步從FIFO模式,使用內(nèi)部的48MHz的時(shí)鐘頻率
……..
//初始化端點(diǎn)2的輸出的程序段
EP2CFG = 0xA2;
EP2FIFOCFG=0x10;
// 初始化端點(diǎn)6的輸入的程序段
EP6CFG = 0xE2;
EP6FIFOCFG=0x0C;
……..
//FLAGA標(biāo)志端點(diǎn)2的空,F(xiàn)LAGB標(biāo)志端點(diǎn)6的滿(mǎn)
PINFLAGSAB=0xE8;
}
2.2CAN程序設(shè)計(jì)
系統(tǒng)CAN總線(xiàn)通信工作原理為:在程序初始化中,根據(jù)系統(tǒng)要求對(duì)CAN寄存器進(jìn)行初始化;DSP對(duì)CAN總線(xiàn)通信的管理包括發(fā)送信息和接收信息。 TMS320F2812中的eCAN模塊主要由CAN協(xié)議內(nèi)核和消息控制器構(gòu)成。CAN協(xié)議內(nèi)核主要完成消息解碼,并向接收緩沖發(fā)送解碼后的消息,同時(shí)根據(jù)CAN協(xié)議向總線(xiàn)發(fā)送消息,消息控制器決定接收到的消息的取舍[7]。對(duì)具體系統(tǒng)的總線(xiàn)通信軟件部分的設(shè)計(jì)包括應(yīng)用層協(xié)議制定和實(shí)施,明確各節(jié)點(diǎn)的功能以及相互交互的數(shù)據(jù),規(guī)定每位數(shù)據(jù)的確切含義以及要做的響應(yīng)處理[5]。因此,在軟件設(shè)計(jì)中,主要完成3部分程序的設(shè)計(jì):初始化程序、發(fā)送消息程序以及接收消息程序。
2.2.1初始化程序設(shè)計(jì)
CAN模塊初始化包括:時(shí)鐘使能,引腳定義,波特率設(shè)定等。首先,關(guān)閉看門(mén)狗,通過(guò)配置PLLCR、PCLKCR寄存器,對(duì)時(shí)鐘和頻率進(jìn)行設(shè)置;其次,配置DSP寄存器GPMFUX的位6和位7,使CANTX和CANRX引腳作為CAN的通信接口引腳;然后,配置與波特率相關(guān)的3個(gè)寄存器(SCSR1、BCR1和BCR2);最后,對(duì)中斷進(jìn)行設(shè)置,主要包括郵箱中斷屏蔽寄存器CANMIM以及郵箱中斷級(jí)別設(shè)置寄存器CANMIL的配置。只有當(dāng)CAN總線(xiàn)控制器進(jìn)入復(fù)位模式時(shí),才能進(jìn)行初始化,而當(dāng)初始化完成后,控制器的復(fù)位標(biāo)志必須清除。
2.2.2發(fā)送消息和接收消息程序設(shè)計(jì)
CAN總線(xiàn)采用“載波檢測(cè),多主掌控、沖突避免(CSMA/CA)”的通信模式,以報(bào)文為單位進(jìn)行消息傳輸[7]。發(fā)送消息的過(guò)程如圖4所示。發(fā)送消息時(shí),需要初始化發(fā)送郵箱,主要包括設(shè)置郵箱使能寄存器CANME,郵箱數(shù)據(jù)方向寄存器CANMD,通過(guò)寄存器MBOXn.MSGID(n=0-31)設(shè)置發(fā)送郵箱的ID,初始化后,向消息寄存器中寫(xiě)入要發(fā)送的消息,然后設(shè)置發(fā)送郵箱的TRS位為1,請(qǐng)求發(fā)送信息,等待傳輸響應(yīng)位TA=1,表示成功發(fā)送消息,最后清除發(fā)送響應(yīng)標(biāo)志位,等待下次發(fā)送信息。
接收消息的過(guò)程如圖5所示。接收消息時(shí),同樣需要初始化相應(yīng)的接收郵箱,完成初始化后,如果接收郵箱的ID與CAN接口發(fā)送來(lái)的消息的ID匹配,并成功接收,則接收郵箱掛起寄存器RMP的相應(yīng)位被置1,當(dāng)CPU讀取完接收郵箱中的消息后,接收郵箱掛起寄存器的標(biāo)志位被清除,等待下一條消息的接收。
圖4 發(fā)送消息流程圖
圖5 接收消息流程圖
2.3應(yīng)用程序設(shè)計(jì)
系統(tǒng)中,TMS320F2812實(shí)現(xiàn)2個(gè)功能:實(shí)現(xiàn)USB與CAN之間雙向的消息傳輸;完成CAN控制器的初始化和輸出USB控制器所需要的信號(hào)。
圖6為消息由USB發(fā)向CAN的軟件流程圖。DSP采用查詢(xún)方式接收USB傳來(lái)的消息,當(dāng)USB芯片端點(diǎn)2不為空時(shí),DSP就將該端點(diǎn)緩沖區(qū)的消息讀進(jìn)來(lái)進(jìn)行處理,否則一直等待。經(jīng)過(guò)處理后的消息放入到發(fā)送郵箱的緩沖區(qū)中,由CAN收發(fā)器發(fā)送給相應(yīng)的CAN節(jié)點(diǎn)。圖7為消息由CAN發(fā)向USB的軟件流程圖。DSP通過(guò)中斷方式接收CAN總線(xiàn)上的消息,當(dāng)中斷發(fā)生時(shí),DSP響應(yīng)中斷,把存儲(chǔ)在接收郵箱緩沖區(qū)中的消息讀取出來(lái),經(jīng)過(guò)處理后,發(fā)送給USB芯片端點(diǎn)6。當(dāng)USB芯片端點(diǎn)6不滿(mǎn)時(shí),DSP就將消息放入端點(diǎn)6的緩沖區(qū)中,從而傳送給上位機(jī),否則一直等待。
圖6 USB至CAN流程圖
圖7 CAN至USB流程圖
系統(tǒng)測(cè)試如圖8所示。利用CAN調(diào)試器作為CAN總線(xiàn)接口的節(jié)點(diǎn),與PCA82C250實(shí)時(shí)通信。PC通過(guò)Cypress USB Console界面向CAN節(jié)點(diǎn)發(fā)送消息并接收來(lái)自該節(jié)點(diǎn)的消息。USB接口工作在高速模式下,負(fù)責(zé)PC與DSP之間消息的傳輸。CAN收發(fā)器負(fù)責(zé)DSP與CAN節(jié)點(diǎn)之間消息的傳輸。首先,在固件程序中設(shè)置端點(diǎn)2是輸出,端點(diǎn)6是輸入。DSP中設(shè)置0號(hào)郵箱是發(fā)送,16號(hào)郵箱是接收。其次,通過(guò)USB界面把固件程序下載到CY7C68013中,并選擇CAN調(diào)試器的傳輸速率為800 kbit/s.
圖8系統(tǒng)測(cè)試方框圖
圖9USB Console發(fā)送消息界面
圖10CAN調(diào)試器接收消息界面
圖11CAN調(diào)試器發(fā)送消息界面
圖12USB Console接收消息界面
經(jīng)過(guò)多次測(cè)試,當(dāng)USB控制器工作在高速模式,CAN收發(fā)器工作在800 kbit/s的傳輸速率下,PC和CAN調(diào)試器均準(zhǔn)確的收到消息。系統(tǒng)將USB的快速傳輸消息的特點(diǎn)和CAN總線(xiàn)通信的高性能、高可靠性的優(yōu)點(diǎn)結(jié)合起來(lái),通過(guò)硬件電路的設(shè)計(jì)以及相關(guān)程序的編寫(xiě),實(shí)現(xiàn)消息快速、可靠的傳輸。
參考文獻(xiàn):
[1]饒運(yùn)濤,鄒繼軍,王進(jìn)宏,等.現(xiàn)場(chǎng)總線(xiàn)CAN 原理與應(yīng)用技術(shù).北京:北京航空航天大學(xué)出版社,2007.
[2]劉吉名,裘東興.基于CY7C68013的USB2.0數(shù)據(jù)傳輸模塊設(shè)計(jì).電子測(cè)量技術(shù),2008(3):94-96.
[3]李洪波.基于DSP的CAN總線(xiàn)節(jié)點(diǎn)的研究與通信實(shí)現(xiàn).哈爾濱理工大學(xué)學(xué)報(bào),2005,2(10):72-75.
[4]佟俐,潘宏俠,胡田.基于TMS320F2812的CAN總線(xiàn)通信系統(tǒng).儀表技術(shù)與傳感器,2008(10):36-38.
[5]黃艷芳,趙晶.基于CAN-USB總線(xiàn)的機(jī)車(chē)滾動(dòng)軸承檢測(cè)系統(tǒng)的設(shè)計(jì).電子測(cè)量技術(shù),2009,4(32):12-16.
[6]孟浩.基于EZ-USB FX2的CMOS圖像采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).儀器儀表學(xué)報(bào),2007,4(28):333-334.
[7]蔡昌新.eCAN接口的設(shè)計(jì)與實(shí)現(xiàn).長(zhǎng)江大學(xué)學(xué)報(bào)(自科科學(xué)版),2007,理工卷(2):93-95.