在數(shù)據(jù)采集應(yīng)用中怎樣選擇合適的采樣率
在具體數(shù)據(jù)采集應(yīng)用中,試錯(cuò)測(cè)試可能使用得最為普遍,但它既不是最快的也不是最好的確定抽樣率的方法。采用系統(tǒng)工程分析并通過(guò)一系列預(yù)先設(shè)計(jì)好的試驗(yàn),可以幫助快速找到適合的采樣率。本文以彈球開(kāi)關(guān)為例,介紹選擇采樣率時(shí)應(yīng)考慮的一些因素。
最近我問(wèn)一個(gè)工程師他系統(tǒng)所使用的采樣率是多少,他回答說(shuō):“5毫秒”。我接著問(wèn)他為什么,“因?yàn)樗线m,”他說(shuō)道?!拔覀兓撕芏嗵靵?lái)測(cè)試不同的采樣率,只有這個(gè)最合適。”
他的系統(tǒng)是一個(gè)按鈕開(kāi)關(guān),要求去除掉一些反彈效應(yīng)。他和他的試驗(yàn)小組最后選擇5ms作為間隔是因?yàn)樵跍y(cè)試過(guò)程中,采用這樣的采樣率既不會(huì)將一個(gè)信號(hào)錯(cuò)誤地認(rèn)為是兩個(gè)信號(hào),且由于速度快,也不會(huì)將有用的雙擊誤認(rèn)為是反彈。
5毫秒也許是一個(gè)可以接受的數(shù)值,但由于沒(méi)有考慮系統(tǒng)其它因素,尤其是實(shí)時(shí)反應(yīng)時(shí)間,我們確實(shí)無(wú)法知道這是不是最好的答案。
假設(shè)處理器過(guò)載,例如5ms采樣時(shí)間造成40%過(guò)載,情況會(huì)怎樣呢?可以將采樣時(shí)間間隔增加到10ms而把代碼占用的CPU資源降低到20%,另外一種方法是保持采樣率不變,而將控制碼執(zhí)行的速度降低一半。那么從系統(tǒng)的角度來(lái)看哪一種方法更好呢?在采樣資源和處理器利用率以及其它實(shí)時(shí)因素(如調(diào)度與優(yōu)先級(jí)調(diào)換)間有沒(méi)有一種好的折衷方法呢?下面讓我們具體來(lái)看一看。
選擇標(biāo)準(zhǔn)
在選擇采樣率時(shí),有幾個(gè)對(duì)立的因素要考慮,這些因素包括:
·采樣應(yīng)盡可能快,這樣精度才高
·采樣應(yīng)盡可能慢,以節(jié)約處理器的時(shí)間
·采樣應(yīng)快到能提供足夠的響應(yīng)時(shí)間
·采樣應(yīng)慢到輸入信號(hào)不受噪聲的影響
·采樣率應(yīng)為控制算法頻率的倍數(shù),以減少抖動(dòng)
由于沒(méi)有一個(gè)答案能滿足所有的要求,所以在考慮具體應(yīng)用特性時(shí)只能找到一種比其它都更好的采樣率,本文介紹的技術(shù)將有助于確定這個(gè)采樣率,包括下面幾個(gè)步驟:
1. 測(cè)量傳感器的特性。
2. 如果輸入有噪聲,應(yīng)選擇合適的算法將其濾掉。
3. 只在滿足功能的基礎(chǔ)上計(jì)算采樣率的最高和最低界限。
4. 在最高和最低界限之間確定均衡點(diǎn)。
5. 按均衡點(diǎn)優(yōu)先次序在最高和最低界限間確定采樣率。
這種方法適用于所有傳感器,下面我們以實(shí)例集中討論數(shù)字開(kāi)關(guān)的情形。
數(shù)字開(kāi)關(guān)
數(shù)字輸入最簡(jiǎn)單的形式是開(kāi)關(guān),當(dāng)開(kāi)關(guān)合上時(shí),開(kāi)關(guān)的值是1,打開(kāi)時(shí)值為0,如果是負(fù)邏輯,結(jié)果剛好相反。很多嵌入式系統(tǒng)都有一個(gè)或多個(gè)開(kāi)關(guān),如果開(kāi)關(guān)很少,少于純數(shù)字輸入/輸出(DIO)端口數(shù)量時(shí),它們通常直接接到DIO端口上;開(kāi)關(guān)數(shù)量多的時(shí)候則由一個(gè)開(kāi)關(guān)矩陣來(lái)控制,這個(gè)以后另文再述。
一個(gè)理想的開(kāi)關(guān)在合上時(shí)的信號(hào)為1,打開(kāi)時(shí)信號(hào)是0,從一種狀態(tài)到另一種狀態(tài)的轉(zhuǎn)換是瞬時(shí)完成的。但實(shí)際上,還有上升和下降時(shí)間需要考慮,由于這些時(shí)間和電路電容成正比,所以通常只有幾個(gè)納秒。在我們的分析中,只要傳感器數(shù)據(jù)讀取速度慢過(guò)每秒10萬(wàn)次,就可以將上升和下降時(shí)間忽略不計(jì),因?yàn)樽x取速度慢,有些開(kāi)關(guān)如光開(kāi)關(guān)和結(jié)構(gòu)緊固的瞬態(tài)開(kāi)關(guān)其特性還是非常理想的。
然而大多數(shù)機(jī)械開(kāi)關(guān)都有反彈效應(yīng)。當(dāng)開(kāi)關(guān)合上時(shí),從0到1的轉(zhuǎn)換不是在瞬間完成或者說(shuō)不是連續(xù)上升的。圖1a顯示了從示波器上看到的一個(gè)機(jī)械開(kāi)關(guān)輸出轉(zhuǎn)換過(guò)程的波形,圖1b是開(kāi)關(guān)輸出的數(shù)字信號(hào)波形。主脈沖前后多余的脈沖就是所謂的反彈,它產(chǎn)生于開(kāi)關(guān)內(nèi)部機(jī)械彈片發(fā)生接觸的時(shí)候。如果反彈會(huì)造成不良的影響,就必須對(duì)其進(jìn)行濾波,這個(gè)過(guò)程通常稱(chēng)為去反彈。
測(cè)量關(guān)閉時(shí)間
要決定采樣率,就需要知道最小開(kāi)關(guān)關(guān)閉時(shí)間,我們用σmin表示,它也是確保采樣軟件探測(cè)到開(kāi)關(guān)狀態(tài)的最短時(shí)間。有時(shí)候系統(tǒng)會(huì)具體規(guī)定,在沒(méi)有規(guī)定的情況下,就需要通過(guò)實(shí)驗(yàn),在具體系統(tǒng)需求和硬件特性的基礎(chǔ)上確定。
最小開(kāi)關(guān)時(shí)間一般用來(lái)作為數(shù)據(jù)噪聲的閾值使用,而不是實(shí)際開(kāi)關(guān)打開(kāi)或關(guān)閉的時(shí)間。如果在輸入端檢測(cè)到脈沖的持續(xù)時(shí)間小于最小關(guān)閉時(shí)間,軟件就可能把它漏過(guò),我們不把這個(gè)看作是故障。另一方面,如果脈沖時(shí)間等于或大于σmin,軟件將保證檢測(cè)到開(kāi)關(guān)的狀態(tài)。
下面是我和一些工程技術(shù)人員對(duì)彈球機(jī)的研究經(jīng)驗(yàn)分析,彈球機(jī)是一種很好的實(shí)驗(yàn)工具,因?yàn)樗邆浜脦追N類(lèi)似于數(shù)字輸入開(kāi)關(guān)的機(jī)構(gòu),每種都有不同的特性,圖2顯示了其中的一些。 圖2a中的開(kāi)關(guān)必須經(jīng)常監(jiān)測(cè),因?yàn)閺椙蜻\(yùn)行速度很快,對(duì)于這類(lèi)開(kāi)關(guān),我們測(cè)量得到它的σmin大概是10ms。(實(shí)際測(cè)量值帶有小數(shù)位,我們分析時(shí)也是使用帶小數(shù)的實(shí)際測(cè)量值,但為討論方便起見(jiàn)本文中我們都四舍五入取為整數(shù)。)這個(gè)值根據(jù)環(huán)境不同而有所不同,改變環(huán)境特性可能會(huì)得到不同的最快開(kāi)關(guān)關(guān)閉時(shí)間。也可以通過(guò)測(cè)量和分析來(lái)確定彈球通過(guò)開(kāi)關(guān)的最快速度,如果這樣的話,σmin可通過(guò)數(shù)學(xué)方法推導(dǎo)出來(lái),它是最大球速和開(kāi)關(guān)尺寸的函數(shù)。
圖2b是一個(gè)中速開(kāi)關(guān)。由于彈球方向改變,球通過(guò)開(kāi)關(guān)時(shí)的速度值范圍比最高速度要慢很多。在這個(gè)實(shí)驗(yàn)中,我們測(cè)得這些開(kāi)關(guān)的最短開(kāi)關(guān)關(guān)閉時(shí)間是50ms。
慢速開(kāi)關(guān)是指在軟件檢測(cè)到之前它總是關(guān)閉的,直到發(fā)出重新打開(kāi)的命令,圖2c就是這樣一種開(kāi)關(guān)。在上面一個(gè)圖中,球落在裝有開(kāi)關(guān)的洞里,當(dāng)軟件檢測(cè)到有球存在以后,再觸發(fā)電磁閥將球彈出去;在下面圖中,球打在擋片上使彈簧將擋片拉下來(lái),然后電磁閥再啟動(dòng)將擋片重新推上去。
對(duì)于慢速開(kāi)關(guān),最短開(kāi)關(guān)閉合時(shí)間是觸發(fā)電磁閥的控制軟件的函數(shù),在我們實(shí)驗(yàn)中電磁閥觸發(fā)頻率是10Hz。 一般我們假定開(kāi)關(guān)閉合后沒(méi)有被鎖住,采用鎖住的方法通常不現(xiàn)實(shí),有時(shí)候根本不可能,如像開(kāi)關(guān)矩陣。如果把開(kāi)關(guān)鎖住,結(jié)果就如圖2c中的開(kāi)關(guān)一樣,其速度是發(fā)出解除鎖存信號(hào)任務(wù)的函數(shù)。
如果開(kāi)關(guān)不是理想的,還必須測(cè)量它的穩(wěn)定時(shí)間,我們用τ來(lái)表示,它指達(dá)到正確反映開(kāi)關(guān)狀態(tài)的穩(wěn)定值之前,開(kāi)關(guān)可能彈起的時(shí)間。
我們發(fā)現(xiàn)圖2a中左邊的滾輪開(kāi)關(guān)并不理想,但右邊的光電開(kāi)關(guān)卻非常理想,它沒(méi)有任何反彈。出于分析的目的,我們對(duì)最壞情況穩(wěn)定時(shí)間τmax特別感興趣。
通過(guò)實(shí)驗(yàn)我們可得到σmin和τmax。測(cè)量時(shí)我們把開(kāi)關(guān)放在Vcc和GND之間,并通過(guò)一個(gè)限流下拉電阻,Vout接在邏輯分析儀上,然后將邏輯分析儀設(shè)定為上升沿觸發(fā)(圖3)。
用最快的速度將開(kāi)關(guān)閉合后再打開(kāi)。如果是一個(gè)理想的或接近理想的開(kāi)關(guān),你可以看到開(kāi)關(guān)很平滑地從0變?yōu)?,再?gòu)?變?yōu)?;如果是一個(gè)有反彈的開(kāi)關(guān),輸出的波形跟圖4就有點(diǎn)類(lèi)似。將這個(gè)實(shí)驗(yàn)反復(fù)幾十次,記錄下每次的σmin和τmax。
在進(jìn)行這些實(shí)驗(yàn)的時(shí)候,必須要考慮最終應(yīng)用中開(kāi)關(guān)的工作情況。在彈球機(jī)上,球通過(guò)開(kāi)關(guān)的速度比人按下再放開(kāi)的速度要快,也比人用手將球滾過(guò)開(kāi)關(guān)的速度要快,正因?yàn)榇?,在測(cè)試過(guò)程中我們采用電磁閥來(lái)觸動(dòng)推桿將球推過(guò)開(kāi)關(guān),而不是用手指來(lái)觸動(dòng)開(kāi)關(guān)或用手將球滾過(guò)開(kāi)關(guān)。
設(shè)計(jì)為手工操作的開(kāi)關(guān)要經(jīng)歷各種按壓,因此應(yīng)針對(duì)不同情況重復(fù)進(jìn)行實(shí)驗(yàn)。例如輕輕按下時(shí)開(kāi)關(guān)穩(wěn)定時(shí)間快,但閉合時(shí)間也短;而使勁按下開(kāi)關(guān)閉合時(shí)間長(zhǎng),但也許由于反彈其穩(wěn)定時(shí)間也長(zhǎng),實(shí)驗(yàn)時(shí)要記錄下最小、平均及最大σmin和τmax。為了使采樣數(shù)據(jù)真實(shí),可以在工休場(chǎng)所進(jìn)行實(shí)驗(yàn),要求進(jìn)來(lái)休息的每一個(gè)人很快地按幾下開(kāi)關(guān),再慢慢地按幾下,再幾次連著按兩下,其目的是為了能得到盡可能接近使用者的數(shù)據(jù)。如果是小孩用的東西,就叫小孩來(lái)按開(kāi)關(guān);如果使用者是18至80歲的人,就讓這個(gè)年齡段的人來(lái)試。多收集數(shù)據(jù)或許可以防止災(zāi)難性的結(jié)果,不會(huì)使生產(chǎn)出來(lái)的產(chǎn)品有些人根本就不能正常使用。
評(píng)論