<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > 在數據采集應用中怎樣選擇合適的采樣率

          在數據采集應用中怎樣選擇合適的采樣率

          作者: 時間:2009-02-03 來源:網絡 收藏

          在具體數據采集用中,可能使用得最為普遍,但它既不是最快的也不是最好的確定抽樣率的方法。采用系統(tǒng)工程分析并通過一系列預先設計好的試驗,可以幫助快速找到適合的。本文以彈球開關為例,介紹選擇時應考慮的一些因素。

          最近我問一個工程師他系統(tǒng)所使用的是多少,他回答說:“5毫秒”。我接著問他為什么,“因為它合適,”他說道。“我們花了很多天來測試不同的采樣率,只有這個最合適?!?

          他的系統(tǒng)是一個按鈕開關,要求去除掉一些反彈效應。他和他的試驗小組最后選擇5ms作為間隔是因為在測試過程中,采用這樣的采樣率既不會將一個信號錯誤地認為是兩個信號,且由于速度快,也不會將有用的雙擊誤認為是反彈。圖1:帶有反彈效應的機械開關響應波形。

          5毫秒也許是一個可以接受的數值,但由于沒有考慮系統(tǒng)其它因素,尤其是實時反應時間,我們確實無法知道這是不是最好的答案。

          假設處理器過載,例如5ms采樣時間造成40%過載,情況會怎樣呢?可以將采樣時間間隔增加到10ms而把代碼占用的CPU資源降低到20%,另外一種方法是保持采樣率不變,而將控制碼執(zhí)行的速度降低一半。那么從系統(tǒng)的角度來看哪一種方法更好呢?在采樣資源和處理器利用率以及其它實時因素(如調度與優(yōu)先級調換)間有沒有一種好的折衷方法呢?下面讓我們具體來看一看。

          選擇標準

          在選擇采樣率時,有幾個對立的因素要考慮,這些因素包括:

          ·采樣應盡可能快,這樣精度才高

          ·采樣應盡可能慢,以節(jié)約處理器的時間

          ·采樣應快到能提供足夠的響應時間

          ·采樣應慢到輸入信號不受噪聲的影響

          ·采樣率應為控制算法頻率的倍數,以減少抖動

          由于沒有一個答案能滿足所有的要求,所以在考慮具體應用特性時只能找到一種比其它都更好的采樣率,本文介紹的技術將有助于確定這個采樣率,包括下面幾個步驟:

          1. 測量傳感器的特性。

          2. 如果輸入有噪聲,應選擇合適的算法將其濾掉。

          3. 只在滿足功能的基礎上計算采樣率的最高和最低界限。

          4. 在最高和最低界限之間確定均衡點。

          5. 按均衡點優(yōu)先次序在最高和最低界限間確定采樣率。

          這種方法適用于所有傳感器,下面我們以實例集中討論數字開關的情形。

          數字開關

          數字輸入最簡單的形式是開關,當開關合上時,開關的值是1,打開時值為0,如果是負邏輯,結果剛好相反。很多嵌入式系統(tǒng)都有一個或多個開關,如果開關很少,少于純數字輸入/輸出(DIO)端口數量時,它們通常直接接到DIO端口上;開關數量多的時候則由一個開關矩陣來控制,這個以后另文再述。圖3:測量σmin和τmax的電路。

          一個理想的開關在合上時的信號為1,打開時信號是0,從一種狀態(tài)到另一種狀態(tài)的轉換是瞬時完成的。但實際上,還有上升和下降時間需要考慮,由于這些時間和電路電容成正比,所以通常只有幾個納秒。在我們的分析中,只要傳感器數據讀取速度慢過每秒10萬次,就可以將上升和下降時間忽略不計,因為讀取速度慢,有些開關如光開關和結構緊固的瞬態(tài)開關其特性還是非常理想的。

          然而大多數機械開關都有反彈效應。當開關合上時,從0到1的轉換不是在瞬間完成或者說不是連續(xù)上升的。圖1a顯示了從示波器上看到的一個機械開關輸出轉換過程的波形,圖1b是開關輸出的數字信號波形。主脈沖前后多余的脈沖就是所謂的反彈,它產生于開關內部機械彈片發(fā)生接觸的時候。如果反彈會造成不良的影響,就必須對其進行濾波,這個過程通常稱為去反彈。

          測量關閉時間

          要決定采樣率,就需要知道最小開關關閉時間,我們用σmin表示,它也是確保采樣軟件探測到開關狀態(tài)的最短時間。有時候系統(tǒng)會具體規(guī)定,在沒有規(guī)定的情況下,就需要通過實驗,在具體系統(tǒng)需求和硬件特性的基礎上確定。

          最小開關時間一般用來作為數據噪聲的閾值使用,而不是實際開關打開或關閉的時間。如果在輸入端檢測到脈沖的持續(xù)時間小于最小關閉時間,軟件就可能把它漏過,我們不把這個看作是故障。另一方面,如果脈沖時間等于或大于σmin,軟件將保證檢測到開關的狀態(tài)。

          下面是我和一些工程技術人員對彈球機的研究經驗分析,彈球機是一種很好的實驗工具,因為它具備好幾種類似于數字輸入開關的機構,每種都有不同的特性,圖2顯示了其中的一些。 圖2a中的開關必須經常監(jiān)測,因為彈球運行速度很快,對于這類開關,我們測量得到它的σmin大概是10ms。(實際測量值帶有小數位,我們分析時也是使用帶小數的實際測量值,但為討論方便起見本文中我們都四舍五入取為整數。)這個值根據環(huán)境不同而有所不同,改變環(huán)境特性可能會得到不同的最快開關關閉時間。也可以通過測量和分析來確定彈球通過開關的最快速度,如果這樣的話,σmin可通過數學方法推導出來,它是最大球速和開關尺寸的函數。

          圖2b是一個中速開關。由于彈球方向改變,球通過開關時的速度值范圍比最高速度要慢很多。在這個實驗中,我們測得這些開關的最短開關關閉時間是50ms。

          慢速開關是指在軟件檢測到之前它總是關閉的,直到發(fā)出重新打開的命令,圖2c就是這樣一種開關。在上面一個圖中,球落在裝有開關的洞里,當軟件檢測到有球存在以后,再觸發(fā)電磁閥將球彈出去;在下面圖中,球打在擋片上使彈簧將擋片拉下來,然后電磁閥再啟動將擋片重新推上去。

          對于慢速開關,最短開關閉合時間是觸發(fā)電磁閥的控制軟件的函數,在我們實驗中電磁閥觸發(fā)頻率是10Hz。 一般我們假定開關閉合后沒有被鎖住,采用鎖住的方法通常不現實,有時候根本不可能,如像開關矩陣。如果把開關鎖住,結果就如圖2c中的開關一樣,其速度是發(fā)出解除鎖存信號任務的函數。

          如果開關不是理想的,還必須測量它的穩(wěn)定時間,我們用τ來表示,它指達到正確反映開關狀態(tài)的穩(wěn)定值之前,開關可能彈起的時間。圖4:滾球開關的輸出波形圖。

          我們發(fā)現圖2a中左邊的滾輪開關并不理想,但右邊的光電開關卻非常理想,它沒有任何反彈。出于分析的目的,我們對最壞情況穩(wěn)定時間τmax特別感興趣。

          通過實驗我們可得到σmin和τmax。測量時我們把開關放在Vcc和GND之間,并通過一個限流下拉電阻,Vout接在邏輯分析儀上,然后將邏輯分析儀設定為上升沿觸發(fā)(圖3)。

          用最快的速度將開關閉合后再打開。如果是一個理想的或接近理想的開關,你可以看到開關很平滑地從0變?yōu)?,再從1變?yōu)?;如果是一個有反彈的開關,輸出的波形跟圖4就有點類似。將這個實驗反復幾十次,記錄下每次的σmin和τmax。

          在進行這些實驗的時候,必須要考慮最終應用中開關的工作情況。在彈球機上,球通過開關的速度比人按下再放開的速度要快,也比人用手將球滾過開關的速度要快,正因為此,在測試過程中我們采用電磁閥來觸動推桿將球推過開關,而不是用手指來觸動開關或用手將球滾過開關。

          設計為手工操作的開關要經歷各種按壓,因此應針對不同情況重復進行實驗。例如輕輕按下時開關穩(wěn)定時間快,但閉合時間也短;而使勁按下開關閉合時間長,但也許由于反彈其穩(wěn)定時間也長,實驗時要記錄下最小、平均及最大σmin和τmax。為了使采樣數據真實,可以在工休場所進行實驗,要求進來休息的每一個人很快地按幾下開關,再慢慢地按幾下,再幾次連著按兩下,其目的是為了能得到盡可能接近使用者的數據。如果是小孩用的東西,就叫小孩來按開關;如果使用者是18至80歲的人,就讓這個年齡段的人來試。多收集數據或許可以防止災難性的結果,不會使生產出來的產品有些人根本就不能正常使用。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();