• 
    <ul id="auswy"><sup id="auswy"></sup></ul>
  • <ul id="auswy"></ul>
    ABB
    關(guān)注中國(guó)自動(dòng)化產(chǎn)業(yè)發(fā)展的先行者!
    CAIAC 2025
    2025工業(yè)安全大會(huì)
    OICT公益講堂
    當(dāng)前位置:首頁(yè) >> 案例 >> 案例首頁(yè)

    案例頻道

    一種基于USB接口的多功能便攜數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
    • 企業(yè):控制網(wǎng)     領(lǐng)域:人機(jī)界面     行業(yè):建筑樓宇    
    • 點(diǎn)擊數(shù):3809     發(fā)布時(shí)間:2007-06-16 21:34:08
    • 分享到:
    使用Silicon公司的CP2102芯片作為USB接口橋接器,以高性能模擬微控制器ADuC845為系統(tǒng)的控制核心,實(shí)現(xiàn)了8通道模擬量數(shù)據(jù)采集、8通道數(shù)字量輸入與8通道數(shù)字量輸出等功能。軟件設(shè)計(jì)采用基于消息機(jī)制和狀態(tài)機(jī)機(jī)制的編程思想。該系統(tǒng)設(shè)計(jì)簡(jiǎn)便、體積小、成本低,應(yīng)用前景廣闊。



    1 引言

        現(xiàn)代工業(yè)生產(chǎn)和科學(xué)研究對(duì)數(shù)據(jù)采集的要求日益提高,在許多場(chǎng)合要求數(shù)據(jù)采集系統(tǒng)向便攜化方向發(fā)展,要求系統(tǒng)具有體積小、功耗低、傳輸速度快、使用方便靈活等特點(diǎn)。

        基于PCI或ISA總線的內(nèi)置采集卡由于插拔麻煩、占用系統(tǒng)軟硬件資源且價(jià)格相對(duì)昂貴,應(yīng)用范圍有限。目前大量傳統(tǒng)數(shù)據(jù)采集系統(tǒng)、儀表及其軟件多采用RS232/485通信標(biāo)準(zhǔn),雖然成本低、占用系統(tǒng)資源少,但速度慢、不支持帶電插拔的缺點(diǎn)使其無(wú)法滿(mǎn)足工業(yè)現(xiàn)場(chǎng)采集系統(tǒng)的發(fā)展要求。

        面向便攜應(yīng)用的主控系統(tǒng)如筆記本電腦、嵌入式控制系統(tǒng)均不配備PCI或ISA接口,然而通用串行總線(Universal Serial Bus,簡(jiǎn)稱(chēng)USB)以其數(shù)據(jù)傳輸速度快、設(shè)備接插方便、總線供電及擴(kuò)展方便等優(yōu)點(diǎn)成為便攜式主控系統(tǒng)的必備接口,基于此本文介紹一種以USB總線為接口的多功能小型便攜數(shù)據(jù)采集系統(tǒng)。

    2 芯片選型

        2.1主控芯片選型

        主控芯片選擇Analog Devices公司的ADuC845作為系統(tǒng)的主控制器,該芯片將8052的MCU核和模擬信號(hào)處理單元集成在一片IC上,是ADI公司推出的高性能24位數(shù)據(jù)采集與處理系統(tǒng),內(nèi)部集成有兩個(gè)24位的Δ-ΣADC、10/8通道輸入多路復(fù)用器,片內(nèi)集成62 kB 非易失性閃速/電擦除程序存儲(chǔ)器、4 kB非易失性閃速/電擦除數(shù)據(jù)存儲(chǔ)器、256 BRAM 和2 kB擴(kuò)展RAM。
        
        ADuC845還包含一個(gè)溫度傳感器、一個(gè)位于主ADC之前以便直接測(cè)量低幅度信號(hào)的可編程增益放大器(PGA)、一個(gè)12位電壓輸出數(shù)模轉(zhuǎn)換器(DAC)、兩個(gè)靈活的脈寬調(diào)制(PWM)輸出、兩個(gè)電流源、一個(gè)基準(zhǔn)電壓源、一個(gè)從32kHz晶振產(chǎn)生12.58MHz時(shí)鐘的振蕩器與鎖相環(huán)(PLL)以及UART、SP I和I2C通信端口。其數(shù)據(jù)處理能力可達(dá)12MIPS。由于ADuC845的高度集成、高速度、高精度的優(yōu)秀特性,非常適合在要求小體積高性能的便攜系統(tǒng)中的應(yīng)用要求。

        2.2USB接口芯片選型

        通用串行總線USB是由Intel等廠商制定的連接計(jì)算機(jī)與具有USB接口的多種外設(shè)之間通信的串行總線。市場(chǎng)上現(xiàn)有的可供設(shè)計(jì)使用的USB接口芯片有兩類(lèi):一類(lèi)是USB端點(diǎn)控制器,如Philips的PDIUSBD12,OKI的MSM60581,NATIONAL的USBN9603,Lucent的USS-820/USS-620,Scanlog的SL11等。這些芯片作為系統(tǒng)的接口將直接使用USB總線的通信標(biāo)準(zhǔn),由于USB協(xié)議標(biāo)準(zhǔn)比較復(fù)雜,在資源不充裕的8位MCU為核心的系統(tǒng)上實(shí)現(xiàn)會(huì)一定程度的影響系統(tǒng)性能;并且以這類(lèi)芯片為接口的系統(tǒng),還需專(zhuān)門(mén)開(kāi)發(fā)針對(duì)特定上位機(jī)系統(tǒng)的驅(qū)動(dòng)程序,給設(shè)計(jì)和使用帶來(lái)了一定的難度和不便。

        另一類(lèi)USB接口芯片是UART-USB橋接芯片,如Cygnal公司的CP2101,F(xiàn)TDI公司的FT232BM等。這類(lèi)芯片使用時(shí)以USB總線為傳輸媒介,使用橋接的方式將UART串口信號(hào)通過(guò)USB總線傳輸至主機(jī)。主機(jī)安裝芯片廠商針對(duì)各類(lèi)操作系統(tǒng)提供的驅(qū)動(dòng)程序,擴(kuò)展出一個(gè)虛擬串口與下位機(jī)系統(tǒng)通信。這樣既使系統(tǒng)設(shè)計(jì)簡(jiǎn)便直接,又有效利用了USB總線的諸多優(yōu)點(diǎn)。設(shè)計(jì)中選用CP2101,與同類(lèi)產(chǎn)品相比具有以下優(yōu)點(diǎn):

        1) 具有較小的封裝。CP2101為28腳5mm×5mmMLP封裝。這在PCB上的尺寸就比競(jìng)爭(zhēng)對(duì)手小 30%左右。

        2) 高集成度。片內(nèi)集成512字節(jié)EEPROM(用于存儲(chǔ)廠家 ID等數(shù)據(jù)),片內(nèi)集成收發(fā)器、無(wú)需外部電阻;片內(nèi)集成時(shí)鐘,無(wú)需外部晶體。

        3) 低成本,可實(shí)現(xiàn)USB轉(zhuǎn)串口的解決方案。CP2101的USB功能無(wú)需外部元件,而大多數(shù)競(jìng)爭(zhēng)者的USB器件 則需要額外的終端晶體管、上拉電阻、晶振和EEPROM。具有競(jìng)爭(zhēng)力的器件價(jià)格,簡(jiǎn)化的外圍電路,無(wú)成本驅(qū)動(dòng)支持使得CP2101在成本上的優(yōu)勢(shì)遠(yuǎn)超過(guò)競(jìng)爭(zhēng)者的解決方案。

        4) 具有低功耗、高速度的特性,符合USB2.0規(guī)范,適合于所有的UART接口。工業(yè)級(jí)溫度范圍為-40℃~85℃。

    3 電路設(shè)計(jì)

        3.1系統(tǒng)結(jié)構(gòu)圖

        系統(tǒng)結(jié)構(gòu)圖如圖1所示,主要由ADuC845與CP2101芯片構(gòu)成,由于ADuC845內(nèi)部集成了62KB程序FLASH,4KB數(shù)據(jù)FLASH,2304B數(shù)據(jù)RAM,因此作為便攜采集系統(tǒng)無(wú)須再外部擴(kuò)展存儲(chǔ)單元。ADuC845的P1口作為模擬量信號(hào)采集的8路通道,P0口作為數(shù)字量信號(hào)輸入的8路通道,P2口作為數(shù)字量信號(hào)輸出的8路通道,為了保護(hù)內(nèi)部電路,使用光藕隔離芯片將系統(tǒng)內(nèi)部的數(shù)字量輸入輸出與外部隔離。



    圖1系統(tǒng)結(jié)構(gòu)圖

        3.2通信接口電路圖

        CP2101作為系統(tǒng)的通信接口芯片,ADuC845的TXD與RXD引腳與CP2101對(duì)應(yīng)相連,電路如圖所示。CP2101的USB功能控制器管理USB和UART間所有的數(shù)據(jù)傳輸,以及由USB主控制器發(fā)出的命令請(qǐng)求以及用于控制UART功能的命令等。CP2101的UART接口處理所有的RS232 信號(hào),包括控制和握手信號(hào)。CP2101的VBUS與VREGIN引腳必須始終連到USB的VBUS信號(hào)上。在VREGIN的輸入端加去耦電容(1μF與0.1μF并聯(lián))。CP2101與單片機(jī)接口是標(biāo)準(zhǔn)UART電平,與計(jì)算機(jī)的USB端口連接是USB標(biāo)準(zhǔn)電平,因此,無(wú)論與3V還是5V供電的單片機(jī)連接都不需要電平轉(zhuǎn)換。

    4 軟件設(shè)計(jì)

        系統(tǒng)的軟件設(shè)計(jì)包括單片機(jī)系統(tǒng)軟件設(shè)計(jì)、單片機(jī)系統(tǒng)驅(qū)動(dòng)程序與主機(jī)系統(tǒng)軟件設(shè)計(jì)。Cygnal公司提供了CP2101在目前常用操作系統(tǒng)下的驅(qū)動(dòng),安裝驅(qū)動(dòng)程序以后,對(duì)于操作系統(tǒng)來(lái)說(shuō)相當(dāng)于多了一個(gè)虛擬的串口,所以主機(jī)的編程操作就是簡(jiǎn)單的串行通信編程。因此,軟件設(shè)計(jì)的重點(diǎn)就是單片機(jī)系統(tǒng)的軟件設(shè)計(jì)。

        數(shù)據(jù)采集系統(tǒng)的軟件設(shè)計(jì)采用基于消息機(jī)制的編程思想,采用C51語(yǔ)言編程,將需要執(zhí)行的AD、DI、DO作為程序運(yùn)行的任務(wù),通過(guò)串行中斷程序解析各種控制命令,并發(fā)送消息給主程序,主程序根據(jù)不同的消息執(zhí)行不同系統(tǒng)任務(wù)。



    圖2 通信接口電路圖

        4.1串行中斷程序設(shè)計(jì)

        由于發(fā)送并不需要中斷操作,因此,串行中斷程序只對(duì)接收數(shù)據(jù)進(jìn)行判斷。串行中斷程序主要任務(wù)是接收有效格式的命令,并加以區(qū)分,根據(jù)命令形成相應(yīng)的消息,留給主程序判斷執(zhí)行。系統(tǒng)的功能決定系統(tǒng)的通信協(xié)議相對(duì)復(fù)雜,命令繁多。系統(tǒng)設(shè)計(jì)的主要通信命令有:系統(tǒng)復(fù)位、DO輸出、DI讀入、AD單次讀入、AD連續(xù)讀入、AD連續(xù)讀入停止6個(gè)命令。

        鑒于串行中斷程序擔(dān)任較大的命令解析任務(wù),因此串行中斷程序的設(shè)計(jì)采用狀態(tài)機(jī)的機(jī)制。其基本原理是,每當(dāng)收到一個(gè)字節(jié)后,判斷該字節(jié)在當(dāng)前判斷狀態(tài)是否有效,如果有效,則狀態(tài)遞增;如果無(wú)效,則狀態(tài)歸零。每組命令的每一個(gè)字節(jié)都對(duì)應(yīng)一個(gè)狀態(tài)號(hào),狀態(tài)號(hào)到達(dá)某命令結(jié)尾時(shí),設(shè)置對(duì)應(yīng)命令系統(tǒng)消息有效。相應(yīng)的程序代碼如下:

        extern unsigned char guchState;                       //系統(tǒng)狀態(tài)變量

        extern unsigned char guchSignal;      //系統(tǒng)信號(hào)變量

        void Serial_Int(void) interrupt 4 using 3{
     
        if(RI)           //只接收中斷有效
     
        { register unsigned char R_chbyte;
      
        R_chbyte=SBUF;     //取得接收字符
      
        switch(guchState)  //進(jìn)入狀態(tài)機(jī)
      
        { case STATE1:   //第一個(gè)狀態(tài)
        
        if(R_chbyte==VALID1)guchState++;  //判斷是否為有效字符
        
        break;
       
        case STATE2:
        
        if(R_chbyte==VALID2)guchState++;  //若為有效字符,狀態(tài)變量遞增
        
        else guchState=0;      //若不為有效字符,狀態(tài)變量清零
        
        break;
       
        ...
       
        case STATEi:
        
        if(R_chbyte==VALIDi)
        
        {
        
        guchSignal=SIGNAL_1;     //命令有效,設(shè)置信號(hào)變量;
         
        guchState=0;
        
        } 
        
        else guchState=0;     //若不為有效字符,狀態(tài)變量清零
        
        break;
       
        ...
      
        }
     
        }

        }

        4.2 主程序設(shè)計(jì)

        在消息機(jī)制中,主程序的主要任務(wù)是循環(huán)檢測(cè)信號(hào)消息變量,當(dāng)檢測(cè)到某一信號(hào)有效時(shí),則啟動(dòng)對(duì)應(yīng)的任務(wù)。由于系統(tǒng)只有串行中斷一個(gè)中斷,因此主程序中不需要考慮中斷任務(wù)的優(yōu)先級(jí)與信號(hào)之間的沖突。

        數(shù)據(jù)采集系統(tǒng)中,經(jīng)常需要對(duì)模擬信號(hào)量的連續(xù)數(shù)據(jù)采集,因此系統(tǒng)設(shè)計(jì)加入了連續(xù)模擬采集的功能。接收到連續(xù)采集命令后,系統(tǒng)將每隔確定時(shí)間間隔對(duì)模擬量進(jìn)行采集,同時(shí)通過(guò)串口將采集數(shù)據(jù)返回主機(jī)系統(tǒng)。同時(shí),為了停止系統(tǒng)的連續(xù)采集狀態(tài),需要有對(duì)應(yīng)的停止命令。

        這樣,系統(tǒng)命令就分為3個(gè)優(yōu)先級(jí),最高優(yōu)先級(jí)的是系統(tǒng)遠(yuǎn)程復(fù)位命令,在任何狀態(tài)下都將相應(yīng)復(fù)位命令對(duì)系統(tǒng)進(jìn)行復(fù)位;次高優(yōu)先級(jí)的命令是AD連續(xù)采集與連續(xù)采集停止命令;其他命令都是最低優(yōu)先級(jí)。系統(tǒng)程序的結(jié)構(gòu)代碼如下:

        unsigned char guchState;      //系統(tǒng)狀態(tài)變量

        unsigned char guchSignal;      //系統(tǒng)信號(hào)變量

        unsigned char guchDovalue;      //系統(tǒng)接收數(shù)字量輸出參數(shù)

        void main(void)

        {
     
        Sys_init();//系統(tǒng)初始化程序
     
        while(1)         
     
        {
      
        switch(guchSignal)      //系統(tǒng)狀態(tài)機(jī)
      
        {
       
        case CMDDO:      //接收到DO信號(hào)
        
        Sys_Do(guchDovalue);   //執(zhí)行DO程序
        
        guchSignal=VALID;   //清除系統(tǒng)信號(hào)
        
        break;
       
        case CMDDI:      //接收到DI信號(hào)
        
        Sys_Di();      //執(zhí)行DI程序
        
        guchSignal=VALID;    //清除系統(tǒng)信號(hào)
        
        break;
       
        case CMDAD:      //接收到單步AD信號(hào)
        
        Sys_Ad();     //執(zhí)行單步AD程序
        
        guchSignal=VALID;    //清除系統(tǒng)信號(hào)
        
        break;
       
        case CMDSYNAD:     //接收到連續(xù)AD信號(hào)
        
        while(guchSignal!=CMDSYNEND)
     
        Sys_SynAd();     //執(zhí)行連續(xù)AD采集,
           
        //直到收到停止連續(xù)AD信號(hào)
        
        guchSignal=VALID;    //清除系統(tǒng)信號(hào)
        
        break;
       
        case SYSRESET:      //接收到系統(tǒng)復(fù)位信號(hào)
        
        #pragma ASM     //系統(tǒng)強(qiáng)制復(fù)位
         
        LJMP 0000H
        
        #pragma ENDASM
      
        }
     
        }

        }

    5 結(jié)束語(yǔ)

        實(shí)際應(yīng)用表明,本設(shè)計(jì)具有體積小、成本低、便攜式、使用靈活等特點(diǎn),特別適合工業(yè)現(xiàn)場(chǎng)測(cè)試和野外現(xiàn)場(chǎng)數(shù)據(jù)采集的場(chǎng)合。尤其是設(shè)計(jì)采用高度集成的ADuc845作為系統(tǒng)的控制核心,鑒于該芯片在工業(yè)和儀器儀表應(yīng)用中要求精確測(cè)量寬動(dòng)態(tài)范圍低頻信號(hào)的應(yīng)用場(chǎng)合以及在適合低溫漂且對(duì)噪聲抑制和抗電磁干擾能力要求較高的應(yīng)用場(chǎng)合的優(yōu)勢(shì),與快速便攜的USB接口相結(jié)合,將會(huì)有廣闊的應(yīng)用前景。

    參考文獻(xiàn)

    [1] Silicon Laboratories lnc. CP2102 Product Data Sheet [EB/OL]. http://www.silabs.com, 2006.

    [2] Analog Device. Aduc845 Product Data Sheet [EB/OL]. http://www.analog.com/, 2005

    [3] 叢偉波,楊勇,韓清凱. 低功耗數(shù)據(jù)采集系統(tǒng)的USB接口設(shè)計(jì)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005(1):25-27

    [4] 周銳鵬, 張樂(lè)年,許小紅. 基于消息機(jī)制的C51單片機(jī)程序設(shè)計(jì)[J]. 機(jī)械制造與自動(dòng)化, 2003(3):66-67,71

    熱點(diǎn)新聞

    推薦產(chǎn)品

    x
    • 在線反饋
    1.我有以下需求:



    2.詳細(xì)的需求:
    姓名:
    單位:
    電話:
    郵件: