嵌入式硬體之ADC/DAC
嵌入式硬體之ADC/DAC
寫在前面
這幾天在做一個寒假練項目,其中涉及到了音頻的處理,ADC、DAC再次進入到了我的視野,並引起了我新的思考。
1、初次相識
記得去年七月份,本科畢業剛離校,就到研究生學校這邊打雜,導師讓我參與了一個小項目,那個控制器電路中有一個讓我印象很深的的電路——ADC取樣電路。
這個電路目的很簡單,就是讀出P35的AD取樣值,藉此來估算VDD的大小,進行監測。
它的模擬訊號就是電阻兩端的電壓,數字訊號是通過P35讀取到的數值,再根據相應的計算公式,就可以得出VDD的大小。
這裡是對模擬訊號——電壓的數模轉換。
其實對於AD轉換來講,大家從小都在接觸,比如家家戶戶都有的水銀溫度計。
利用水銀的熱漲冷縮原理,把人的體溫以具體的數值顯示出來。
再比如手機,大家用其播放音樂時,就是把比特流轉化成電壓訊號,再通過揚聲器播放出來。
再比如打電話時,不管是你這邊聽到聲音,又或者你的聲音被另一方聽到,其中都離不開ADC、DAC。
2、為什麼要有ADC/DAC?
萬事萬物的產生都是自有其道理,都有一種內在驅動力在驅動,那麼是什麼促成了ADC/DAC的出現呢?
大家都知道在我們的日常生活中有一種訊號叫——模擬訊號。比如上面提到的:溫度、電壓、電流、聲音等。
模擬訊號雖然很容易被人類接收,但有很多的缺點,比如很容易被各種「雜訊」影響,又比如很難去存儲和傳輸。
而數字訊號正好與其相反,不僅能大程度上隔絕外部的干擾,又便於存儲。
所以把模擬訊號轉化為數字訊號是為了更好的去處理和存儲。
3、ADC模數轉換器
ADC——Analog to Digital Converter
只要是轉換,就會有損耗,在ADC轉換期間,有些模擬訊號不可避免的會丟失。
舉例來說0~5V的電壓訊號,你可以取這個範圍的任意一個數值,你可以取到無數個數據,也就是說從理論上來講,模擬訊號的解析度是無限大的。所以訊號的丟失不可避免。
3.1模數轉換流程
首先對模擬訊號以特定的速率取樣;取樣之後,對其進行量化;量化後,對其進行二進位編碼。
所以你會看到,在晶片技術手冊上常有的一句話:我們的處理器ADC是幾位幾位的。
這裡的解析度用位數來表示,位數越多解析度越高,以2的n次方倍。
舉例來講,0~1V的電壓範圍,如果是3位的ADC,那麼1除以2的3次方等於0.125V,這就是這個ADC所能達到的精度。
上面那個0.125就表示ADC所能感受到的模擬訊號輸入的最小變化。
電壓值每變化0.125V的數值,如上圖橙色那條線,就會上升一個台階,以此對應一個二進位的數值。
以上便是ADC工作的流程:取樣、量化、編碼。
4、DAC數模轉換器
DAC——Digital to Analog Converter
通過數字比特流來產生模擬訊號。
因此對模擬訊號重構的精確度取決於DAC的解析度,12位的要好於3位的。
解析度、基準電壓和重構的時間是DAC的重要參數。
5、如何使用ADC/DAC?
如何使用ADC/DAC?其實很簡單。
因為現在大多的處理器都會內置相應的片上ADC/DAC,而且都是通過外部匯流排與處理器相連的,故外部介面也比較簡單,直接連接即可。如下圖所示。
再配置好相關的暫存器使能,按照晶片技術手冊的要求進行軟體設計。