眾所周知,ADC主要用于對模擬信號進行數字采集,以進行數據處理。我們周圍的信號一般都是不斷變化的模擬量,如光、溫度、速度、壓力、聲音等。然而,我們大多數人都使用數字設備。如果我們想方便地使用和處理信息,就需要將模擬量轉換為數字量,并傳送到微控制器或微處理器。那么ADC轉換是如何實現的呢?這是一個什么樣的過程?閱讀下面的筆記,你一定會對模數轉換器有更全面、更系統的了解。
在電子信息系統的學習中,我們或許早就被告知現實世界是模擬的,而數字化的模擬世界則越來越展現更多的風采。但是所謂的數字和模擬只是相對的而已,你可以把模擬量當做無窮數字量的組合,也可以把數字量當做具有不同間隔特征的模擬量。這模數之間的差別也就是采樣和量化的差別而已!
那么Analog如何才能走到Digital呢?
一、ADC幾個步驟
1、采樣和保持
如果把模擬信號比作無限采樣點的數字信號,那么我們就需要采取其中一些有限點才能進行真正的數字化傳輸。采多少點?怎么采?
奈奎斯特(Nyquist)采樣定理:
簡單來說就是采樣頻率必須大于信號頻率的2倍,fs≥2fn。這樣才能重新恢復信號。如果不,會因為頻譜混疊而無法復原,具體原因自行查找公式推導及分析。如下圖頻譜
保持的意思簡單理解就是讓采樣后的數值保存到下一步轉換。
2、量化和編碼
所謂的量化是把采樣后的N多個點數值按照一定標準和步驟轉化為數字式的0和1,這個過程根據方式的不同可以分為很多種ADC類型,因此具有不同的性能特性,見下文。
二、ADC的幾種架構
1、積分型ADC
顧名思義,積分ADC的基本原理就是利用運放對輸入信號和參考信號進行積分輸出,這里參考信號一般與輸入信號極性相反,這樣輸出電壓就會有上升時間和下降時間,根據計數器來統計時間,最后按照函數關系得到采樣信號的值。
特征簡介:
A:積分時間決定轉換精度,因此犧牲轉換速度可以提升精度,在早期的一些儀表轉換精度要求不高的場合應用,后來的ADC很少采用這種架構了。
B:抗噪聲能力強。對于零點正負的白噪聲,積分時可以消除。
2、逐次比較型SAR
顧名思義是利用比較的方式來轉換輸出數字量,這個用來比較的值由DAC產生,如下圖:初始化DAC的輸出由寄存器設置為1/2Vref,然后由比較器判斷大小來決定輸出1或0,進而進行下一步再次設置寄存器輸出DAC,如此循環到最后一次LSB。依次輸出的0和1即為轉換后的數字量。算法核心就是二分法搜索,類似于猜數字值的游戲。
特征簡介:
A:100K到1M的中等速度,12到16位的中等精度,綜合性能較好,因此是目前應用最多的ADC架構之一。
B:精度主要決定于DAC的轉換精度,因此DAC需要校準,比較器也需要滿足高速和能夠匹配系統的較高精度。
C:功耗可調,由轉換速度決定,因此也限制了高速應用。
D:總之SAR型ADC的內部各組成模塊需要組合設計性能匹配最優。
3、Pipeline流水線型ADC
基本原理如圖,利用多個比較器進行并行處理,很明顯,高速!
特征簡介:
A:很明顯夠快,比較器并行處理。
B:功耗大,面積大,自然是因為比較器多。
C:分辨率不夠,也是因為功耗大,多數小于16位。
D:轉換周期需要不斷校準以保證一定精度。
兩種ADC架構的比較:
4、Σ-Δ型ADC
Sigma-Delta 型ADC也是目前應用相當多的一種ADC架構,尤其是在高位數分辨率的ADC設計上,這種調制型的ADC轉換設計盡可能采用數字電路來處理并結合算法實現更好的性能。核心技術點:過采樣和噪聲整形。
Sigma-Delta調制過采樣:
如圖,sigma-delta的意思是差分求和,我們來顧名思義一下這個過程:
假設第一個積分運放輸出1,則到后面Q輸出也為1,第二個運放輸出則為+V。
+V反饋到第一個運放輸入,驅動積分器向反方向輸出,待采集信號Vi也會驅動積分器輸出,綜合而言如果積分器輸出為0,第二個比較器反饋回來的就是-V,以驅動積分器向輸出。這個環路最后的目的是實現運放的基本特性:反相端應該為0!
這樣整個輸出的1的個數比例對應的電壓值其實就是待測信號的電壓值!能否理解?就是通過對誤差的不斷累積求和得到對應值!Q會輸出一串01值即完成。
過采樣:
上述過程中的觸發器時鐘非常快,遠大于奈奎斯特采樣要求,這樣可以將量化噪聲推到更高頻段內。量化噪聲:數字量化的最小單位存在的誤差被稱為量化噪聲,即1LSB和2LSB之間的誤差值。
噪聲整形:
前一步得到的高速01數字流可以通過數字方式進行處理得到最后的輸出結果。因為在過采樣過程中是以速度換取精度的方式來操作的,高速但是噪聲大,在噪聲整形過程中通過數字濾波器和抽取電路把噪聲消除并降低最終的信號輸出速率,實現高精度的數據轉換結果!
如下圖總結:
幾種ADC架構的簡單比較:
大家在學習ADC的過程中一定有很多問題,我這邊也總結了一些學習中遇到的問題,現在分享給大家,希望能從中學習到一些有用的知識。
Q1
設計一個電路是怎么樣的一個過程啊?如何從架構開始一步一步到滿足性能要求的電路來? 特別是各管子的參數是靠手算出來的還是工具仿真出來的?
先初步手算的 然后仿真精細化。比如BGR,先確定電流、功耗、輸出電壓等基本指標,然后選擇電路結構,再進行手算。有了初步參數,就可以仿了,然后再調。設計的尺寸還要看工藝和版圖的可行性
Q2
同步sar邏輯和異步的區別是什么呢?哪個更好一些?
同步SAR更多是應用于低速,一般采樣率不會超過5MHz,而且高速時鐘需要外灌溉;異步SAR可以做到很高速,對于40nm這種工藝,單通道可以到100MHz左右,如果是Finfet工藝,可以更高。由于異步SAR ADC在面積和功耗上遠遠優于pipelined ADC,在精度要求不是太高的應用領域(不超過10Bit),異步SAR可以代替pipeline了。
Q3
計算SNR的時候,諧波功率也算到噪聲功率嗎?計算ENOB用的是SNR還是SNDR?
是信號和其他所有比,當然這個也要看定義,有的地方把snr和sndr區分開,sndr是信號比諧波+噪聲,snr就是信號比噪聲了。事實上大家大部分情況下說的snr就是sndr,不特別強調的話,習慣性默認snr就是sndr。就是說通常說snr是加上了諧波失真的sndr,而不是僅用enob公式算出來的snr。
Q4
對怎么做一些屏蔽,隔離,匹配,floorplan等等能不能給說一說,因為畢竟我們要跑的頻率還不低呢。
說白了就是DAC的布局布線,這可以是一個專門的Topic。我們通常所說的中心對稱圖形其實大部分只能消除一階的系統失配,但是一不小心就可能放大高階失配。涉及到我們SAR ADC里面的CDAC,要分情況來討論,如果是低速的高精度SAR ADC,由于速度低,我們的CDAC可以采用很多方式來消除系統失配。但是對于高速SAR ADC,一個電容拆分的越散,雖然系統匹配越好,但是布線越復雜,寄生效應越明顯,對速度的影響越大。我在做100MHz采樣率這種數量級的SAR ADC的時候,我們的總電容其實都不大的,LSB電容不足1fF,整個SAR ADC的面積也很小,具體到CDAC,也就100*100左右。我們會更多地從速度的角度觸發,MSB電容做一些拆分散開,其他電容以layout優先,layout舒服了,電路性能才能上去。這里有幾張關于DAC Layout的圖給大家看看,大概需要考慮到哪個程度。
一階線性匹配和高階非線性失配都要考慮,最終layout布局要能消除或者減弱所有mismatch。
類似的有Q^2隨機游走式布局。
平衡環的方式,目的就是要將DAC的器件單元完全打散,消除一階和高階系統mismatch,最終的目的都是為了在惡劣的環境下實現較低的INL。
Q5
仿單級放大器是應該去跑仿真仿瞬態仿真合適還是交流仿幅頻特性曲線合適?
不矛盾,這兩都需要跑,或者是需要跑哪些仿真得看實際需求。AC或者STB是得到幅頻特性,諸如低頻增益、GBW、穩定相關的PM和GM等這些參數。但是AC畢竟只是基于某個特定工作點的電路性能,實際中OP的輸出輸入都是有一定范圍的,工作點偏了OP性能肯定也會發生改變,跑Tran,對Tran波形做DFT就能夠知道信號的質量,DFT是對OP輸出信號的線性度進行定量計算,反映了不同工作點情況下的OP性能參數變化(增益的變化、GBW的變化等)。
Q6
我在想是不是我不做太高速的,可以不用太在意這個頻域的東西?因為我們是掛在MCU上的一個模塊,萬一不行,我就讓他們軟件多給點時間去采結果。
大家先看DFT譜線圖的物理意義很重要,從不懂到似懂非懂再到明白,總要有個過程,該經歷的痛苦要經歷的。事實上工作好多年不會用DFT分析信號線性度的大有人在,這種情況下就比較被動了,每次要請人幫忙搭建仿真Bench,關鍵是仿完心里還底氣不足。你們學完能有個似懂非懂的狀態就差不多了,答疑的時候我再幫大家梳理一遍,從似懂非懂到明白也就是一線之隔,一瞬間的事兒。
Q7
其實我對歸一化,dB的意思也沒理解透。
譜線的Y軸是dB就是說這根譜線的功率吧,這個能理解。
這里的功率,是指某信號在某點的電流電壓積么?
高考,各地的滿分不一樣,假設湖北滿分750,上海滿分600。現在分別有2個學生A和B,A是湖北考生,B是上海考生,A考了600分,B考了500分,我們怎么來判斷他們誰的成績更好呢?單單比較分值的絕對值沒有意義,我們把總分歸一化到100分上來,A=600/750100=80分,B=500/600100=83.3分,簡單來說B成績更好。這就是歸一化,以統一的標準來衡量。
Q8
我感覺明明簡單的一個誤差指標,但是卻要搞出這么多分散的指標來表達這個誤差,太暈了,ADC判斷誤差,這個看起來覺得應該好理解,就是搞出各種誤差指標,這下就難理解了
對信號歸一化的意思是,所有頻譜對應的功率值都除以信號功率值,由于縱坐標已經變成了log軸,所以直接減法就行。
20log10(A/B)=20log10(A) - 20*log10(B)
在DFT頻譜里面,信號功率是最大值,對應著考試的滿分,對信號歸一化就是對滿分歸一化。
Q9
s=20log10(2s/N/FS); 對數里面2*s/N/FS什么意思?
好問題,你發現了程序里的一個小bug。
Q9.1
直接log10(s),不對嗎?
2s/N/fs=s(2/N/fs),其中2/N/fs是一個常數。我們關注FFT的結果只關注信號和諧波以及噪聲之間的相對差值,所以所有的s元素都乘以一個常數是不影響結果的。
但是這里的歸一化確實不對,s是fft結果,如何對s進行歸一化呢?最簡單粗暴的方法是 log之后 s=s-max(s)。
如果按照DFT的理論公式,歸一化的方法應該是2s/N,為什么要2呢?我們在此之前只取了N/2個點,丟了一半,這里的2是補那一半回來。為什么/N呢?因為時域采了N個點,對應頻域也是N個點,/N的意思是求平均。
所以這里的代碼里多了一項/fs,正確的應該是s=20log10(2s/N)
從這個圖你們應該能看的更清楚,第一章圖的FFT結果沒有對信號進行歸一化,信號的值不為0,第二張圖僅僅是對信號進行了歸一化,信號顯示為0,噪底整體下移。
如果看不懂就略過,畢竟是乘以一個常數。我建議你們以后歸一化就直接 s = s-max(s),簡單粗暴好理解。
評論