在使用ADC過程當中,解析度是一個用來表示ADC性能的指標,其計算方式可以透過如下方程式表示 : 1LSB = VREF / (2^n - 1), VREF為ADC的參考電壓, n為表示解析度的位元數,假設使用10-bits ADC, ADC參考電壓為5V, 可以計算1LSB = 5 / (2^10 - 1) = 0.0048875855327468, 大約為4.88mV,也就是說當ADC轉換得到512時,實際的輸入電壓約為512 * 4.88 = 2499mV, 若輸入電壓變化小於4.88mV, 可以說ADC是看不出來的,因此若要設計高精度的產品,解析度要高的話,10-bits ADC是不夠的,我曾使用過TI 18-bits delta-sigma ADC,解析度很高,只是轉換起來很慢,18-bits模式下一秒大概只能拿四筆資料,也就是說Report rate : 4Hz, 而且成本也高,對於低價的產品來說不適用,為了在有限成本內壓榨出性能,於是乎就有Oversampling的技術出現,透過軟體來實現提高ADC解析度!
要做訊號的取樣必須先了解取樣頻率及"Nyquist theorem", Nyquist theorem簡單來說若要還原訊號原本的樣子,必須遵循f nyquist > 2 f signal, 關於Nyquist theorem詳細的內容可以自行google查詢,Oversampling則透過公式f oversampling = 4^n * f nyquist來完成!
實作:
我實作的方式是將4^n的取樣結果加總之後,再將加總的結果右移n,然後再結果取出使用,假設要將ADC解析度由10-bits提高至12-bits, n = 12 - 10 = 2, 因此取樣數必須為原本的4^n = 4^2 = 16,也就是說每提升1-bit要取樣4^n, 接著將16筆資料加總,再將加總結果右移n, 就可以將得到的結果透過12-bits的計算公式來使用,假設VREF = 5V, 1LSB = 5 / (2^12 - 1) = 1.22mV, 解析度優於10-bits的4.88mV, 需要使用到透過軟體提升ADC 解析度的朋友,可以參考Microchip AN1152 Achieving Higher ADC Resolution Using Oversampling及ATMEL AVR121: Enhancing ADC resolution by
oversampling這兩份文件,搭配程式實際試試看!
2017年8月6日 星期日
STM32於IAR 9.3以後的版本將uart導向至printf
首先,請先參考如以下IAR提供的"在IAR Embedded Workbench中实现打印输出技術資料" https://www.iar.com/cn/knowledge/support/technical-notes/general/implementing-printf-ou...
-
按鍵反彈跳設計 按鍵開關在MCU的程式設計中初學者通常會遇到一個問題,就是按鍵彈跳現象,原因由於按鍵屬於機械結構,按下時會有機械彈跳的狀況出現,通常會讓判定按鍵的動作出現BUG,因此在程式當中或者硬體上須作處理才能消除彈跳的現象,下圖為量測按鍵按下時的彈跳現象,可以看出在10...
-
你想用熱敏電阻偵測溫度嗎?你想用微控制器做熱敏電阻的讀取並顯示溫度嗎? 由於Edison在出社會第一份從事電子的工作的公司就是專門生產體溫計的公司,既然了解其中一點東西,出社會這麼久了,也該分享一些東西讓有需要的人可以取得資訊的來源,加速學習過程,本篇文章幫大家介紹如何使用微控...
-
相信使用STM32的人都有一些疑問,就是為何有CMSIS/SPL/HAL/LL這麼多種Driver or Library, 其實都是以CMSIS為基礎建構上去,差異就是低階高階之間的分別而已,以下大致對這幾種Libraries做簡單的敘述! CMSIS 雖然使用ARM C...