使用USB接口芯片CH372實現(xiàn)CAN適配器的軟硬件設(shè)計
利用芯片CH372可在不了解任何USB協(xié)議或固件程序甚至驅(qū)動程序的情況下,輕松地將并口或串口產(chǎn)品升級到USB接口。該系統(tǒng)在工業(yè)現(xiàn)場較之以往的系統(tǒng),可以更加靈活、高速、高效地完成大量數(shù)據(jù)交換,并可應(yīng)用于多種控制系統(tǒng)之中,具有很大的應(yīng)用價值。
引言
現(xiàn)場總線網(wǎng)絡(luò)技術(shù)的實現(xiàn)需要與計算機(jī)相結(jié)合。目前,在微機(jī)上擴(kuò)展CAN總線接口設(shè)備一般采用PCI總線或者RS-232總線。PCI雖然仍是高速外設(shè)與計算機(jī)接口的主要渠道,但其主要缺點是占用有限的系統(tǒng)資源、擴(kuò)展槽地址;中斷資源有限;并且插拔不方便;價格較貴;而且設(shè)計復(fù)雜、需有高質(zhì)量的驅(qū)動程序保證系統(tǒng)的穩(wěn)定;且無法用于便攜式計算機(jī)的擴(kuò)展;RS-232雖然插拔方便,但是傳輸速率太慢。
本文的設(shè)計思想是通過使用USB接口芯片CH372,將計算機(jī)與CAN網(wǎng)絡(luò)控制節(jié)點參數(shù)相互準(zhǔn)確快速地傳輸。CH372是一種USB總線通用接口芯片,在計算機(jī)系統(tǒng)中,通過CH372的配套軟件可提供簡潔易用的操作接口,從而使其與本地端的單片機(jī)通訊就如同讀寫硬盤中的文件一樣簡單,由于CH372屏蔽了USB通訊中的所有協(xié)議,因而可在計算機(jī)應(yīng)用層與本地端控制器之間提供端對端的連接,在不需要了解任何USB協(xié)議或者固件程序甚至驅(qū)動程序的情況下,就可輕松地將并口、串口產(chǎn)品升級到USB接口。
CAN適配器用于完成USB總線和CAN總線之間的數(shù)據(jù)交換。使用MCU統(tǒng)籌安排數(shù)據(jù)在USB總線和CAN總線之間的數(shù)據(jù)交換。以MCU為界可以將硬件分為兩部分:一是MCU和USB總線交換數(shù)據(jù);二是MCU控制CAN控制器,完成CAN數(shù)據(jù)包到CAN總線位序列協(xié)議解釋,該系統(tǒng)結(jié)構(gòu)如圖1所示。
硬件設(shè)計
USB接口電路在微控制器和USB接口的選擇上有兩種方式:一種是采用具備USB通訊功能的微處理器。隨著USB應(yīng)用的日益廣泛,Intel、Cypress、Philips等芯片廠商都推出了具有USB通信接口的微處理器,如8X930A、8X931A、EZ-USB等。由于這些微處理器具有USB接口,它們與過去的開發(fā)系統(tǒng)不兼容,需要購買新的開發(fā)系統(tǒng),投資較高。另一種是采用普通微處理器加上專用的USB通信芯片。
現(xiàn)在的專用芯片中較流行的有USBN9602、SL11、PDIUSBD12等。但是,USB接口的開發(fā)一般要求設(shè)計人員對USB的標(biāo)準(zhǔn)、Firmware編程及驅(qū)動程序編寫等有較深入的理解,因此限制了一般的硬件工程師對USB接口產(chǎn)品的開發(fā)使用。本系統(tǒng)中使用了USB接口芯片CH372,使用非常簡單,開發(fā)人員只要熟悉單片機(jī)的編程及簡單的VB或者VC應(yīng)用程序編程,在較短的時間內(nèi)就可開發(fā)出相應(yīng)的USB產(chǎn)品。
CH372是一個USB總線的通用設(shè)備接口芯片,遵守USB1.1協(xié)議。在本地端,CH372具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機(jī)、DSP等控制器的系統(tǒng)總線上;在計算機(jī)系統(tǒng)中,CH372的配套軟件提供了簡潔易用的操作接口,與本地端的單片機(jī)通信就如同讀寫硬盤中的文件。CH372內(nèi)置了USB通訊中的底層協(xié)議,具有內(nèi)置固件模式和外置固件模式。在內(nèi)置固件模式下CH372屏蔽了USB通信中的所有協(xié)議,在計算機(jī)應(yīng)用層與本地端控制器之間提供端對端的連接。使用CH372,不需要了解任何USB協(xié)議或者固件程序,甚至驅(qū)動程序,就可以輕松地將并口、串口的產(chǎn)品升級到USB接口。
CH372芯片的RD和WR可以分別連接到單片機(jī)的讀選通輸出引腳和寫選通輸出引腳。CS由地址譯碼電路驅(qū)動,用于當(dāng)單片機(jī)具有多個外圍器件時進(jìn)行設(shè)備選擇。INT可以連接到單片機(jī)的中斷輸入引腳,中斷請求是低電平有效。當(dāng)CS和RD以及A0都為低電平時,CH372中的數(shù)據(jù)通過D7~D0輸出;當(dāng)CS和WR以及A0都為低電平時,D7~D0上的數(shù)據(jù)被寫入CH372芯片中;當(dāng)CS和WR都為低電平而A1為高電平時,D7~D0上的數(shù)據(jù)被作為命令碼寫入CH372芯片中。CH372芯片的UD+和UD-引腳應(yīng)該直接連接到USB總線上。如果為了芯片安全而串接保險電阻或者電感,那么交直流等效串聯(lián)電阻應(yīng)該在5Ω之內(nèi)。CH372芯片內(nèi)置了電源上電復(fù)位電路,一般情況下,不需要外部提供復(fù)位。
CH372芯片正常工作時需要外部為其提供12MHz的時鐘信號。一般情況下,時鐘信號由CH372內(nèi)置的反相器通過晶體穩(wěn)頻振蕩產(chǎn)生。外圍電路只需要在X1和X0引腳之間連接一個標(biāo)稱頻率為12MHz的晶體,并且分別為X1和X0引腳對地連接一個容量為30pF的高頻振蕩電容。CH372芯片支持5V電源電壓或者3.3V電源電壓。當(dāng)使用5V工作電壓時,CH372芯片的VCC引腳輸入外部5V電源,并且,V3引腳應(yīng)該外接容量為0.1μF左右的電源退耦電容。當(dāng)使用3.3V工作電壓時,CH372芯片的V3引腳應(yīng)該與VCC引腳相連接,同時輸入外部的3.3V電源,并且與CH372芯片相連接的其它電路的工作電壓不能超過3.3V。接口電路如圖2所示。
CAN總線接口電路這部分由CAN控制器、CAN接口芯片和光耦組成。CAN控制器完成CAN通訊協(xié)議的所有要求,CAN接口芯片是CAN控制器和物理總線間的接口,并經(jīng)由光耦將數(shù)據(jù)發(fā)往CAN總線,接口電路圖如圖3所示。
CAN總線控制器采用Philips公司的SJA1000,并輔以該公司的PCA82C250接口驅(qū)動器,通過光電隔離器件6N137實現(xiàn)了總線與控制器的隔離。SJA1000是一款獨(dú)立的控制器,用于汽車和一般工業(yè)環(huán)境中,從軟件的角度來看,對SJA1000的操作通過單片機(jī)的訪問外部存儲器指令來完成,所以,SJA1000可以被視為一種擴(kuò)展RAM,SJA1000具有標(biāo)準(zhǔn)模式和Peli模式兩種應(yīng)用模式。標(biāo)準(zhǔn)模式符合CAN2.0A協(xié)議標(biāo)準(zhǔn),接收緩沖器有64個字節(jié);Peli模式符合2.0B標(biāo)準(zhǔn),能處理擴(kuò)展數(shù)據(jù)格式,具有仲裁丟失捕獲、代碼讀取等功能。
PCA82C250是CAN控制器和物理總線之間的接口,它具有限定的電流值以保護(hù)接收器輸出級,避免陽極和陰極的短路,以防止輸出級的損壞,PCA82C250CAN接口控制器提供了總線驅(qū)動發(fā)送和接收能力,高速可達(dá)1Mbps,具有較強(qiáng)的抗干擾能力。
為了增強(qiáng)系統(tǒng)抗干擾能力,在SJA1000和CAN總線收發(fā)器82C250之間使用兩個高速光電隔離器件6N137實現(xiàn)總線和控制器的隔離,以避免干擾,提高工作可靠性。CAN控制器可以選擇從RX0、TX0或RX1、TX1接收和發(fā)送數(shù)據(jù),當(dāng)使用RX0、TX0工作時,須將RX1接到一個穩(wěn)定的電平上。高速光耦6N137的最高速度可達(dá)10Mbps,利用它可以在隔離的狀態(tài)下保證系統(tǒng)的高速可靠。
軟件設(shè)計
本設(shè)計中采用的微控制器為P89C51RD2,它是采用先進(jìn)的CMOS工藝的單片8位微處理器。工作在6時鐘模式時,速度是標(biāo)準(zhǔn)51單片機(jī)的兩倍,此時最高外部晶振可達(dá)20MHz。此外,該機(jī)型支持ISP編程和IAP編程。軟件主程序的流程圖如圖4所示。
首先進(jìn)行MCU、SJA1000和USB的初始化,初始化后系統(tǒng)處于循環(huán)等待狀態(tài),若有中斷產(chǎn)生,就進(jìn)入相應(yīng)的中斷服務(wù)程序,如果CAN總線有數(shù)據(jù)上傳,則轉(zhuǎn)入CAN中斷服務(wù)程序,由微處理器從SJA1000緩沖區(qū)接收數(shù)據(jù),寫入微處理器的數(shù)據(jù)緩沖區(qū),并置標(biāo)志返回,如果上位機(jī)有數(shù)據(jù)下傳,則轉(zhuǎn)入USB中斷服務(wù)程序(下位機(jī)中斷服務(wù)程序流程如圖5所示),微處理器從USB緩沖區(qū)中讀取數(shù)據(jù),存入緩沖區(qū),并置標(biāo)志返回,接收數(shù)據(jù)是將數(shù)據(jù)從緩沖區(qū)讀出發(fā)送到USB總線,通過USB總線傳送到上位機(jī)(下位機(jī)數(shù)據(jù)上傳子程序流程簡圖如圖6所示),發(fā)送數(shù)據(jù)是將數(shù)據(jù)從緩沖區(qū)讀出寫入SJA1000的緩沖區(qū),由CAN節(jié)點讀取,這種處理可以使微處理器在執(zhí)行完相應(yīng)的中斷程序后只需讀取緩沖區(qū),然后執(zhí)行相應(yīng)的接收或發(fā)送程序即可完成上位機(jī)和下位機(jī)的數(shù)據(jù)交換。對于計算機(jī)應(yīng)用層的程序,在計算機(jī)上裝載WINCHIPHEAD提供的CH372的通用驅(qū)動程序后,不必再考慮USB通信協(xié)議、固件程序、驅(qū)動程序、自動配置過程和底層數(shù)據(jù)傳輸過程。只需要根據(jù)提供的動態(tài)連接庫的接口函數(shù),用VB或VC編制自己的應(yīng)用程序即可。
結(jié)束語
綜上所述,本系統(tǒng)為計算機(jī)與CAN總線之間的直接通信提供了一種有效的方法,適應(yīng)網(wǎng)絡(luò)和接口技術(shù)的發(fā)展,探索現(xiàn)場總線網(wǎng)絡(luò)和計算機(jī)接口的新方法,是很有實踐意義的。