Windows 95下智能數(shù)據(jù)采集系統(tǒng)
摘要:提出一種智能數(shù)據(jù)采集系統(tǒng)。用編程簡單、定時(shí)分辨率高、工作可靠的單片機(jī)定時(shí)取代編程繁復(fù)、定時(shí)分辨率低、工作不可靠的Windows95下的定時(shí)。解決了Windows 95環(huán)境下短時(shí)間定時(shí)不準(zhǔn)確的難題,又簡化了用戶的應(yīng)用程序。整個(gè)系統(tǒng)結(jié)構(gòu)簡單、高效可靠,實(shí)現(xiàn)了對(duì)信號(hào)的高性能采集。
關(guān)鍵詞:定時(shí)器 時(shí)鐘 并口 數(shù)據(jù)采集
引言
數(shù)據(jù)采集系統(tǒng)在各行各業(yè)都有廣泛的應(yīng)用。目前,已有各種各樣高速、高精度、多通道的數(shù)據(jù)采集卡問世。計(jì)算機(jī)通過卡上的模數(shù)轉(zhuǎn)換器采入數(shù)據(jù),然后進(jìn)行數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理和圖形顯示等工作。隨著微電子技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,Windows 95/98平臺(tái)下的應(yīng)用程序已經(jīng)成為數(shù)據(jù)采集與處理軟件開發(fā)的主流。
用于數(shù)據(jù)采集的常規(guī)Windows定時(shí)順又存在著嚴(yán)重的不足。首先,常規(guī)Windows定時(shí)器的定時(shí)分辨率低。定時(shí)器每隔55ms中斷1次,相當(dāng)于最高采樣頻率僅為18.2Hz。對(duì)由于Windows 95/98下的應(yīng)用程序無法直接與硬件打交道,不能通過對(duì)定時(shí)中斷重新安裝的方法改變定時(shí)時(shí)間長度。如此低的采樣頻率對(duì)于絕大多數(shù)的信號(hào)采集與處理都是不適合的,必須尋找能以更高頻率采集的方法。
其次,Windows系統(tǒng)是一個(gè)多任務(wù)操作系統(tǒng),它是基于消息來驅(qū)動(dòng)事件的。定時(shí)器消息WMTIMER在串行消息隊(duì)列中的優(yōu)先級(jí)別很低,往往得不到及時(shí)響應(yīng),甚至消息隊(duì)列中的幾個(gè)未及時(shí)處理的定時(shí)器消息會(huì)被合并為一個(gè);而應(yīng)用程序無法確定由于這種處理而丟失的消息數(shù),使實(shí)際的采樣間隔不均勻。
針對(duì)以上問題,人們想出了很多方法予以解決。目前常用的方法都是在PC機(jī)上編程,一般來講有以下3種方法:
(1)在Windows應(yīng)用程序中,使用普通C語言中常用的函數(shù)delay()[2,3]。
delay()是C語言中常用的延延、定時(shí)函婁。使用delay(),最高采樣率可達(dá)1kHz,但delay()與多任務(wù)的Windows操作系統(tǒng)不兼容。在Windows應(yīng)用程序中直接使用delay()會(huì)發(fā)生編譯警告和連接錯(cuò)誤??梢酝ㄟ^程序中顯示說明函數(shù)delay()原型并在Windows庫中包含DELAY模塊的方法去除這一錯(cuò)誤,從而可以在Windows應(yīng)用程序中,像普通C程序一樣使用delay()。然而,這種用軟件等待的方法,對(duì)于主機(jī)的資源來講是一個(gè)極大的浪費(fèi)。
(2)使用Windows多媒體定時(shí)器的回調(diào)函數(shù)[4,5]
Windows多媒體定時(shí)器可以通過函數(shù)timeBeginPeriod來設(shè)置定時(shí)器分辨率,其分辨率最小為1ms,最大為16ms。這一分辨率代表了60~1000Hz的采樣率,可以滿足一般信號(hào)對(duì)采樣率的要求。而且多媒體定時(shí)器采用中斷完成定時(shí)服務(wù),在中斷時(shí)刻調(diào)用1個(gè)回調(diào)函數(shù),而不是向消息隊(duì)列發(fā)送WM_TIMER信息。在應(yīng)用程序中,使用Windows多媒體定時(shí)器并不容易,必須遵循嚴(yán)格的步驟。在使用回調(diào)函數(shù)的趕集,在中斷服務(wù)程序和用戶主程序之間,要進(jìn)行數(shù)據(jù)的共享,給編程和調(diào)試帶來不便。程序的穩(wěn)健性也會(huì)受到影響。在定時(shí)時(shí)間較短時(shí),主機(jī)負(fù)荷過重。
(3)實(shí)時(shí)鐘定時(shí)[6]
實(shí)時(shí)鐘芯片在基準(zhǔn)頻率作用下驅(qū)動(dòng)內(nèi)部時(shí)鐘電路工作,同時(shí)可通過對(duì)內(nèi)部寄存器A(D3~D0)編程,選擇22分頻輸出信號(hào)頻率。實(shí)時(shí)鐘周期性地輸出方波和周期中斷請(qǐng)求信號(hào)(該中斷請(qǐng)求連到IRQ8),從而為程序中實(shí)現(xiàn)時(shí)間控制提供了另一條途徑。同時(shí),在Windows機(jī)制中,使用優(yōu)先級(jí)高于一般的任務(wù)級(jí),而等于系統(tǒng)級(jí)的VxD編制驅(qū)動(dòng)程序,可以保證驅(qū)動(dòng)程序在運(yùn)行時(shí)享有最高優(yōu)先權(quán),在進(jìn)行硬件設(shè)備的管理、控制時(shí)不會(huì)被其他任務(wù)所中斷,充分保證了驅(qū)動(dòng)程序返還給用戶的數(shù)據(jù)是完全真實(shí)的值。而且可以直接對(duì)硬件進(jìn)行訪問,因而通過編寫VxD直接管理實(shí)時(shí)鐘中斷,定時(shí)分辨率更高。但VxD對(duì)調(diào)試者的編程水平要求較高,稍有不慎,很容易出現(xiàn)異常錯(cuò)誤或死機(jī)。
不難看出,直接在PC機(jī)上編程解決定時(shí)問題要求調(diào)試者有較高的編程水平,程序調(diào)試?yán)щy,可靠性差。
為此,我們?cè)O(shè)計(jì)了一套智能數(shù)據(jù)采集系統(tǒng)。用單片機(jī)89C51作為中央處理單元,控制模/數(shù)據(jù)轉(zhuǎn)換、外部數(shù)據(jù)存儲(chǔ)器等外圍設(shè)備,進(jìn)行數(shù)據(jù)的定時(shí)采集和預(yù)處理。通過絕大多數(shù)電腦都具備的并行口作為數(shù)據(jù)采集系統(tǒng)與計(jì)算機(jī)的接口,與PC機(jī)進(jìn)行數(shù)據(jù)傳輸。由單片機(jī)管理定時(shí)采樣和進(jìn)行部分信號(hào)預(yù)處理工作,解決了Windows 95下定時(shí)采樣的問題,減徑了PC機(jī)方面編程的工作量,使應(yīng)用程序可以精力進(jìn)行數(shù)據(jù)采集后的處理工作。
智能數(shù)據(jù)采集系統(tǒng)
智能數(shù)據(jù)采集系統(tǒng)的框圖如圖1所示。信源信號(hào)經(jīng)放大濾波后進(jìn)入A/D轉(zhuǎn)換器。單片機(jī)以一定的采集率在定時(shí)中斷內(nèi)讀取A/D轉(zhuǎn)換器的輸出,送入RAM中暫存,在定時(shí)斷外則將RAM中存儲(chǔ)的數(shù)據(jù)不斷經(jīng)并口送入PC機(jī)。PC機(jī)中的應(yīng)用程序由并口接收單片機(jī)發(fā)送的數(shù)據(jù),并對(duì)其進(jìn)行數(shù)據(jù)處理和顯示。
1.單片機(jī)與主機(jī)間的并口通信
隨著計(jì)算機(jī)技術(shù)的發(fā)展,微機(jī)的并行口發(fā)生了很大的變化,由原來的只能打印,即只能向外設(shè)傳輸數(shù)據(jù),發(fā)展成為可以在微機(jī)與外設(shè)之間進(jìn)行雙向、快速交換數(shù)據(jù)的雙向并行接口。利用雙向并行口使得PC機(jī)能與數(shù)據(jù)采集系統(tǒng)的單片機(jī)之間以異步的、全互鎖的雙向并行方式通信。它能減少用戶交互地操作外部設(shè)備的次數(shù),以更高的傳輸速率完成數(shù)據(jù)傳送。
并口通信硬件部分原理如圖2所示,軟件部分流程圖如圖3所示。
并口通信利用了D觸發(fā)器74HC74的預(yù)置和清零功能提供傳輸數(shù)據(jù)所需的握手信號(hào)。用八D鎖存器74HC573完成單片機(jī)傳出數(shù)據(jù)的鎖存。在單片機(jī)向PC機(jī)送數(shù)時(shí),單片機(jī)先將數(shù)據(jù)鎖存在74HC573中。74HC573的輸出端接到微機(jī)并行口的數(shù)據(jù)寄存器的輸入端。數(shù)據(jù)鎖存后,單片機(jī)將74HC74的清零端CD清零,使輸出端Q輸出低電平,Q端同時(shí)送至并行口的狀態(tài)寄存器,通知PC機(jī)可以取數(shù)。PC機(jī)檢測到這一信號(hào)后,經(jīng)控制口選通數(shù)據(jù)鎖存器,將鎖存的數(shù)據(jù)取出,并將觸發(fā)器置位端SD置1,使Q端輸出高電平,通知單片機(jī)數(shù)已取出,可以送下一個(gè)數(shù)據(jù)了。單片機(jī)檢測到觸發(fā)器Q端輸出變?yōu)楦唠娖胶?,又?個(gè)新數(shù)據(jù)鎖存至74HC573中,同時(shí)使觸發(fā)器輸出電平翻轉(zhuǎn),通知PC機(jī)取數(shù)。如此往復(fù),直到PC機(jī)不再需要讀數(shù)為止。值得注意的是:為了避免由于時(shí)序的不匹配造成的清零和置位端同時(shí)有效,在單片機(jī)(PC機(jī))進(jìn)行清零(置位)前,應(yīng)對(duì)PC機(jī)(單片機(jī))的置位(清零)端進(jìn)行檢測;而為了避免數(shù)據(jù)的傳輸錯(cuò)誤,每發(fā)16個(gè)數(shù)據(jù)即進(jìn)行1次累加器和與異或和校驗(yàn)。PC機(jī)如發(fā)現(xiàn)檢驗(yàn)結(jié)果錯(cuò)誤,即通知單片機(jī)重發(fā)剛才的16個(gè)數(shù)。
采用這種電路進(jìn)行并口通道,電路設(shè)計(jì)簡單,只需1片74HC573和1片74HC74即可實(shí)現(xiàn)。74HC573和74HC74的使用都很簡單,使得程序編制也很容易,大大提高了傳輸速度。
2.單片機(jī)與RAM間的數(shù)據(jù)交換
在并口通信中引入RAM,是為了解決Windows下應(yīng)用程序在數(shù)據(jù)采集時(shí)無法及時(shí)響應(yīng)消息的問題。RAM在系統(tǒng)中起到了“蓄水池”的作用:數(shù)據(jù)采集卡上單片機(jī)89C51以200Hz的采樣率在定時(shí)中斷內(nèi)讀取模/數(shù)轉(zhuǎn)換器MAX126各通道轉(zhuǎn)換結(jié)果,送入外部RAM中暫存;而在主程序內(nèi),則將RAM中存儲(chǔ)的數(shù)據(jù)取出,通過并口通信傳給筆記本電腦。數(shù)據(jù)在RAM中以循環(huán)隊(duì)列方式存儲(chǔ)。這樣,在Windows響應(yīng)其他消息,筆記本電腦速度較慢時(shí),采入的數(shù)據(jù)在RAM中暫存;而在筆記本電腦速度快時(shí),單片機(jī)將RAM中存儲(chǔ)的數(shù)據(jù)取出傳出。因?yàn)榭傮w來講筆記本電腦的速度是足以在中斷時(shí)間內(nèi)傳完RAM中存儲(chǔ)的數(shù)據(jù)的。所以只要RAM的存儲(chǔ)量足夠大(幾倍于Windows響應(yīng)其他消息可能花費(fèi)的最大時(shí)間),就可以保證數(shù)據(jù)的連續(xù)傳輸。單片機(jī)與RAM數(shù)據(jù)交換流程如圖4所示。
3.最高采樣率的限制
對(duì)最高采樣率的討論可以分為兩種情況:實(shí)時(shí)傳輸和非實(shí)時(shí)傳輸。
在實(shí)時(shí)傳輸時(shí),像前面提到的那樣,單片機(jī)采集到數(shù)據(jù),在定時(shí)中斷內(nèi)經(jīng)RAM暫存,在定時(shí)斷外則不斷經(jīng)并口向PC機(jī)發(fā)送。因而采集系統(tǒng)的最高采樣率由于受到單片機(jī)與RAM間數(shù)據(jù)交換以及與PC機(jī)并口通信指令執(zhí)行時(shí)間的限制,并假設(shè)在使用89C51,12MHz晶振時(shí),采樣數(shù)據(jù)精度是單字節(jié)的,則單通道采樣率不應(yīng)高于32kHz。
如果對(duì)數(shù)據(jù)處理的實(shí)時(shí)性要求不高,允許對(duì)信號(hào)進(jìn)行事后處理,則可以選擇非實(shí)時(shí)傳輸方式。即在單片機(jī)采集到數(shù)據(jù)后,放入大容量RAM中存儲(chǔ),而不向PC機(jī)送數(shù)。在全部數(shù)據(jù)采集完成后,才進(jìn)行單片機(jī)與PC機(jī)的并口通信,將RAM中存儲(chǔ)的數(shù)據(jù)一次送入PC機(jī)。非實(shí)時(shí)傳輸方式的最高采樣率不受單片機(jī)與RAM間地址比較以及并口的數(shù)據(jù)通過率的限制,使采樣的定時(shí)分辨率可以小于(1/32)ms。
采用以上原理實(shí)現(xiàn)的一套生理電數(shù)據(jù)采集系統(tǒng),單片機(jī)使用12MHz晶振,可以以500Hz的采樣率,進(jìn)行16通道生理電信號(hào)的實(shí)時(shí)采集和處理。如果采用更高的晶振頻率,或采用較少的通道數(shù),這一采樣率還可以進(jìn)一步提高。
小結(jié)
本文提出了一種智能數(shù)據(jù)采集系統(tǒng)。用編程簡單、定時(shí)分辨率高、工作可靠的單片機(jī)定時(shí)取代了編程繁復(fù)、定時(shí)分辨率低、工作不可靠的Windows95下的定時(shí)。由單片機(jī)板上RAM的“蓄水池"的作用解決了Windows 95在定時(shí)采樣時(shí)響應(yīng)消息的問題。不但解決了Windows 95環(huán)境下短消息的問題。不但解決了Windows 95環(huán)境下短時(shí)間定時(shí)不準(zhǔn)確的難題,又簡化了用戶的應(yīng)用程序。單片機(jī)還可以對(duì)采入的數(shù)據(jù)進(jìn)行預(yù)處理,節(jié)省主機(jī)處理數(shù)據(jù)的時(shí)間。使PC機(jī)的應(yīng)用程序可以不考慮定時(shí)問題,集中精力進(jìn)行數(shù)據(jù)采入后的處理工作。
在數(shù)據(jù)采集系統(tǒng)與主機(jī)間采用間采用并行口通信,不但解決了Windows 95下的時(shí)采樣問題,提高了系統(tǒng)的數(shù)據(jù)通過率,還使整個(gè)系統(tǒng)結(jié)構(gòu)簡單、高效、可靠。同時(shí)帶來了一系列的好處:不須像目前常用的內(nèi)插式數(shù)據(jù)采集卡那樣占用PC機(jī)內(nèi)的一個(gè)擴(kuò)展槽,而且可以和筆記本電腦相連接,攜帶方便,使用安全,對(duì)采集的信號(hào)造成的干擾小,從而實(shí)現(xiàn)了對(duì)信號(hào)的高性能采集。
評(píng)論