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