嵌入式硬件之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,而且都是通過外部總線與處理器相連的,故外部接口也比較簡單,直接連接即可。如下圖所示。

再配置好相關的寄存器使能,按照芯片技術手冊的要求進行軟件設計。