引言
我們生活在一個(gè)五彩繽紛的模擬世界,而在數(shù)字化高速發(fā)展的今天,,如何將模擬的信號(hào) 轉(zhuǎn)化到數(shù)字領(lǐng)域顯得尤其重要,,這就需要數(shù)據(jù)采集技術(shù)。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,,以太網(wǎng)越來(lái) 越能夠滿足工業(yè)應(yīng)用的需要?,F(xiàn)場(chǎng)總線的通信功能完全可由以太網(wǎng)較好地完成,。最近幾年, 交換式以太網(wǎng)技術(shù)的出現(xiàn)大大地提高了以太網(wǎng)的確定性,,這同時(shí)也使以太網(wǎng)技術(shù)在工業(yè)領(lǐng)域 的使用更加廣泛,。
1. 遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)的總體設(shè)計(jì)
本文以太網(wǎng)的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)目標(biāo)是系統(tǒng)能夠采集 0~2.5V 的電壓信號(hào)量,然后通 過(guò)USB 接口將處理了的采樣信號(hào)傳輸?shù)角度胧狡脚_(tái),,并且可以通過(guò)以太網(wǎng)傳輸?shù)接脩簟?一個(gè)良好的高速數(shù)據(jù)采集系統(tǒng)受很多方面的制約,,例如采樣的頻率、AD 的精度,、傳輸 的速度和平臺(tái)通用性等等,,本系統(tǒng)主要依靠采用高性能AD 和改變采集卡CPU 對(duì)采樣的控 制方式和采樣信號(hào)的處理方式來(lái)解決。設(shè)計(jì)中使用了CYPRESS 公司的EZ-USB FX2 系列芯 片CY7C68013,。這款芯片有GPIF(General ProgrammableInterface)模式,,可以提供高速的數(shù) 字邏輯信號(hào)給外圍設(shè)備(這里給AD),該模式不受CPU 控制,,是獨(dú)立于CPU 存在的,。這就 克服了CPU 對(duì)于高速采樣的瓶頸約束,提高了對(duì)采樣頻率的控制能力,。對(duì)于高性能AD,, 文中采用了Analog devices 公司的AD7492,該芯片采樣可以達(dá)到1MSPS,,是12 位并行的 持續(xù)逼近型高速模數(shù)轉(zhuǎn)換芯片,,系統(tǒng)總體框圖如圖1。
圖1 總體框圖
2. 數(shù)據(jù)采集卡設(shè)計(jì)
該數(shù)據(jù)采集卡完成的不僅僅是一個(gè)數(shù)據(jù)采集的功能,,而在于為以后的設(shè)計(jì)提供詳細(xì)的設(shè) 計(jì)基礎(chǔ)和平臺(tái),這些功能都可以方便的移植到以后的儀表設(shè)計(jì)中,。數(shù)據(jù)采集卡的總體框圖如 圖2 所示,輸入信號(hào)是0~2.5V 的電壓信號(hào)量,,需要經(jīng)過(guò)限壓,、濾波等處理,然后直接輸入 到ADC 的IN 引腳(板上的IN 引腳端子),。AD 轉(zhuǎn)換的啟停等控制由CPU 完成,,轉(zhuǎn)換時(shí)序由 GPIF 控制器控制。CPU 的GPIF 方式以查詢的形式檢測(cè)ADC 的BUSY 引腳,,向GPIF 控制 器報(bào)告信號(hào)采集的狀態(tài),。為了達(dá)到改變采樣頻率的目的,利用定時(shí)器按照采樣頻率要求控制 CPU 的IO 端口,,進(jìn)而控制GPIF 流程的啟停,。一次采集流程結(jié)束后會(huì)自動(dòng)保存采集上來(lái)的 數(shù)據(jù)到寄存器中,然后CPU 處理寄存器中的數(shù)據(jù)并送到USB 輸出緩沖區(qū)便可輸出至USB 端口,。
圖 2 數(shù)據(jù)采集卡的總體框圖
2.1AD 轉(zhuǎn)換部分硬件設(shè)計(jì)
該設(shè)計(jì)中使用了 AD7492 作為主采樣器件,,AD7492 很容易與微處理器或DSP 接口,。輸 入信號(hào)從CONVST 的下降沿開(kāi)始被采樣,轉(zhuǎn)換也從此點(diǎn)啟動(dòng),。AD 的輸入為0-2.5V 單極性 電壓,。REFOUT 引腳接有最小100nF 的電容,REFOUT 引腳接有最小100nF 的電容,,以穩(wěn) 定內(nèi)部參考電壓值,。CPU 負(fù)責(zé)控制AD 的啟動(dòng)、停止和讀取采集數(shù)據(jù)等工作,。設(shè)計(jì)中使用 了GPIF 模式,,由AD 的連接圖可以看出,68013 的CTL 引腳,、RDY 引腳和AD 直接連接,, 對(duì)AD 的時(shí)序進(jìn)行控制。CONVST 腳接到PA7 ( 68013 的IOA^7 )用于控制采樣的啟停,,從 而可以控制采樣頻率,CTL, RDY 引腳的行為由GPIF 控制,其電路圖如圖3 所示,。
圖 3 ADC 外圍接線圖
2.2CPU 與EEPROM 的接口電路
CY7C68013 芯片本身不帶ROM,所以擴(kuò)展一片64Kbit 的I2C 串行E2PROM 存儲(chǔ)程序 代碼,。該芯片為低功耗應(yīng)用而開(kāi)發(fā),可以充分利用FX2 的I2C 接口而不用占用其它IO 接口,。 E2PROM 的連接決定了采集卡作為USB 設(shè)備上電枚舉的過(guò)程,。如果上電沒(méi)有檢測(cè)到 E2PROM 的存在,則會(huì)采用默認(rèn)PID, VID,。枚舉;上電如果檢測(cè)到連接有E2PROM 時(shí),,loader: 讀E2PROM 的第一個(gè)字節(jié)來(lái)決定如何枚舉,電路圖如圖4 所示,。
圖 4 EEPROM 外圍接線圖
2.3CPU 與鍵盤(pán),、顯示的接口電路
由于 56 引腳的68013 只有PA, PB, PD 三組IO,對(duì)于12 位的AD,,使用了PB, PD 的第 二功能,,配置為FD(Fifo Data)。這樣就只剩下PA 口8 個(gè)引腳可用,,不足以完成鍵盤(pán),、顯示、 測(cè)試預(yù)留等功能,。所以采用了PCF8574 I2C 轉(zhuǎn)I0 口的方式進(jìn)行擴(kuò)展,。這樣也可以留出足夠 的IO 口用于擴(kuò)展和測(cè)試。
3.系統(tǒng)應(yīng)用軟件設(shè)計(jì)
軟件設(shè)計(jì)主要涉及到三個(gè)方面:一是對(duì)用CY7C68013 做CPU 的數(shù)據(jù)采集卡的固件設(shè)計(jì) 和應(yīng)用程序設(shè)計(jì),。CYPRESS 公司為其旗下的產(chǎn)品做了很好的技術(shù)支持,,例如對(duì)該款芯片提 供了完善的固件架構(gòu),。用戶的應(yīng)用只要在此固件基礎(chǔ)上開(kāi)發(fā)即可。二是針對(duì)數(shù)據(jù)采集卡設(shè)計(jì) 基于ARM-LINUX 的USB 設(shè)備驅(qū)動(dòng)程序,。三是基于ARM-LINUX 平臺(tái),,為提供給用戶可視 化界面設(shè)計(jì)應(yīng)用程序及遠(yuǎn)程PC 上通過(guò)以太網(wǎng)采集的應(yīng)用程序的設(shè)計(jì)。
3.1 USB 數(shù)據(jù)采集卡驅(qū)動(dòng)程序
編寫(xiě)一個(gè) USB 設(shè)備的驅(qū)動(dòng)程序,,首先需要把驅(qū)動(dòng)程序的對(duì)象注冊(cè)到USB 子系統(tǒng)中,,然后再使用廠商標(biāo)識(shí)和設(shè)備標(biāo)識(shí)來(lái)判斷是否已經(jīng)安裝了硬件。注冊(cè)是在USB 驅(qū)動(dòng)程序模塊初
始化代碼中完成,。例如在初始化代碼中有這樣的語(yǔ)句:
usb register(&sample_driver);
這句話調(diào)用了usb register 這個(gè)函數(shù),,將struct sample_driver{}注冊(cè)到USB 核心。
USB 核心如何識(shí)別一個(gè)驅(qū)動(dòng)適合該設(shè)備呢,,就要靠usb_device id 結(jié)構(gòu)體完成,。struct usbse_device id 結(jié)構(gòu)體提供了一列不同類型的該驅(qū)動(dòng)程序支持的USB 設(shè)備。USB 核心使用該列表來(lái)判斷對(duì)于一個(gè)設(shè)備該使用哪一個(gè)驅(qū)動(dòng)程序,,熱插拔腳本使用它來(lái)確定當(dāng)一個(gè)特定的 設(shè)備插入到系統(tǒng)時(shí)該自動(dòng)裝載哪一個(gè)驅(qū)動(dòng)程序,。本例中實(shí)現(xiàn)了這樣一個(gè)結(jié)構(gòu):
static struct usb_device_id sample_id_table[]={
{USB_DEVICE(USB_Sample_VENDOR_ID,
USB_Sample_PRODUCT_ID) },{} };
MODULE_DEVICE_TABLE (usb, sample_id_table);
USB_DEVICE ( vendor,product)這個(gè)宏僅和指定的制造商和產(chǎn)品ID 值相匹配,該宏常用于需要一個(gè)特定驅(qū)動(dòng)程序的uss 設(shè)備,。
int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
void *data, int len, int *actual_length,int timeout);
該函數(shù)傳遞bulk 數(shù)據(jù)到驅(qū)動(dòng)中的緩沖區(qū)*data,,如果傳遞完成之后再?gòu)?fù)制到用戶區(qū)供用戶使用。
int usbes_control_msg(struct usb device *dev, unsigned int pipe,_u8 request,,_u8 requesttype,
_u16 value,,_u16 index,void *data,_u16 size, int timeout);
該函數(shù)允許驅(qū)動(dòng)程序發(fā)送和接收USB 控制消息,。例如本例中實(shí)現(xiàn)的采樣頻率的變換就是通過(guò)該命令在用戶和數(shù)據(jù)采集卡硬件之間傳遞的,。
下面以讀設(shè)備數(shù)據(jù) sample read 為例介紹驅(qū)動(dòng)對(duì)硬件的操作過(guò)程,流程如圖6 所示,。
圖 6 sample read 函數(shù)流程
內(nèi)核空間和用戶空間有所不同,,驅(qū)動(dòng)程序?qū)儆趦?nèi)核空間,普通的應(yīng)用程序?qū)儆谟脩艨臻g,, 兩個(gè)空間的數(shù)據(jù)不能直接互訪,,必須要借助copy_fromes users()、copy_to_user()兩個(gè)函數(shù)在 兩個(gè)空間中傳遞數(shù)據(jù),。
3.2 PC 機(jī)客戶端的設(shè)計(jì)
PC 機(jī)客戶端使用Delphi 開(kāi)發(fā),。主要完成以下功能:作為Client 和服務(wù)器連接、請(qǐng)求并接 收Serve:發(fā)來(lái)的采集到的數(shù)據(jù)并在本地客戶端上以波形形式顯示出來(lái),。本設(shè)計(jì)中使用了兩個(gè) 定時(shí)器完成這些功能,,定時(shí)器1 負(fù)責(zé)向Serve:發(fā)送“請(qǐng)求數(shù)據(jù)”的請(qǐng)求,并將返回的數(shù)據(jù)放 入緩存,。定時(shí)器2 負(fù)責(zé)將定時(shí)器1 接收來(lái)的數(shù)據(jù)以波形的形式顯示出來(lái),,其中,,用到了ActiveX 控件VtChart,客戶端收到采集正弦波形如圖7 所示,。
圖7 網(wǎng)絡(luò)采上來(lái)的正弦波
4.結(jié)論
本文創(chuàng)新點(diǎn):本文研究,、設(shè)計(jì)了基于以太網(wǎng)技術(shù)、USB 技術(shù),、嵌入式技術(shù)的數(shù)據(jù)采集 系統(tǒng),,將先進(jìn)的技術(shù)融合到工廠自動(dòng)化的最前端,提高了采樣的精度,、速度和可靠性,。該數(shù) 據(jù)采集卡完成的不僅僅是一個(gè)數(shù)據(jù)采集的功能,而在于為以后的設(shè)計(jì)提供詳細(xì)的設(shè)計(jì)基礎(chǔ)和 平臺(tái),這些功能都可以方便的移植到以后的儀表設(shè)計(jì)中,可以作為二次開(kāi)發(fā)的平臺(tái),。