有一段時間沒說過模擬芯片了,今天我們就聊一聊模擬芯片,特別是模數(shù)轉(zhuǎn)換芯片ADC。
1. 什么是ADC
從本質(zhì)上來看,模擬芯片和數(shù)字芯片最主要的區(qū)別,就是處理信號的不同。顧名思義,模擬芯片處理的是模擬信號,而數(shù)字芯片處理的是數(shù)字信號。模擬信號是隨著時間連續(xù)變化的,比如溫度、濕度、聲音、速度等等。它們最大的特點是,在一定的時間范圍內(nèi)有無數(shù)個不同的取值。
相比之下,數(shù)字信號就是一堆不連續(xù)的數(shù)值,比如計算機里用的二進制0101。由于晶體管有開和關(guān)兩種狀態(tài),所以可以很自然的表示0和1 兩種數(shù)值。晶體管沒辦法做到類似于10%開、或者31.5%關(guān)這樣的狀態(tài),所以它是一個數(shù)字信號。
為了連接模擬和數(shù)字這兩個相互獨立的領(lǐng)域,就需要使用兩種芯片作為橋梁,一個是模數(shù)轉(zhuǎn)換芯片ADC、另外一個是數(shù)模轉(zhuǎn)換芯片DAC。
顧名思義,模數(shù)轉(zhuǎn)換芯片ADC就是用來把模擬信號轉(zhuǎn)換成數(shù)字信號,而模數(shù)轉(zhuǎn)換DAC就是正好反過來,把數(shù)字信號轉(zhuǎn)換成模擬信號。不過在實際應(yīng)用里,ADC的占比更高。有數(shù)據(jù)顯示,在模擬數(shù)字相互轉(zhuǎn)換的應(yīng)用里,有80%是ADC。特別是在數(shù)字化社會,幾乎所有東西都被數(shù)字化了,方便后續(xù)的處理、傳輸和存儲。
很多朋友可能覺得,不就是模擬信號轉(zhuǎn)成數(shù)字信號嘛,聽起來好像沒什么難度。實際上,ADC芯片是模擬芯片中難度最高的,甚至可能沒有之一。在半導(dǎo)體和集成電路領(lǐng)域的頂級會議ISSCC、也就是國際固態(tài)電路會議上,就有相當(dāng)一部分文章是介紹ADC設(shè)計。
2. 如何設(shè)計和優(yōu)化ADC
那么,究竟模數(shù)轉(zhuǎn)換ADC是怎么實現(xiàn)的呢?簡單來說需要采樣(Sampling)、量化(Quantization)、編碼(Encoding)這么幾個過程。也就是說,我們首先需要對這個信號進行采樣,每隔一段時間記錄一下信號當(dāng)時的電壓值。采集到的數(shù)值會經(jīng)過量化,轉(zhuǎn)換成相應(yīng)的數(shù)字信號值,最后再通過某種編碼表示出來,比如補碼、格雷碼等等。
ADC有很多個參數(shù)指標,其中有兩個常見的參數(shù),一個是ADC的采樣速率(sampling rate)或者叫數(shù)據(jù)速率(data rate),另一個是分辨率(resolution)。采樣速率很好理解,就是單位時間內(nèi)能做多少次采樣,采樣點數(shù)越多,就越能還原初始信號的樣子。
分辨率被定義為輸入信號值的最小變化,這個最小數(shù)值變化會改變ADC數(shù)字輸出值的一個碼值。在ADC有同樣輸入范圍的情況下,分辨率越高,一個碼值所代表的最小變化就越小。如果我們的ADC有3位,那么就可以把整個電壓范圍分成2^3=8份。如果電壓變化范圍是0-10V,那么每份就代表1.25V。也就是說,如果電壓的變化小于這個值,那么ADC就沒辦法捕捉到這個細小的變化。需要注意的重要一點是,ADC的分辨率(resolution)和ADC的精度(accuracy)是兩個完全不同的概念。
ADC的具體實現(xiàn)形式有很多種,常見的包括逐次逼近型ADC(SAR),還有一種叫Delta-Sigma ADC。比如常見的逐次逼近型ADC在電路里主要集成了一個電壓比較器、一個寄存器、還有一個DAC,以及一些控制電路。它的本質(zhì)就是用二分查找來確定模擬電壓對應(yīng)的數(shù)字信號。也就是一開始先拿輸入電壓和參考電壓的一半比較,如果輸入電壓更大,那就再和參考電壓的四分之三再比較。相反,如果輸入電壓更小,那就在和參考電壓的四分之一做比較。以此類推,直到比較完成。
3. ADC驅(qū)動設(shè)計
然而,即使是最基礎(chǔ)的ADC,它在實際的工程應(yīng)用中也并不簡單,因此配套的資源支持也就顯得尤為重要。比如,ADC往往不能獨立工作,它們需要配合其他的外部電路才能發(fā)揮作用,這里面最重要的外部電路之一就是驅(qū)動電路。
前面說過,ADC需要對輸入信號進行采樣、量化和編碼,并且輸出N位的數(shù)字信號,這些操作通常都在數(shù)字時鐘的一個周期里完成。這就意味著,在采樣的過程里,輸入信號應(yīng)該保持不變。這有點類似于數(shù)字信號里時鐘的保持時間。
在ADC內(nèi)部,它的輸入端其實包含開關(guān)和電容陣列,通常等效成一個開關(guān)和一個采樣電容。當(dāng)開關(guān)閉合的時候,電容充電;等充好電之后,開關(guān)斷開,,比較器和DAC相互配合在這個時候完成ADC的采樣量化的操作。
這樣問題就來了,首先,如果對ADC的性能要求比較高,比如需要它的采樣頻率很高,那么把ADC內(nèi)部這個電容進行充電的時間就會很短。打個比方,如果采樣頻率是每秒100萬次采樣,那么充電時間、即捕獲時間(TACQ)可能只有300納秒。如果輸入端不加任何電路作為驅(qū)動,那么基本就無法滿足這么高采樣頻率的需求。所以針對這個問題,我們通常會在ADC前端加上一個運算放大器作為驅(qū)動,這樣就可以在較短的采樣時間之內(nèi)提供足夠的電荷給采樣電容。
這樣還沒完,雖然我們可以直接把運放和ADC直接連接起來,但我們在實際應(yīng)用里很少這么設(shè)計。因為在采樣頻率很大的時候,直接連運放的話就需要很高帶寬的運放。另外從仿真里也可以看到,在開關(guān)切換的時候,一開始的轉(zhuǎn)換可能會產(chǎn)生較大的瞬時電流,而且驅(qū)動電路需要能夠在較短的ADC捕獲時間(TACQ)之內(nèi)對ADC內(nèi)部的采樣電容完成充電。
為了滿足這些條件,并且避免出現(xiàn)很大的瞬時電流,我們可以在ADC之前加入一個RC電路。大學(xué)電路里我們學(xué)過,RC電路是用來做濾波的,但這里它的主要作用就是利用這個額外的電容,實現(xiàn)更加快速的充電。運放可以把這個電容充滿,然后等ADC內(nèi)部開關(guān)閉合的時候,通過這個電容給ADC內(nèi)部的電容充電。當(dāng)然除了這個電容之外,一部分的電荷也來自前端的運放。這個RC電路也叫做charge bucket filter電路,它可以有效的降低對前端運放帶寬的需求,所以我們選擇較低帶寬、更低成本的普通運放就可以滿足設(shè)計需要。同時它也消除掉了一開始的瞬時電流,也極大的提升了電路的穩(wěn)定性。
問題又來了,如何確定這些放大器和RC電路的具體大小和指標呢?這里有兩種方法,一個就是通過理論公式進行推導(dǎo),這個在網(wǎng)上有非常詳細的推導(dǎo)過程,根據(jù)ADC的指標,比如分辨率、采樣速率、參考電壓等等,就可以一步一步推導(dǎo)出所需RC電路和運放的參數(shù)數(shù)據(jù)??戳诉@些東西,我真的又不由得想起當(dāng)年學(xué)模電的時候被它支配的恐懼……
當(dāng)然還有另外一種方法,那就是通過現(xiàn)成的設(shè)計工具和仿真工具來進行仿真計算。比如德州儀器TI就提供了一系列相關(guān)的工具來簡化上面所有的計算過程。一開始可以根據(jù)ADC的性能指標選擇對應(yīng)的器件,然后使用ADC SAR Drive工具,來直接計算電阻電容的值,并且得到相應(yīng)的性能指標。
為了進一步簡化設(shè)計流程,TI不僅提供設(shè)計工具,還有一整套完整的生態(tài)把這些工具整合起來。
拿SAR驅(qū)動設(shè)計舉例,TI就提供了很多經(jīng)典的ADC電路設(shè)計方案, 比如這個“高電壓電池監(jiān)控器電路”就一步一步的教我們從設(shè)計說明目標,到如何選擇合適的器件、如何建模仿真,并得到理想的性能指標。并且在設(shè)計的過程中,可以隨時回顧 “TI 高精度實驗室”視頻系列作為參考。
具體到這個電路,我們可以隨時查看”高精度實驗室”里介紹的選擇電荷桶電路(charge bucket filter)的方法,并為這個例子里的放大器、增益設(shè)置和數(shù)據(jù)轉(zhuǎn)換器提供良好的趨穩(wěn)和交流性能。我們還可以直接下載這個電路的設(shè)計文件,按照需求來對設(shè)計進行改修改。
4. PADC設(shè)計中的噪聲
之前的文章里介紹過,模擬芯片的一個最大的問題就是容易受到干擾。事實上,模擬信號能夠受到干擾的地方太多了,從之前說過的電磁輻射EMI、到電路板的設(shè)計缺陷、電源電壓的變化,再到周圍環(huán)境的各種變化,其實都有可能會對模擬芯片和模擬電路造成干擾,從而造成誤差。
對于ADC來說,除了這些外在的因素和干擾之外,它自己本身也會引入誤差,這個通常叫做量化誤差。也就是說,當(dāng)我們在把一個連續(xù)變化的模擬量,量化成離散變化的數(shù)字量的時候,必然會引入這種誤差。不管我們劃分的粒度有多細,分的份有多小,這種量化誤差都會存在。
先說理論,對于一個N位的ADC,每一位代表的電壓范圍可以通過這個公式得到
其中FSR是ADC支持的電壓范圍。那么在這個ADC里可以區(qū)分的最小的電壓變化,就是LSB的一半。舉個例子,一個3位的ADC,輸入電壓從0到8V之間變化。那么它的LSB就是8/2^3 = 1V,能分辨的最小電壓變化是1/2V。也就是說,當(dāng)輸入電壓是0-0. 5V之間的時候,輸出其實都是0,從0.5-1.5之間的時候,輸出都是1,以此類推。所以輸出其實是一個階梯曲線。
再結(jié)合前面說的環(huán)境噪聲、也稱作熱噪聲(thermal),那么一個ADC的總噪聲就是熱噪聲和量化噪聲的平方和再開方。
是不是看到這里就有點上頭了,這個其實只是剛開始。對于一個給定的ADC來說,我們要去量化和測量它的這兩個噪聲,這樣才能更好的、有針對性的設(shè)計包含ADC的整個系統(tǒng)。
拿Delta-Sigma ADC舉例,它的這兩種噪聲取決于ADC的分辨率、參考電壓、以及輸出速率。對于一個包含ADC的系統(tǒng)來說,這種噪聲分析更加的復(fù)雜。在一個典型的模數(shù)轉(zhuǎn)換系統(tǒng)里,通常包含各種模擬噪聲濾波器、運放、ADC、以及對數(shù)字信號進行處理的數(shù)字濾波器、FPGA、MCU等模擬數(shù)字芯片,這也構(gòu)成了一個信號鏈。要分析這個信號鏈的噪聲,我們不僅要對ADC本身做噪聲分析,還要考查整個信號鏈里每個元件的噪聲,以及所有這些元件之間的相互影響。
這個東西聽起來好像很復(fù)雜,但我們可以使用信號鏈的有效噪聲帶寬(Effective Noise Bandwidth)來量化這個分析過程。當(dāng)然我們也需要一系列的工具、軟件和參考資料,來幫助我們做定量分析。
事實上,前面的很多內(nèi)容都來自TI的電子書《高精度ADC噪聲分析基礎(chǔ)》。這本書結(jié)合了大量TI工程師的設(shè)計實踐經(jīng)驗,詳細介紹了ADC的噪聲來源、如何量化分析、如何有效的設(shè)計電路來優(yōu)化ADC的噪聲表現(xiàn)。這本書寫的非常通俗易懂,同時也兼顧了技術(shù)深度,強烈推薦給大家。
在前面說過的TI”高精度實驗室”教程里,除了這里介紹的驅(qū)動電路設(shè)計和噪聲分析之外,還有最基本的ADC基礎(chǔ)、SAR與Delta-sigma ADC的原理與比較、誤差分析、低功耗設(shè)計、高速設(shè)計等等,非常全面。每個視頻后還有配套習(xí)題,方便我們鞏固學(xué)習(xí)成果。我覺得無論你是模電新手還是老炮,都能找到適合你的內(nèi)容。
“高精度實驗室”、ADC電路設(shè)計指導(dǎo)手冊都是TI ADC工具箱的一部分,這里面還有《模擬工程師口袋參考書》,可以用來快速查找和計算各種信號鏈的調(diào)參方法,包括運放帶寬、穩(wěn)定性等等。這些設(shè)計資源可以和ADC 模擬工程師計算器,TI TINA 以及Pspice for TI 配合使用,形成了一站式的設(shè)計體驗。我把這些內(nèi)容的鏈接都放在了下面的參考資料里,想學(xué)習(xí)這方面知識的朋友,一定記得從這里開始。
參考文獻:
1. TI 精密ADC學(xué)習(xí)中心
https://www.ti.com.cn/zh-cn/data-converters/adc-circuit/precision-adcs/learning-center.html
2. TI高精度實驗室線上培訓(xùn)視頻
https://training.ti.com/ti-precision-labs-adcs
3. 模擬工程師口袋參考指南
https://www.ti.com/seclit/eb/slyw038c/slyw038c.pdf
4. ADC 噪聲分析基礎(chǔ) 電子書
https://www.ti.com/lit/eb/slyy192/slyy192.pdf
5. 電路設(shè)計指導(dǎo)手冊
https://www.ti.com.cn/zh-cn/design-resources/design-tools-simulation/analog-circuits/overview.html
6. 模擬工程師計算器
https://www.ti.com.cn/tool/cn/ANALOG-ENGINEER-CALC
7. TI TINA
https://www.ti.com.cn/tool/cn/TINA-TI
8. Pspice for TI
https://www.ti.com.cn/tool/cn/PSPICE-FOR-TI
9. 參考設(shè)計
https://www.ti.com.cn/zh-cn/data-converters/adc-circuit/precision-adcs/reference-designs.html#search?famid=2019