選擇正確的模數(shù)轉換器 (ADC) ,微控制器內部ADC
許多微控制器都包含片上 ADC。典型器件包括 Microchip PIC167C7xx 系列和 Atmel AT90S4434。大多數(shù)微控制器 ADC 都是逐次逼近的,因為這可以在速度和微控制器芯片上的空間成本之間進行最佳權衡。
PIC16C7xx 微控制器包含一個帶有模擬輸入多路復用器的 8 位逐次逼近型 ADC。該系列中的微控制器有 4 到 8 個通道。內部寄存器控制選擇哪個通道、開始轉換等。一旦選擇了一個輸入,必須經過一個穩(wěn)定時間以允許 S/H 電容器在 A/D 轉換開始之前充電。軟件必須確保發(fā)生這種延遲。
轉換精度和公式
一些微控制器,例如 Microchip 系列,允許我們使用一個輸入引腳作為參考電壓。這通常與某種精度參考相關。轉換后從 A/D 轉換器讀取的值為:
(V輸入/V參考) x 256
一些微控制器使用電源電壓作為參考。在 5V 系統(tǒng)中,這意味著 V ref始終為 5V。因此,使用 8 位 ADC 測量 3.2V 信號會產生以下結果:
(V in x 256)/V參考
= (3.2vx 256)/5V
= 163 10
= A3 16
但是,結果取決于 5V 電源的值。如果電源電壓高 1%,則其值為 5.05V?,F(xiàn)在 A/D 轉換的值將是:
(3.2V x 256)/5.05V = 162 10 = A2 16
因此,電源電壓 1% 的變化會導致轉換結果改變一個計數(shù)。典型的電源可能會發(fā)生 2% 或 3% 的變化,因此電源變化會對結果產生重大影響。電源輸出經常隨負載、溫度、交流輸入變化以及從一個電源到另一個電源而變化。
這帶來了一個影響所有 ADC 設計的問題:基準的準確性。典型的 ADC 基準電壓可能標稱 2.5V,但可以在 2.47V 和 2.53V 之間變化(這些值來自實部的數(shù)據(jù)表)。如果這是一個 10 位 ADC,在參考范圍的極端轉換 2V 輸入會產生以下結果:
在 V ref = 2.47V 時,
結果 = (2V x 1,024)/2.47 = 829 10
在 V ref = 2.53V 時,
結果 = (2V x 1,024)/2.53 = 809 10
不同器件之間的參考電壓變化會導致 20 個計數(shù)的輸出變化。
顯示了參考變化對 ADC 結果的影響。盡管誤差百分比在整個范圍內保持不變,但對于較大的 ADC 值,數(shù)值誤差當然更大。
軟件校準
有時我們需要一個準確的參考,比產品成本所能支持的更準確。當無法進行手動調整時,軟件可以補償參考電壓變化。這通常通過提供用于校準 ADC 的已知精確輸入來完成。該參考可以非常精確(并且非常昂貴),因為生產線只需要很少的參考。
在我們一直在查看的 2.47V 示例中,可能會向 ADC 輸入 2V 的精確電壓。當軟件讀取 ADC 時,它知道正確的值應該是 819;校準常數(shù)由 829/819 或 1.012 給出。同樣,2.53V 參考的校準常數(shù)為 809/819,即 0.988。
這似乎意味著需要浮點數(shù)學來校正 ADC 值。如果我們使用的是能夠進行浮點運算的處理器,這是一種可以接受的方法。但是,在更簡單的處理器上,我們可能沒有可用的執(zhí)行時間或代碼空間來實現(xiàn)浮點計算。
處理 ADC 校正的一種方法是使用查找表。這樣做的缺點是需要足夠的非易失性存儲來維護每個可能的 ADC 值的查找值——對于 10 位 ADC 的 1,024 字表。
電壓參考非常接近其標稱值,否則它不會用作參考。假設我們的參考在我們的工作溫度范圍內足夠穩(wěn)定,則 ADC 誤差將是我們從 ADC 讀取的值的恒定百分比。由于 ADC 具有有限的分辨率,因此嘗試以任何大于 1 LSB 的精度來校正 ADC 誤差是沒有意義的。
知道了這一點,我們就可以簡化 ADC 校正過程。我們存儲的不是查找表,而是一個值,該值告訴軟件要從 ADC 讀數(shù)中添加或減去多少(二進制)百分比以糾正錯誤。我們可以添加或減去 1/8、1/16 或 1/24,一直到 1 LSB 的精度。我們只需要存儲一個校準常數(shù),我們的除法過程由一系列移位和加法或移位和減法運算組成。
可以通過將 ADC 值乘以 0.988 來校正 2.47V 示例。同樣的事情可以通過減去初始值的 1/128 然后 1/256 然后 1/512 來實現(xiàn)。使用原始的 2V 輸入示例,并使用整數(shù)數(shù)學進行此操作,我們得到以下結果:
829 — 829/128 — 829/156 — 829/512
= 829 — 6 — 3 — 1
= 819
該結果將 ADC 讀數(shù)校正為 819,如果參考為標稱 2.5V,這是理想值。類似地,使用 2.53V 參考讀取的值可以通過添加 1/128 加上 1/256 來校正。
請注意,我們不需要將精確的校準電壓應用于我們正在使用的輸入。我們可以使用任何備用 ADC 輸入,只要該 ADC 使用我們要校準的參考。
我們需要確保我們的參考在我們的預期工作溫度范圍內足夠穩(wěn)定,否則結果只會在校準期間接近溫度時才會好。如果參考的溫度穩(wěn)定性不夠好,我們將不得不獲得更好的參考或將我們的工作溫度范圍分成多個段并為每個段使用一個校準值。當然,這意味著我們也必須有一個熱敏電阻或其他測量溫度的方法。
這種方法確實會導致舍入錯誤,這是由于我們移動結果時發(fā)生的截斷而導致的。我使用 2.47V 示例制作了一個電子表格,在所有情況下,校正值都在理想值的兩個計數(shù)范圍內。大多數(shù)校正值完全正確或僅相差一個。這種校正程度明顯優(yōu)于 2V 輸入的原始變化(10 個計數(shù)),并且是許多應用所需的全部。如果我們的應用程序甚至無法忍受這個錯誤,那么我們可能真的需要更好的參考,或者我們可能不得不求助于手動調整。
這種校準技術還可用于補償其他系統(tǒng)不準確,例如電阻容差疊加。如果我們正在測量的任何內容都包含電壓輸入,我們可以將精密電壓應用于該輸入并進行一次校準,以補償 ADC 中的參考變化和輸入調節(jié)中的電阻器容差效應。
計算和使用校準值
校準值可以通過讀取已知參考值然后找出要使用的校正因子(二進制因數(shù))來計算。對于給出的示例,理想情況和最壞情況 ADC 值之間的差異永遠不會超過 1.2%,因此從原始值的二分之一或四分之一開始是沒有意義的。測試和使用的唯一值是 1/128、1/256 和 1/512。你想從接近你期望看到的價值開始。
使用計算器很容易找到校正因子,但如果我們必須在應用程序中使用的定點處理器上計算它,則需要一種基于整數(shù)的方法。
以流程圖形式顯示了本示例中用于計算和使用校準常數(shù)的算法。在此方法中,使用單個字節(jié)(或字)來存儲校準常數(shù)。位 7 指示參考電壓是低(需要減去校準值)還是高(添加校準值)。位 0、1 和 2 指示是否使用 1/128、1/256 和 1/512 因子。
當然,我們可以為每個可能的因素使用一個單獨的字節(jié),用第四個字節(jié)來指示參考值是高還是低。
寫入校準值
無論我們使用表格還是校準常數(shù),如何將校準值輸入系統(tǒng)?任何校準方案的一個關鍵組成部分是非易失性存儲的可用性。許多微控制器都有片上 EEPROM。校準通常在測試電路板時進行。在大批量生產環(huán)境中,這可能會通過某種釘床自動測試設備來完成。
我們通常希望將處理器置于某種“校準模式”,可能通過將引腳接地??梢詫ιa測試設備進行編程,以將非常精確的電壓施加到模擬輸入并將校準引腳接地。然后微控制器可以進入校準模式,讀取參考值并計算補償值或創(chuàng)建查找表。
在某些情況下,我們沒有足夠的內存將校準代碼添加到微控制器。在這種情況下,我們可以讓微控制器將 ADC 值返回到輸出引腳(串行)或一組引腳(并行),由生產測試設備讀取。然后,外部計算機可以計算校準值或表格值,并通過相同的接口將它們返回給微控制器。
如果生產設備還對微控制器進行在線編程,則校準數(shù)據(jù)可以嵌入到閃存中編程的數(shù)據(jù)中。如果被校準的參考在微控制器內部,則測試設備可能必須首先將校準程序加載到微控制器中,執(zhí)行校準,然后加載實際的應用程序代碼。
最后,一些非常小的微控制器根本沒有足夠的引腳來進行校準。在這種情況下,我們通??梢允馆敵鲆_兼作校準引腳。我們使用外部電阻器將引腳拉高。生產設備在上電前將引腳接地以選擇校準模式。
它的工作方式是微控制器上電,所有引腳都處于輸入狀態(tài)。它在將引腳配置為輸出之前讀取校準引腳。如果該引腳為高電平,則開始正常操作。如果引腳為低電平,則必須外部接地,因此單片機進入校準模式。當然,輸出必須是在引腳外部接地時不會損壞任何東西的輸出。
最后,如果我們正在校準基準,將精確電壓施加到備用 ADC 輸入,我們可以使用該輸入本身將系統(tǒng)置于校準模式。使用一個電阻器將備用輸入拉至零電平 ADC 電壓(在我們一直使用的示例中為接地)。然后,當在引腳上檢測到超過某個預定閾值(例如,滿量程電壓的三分之二)的電壓時,讓軟件進入校準模式。
選擇校準電壓時,我們希望選擇在參考電壓處于其可能的最低值時不會使 ADC 飽和的最大值。這可確保我們在計算校準常數(shù)(或表格)時不會因為位舍入誤差而失去準確性。這通常會使校準電壓高于滿量程值的 90%,盡管我們可能希望選擇最接近的標準參考電壓以簡化設計。
在某些應用中,我們可以通過尋找 ADC 輸入的變化來解決參考問題。我們可能會看到光學傳感器發(fā)生 10% 的變化,而不是將其與固定值進行比較,或者我們可能會看到溫度下降 25%。當然,傳感器的精度也包括在內,但該主題超出了本文的范圍。
盡管有時很難知道要為我們的應用使用哪種 ADC,但種類繁多的部件可確保我們找到適合我們需要的部件。將軟件與硬件相匹配可確保我們獲得產品所需的準確性和可靠性。