模數(shù)轉(zhuǎn)換器與嵌入式微處理器的接口技術(shù)
模數(shù)轉(zhuǎn)換器主要包括Sigma-Delta型、逐次逼近型和閃速型,應(yīng)用中工程師普遍關(guān)注的問題是如何提高轉(zhuǎn)換精度?本文給出了按實際需要選擇并校正模數(shù)轉(zhuǎn)換器的一些軟件和硬件的應(yīng)用技巧。
模數(shù)轉(zhuǎn)換器(ADC)接收模擬輸入(電壓或電流),并轉(zhuǎn)換為可被微處理器讀取的數(shù)字值。圖1給出了一個簡單的電壓輸入ADC,假定該器件的輸入由兩部分組成:參考信號和測量信號,另外還帶有一個輸出和表示輸入值的8位數(shù)字字。
參考電壓是ADC所能轉(zhuǎn)換的最大值,示例中的8位ADC可轉(zhuǎn)換為介于0V和參考電壓之間的任意電壓,電壓范圍分為256個值或步長。步長的大小由下式給定:Vref/256,這里Vref表示參考電壓,轉(zhuǎn)換器的步長定義為轉(zhuǎn)換器的分辨率。對于5V的參考電壓,步長為:
5V/256=0.0195V或19.5mV
8位轉(zhuǎn)換器將模擬輸入表示為數(shù)字字,數(shù)字字的最高有效位指示輸入電壓是否大于參考電壓的一半(5V參考電壓的一半為2.5V),后續(xù)的各位均表示前一位所表示范圍的一半。
表1說明了這一點,將0010 1100中各位表示的電壓相加,可以得到:
0.625+0.156+0.078 =0.859V
ADC的分辨率由參考輸入和字寬決定,分辨率定義了可被ADC測量的最小電壓變化。如前所述,分辨率的大小等于最小的步長大小,并可用參考電壓除以轉(zhuǎn)換值的數(shù)目加以計算。
上例的分辨率為19.5mV,這意味著任何低于19.5mV的輸入電壓得到的輸出結(jié)果為0,介于19.5mV和39mV之間的輸入電壓得到的輸出結(jié)果為1,介于39mV和58.6mV之間的輸入電壓得到的輸出結(jié)果為2。
可以通過降低參考輸入提高分辨率,如將參考輸入由5V變成2.5V,那么分辨率將為2.5/256,或9.7mV。但這時可被測量的最大電壓將為2.5V,而非5V。
既能提高分辨率,又不降低可測量電壓范圍的唯一方法是增加ADC的位數(shù)。10位的ADC具有210或1,024個可能的輸出代碼,因此此時的分辨率為5V/1024,即4.88mV;而相同的參考輸入條件下,12位ADC具有1.22mV的分辨率。
ADC的類型
ADC具有各種速率,使用不同的接口電路,并可提供不同的精確度。最常用的ADC類型包括閃速ADC、逐次逼近ADC和sigma-delta ADC。
1. 閃速ADC
閃速ADC是轉(zhuǎn)換速率最快的一類ADC。閃速ADC在每個電壓階躍中使用一個比較器和一組電阻。因此4位ADC具有16個比較器,8位ADC則具有256個比較器。所有的比較器輸出連接到一塊邏輯器件上,該邏輯器件根據(jù)比較器的電壓高低確定輸出。
閃速ADC的轉(zhuǎn)換速率是比較器延遲和邏輯器件延遲(邏輯器件的延遲通??梢院雎圆挥?之和。閃速ADC的轉(zhuǎn)換速率很快,但需要占據(jù)巨大的IC空間;而且由于所需的比較器數(shù)目很大,閃速ADC簡直就是功率“黑洞”,需要消耗很高的電流強度。10位閃速ADC所需的電流約為0.5A。
閃速ADC的一種變形就是半閃速ADC,該ADC利用內(nèi)置的數(shù)模轉(zhuǎn)換器(DAC)減少了內(nèi)部比較器的數(shù)目。半閃速轉(zhuǎn)換器的轉(zhuǎn)換速率低于真正的閃速轉(zhuǎn)換器,但高于其它類型的ADC。這里將其歸為閃速轉(zhuǎn)換器類型。
逐次逼近轉(zhuǎn)換器采用一個比較器和計數(shù)邏輯器件完成轉(zhuǎn)換。轉(zhuǎn)換的第一步是檢驗輸入是否高于參考電壓的一半,如果高于,將輸出的最高有效位(MSB)置為1。然后輸入值減去輸出參考電壓的一半,再檢驗得到的結(jié)果是否大于參考電壓的1/4,依此類推直至所有的輸出位均置“1”或清零。逐次逼近ADC所需的時鐘周期與執(zhí)行轉(zhuǎn)換所需的輸出位數(shù)相同。
3. Sigma-delta ADC
Sigma-delta ADC采用1位DAC、濾波和附加采樣來實現(xiàn)非常精確的轉(zhuǎn)換,轉(zhuǎn)換精度取決于參考輸入和輸入時鐘頻率。
Sigma-delta轉(zhuǎn)換器的主要優(yōu)勢在于其較高的分辨率。閃速和逐次逼近ADC采用并聯(lián)電阻或串聯(lián)電阻,這些方法的問題在于電阻的精確度將直接影響轉(zhuǎn)換結(jié)果的精確度。盡管新式ADC采用非常精確的激光微調(diào)電阻網(wǎng)絡(luò),但在電阻并聯(lián)中仍然不甚精確。sigma-delta轉(zhuǎn)換器中不存在電阻并聯(lián),但通過若干次采樣可得到收斂的結(jié)果。
Sigma-delta轉(zhuǎn)換器的主要劣勢在于其轉(zhuǎn)換速率。由于該轉(zhuǎn)換器的工作機理是對輸入進行附加采樣,因此轉(zhuǎn)換需要耗費更多的時鐘周期。在給定的時鐘速率條件下,Sigma-delta轉(zhuǎn)換器的速率低于其它類型的轉(zhuǎn)換器;或從另一角度而言,對于給定的轉(zhuǎn)換速率,Sigma-delta轉(zhuǎn)換器需要更高的時鐘頻率。
Sigma-delta轉(zhuǎn)換器的另一劣勢在于將占空(duty cycle)信息轉(zhuǎn)換為數(shù)字輸出字的數(shù)字濾波器的結(jié)構(gòu)很復(fù)雜,但Sigma-delta轉(zhuǎn)換器因其具有在IC裸片上添加數(shù)字濾波器或DSP功能而日益得到廣泛應(yīng)用。
ADC比較器
圖2顯示了sigma-delta、逐次逼近和閃速轉(zhuǎn)換器的分辨率范圍,同時還給出了每種轉(zhuǎn)換器類型的最大轉(zhuǎn)換速率。如圖所示,sigma-delta ADC的轉(zhuǎn)換速率在逐次逼近ADC的轉(zhuǎn)換速率范圍以內(nèi),但比不上轉(zhuǎn)換速率最低的閃速轉(zhuǎn)換ADC。表中沒有給出速率和精確度的折衷結(jié)果。例如,可以找到8至16位的逐次逼近ADC,但在給定的系列產(chǎn)品中16位ADC的轉(zhuǎn)換速率并不是最快的;而且在閃速ADC中,速率最快的不是12位ADC,而是6位或8位ADC。
上述圖表簡要描述了ADC技術(shù)的當(dāng)前發(fā)展?fàn)顩r。隨著CMOS工藝的不斷改進,逐次逼近轉(zhuǎn)換的時間已由以前的數(shù)十微秒迅速下降至數(shù)微秒。雖然并非所有的技術(shù)進步都將對所有類型的轉(zhuǎn)換器產(chǎn)生影響,CMOS工藝的改進仍將提高各類轉(zhuǎn)換器的速率,但在ADC芯片上添加更為復(fù)雜的DSP功能并不能改進逐次逼近轉(zhuǎn)換器的性能。DSP功能可以改進sigma-delta型ADC,因為該產(chǎn)品可以在芯片上添加更好、更快,也更復(fù)雜的濾波器。
采樣與保持
ADC轉(zhuǎn)換直流信號的工作原理簡單明了。但如果在轉(zhuǎn)換期間輸入信號的變化超過一個最低有效位(LSB),ADC將得到不正確(或至少是不精確)的結(jié)果。減小誤差的一種方法是在ADC之前添加低通濾波器,并選擇適當(dāng)?shù)膮?shù)以保證ADC的輸入在一個轉(zhuǎn)換周期中的變化不超過一個最低有效位。
處理變化的輸入信號的另一種方法是在ADC之前添加采樣-保持(S/H)電路,圖3顯示了采樣-保持電路的工作原理。S/H電路具備帶有控制輸入的模擬(固態(tài))開關(guān),當(dāng)開關(guān)閉合時,輸入信號將連接至保持電容,而緩沖器的輸出將跟蹤輸入。當(dāng)開關(guān)開啟時,輸入信號將與保持電容斷開。
圖中還給出了S/H的工作波形,S/H輸入連接一個緩慢上升的信號,當(dāng)控制信號較低時(采樣模式),輸出將跟蹤輸入;隨著控制信號的增強(保持模式),輸出將與輸入的保持電容斷開,并保持在S/H切換至保持模式時的輸入值。當(dāng)電路再次閉合,電容迅速充電,輸出再次跟蹤輸入。通常S/H在ADC轉(zhuǎn)換開始前切換至保持模式,而當(dāng)轉(zhuǎn)換結(jié)束后切回至采樣模式。
在理想條件下,保持電容不會發(fā)生漏電并且緩沖放大器具有無窮大的輸入阻抗,因此輸出將保持恒定。但在實際中,保持電容會漏電,而且緩沖放大器的輸入阻抗是有限的,因而輸出電平將隨著電容放電產(chǎn)生緩慢的漂移。
S/H電路在保持模式下保持輸出的性能取決于保持電容的質(zhì)量、緩沖放大器(主要是輸入阻抗)的特性和采樣/保持開關(guān)(實際的電子開關(guān)在開路時總會有漏電)的質(zhì)量。保持模式下輸出呈現(xiàn)出的漂移量稱為固定偏差率(droop rate),可用毫伏/秒、毫伏/微秒或微伏/微秒來表示。
實際中,S/H電路由于電子開關(guān)無法達到理想狀況而具有有限的輸入阻抗。這意味著在采樣模式下,保持電容需要通過某些電阻進行充電,這限制了S/H可獲取的輸入速率。S/H在采樣模式下為獲得滿刻度輸入所必須保持的采樣時間稱為采集時間,單位是納秒或微秒。
采樣時一些電阻與保持電容相串聯(lián),這樣的效果等同于低通RC濾波器。這無疑限制了S/H所能獲取的最大頻率,該頻率稱為滿功率帶寬,單位是千赫或兆赫。
如前所述,由于電子開關(guān)無法達到理想狀況,某些輸入信號將出現(xiàn)在輸出中,即便在保持模式下也是如此,這種狀況稱為饋通,單位是分貝。
輸出偏移表示輸入信號與輸出信號之間的差異,S/H電路數(shù)據(jù)表通常以毫伏的形式表示保持模式下的偏移和采樣模式的偏移。
應(yīng)用軟件
使用S/H的ADC系統(tǒng)必須能處理硬件異常情況。在某些系統(tǒng)中,軟件通過端口或寄存器輸出位直接控制S/H的控制輸入。S/H通常置為采樣模式,而軟件必須滿足采集時間要求。在某些系統(tǒng)中,這項工作的完成僅僅只需將S/H置為采樣模式,直到需要轉(zhuǎn)換為止。
當(dāng)S/H置為保持模式后,另一位(或?qū)懭氲刂?,或進行其它操作)將啟動ADC。轉(zhuǎn)換完成后,軟件將讀取結(jié)果。然而,一旦異常中斷(或出現(xiàn)最壞情況的中斷堆棧)導(dǎo)致S/H的輸出電路變化至少一個最低有效位,將會出現(xiàn)問題。這種情況一旦發(fā)生,軟件必須在S/H切換至保持模式之前禁止中斷,并在開始轉(zhuǎn)換之前開放中斷,這樣就能保證ADC在發(fā)生S/H偏差之前完成轉(zhuǎn)換工作。
軟件還必須能調(diào)節(jié)S/H的充電時間。當(dāng)電子開關(guān)閉合并與S/H電容的輸入信號連通時,電容必須在有限的時間內(nèi)充電,因為此時開關(guān)和任何驅(qū)動輸入的電源都將具有非零阻抗。如果這些阻抗之和充分大,軟件將需要增加延遲,以使得保持電容在轉(zhuǎn)換之前,在終值的一個最低有效位變化以內(nèi)有充分的時間進行充電。
內(nèi)部微控制器ADC
許多微控制器均帶有片上ADC。典型的器件包括Microchip的PIC167C7xx系列產(chǎn)品和Atmel的AT90S4434。大多數(shù)微控制器ADC采用逐次逼近法,因為這種方法能對轉(zhuǎn)換速率和微控制器裸片空間成本進行最佳折衷。
PIC16C7xx微控制器包含一個帶有模擬輸入多路復(fù)用器的8位逐次逼近ADC。該系列微控制器具有4至8個通道,內(nèi)部寄存器控制所選的通道并啟動轉(zhuǎn)換。輸入一旦選定,在啟動A/D轉(zhuǎn)換之前,必須經(jīng)過一段穩(wěn)定時間使S/H電容充電。軟件必須保證上述操作所需的延遲時間。
轉(zhuǎn)換精確度
一些微控制器(如Microchip系列產(chǎn)品)允許使用一個輸入引腳作為參考電壓,該引腳通常與某種精密參考電源相連。轉(zhuǎn)換后從A/D轉(zhuǎn)換器上讀取的值為:
(Vin/Vref)×256
某些微控制器使用電源電壓作為參考。在5V系統(tǒng)下,這意味著Vref為5V。因此采用8位ADC測量3.2V信號將得到如下結(jié)果:
(Vin×256)/Vref =(3.2v×256)/5V =16310 =A316
然而得到的結(jié)果還取決于5V電源值。如果電源電壓超過1%,即為5.05V,那么A/D轉(zhuǎn)換的結(jié)果將為:
(3.2V×256)/5.05V=16210=A216
因此電源電壓1%的變化將導(dǎo)致轉(zhuǎn)換結(jié)果計數(shù)改變1。典型電源的電壓變化范圍為2%或3%, 因此電源電壓的變化將對轉(zhuǎn)換結(jié)果產(chǎn)生顯著的影響。電源電壓的輸出常常受到電源間負載、溫度、交流輸入變化的影響。
這里提出了一個影響所有ADC設(shè)計的問題:參考電壓的精確度。典型的ADC參考電壓可為2.5V額定值,但可在2.47V和2.53V(這些數(shù)值來自數(shù)據(jù)表的實數(shù)部分)之間變化。如果采用10位的ADC,在上述給定的參考范圍極限條件下,轉(zhuǎn)換2V的輸入將得到如下結(jié)果:當(dāng)Vref=2.47V時, 轉(zhuǎn)換結(jié)果=(2V×1,024)/2.47=82910;當(dāng)Vref = 2.53V時,轉(zhuǎn)換結(jié)果=(2V×1,024)/2.53=80910。
各部分之間參考電壓的變化可導(dǎo)致輸出發(fā)生20個計數(shù)的變化。圖4顯示了參考變化對ADC結(jié)果的影響。盡管誤差的百分比在整個范圍內(nèi)維持不變,但ADC值越大,誤差值顯然也越大。
有時由于需要得到精確的參考電壓,對精確度的要求甚至超過了產(chǎn)品成本所能承受的范圍。當(dāng)無法進行手工調(diào)節(jié)時,即可采用軟件來補償參考電壓的變化。這通??赏ㄟ^提供已知的用于校正ADC的精確輸入來實現(xiàn)。這個參考電壓可以非常精確(當(dāng)然也非常昂貴),因為只有很少的生產(chǎn)線需要這類參考電壓。
在上述2.47V示例中,ADC的輸入可采用2V的精確電壓。當(dāng)軟件讀取ADC時,知道正確的值應(yīng)為819,由此校正常數(shù)為829/819,或1.012。類似地,2.53V參考電壓的校正常數(shù)為809/819,或0.988。
這意味著需要浮點運算來校正ADC值。如果使用的處理器可處理浮點運算,那么這種方法就是可取的。但對于比較簡單的處理器,則有可能不具備必要的處理時間或代碼空間來實現(xiàn)浮點運算。
進行ADC校正的一種有效方法是查表。但該方法的缺陷是需要足夠大的固定存儲器來維持對應(yīng)于每個可能的ADC值的查表值,對于10位的ADC,查表需要1024字的存儲空間。
電壓參考與其額定值相當(dāng)接近,否則就不能稱其為參考了。假定在工作溫度中參考電壓足夠穩(wěn)定,ADC誤差占ADC讀數(shù)值的百分比將是恒定的。因為ADC具有有限的分辨率,精度校正ADC誤差的精度不會大于1LSB。
這樣我們就可按下面給出的方法簡化ADC的校正工藝。作為查詢表的替代,我們可以另外存儲一個值,該值通知軟件將要從ADC讀取值中添加或刪除的(二進制)百分比,由此校正誤差。我們可以添加或刪除輸入的1/8、1/16或1/24,但都將導(dǎo)致精確度下降1 LSB。我們只需存儲單個校正常數(shù),而除法運算則可由一系列移位加或移位減運算實現(xiàn)。
上述2.47V示例可由ADC值與.988相乘的結(jié)果加以校正,也可通過初始值減去1/128,再減去1/256和1/512得到相同的結(jié)果。在初始的2V示例中,采用整數(shù)表示法,可得到如下結(jié)果:
829-829/128-829/156-829/512 =829-6-3-1 =819
上述結(jié)果將ADC讀取值校正為819,這是額定參考電壓為2.5V條件下的理想值。類似地,2.53V參考電壓可通過增加1/128 和1/256加以校正。
我們還必須確信在期望的工作溫度范圍內(nèi)參考電壓充分穩(wěn)定,否則在期望溫度附近只能得到較好的校正結(jié)果。如果參考電壓的溫度穩(wěn)定性不夠好,那么必須選擇更好的參考電壓,或者將工作溫度范圍分為多個段并在每個段上使用不同的校正值。當(dāng)然,這也意味著需要使用熱敏電阻或其它方法來測量溫度。
該方法通過對移位結(jié)果進行截斷舍入而實現(xiàn)舍入誤差處理。在2.47V示例給出的電子表格中,所有情形下的校正值均在理想值的兩個計數(shù)以內(nèi)。大多數(shù)校正值都是正確無誤的,或者僅偏差一個計數(shù)。2V輸入條件下得到的校正結(jié)果明顯優(yōu)于最初的偏差(10個計數(shù)),這正好滿足了諸多應(yīng)用系統(tǒng)的需要。如果應(yīng)用系統(tǒng)連這點偏差都無法承受,那么確實需要更好的參考電壓或者求助于手工調(diào)節(jié)。
校正技術(shù)同樣可用來補償其它系統(tǒng)的不精確度,如電阻累計誤差。如果所測量的系統(tǒng)包含電壓輸入,即可在輸入中應(yīng)用精確電壓,并進行適當(dāng)?shù)男U?,由此在ADC中補償參考輸入的變化并在輸入條件下補償電阻公差的影響。
校正值的計算和使用
校正值可通過讀取已知的參考輸入并找到適當(dāng)?shù)男U禂?shù)(二進制系數(shù))計算得到。對于上述給定的示例,理想值與最壞條件下的ADC值之間的差異將不會超過1.2%,因此初始值的1/2和1/4中不會出現(xiàn)分數(shù),而能被測試和使用的值只能為1/128、1/256和1/512。這樣就可以從接近期望值的地方開始工作。
我們可以輕易地利用計算器求得校正系數(shù),但如果要在應(yīng)用系統(tǒng)的固定點處理器上計算校正系數(shù),那么還需要采用基于整數(shù)的方法。根據(jù)該方法,單個字節(jié)(或字)用來存儲校正常數(shù),而第7位指示參考電壓的高低狀態(tài)(如參考電壓為低,則需減去校正值,否則加上校正值)。第0、1和2位指示是否需要使用1/128、1/256和1/512系數(shù)。
當(dāng)然也可為每個可能的系數(shù)分別使用一個字節(jié),其中第4個字節(jié)指示參考電壓的高低狀態(tài)。
寫入校正值
不管使用表格還是校正常數(shù),如何使校正值寫入系統(tǒng)呢?任何校正設(shè)計的一項關(guān)鍵組成部分就是固定存儲器的有效性。許多微控制器都帶有片上EEPROM,而校正通常在電路板測試過程中進行。在高產(chǎn)量環(huán)境下,校正或許可以利用某類自動測試設(shè)備加以實施。
我們通常希望通過使引腳接地,將處理器置于某種“校正模式”中。生產(chǎn)測試設(shè)備可用程序加以控制,因此可在模擬輸入應(yīng)用非常精確的電壓,并使校正引腳接地。微控制器可進入校正模式,并在該模式下讀取參考值并計算補償值或生成檢索表。
在某些情形下,由于內(nèi)存不夠而無法向微控制器添加校正代碼。此時就必須使微控制器將ADC值返回至輸出引腳(串聯(lián)情況),或者返回至一組引腳(并聯(lián)情況),該值由生產(chǎn)測試設(shè)備讀取。這樣外部計算機就能計算校正值或查表值,并經(jīng)由相同的接口返回至微控制器。
如果生產(chǎn)測試設(shè)備能對微控制器的內(nèi)部電路進行程序控制,那么校正數(shù)據(jù)就能嵌入閃存的程序數(shù)據(jù)中。如果校正的參考電壓在微控制器以內(nèi),那么測試設(shè)備首先必須將校正程序載入微控制器中并運行校正程序,然后載入實際的應(yīng)用代碼。
但是某些非常小的微控制器由于沒有充足的引腳,因而無法進行必要的校正。在這類情形中,必須使輸出引腳還充當(dāng)校正引腳,可以采用外部電阻使該引腳實現(xiàn)此雙重功能。生產(chǎn)測試設(shè)備通常在啟動選擇校正模式之前使引腳接地。
上述功能實現(xiàn)中,微控制器啟動時所有的引腳均處于輸入狀態(tài),并在將校正引腳配置為輸出引腳之前讀取校正值。如果引腳的電壓為高,則啟動正常的工作方式;如果引腳的電壓為低,則必須在外部接地,由此使微控制器進入校正模式。當(dāng)然引腳在外部接地時,輸出不應(yīng)對系統(tǒng)產(chǎn)生任何破壞。
如果要校正應(yīng)用于備用ADC輸入的精確參考電壓,那么可以應(yīng)用備用輸入本身對系統(tǒng)校正。只需使用一個電阻器即可在備用輸入中使ADC電壓歸零(在上述示例中只需接地即可)。當(dāng)引腳測量得到的電壓超過某些預(yù)先確定的閾值(即超過滿標(biāo)度電壓的2/3)時,必須使軟件進入校正模式。
選擇校正電壓時,必須在參考電壓為最低可能值時,不使ADC到達飽和時的最大值。這能保證計算校正常數(shù)(或表)時,不會因為校正常數(shù)的位舍入誤差而降低精確度。這通常使校正電壓高于滿標(biāo)度的90%,盡管期望能選擇最接近標(biāo)準(zhǔn)的參考電壓以方便設(shè)計。
在某些應(yīng)用中,還可以通過改變ADC的輸入來解決參考輸入問題:可以采用變化范圍為10%的光傳感器,取代具有固定值的光傳感器,或者采用變化范圍為25%的溫度傳感器。當(dāng)然還必須考慮這些傳感器的精度,但這已超出了本文討論的范圍。
盡管有時很難確定哪種ADC適用于具體的應(yīng)用系統(tǒng),但該產(chǎn)品的多個系列使得我們可以輕松地挑選滿足需要的產(chǎn)品。使軟件與硬件相匹配就能確保選擇的ADC滿足應(yīng)用系統(tǒng)的精確度和穩(wěn)定性要求。
作者簡介:
Stuart Ball在嵌入式系統(tǒng)設(shè)計領(lǐng)域具有20余年經(jīng)驗的電器工程師,編寫了3本有關(guān)嵌入式系統(tǒng)的書籍。本文的內(nèi)容節(jié)選自Stuart最新出版的著作“Analog Interfacing to Embedded Microprocessors”,該書由Butterworth-Heinemann公司出版。他的聯(lián)系郵件:SBall85964@aol.com或 stuart@stuartball.com。
作者:Stuart Ball Email: SBall85964@aol.com或stuart@stuartball.com
本文引用地址:http://www.ex-cimer.com/article/201706/348638.htm
評論