如何為模擬傳感器確定最佳采樣速率
要實(shí)時(shí)地采樣一個(gè)按鈕、光開關(guān)、分解器、壓力、化學(xué)或其它傳感器,需要以多高的速率來對(duì)輸入進(jìn)行采樣呢?是間隔10ms還是30ms?怎樣才知道最佳速率是多少呢?我曾問一位工程師在某個(gè)應(yīng)用中最佳的采樣速率是多少,他回答5ms。至于原因,他說:“因?yàn)樵谶@個(gè)速率下應(yīng)用能夠工作,我們花了幾天時(shí)間來測(cè)試各種采樣速率,只有這個(gè)速率能很好地工作。”
在另一個(gè)應(yīng)用中,說明書列出了一個(gè)采樣速率,這是根據(jù)一個(gè)類似應(yīng)用得到的。在說明書上規(guī)定這個(gè)數(shù)值使得系統(tǒng)的設(shè)計(jì)人員喪失了任何靈活性。如果事實(shí)上這個(gè)速率不是應(yīng)用的最佳采樣速率該怎么辦呢?如果新的軟件看來能夠在規(guī)定的采樣速率下工作,那么在應(yīng)用的整個(gè)生命周期中,這個(gè)速率將很可能將一直固定不變。只有在當(dāng)采樣軟件不能工作時(shí),采樣速率才可能會(huì)受到懷疑。
為什么要采用試探糾錯(cuò)法?
在能夠采用科學(xué)和數(shù)學(xué)的方法時(shí),為什么還要通過試探糾錯(cuò)法來確定采樣速率呢?本文將詳細(xì)討論一個(gè)更為有效的簡(jiǎn)單過程。利用特別的方法選擇采樣速率會(huì)帶來幾個(gè)問題。
首先,對(duì)于一個(gè)給定的應(yīng)用,不應(yīng)該花費(fèi)幾天的時(shí)間通過試探糾錯(cuò)試驗(yàn)來確定恰當(dāng)?shù)牟蓸铀俾省H绻苓M(jìn)行系統(tǒng)的工程分析,只需少量的實(shí)驗(yàn)便可得出正確的答案。
其次,“最佳”的定義是什么?某個(gè)應(yīng)用的最佳答案對(duì)于另一個(gè)應(yīng)用未必也是最佳答案。試探糾錯(cuò)法常用來確定采樣速率,而且測(cè)試是在只包含了傳感器采樣程序的最小系統(tǒng)(而非完整系統(tǒng))上進(jìn)行的。本文開始時(shí)所提到的那個(gè)工程師選擇“5ms”的采樣間隔,他的程序是為一個(gè)需要去抖動(dòng)處理的按鈕開關(guān)所編寫的。通過測(cè)試,他最終選擇了5ms的查詢間隔時(shí)間,因?yàn)檫@時(shí)系統(tǒng)不會(huì)把單次按壓誤記為雙次按壓,另一方面這個(gè)間隔也足夠短,不至于把一個(gè)真正的雙次按壓誤認(rèn)為抖動(dòng)。
事實(shí)上,5ms的查詢時(shí)間對(duì)于這個(gè)系統(tǒng)來說或許可以接受,但在考慮其它因素(特別是系統(tǒng)的實(shí)時(shí)響應(yīng))之前,很難斷定它是否是最佳選擇。
例如,如果處理器負(fù)擔(dān)過重,而5ms一次的采樣需要占用CPU 40%的能力時(shí)怎么辦呢?一種選擇是將采樣間隔時(shí)間增加到10ms,這樣可以把對(duì)CPU的占用率降低一半,另一種選擇是以半速執(zhí)行控制程序。從系統(tǒng)的角度看,哪一種方案更好呢?或者更重要的是,在采樣占用的資源與采樣對(duì)處理器使用的影響,以及實(shí)時(shí)調(diào)度能力和優(yōu)先級(jí)轉(zhuǎn)換等其它因素之間是否有一個(gè)很好的折衷呢?
在選擇采樣速率時(shí),通常有幾個(gè)供選擇的目標(biāo),如:
* 盡可能快地采樣,以獲得最高的精度;
* 盡可能慢地采樣,以節(jié)省處理器的時(shí)間;
* 采樣速率足夠低,使噪聲對(duì)輸入信號(hào)的影響不大;
* 采樣速率足夠高,以提供足夠的響應(yīng)時(shí)間;
* 采樣速率是控制算法頻率的倍數(shù),以便將抖動(dòng)降到最低。
事實(shí)上,沒有任何答案能夠最佳地適合所有系統(tǒng),但在針對(duì)某個(gè)特定應(yīng)用和目標(biāo)硬件的特性時(shí),通常有一個(gè)答案比其它大多數(shù)答案更好。
本文將示范如何結(jié)合試驗(yàn)和數(shù)學(xué)分析,系統(tǒng)地確定一組較好的采樣速率,并討論當(dāng)應(yīng)用的實(shí)時(shí)要求給定時(shí),如何從這組采樣速率中選擇一個(gè)恰當(dāng)?shù)臄?shù)值。
以下是一種確定采樣速率的系統(tǒng)方法:
1. 測(cè)量應(yīng)用的傳感器特性;
2. 如果輸入信號(hào)中包含噪聲,選擇一種對(duì)數(shù)據(jù)進(jìn)行濾波的算法;
3. 根據(jù)其功能計(jì)算出采樣速率的上限和下限;
4. 分析采用上限和下限采樣速率時(shí)對(duì)各種性能的影響;
5. 區(qū)分各種影響的輕重主次,在計(jì)算出的上限和下限之間確定一個(gè)適當(dāng)?shù)牟蓸铀俾省?/P>
為了設(shè)計(jì)一個(gè)優(yōu)秀的解決方案,這種方法結(jié)合了實(shí)驗(yàn)測(cè)量和對(duì)應(yīng)用需求的分析理解。雖然此方法可用于大多數(shù)類型的傳感器,但本文將集中討論模擬輸入傳感器。
模擬輸入傳感器
模擬輸入傳感器通過模數(shù)轉(zhuǎn)換器(ADC)為處理器提供數(shù)據(jù)。采樣速率是指單位時(shí)間內(nèi)從ADC讀取數(shù)據(jù)并傳遞給使用該數(shù)據(jù)的其它應(yīng)用部件的次數(shù)。采樣速率直接影響輸入信號(hào)的時(shí)間分辨率,其方式與ADC的位數(shù)對(duì)空間分辨率的影響大致類似。
最大誤差是采樣速率的函數(shù)。我們將誤差e(t)定義為任意時(shí)刻t實(shí)際傳感器的值與控制算法所用值之間的差異。注意t是連續(xù)的,因此隨著采樣速率Ts提高,輸入值恒定,誤差通常會(huì)增大,如圖1所示。

信號(hào)處理技術(shù)中常用奈奎斯特準(zhǔn)則來確定采樣速率。奈奎斯特準(zhǔn)則規(guī)定,采樣速率至少必須為輸入信號(hào)中最高頻率分量的兩倍。采樣頻率滿足這一要求時(shí),才可以重建原始輸入信號(hào)。
但是,在讀取模擬傳感器時(shí),奈奎斯特準(zhǔn)則無法適用于大部分嵌入式控制應(yīng)用。重建原始信號(hào)需要較強(qiáng)的計(jì)算能力,從而需要數(shù)字信號(hào)處理器。另一方面,在嵌入式控制系統(tǒng)中無需重建模擬輸入,它的輸入信號(hào)一般是用來提供敏感輸入,以作為反饋控制基礎(chǔ)的,因而系統(tǒng)只需要最近的數(shù)據(jù)。因此,這里的問題是數(shù)據(jù)必須要多“近”,才能將誤差保持在應(yīng)用規(guī)定的最大范圍之內(nèi)。
確定采樣速率的范圍
對(duì)于微控制器而言,采用奈奎斯特準(zhǔn)則時(shí),可以通過系統(tǒng)中的最高頻率分量來決定最低采樣速率fmin。我們將最高頻率分量記為F,并定義w=2pF。則模擬輸入中最壞的變化可表示為:

上式中,n為ADC的位數(shù)。當(dāng)g(t)的導(dǎo)數(shù)最大時(shí),g(t)的最大變化率G出現(xiàn)。因此:

在許多應(yīng)用中,最大變化速率可能已由最大斜率限定,例如對(duì)于一個(gè)數(shù)字溫度計(jì),可能規(guī)定為“1度/秒”。根據(jù)ADC的取值范圍,通過簡(jiǎn)單的比例關(guān)系,可將此最大變化率轉(zhuǎn)換為Da/Dt(ADC單位/秒)的形式。
在其它的場(chǎng)合,可以通過試驗(yàn)來合理估計(jì)最大值。例如,假設(shè)將一個(gè)模擬速度傳感器連接到一臺(tái)帶有最小負(fù)載的發(fā)動(dòng)機(jī)上,則速度的最大變化率將發(fā)生在發(fā)動(dòng)機(jī)開足馬力后到達(dá)穩(wěn)態(tài)的時(shí)候。測(cè)量時(shí)可使用模擬傳感器作為輸入,按處理器的最大能力快速采樣,并按照ADC的單位來記錄速度值。
假設(shè)采樣速率為Dt。在一個(gè)Dt的間隔期間,讀取測(cè)量結(jié)果將產(chǎn)生一個(gè)DA。如果Da是兩個(gè)連續(xù)ADC讀數(shù)之間的差值,且DA=max(Da),我們就可以計(jì)算DA/Dt。如果由于Dt太小,輸入DA的有效位成為問題,則可以結(jié)合多個(gè)采樣轉(zhuǎn)而計(jì)算kDA/kDt,這里k為采樣的個(gè)數(shù)目,且k>1。
注意,這個(gè)Dt只用于本次試驗(yàn),目的是找出Ts(最終應(yīng)用的最恰當(dāng)?shù)腄t值),以便在占用資源最少的情況下保證足夠的精度。
由于DA/Dt是規(guī)定的最大變化率,在定義上也稱為G,我們將關(guān)系記為:

設(shè)E為允許的最大誤差,它表示為信號(hào)最大范圍的一個(gè)百分比。即,對(duì)于一個(gè)最大值為5%的誤差,E=0.05。
因此,ADC的最低采樣速率fmin可計(jì)算如下:

例如,如果一個(gè)應(yīng)用的最大變化率相當(dāng)于采樣一個(gè)50Hz的正弦波,用一個(gè)8位ADC來讀取傳感器,且最大誤差為5%。則fmin=50p/0.05=3.1kHz,采樣周期Tmin=1/fmin=318μs。
有意思的是需要注意,最低采樣速率不是ADC位數(shù)的函數(shù)。但是,ADC的位數(shù)為最大誤差確定了一個(gè)邊界:

那么,如果應(yīng)用規(guī)定的最大誤差為1個(gè)ADC單位(即ADC的最佳分辨率),多高的采樣速率能滿足這個(gè)誤差要求呢?答案是DA=1。為了計(jì)算這個(gè)值,在式4中設(shè)E=2-n,有:

式中fmax為實(shí)現(xiàn)最高分辨率的采樣速率。
對(duì)于一個(gè)具體的ADC器件和應(yīng)用,比fmax更高的采樣速率毫無必要,因?yàn)槠骷姆直媛氏拗屏苏`差的降低。
模擬輸入傳感器的采樣速率下限如式4,上限如式6。作為小結(jié),如果給定F:

或者如果已知DA/Dt:

注意,這些式子給出了一個(gè)限制,它在ADC滿刻度范圍(即0到2n-1)的基礎(chǔ)上假設(shè)了一個(gè)最大誤差。在一些應(yīng)用中,可能沒有使用ADC的全部滿刻度范圍,此時(shí)應(yīng)該用ADC的實(shí)際范圍來代替2n。
例如,為了確定fs的有效范圍,考慮一個(gè)應(yīng)用在受控高功率加熱系統(tǒng)中的溫度傳感器。這個(gè)傳感器連接到一個(gè)轉(zhuǎn)換時(shí)間為50μs的10位ADC。系統(tǒng)設(shè)計(jì)為在-20°C到200°C的溫度范圍之間工作。此外,控制算法要求在所有給定點(diǎn)傳感器讀數(shù)的誤差不超過0.5°C,以保證平穩(wěn)控制。
系統(tǒng)開發(fā)的起始階段通過一個(gè)實(shí)驗(yàn)來確定DA/Dt。傳感器在一個(gè)小型溫度絕緣密封裝置中被冷卻到-20°C。密封裝置中放置有一個(gè)加熱器,它只對(duì)傳感器進(jìn)行加熱。如果同時(shí)還對(duì)其它物體進(jìn)行加熱,將使系統(tǒng)的負(fù)載增大,并且延緩加熱的速度。編寫并執(zhí)行對(duì)傳感器進(jìn)行采樣和記錄數(shù)據(jù)的程序代碼后,加熱器被開到最大功率。當(dāng)傳感器被加熱到200°C時(shí),切斷加熱器。此時(shí),在一個(gè)反映實(shí)際應(yīng)用的環(huán)境下對(duì)最大冷卻速率進(jìn)行測(cè)量。如果是被動(dòng)冷卻,只需打開熱封閉裝置即可;如果是主動(dòng)冷卻 (如使用風(fēng)扇),則應(yīng)開啟有關(guān)的制冷設(shè)備。
這里的目標(biāo)是為了獲得近似的測(cè)量值。可能還需要一個(gè)更為完善的設(shè)備(如反映系統(tǒng)實(shí)際負(fù)載的設(shè)備)來對(duì)測(cè)量結(jié)果進(jìn)行精密調(diào)整。但是,這些初步的估計(jì)值可以給出對(duì)所需采樣速率的一個(gè)相當(dāng)好的一階近似,用作系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)中的指導(dǎo)。
假設(shè)將傳感器從-20°C加熱到200°C需要380秒。仔細(xì)考察這些數(shù)據(jù)后我們發(fā)現(xiàn),在1秒的間隔時(shí)間內(nèi),最大溫升為3.5°C。假設(shè)這個(gè)10位ADC已經(jīng)過校準(zhǔn),ADC輸出為0時(shí)對(duì)應(yīng)溫度-20°C,輸出0x3FF時(shí)對(duì)應(yīng)溫度200°C,并且這個(gè)對(duì)應(yīng)關(guān)系是線性的,則每秒變化3.5°C對(duì)應(yīng)每秒變化16個(gè)ADC單位。因此,DA/Dt=16。同時(shí),由于在220°C的范圍內(nèi)規(guī)定的最大誤差為0.5°C,因此傳感器讀數(shù)的最大誤差為0.23%,即E=0.0023。
采用式8計(jì)算模擬傳感器的采樣速率范圍,得:

或:

這意味著,采樣速率低于每秒6.8次可能會(huì)導(dǎo)致超出控制系統(tǒng)算法規(guī)定范圍的誤差,尤其是在最大加熱或冷卻周期期間。采樣速率的上限是每秒16次。但是注意,與信號(hào)跳躍變化的數(shù)字輸入傳感器不同,過快地采樣模擬傳感器不會(huì)導(dǎo)致誤差。事實(shí)上,采樣速率上限標(biāo)志著一個(gè)閾值,超過這個(gè)速率更快地采樣也不會(huì)提高控制系統(tǒng)的精度。
確定最佳采樣速率
現(xiàn)在已經(jīng)得到了可用值的一個(gè)范圍,下一步是根據(jù)應(yīng)用和硬件的各種屬性,在這個(gè)取值范圍內(nèi)確定最佳的采樣速率。以下是在確定最佳采樣速率時(shí)可能遇到的一些問題。
你可能注意到了,ADC的實(shí)際轉(zhuǎn)換時(shí)間并不影響采樣速率。當(dāng)轉(zhuǎn)換時(shí)間與采樣速率相比可以忽略時(shí),這是一種普遍情況。另一方面,假設(shè)轉(zhuǎn)換時(shí)間為60ms(對(duì)于高分辨率ADC來說這個(gè)轉(zhuǎn)換時(shí)間是相當(dāng)普遍的)。由于轉(zhuǎn)換時(shí)間較長(zhǎng),將ADC配置為連續(xù)模式工作,并將采樣速率設(shè)置為16.67Hz(正好是轉(zhuǎn)換速率的一個(gè)倍數(shù))相當(dāng)理想。如果想節(jié)省處理器的時(shí)間,也可以按照這個(gè)速率的一半-即8.33Hz-進(jìn)行采樣。由于這個(gè)速率處在計(jì)算范圍之內(nèi),應(yīng)用仍能正確工作。但是,不能以四分之一速率(4.16Hz)對(duì)模擬輸入進(jìn)行采樣,因?yàn)檫@個(gè)速率在計(jì)算范圍之外,并且會(huì)導(dǎo)致超出規(guī)定范圍的誤差。以非轉(zhuǎn)換時(shí)間倍數(shù)的任何頻率采樣都將導(dǎo)致時(shí)鐘畸變,并有可能引發(fā)更多的問題,即使采樣速率在計(jì)算范圍之內(nèi)亦然。
作為另一個(gè)微幅調(diào)整的例子,假設(shè)已經(jīng)確定控制系統(tǒng)需要更精確的傳感器讀數(shù),即傳感器讀數(shù)的百分?jǐn)?shù)誤差E必須降低。這使得fmin的下限必須提高,意味著傳感器需要更快地采樣。在新的規(guī)定值E已經(jīng)給定的情況下,可以采用式8來快速確定新的最低采樣速率。這樣只花幾分鐘便可分析確定對(duì)采樣速率的調(diào)整,而不必花上幾小時(shí)或幾天來嘗試通過實(shí)驗(yàn)進(jìn)行調(diào)整。
注意,這個(gè)例子考慮采用未經(jīng)濾波的模擬輸入數(shù)據(jù),如果需要采用輸入濾波來減小噪聲,那么在分析中必須考慮對(duì)濾波算法的需求。
概括地說,采樣速率的取值范圍為設(shè)計(jì)提供了一個(gè)起點(diǎn)。如果有任何參數(shù)發(fā)生變化,可以相應(yīng)地改變計(jì)算,根據(jù)需要獲得新的采樣速率。
本文小結(jié)
本文提供的方案不是一個(gè)適用于所有模擬傳感器的解決方案,而是展示了一條分析與實(shí)驗(yàn)相結(jié)合的途徑。讀者應(yīng)根據(jù)所選用的特定傳感器、具體應(yīng)用的需求,以及自己通過簡(jiǎn)單實(shí)驗(yàn)獲得的合理測(cè)量結(jié)果,不斷修改這一方法。需要記住的一點(diǎn)是,在為嵌入式系統(tǒng)開發(fā)軟件時(shí),應(yīng)用基本設(shè)計(jì)可以顯著節(jié)省開發(fā)過程中的時(shí)間,并能獲得更好的結(jié)果,至少是與任何特別的方法同樣好的結(jié)果。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。










服務(wù)咨詢