1 引言
現(xiàn)代工業(yè)生產(chǎn)和科學(xué)研究對數(shù)據(jù)采集的要求日益提高,在許多場合要求數(shù)據(jù)采集系統(tǒng)向便攜化方向發(fā)展,要求系統(tǒng)具有體積小、功耗低、傳輸速度快、使用方便靈活等特點(diǎn)。
基于PCI或ISA總線的內(nèi)置采集卡由于插拔麻煩、占用系統(tǒng)軟硬件資源且價格相對昂貴,應(yīng)用范圍有限。目前大量傳統(tǒng)數(shù)據(jù)采集系統(tǒng)、儀表及其軟件多采用RS232/485通信標(biāo)準(zhǔn),雖然成本低、占用系統(tǒng)資源少,但速度慢、不支持帶電插拔的缺點(diǎn)使其無法滿足工業(yè)現(xiàn)場采集系統(tǒng)的發(fā)展要求。
面向便攜應(yīng)用的主控系統(tǒng)如筆記本電腦、嵌入式控制系統(tǒng)均不配備PCI或ISA接口,然而通用串行總線(Universal Serial Bus,簡稱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核和模擬信號處理單元集成在一片IC上,是ADI公司推出的高性能24位數(shù)據(jù)采集與處理系統(tǒng),內(nèi)部集成有兩個24位的Δ-ΣADC、10/8通道輸入多路復(fù)用器,片內(nèi)集成62 kB 非易失性閃速/電擦除程序存儲器、4 kB非易失性閃速/電擦除數(shù)據(jù)存儲器、256 BRAM 和2 kB擴(kuò)展RAM。
ADuC845還包含一個溫度傳感器、一個位于主ADC之前以便直接測量低幅度信號的可編程增益放大器(PGA)、一個12位電壓輸出數(shù)模轉(zhuǎn)換器(DAC)、兩個靈活的脈寬調(diào)制(PWM)輸出、兩個電流源、一個基準(zhǔn)電壓源、一個從32kHz晶振產(chǎn)生12.58MHz時鐘的振蕩器與鎖相環(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è)之間通信的串行總線。市場上現(xiàn)有的可供設(shè)計(jì)使用的USB接口芯片有兩類:一類是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)會一定程度的影響系統(tǒng)性能;并且以這類芯片為接口的系統(tǒng),還需專門開發(fā)針對特定上位機(jī)系統(tǒng)的驅(qū)動程序,給設(shè)計(jì)和使用帶來了一定的難度和不便。
另一類USB接口芯片是UART-USB橋接芯片,如Cygnal公司的CP2101,F(xiàn)TDI公司的FT232BM等。這類芯片使用時以USB總線為傳輸媒介,使用橋接的方式將UART串口信號通過USB總線傳輸至主機(jī)。主機(jī)安裝芯片廠商針對各類操作系統(tǒng)提供的驅(qū)動程序,擴(kuò)展出一個虛擬串口與下位機(jī)系統(tǒng)通信。這樣既使系統(tǒng)設(shè)計(jì)簡便直接,又有效利用了USB總線的諸多優(yōu)點(diǎn)。設(shè)計(jì)中選用CP2101,與同類產(chǎn)品相比具有以下優(yōu)點(diǎn):
1) 具有較小的封裝。CP2101為28腳5mm×5mmMLP封裝。這在PCB上的尺寸就比競爭對手小 30%左右。
2) 高集成度。片內(nèi)集成512字節(jié)EEPROM(用于存儲廠家 ID等數(shù)據(jù)),片內(nèi)集成收發(fā)器、無需外部電阻;片內(nèi)集成時鐘,無需外部晶體。
3) 低成本,可實(shí)現(xiàn)USB轉(zhuǎn)串口的解決方案。CP2101的USB功能無需外部元件,而大多數(shù)競爭者的USB器件 則需要額外的終端晶體管、上拉電阻、晶振和EEPROM。具有競爭力的器件價格,簡化的外圍電路,無成本驅(qū)動支持使得CP2101在成本上的優(yōu)勢遠(yuǎn)超過競爭者的解決方案。
4) 具有低功耗、高速度的特性,符合USB2.0規(guī)范,適合于所有的UART接口。工業(yè)級溫度范圍為-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)無須再外部擴(kuò)展存儲單元。ADuC845的P1口作為模擬量信號采集的8路通道,P0口作為數(shù)字量信號輸入的8路通道,P2口作為數(shù)字量信號輸出的8路通道,為了保護(hù)內(nèi)部電路,使用光藕隔離芯片將系統(tǒng)內(nèi)部的數(shù)字量輸入輸出與外部隔離。
圖1系統(tǒng)結(jié)構(gòu)圖
3.2通信接口電路圖
CP2101作為系統(tǒng)的通信接口芯片,ADuC845的TXD與RXD引腳與CP2101對應(yīng)相連,電路如圖所示。CP2101的USB功能控制器管理USB和UART間所有的數(shù)據(jù)傳輸,以及由USB主控制器發(fā)出的命令請求以及用于控制UART功能的命令等。CP2101的UART接口處理所有的RS232 信號,包括控制和握手信號。CP2101的VBUS與VREGIN引腳必須始終連到USB的VBUS信號上。在VREGIN的輸入端加去耦電容(1μF與0.1μF并聯(lián))。CP2101與單片機(jī)接口是標(biāo)準(zhǔn)UART電平,與計(jì)算機(jī)的USB端口連接是USB標(biāo)準(zhǔn)電平,因此,無論與3V還是5V供電的單片機(jī)連接都不需要電平轉(zhuǎn)換。
4 軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)包括單片機(jī)系統(tǒng)軟件設(shè)計(jì)、單片機(jī)系統(tǒng)驅(qū)動程序與主機(jī)系統(tǒng)軟件設(shè)計(jì)。Cygnal公司提供了CP2101在目前常用操作系統(tǒng)下的驅(qū)動,安裝驅(qū)動程序以后,對于操作系統(tǒng)來說相當(dāng)于多了一個虛擬的串口,所以主機(jī)的編程操作就是簡單的串行通信編程。因此,軟件設(shè)計(jì)的重點(diǎn)就是單片機(jī)系統(tǒng)的軟件設(shè)計(jì)。
數(shù)據(jù)采集系統(tǒng)的軟件設(shè)計(jì)采用基于消息機(jī)制的編程思想,采用C51語言編程,將需要執(zhí)行的AD、DI、DO作為程序運(yùn)行的任務(wù),通過串行中斷程序解析各種控制命令,并發(fā)送消息給主程序,主程序根據(jù)不同的消息執(zhí)行不同系統(tǒng)任務(wù)。
圖2 通信接口電路圖
4.1串行中斷程序設(shè)計(jì)
由于發(fā)送并不需要中斷操作,因此,串行中斷程序只對接收數(shù)據(jù)進(jìn)行判斷。串行中斷程序主要任務(wù)是接收有效格式的命令,并加以區(qū)分,根據(jù)命令形成相應(yīng)的消息,留給主程序判斷執(zhí)行。系統(tǒng)的功能決定系統(tǒng)的通信協(xié)議相對復(fù)雜,命令繁多。系統(tǒng)設(shè)計(jì)的主要通信命令有:系統(tǒng)復(fù)位、DO輸出、DI讀入、AD單次讀入、AD連續(xù)讀入、AD連續(xù)讀入停止6個命令。
鑒于串行中斷程序擔(dān)任較大的命令解析任務(wù),因此串行中斷程序的設(shè)計(jì)采用狀態(tài)機(jī)的機(jī)制。其基本原理是,每當(dāng)收到一個字節(jié)后,判斷該字節(jié)在當(dāng)前判斷狀態(tài)是否有效,如果有效,則狀態(tài)遞增;如果無效,則狀態(tài)歸零。每組命令的每一個字節(jié)都對應(yīng)一個狀態(tài)號,狀態(tài)號到達(dá)某命令結(jié)尾時,設(shè)置對應(yīng)命令系統(tǒng)消息有效。相應(yīng)的程序代碼如下:
extern unsigned char guchState; //系統(tǒng)狀態(tài)變量
extern unsigned char guchSignal; //系統(tǒng)信號變量
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: //第一個狀態(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è)置信號變量;
guchState=0;
}
else guchState=0; //若不為有效字符,狀態(tài)變量清零
break;
...
}
}
}
4.2 主程序設(shè)計(jì)
在消息機(jī)制中,主程序的主要任務(wù)是循環(huán)檢測信號消息變量,當(dāng)檢測到某一信號有效時,則啟動對應(yīng)的任務(wù)。由于系統(tǒng)只有串行中斷一個中斷,因此主程序中不需要考慮中斷任務(wù)的優(yōu)先級與信號之間的沖突。
數(shù)據(jù)采集系統(tǒng)中,經(jīng)常需要對模擬信號量的連續(xù)數(shù)據(jù)采集,因此系統(tǒng)設(shè)計(jì)加入了連續(xù)模擬采集的功能。接收到連續(xù)采集命令后,系統(tǒng)將每隔確定時間間隔對模擬量進(jìn)行采集,同時通過串口將采集數(shù)據(jù)返回主機(jī)系統(tǒng)。同時,為了停止系統(tǒng)的連續(xù)采集狀態(tài),需要有對應(yīng)的停止命令。
這樣,系統(tǒng)命令就分為3個優(yōu)先級,最高優(yōu)先級的是系統(tǒng)遠(yuǎn)程復(fù)位命令,在任何狀態(tài)下都將相應(yīng)復(fù)位命令對系統(tǒng)進(jìn)行復(fù)位;次高優(yōu)先級的命令是AD連續(xù)采集與連續(xù)采集停止命令;其他命令都是最低優(yōu)先級。系統(tǒng)程序的結(jié)構(gòu)代碼如下:
unsigned char guchState; //系統(tǒng)狀態(tài)變量
unsigned char guchSignal; //系統(tǒng)信號變量
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信號
Sys_Do(guchDovalue); //執(zhí)行DO程序
guchSignal=VALID; //清除系統(tǒng)信號
break;
case CMDDI: //接收到DI信號
Sys_Di(); //執(zhí)行DI程序
guchSignal=VALID; //清除系統(tǒng)信號
break;
case CMDAD: //接收到單步AD信號
Sys_Ad(); //執(zhí)行單步AD程序
guchSignal=VALID; //清除系統(tǒng)信號
break;
case CMDSYNAD: //接收到連續(xù)AD信號
while(guchSignal!=CMDSYNEND)
Sys_SynAd(); //執(zhí)行連續(xù)AD采集,
//直到收到停止連續(xù)AD信號
guchSignal=VALID; //清除系統(tǒng)信號
break;
case SYSRESET: //接收到系統(tǒng)復(fù)位信號
#pragma ASM //系統(tǒng)強(qiáng)制復(fù)位
LJMP 0000H
#pragma ENDASM
}
}
}
5 結(jié)束語
實(shí)際應(yīng)用表明,本設(shè)計(jì)具有體積小、成本低、便攜式、使用靈活等特點(diǎn),特別適合工業(yè)現(xiàn)場測試和野外現(xiàn)場數(shù)據(jù)采集的場合。尤其是設(shè)計(jì)采用高度集成的ADuc845作為系統(tǒng)的控制核心,鑒于該芯片在工業(yè)和儀器儀表應(yīng)用中要求精確測量寬動態(tài)范圍低頻信號的應(yīng)用場合以及在適合低溫漂且對噪聲抑制和抗電磁干擾能力要求較高的應(yīng)用場合的優(yōu)勢,與快速便攜的USB接口相結(jié)合,將會有廣闊的應(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] 周銳鵬, 張樂年,許小紅. 基于消息機(jī)制的C51單片機(jī)程序設(shè)計(jì)[J]. 機(jī)械制造與自動化, 2003(3):66-67,71