AVR單片機(jī)(學(xué)習(xí)ing)—(九)、ATMEGA16的模數(shù)轉(zhuǎn)換器—01
掃描二維碼
隨時(shí)隨地手機(jī)看文章
九、ATMEGA16的模數(shù)轉(zhuǎn)換器
九—(01)、ATMEGA16的模數(shù)轉(zhuǎn)換器的介紹
1、介紹
1)特點(diǎn):
? 10 位 精度
? 0.5 LSB 的非線性度
? ± 2 LSB 的絕對(duì)精度
? 65 - 260 μs 的轉(zhuǎn)換時(shí)間
? 最高分辨率時(shí)采樣率高達(dá)15 kSPS
? 8 路復(fù)用的單端輸入通道
? 7 路差分輸入通道
? 2 路可選增益為10x 與200x 的差分輸入通道
? 可選的左對(duì)齊ADC 讀數(shù)
? 0 - VCC 的 ADC 輸入電壓范圍
? 可選的2.56V ADC 參考電壓
? 連續(xù)轉(zhuǎn)換或單次轉(zhuǎn)換模式
? 通過(guò)自動(dòng)觸發(fā)中斷源啟動(dòng)ADC 轉(zhuǎn)換
? ADC 轉(zhuǎn)換結(jié)束中斷
? 基于睡眠模式的噪聲抑制器
Note: 1. 在PDIP封裝下的差分輸入通道器件未經(jīng)測(cè)試。只保證器件在TQFP 與MLF封裝下正常
工作。
2)介紹和框圖
ATmega16有一個(gè)10位的逐次逼近型ADC。ADC與一個(gè)8通道的模擬多路復(fù)用器連接,能
對(duì)來(lái)自端口A 的8 路單端輸入電壓進(jìn)行采樣。單端電壓輸入以0V (GND) 為基準(zhǔn)。
器件還支持16 路差分電壓輸入組合。兩路差分輸入(ADC1、ADC0 與ADC3、ADC2)
有可編程增益級(jí),在A/D 轉(zhuǎn)換前給差分輸入電壓提供0dB(1x)、20dB(10x) 或46dB(200x)
的放大級(jí)。七路差分模擬輸入通道共享一個(gè)通用負(fù)端(ADC1), 而其他任何ADC 輸入可做
為正輸入端。如果使用1x 或10x 增益,可得到8 位分辨率。如果使用200x 增益,可得
到7 位分辨率。
ADC 包括一個(gè)采樣保持電路,以確保在轉(zhuǎn)換過(guò)程中輸入到ADC 的電壓保持恒定。ADC 的
框圖如 Figure 98 所示。
ADC 由AVCC 引腳單獨(dú)提供電源。AVCC 與VCC 之間的偏差不能超過(guò)± 0.3V
標(biāo)稱值為2.56V 的基準(zhǔn)電壓,以及AVCC,都位于器件之內(nèi)。基準(zhǔn)電壓可以通過(guò)在AREF
引腳上加一個(gè)電容進(jìn)行解耦,以更好地抑制噪聲。
2、ADC的工作過(guò)程
ADC 通過(guò)逐次逼近的方法將輸入的模擬電壓轉(zhuǎn)換成一個(gè)10 位的數(shù)字量。最小值代表
GND,最大值代表AREF引腳上的電壓再減去1 LSB。通過(guò)寫(xiě)ADMUX寄存器的REFSn位
可以把AVCC 或內(nèi)部2.56V 的參考電壓連接到AREF 引腳。在AREF 上外加電容可以對(duì)
片內(nèi)參考電壓進(jìn)行解耦以提高噪聲抑制性能。
模擬輸入通道與差分增益可以通過(guò)寫(xiě)ADMUX 寄存器的MUX 位來(lái)選擇。任何ADC 輸入
引腳,像GND 及固定能隙參考電壓,都可以作為ADC 的單端輸入。ADC 輸入引腳可選
做差分增益放大器的正或負(fù)輸入。
如果選擇差分通道,通過(guò)選擇被選輸入信號(hào)對(duì)的增益因子得到電壓差分放大級(jí)。然后放大
值成為ADC 的模擬輸入。如果使用單端通道,將繞過(guò)增益放大器。
通過(guò)設(shè)置ADCSRA 寄存器的ADEN 即可啟動(dòng)ADC。只有當(dāng)ADEN 置位時(shí)參考電壓及輸
入通道選擇才生效。ADEN 清零時(shí)ADC 并不耗電,因此建議在進(jìn)入節(jié)能睡眠模式之前關(guān)
閉ADC。
ADC轉(zhuǎn)換結(jié)果為10位,存放于ADC數(shù)據(jù)寄存器ADCH及ADCL中。默認(rèn)情況下轉(zhuǎn)換結(jié)果為
右對(duì)齊,但可通過(guò)設(shè)置ADMUX 寄存器的ADLAR 變?yōu)樽髮?duì)齊。
如果要求轉(zhuǎn)換結(jié)果左對(duì)齊,且最高只需8 位的轉(zhuǎn)換精度,那么只要讀取ADCH 就足夠了。
否則要先讀ADCL,再讀ADCH,以保證數(shù)據(jù)寄存器中的內(nèi)容是同一次轉(zhuǎn)換的結(jié)果。一旦
讀出ADCL, ADC 對(duì)數(shù)據(jù)寄存器的尋址就被阻止了。也就是說(shuō),讀取ADCL 之后,即使
在讀ADCH 之前又有一次ADC 轉(zhuǎn)換結(jié)束,數(shù)據(jù)寄存器的數(shù)據(jù)也不會(huì)更新,從而保證了轉(zhuǎn)
換結(jié)果不丟失。ADCH 被讀出后, ADC 即可再次訪問(wèn)ADCH 及ADCL 寄存器。
ADC轉(zhuǎn)換結(jié)束可以觸發(fā)中斷。即使由于轉(zhuǎn)換發(fā)生在讀取ADCH與ADCL之間而造成ADC無(wú)
法訪問(wèn)數(shù)據(jù)寄存器,并因此丟失了轉(zhuǎn)換數(shù)據(jù),中斷仍將觸發(fā)。
3、啟動(dòng)一次轉(zhuǎn)換
向 ADC 啟動(dòng)轉(zhuǎn)換位ADSC 位寫(xiě)"1” 可以啟動(dòng)單次轉(zhuǎn)換。在轉(zhuǎn)換過(guò)程中此位保持為高,直
到轉(zhuǎn)換結(jié)束,然后被硬件清零。如果在轉(zhuǎn)換過(guò)程中選擇了另一個(gè)通道,那么ADC 會(huì)在改
變通道前完成這一次轉(zhuǎn)換。
ADC轉(zhuǎn)換有不同的觸發(fā)源。設(shè)置ADCSRA寄存器的ADC自動(dòng)觸發(fā)允許位ADATE可以使能
自動(dòng)觸發(fā)。設(shè)置ADCSRB 寄存器的ADC 觸發(fā)選擇位ADTS 可以選擇觸發(fā)源( 見(jiàn)觸發(fā)源
列表中對(duì)ADTS 的描述)。當(dāng)所選的觸發(fā)信號(hào)產(chǎn)生上跳沿時(shí), ADC 預(yù)分頻器復(fù)位并開(kāi)始
轉(zhuǎn)換。這提供了一個(gè)在固定時(shí)間間隔下啟動(dòng)轉(zhuǎn)換的方法。轉(zhuǎn)換結(jié)束后即使觸發(fā)信號(hào)仍然存
在,也不會(huì)啟動(dòng)一次新的轉(zhuǎn)換。如果在轉(zhuǎn)換過(guò)程中觸發(fā)信號(hào)中又產(chǎn)生了一個(gè)上跳沿,這個(gè)
上跳沿將被忽略。即使特定的中斷被禁止或全局中斷使能位為0,中斷標(biāo)志仍將置位。這
樣可以在不產(chǎn)生中斷的情況下觸發(fā)一次轉(zhuǎn)換。但是為了在下次中斷事件發(fā)生時(shí)觸發(fā)新的
轉(zhuǎn)換,必須將中斷標(biāo)志清零。
使用ADC 中斷標(biāo)志作為觸發(fā)源,可以在正在進(jìn)行的轉(zhuǎn)換結(jié)束后即開(kāi)始下一次ADC 轉(zhuǎn)換。
之后ADC 便工作在連續(xù)轉(zhuǎn)換模式,持續(xù)地進(jìn)行采樣并對(duì)ADC 數(shù)據(jù)寄存器進(jìn)行更新。第
一次轉(zhuǎn)換通過(guò)向ADCSRA 寄存器的ADSC 寫(xiě)1 來(lái)啟動(dòng)。在此模式下,后續(xù)的ADC 轉(zhuǎn)換
不依賴于ADC 中斷標(biāo)志ADIF 是否置位。
如果使能了自動(dòng)觸發(fā),置位ADCSRA 寄存器的ADSC 將啟動(dòng)單次轉(zhuǎn)換。ADSC 標(biāo)志還
可用來(lái)檢測(cè)轉(zhuǎn)換是否在進(jìn)行之中。不論轉(zhuǎn)換是如何啟動(dòng)的,在轉(zhuǎn)換進(jìn)行過(guò)程中ADSC 一
直為1。
4、預(yù)分頻及ADC 轉(zhuǎn)換時(shí)序
在默認(rèn)條件下,逐次逼近電路需要一個(gè)從50 kHz到200 kHz的輸入時(shí)鐘以獲得最大精度。
如果所需的轉(zhuǎn)換精度低于10 比特,那么輸入時(shí)鐘頻率可以高于200 kHz,以達(dá)到更高的
采樣率。
ADC 模塊包括一個(gè)預(yù)分頻器,它可以由任何超過(guò)100 kHz 的CPU 時(shí)鐘來(lái)產(chǎn)生可接受的
ADC 時(shí)鐘。預(yù)分頻器通過(guò)ADCSRA 寄存器的ADPS 進(jìn)行設(shè)置。置位ADCSRA 寄存器的
ADEN 將使能ADC,預(yù)分頻器開(kāi)始計(jì)數(shù)。只要ADEN 為1,預(yù)分頻器就持續(xù)計(jì)數(shù),直到
ADEN 清零。
ADCSRA寄存器的ADSC置位后,單端轉(zhuǎn)換在下一個(gè)ADC時(shí)鐘周期的上升沿開(kāi)始啟動(dòng)。差
分轉(zhuǎn)換時(shí)序見(jiàn)P197“ 差分增益信道” 。
正常轉(zhuǎn)換需要13 個(gè)ADC 時(shí)鐘周期。為了初始化模擬電路,ADC 使能(ADCSRA 寄存器
的ADEN 置位) 后的第一次轉(zhuǎn)換需要25 個(gè)ADC 時(shí)鐘周期。
在普通的ADC 轉(zhuǎn)換過(guò)程中,采樣保持在轉(zhuǎn)換啟動(dòng)之后的1.5 個(gè)ADC 時(shí)鐘開(kāi)始;而第一次
ADC轉(zhuǎn)換的采樣保持則發(fā)生在轉(zhuǎn)換啟動(dòng)之后的13.5 個(gè)ADC時(shí)鐘。轉(zhuǎn)換結(jié)束后,ADC結(jié)果
被送入ADC 數(shù)據(jù)寄存器,且ADIF 標(biāo)志置位。ADSC 同時(shí)清零( 單次轉(zhuǎn)換模式)。之后軟
件可以再次置位ADSC 標(biāo)志,從而在ADC 的第一個(gè)上升沿啟動(dòng)一次新的轉(zhuǎn)換。
使用自動(dòng)觸發(fā)時(shí),觸發(fā)事件發(fā)生將復(fù)位預(yù)分頻器。這保證了觸發(fā)事件和轉(zhuǎn)換啟動(dòng)之間的延
時(shí)是固定的。在此模式下,采樣保持在觸發(fā)信號(hào)上升沿之后的2 個(gè)ADC 時(shí)鐘發(fā)生。為了
實(shí)現(xiàn)同步邏輯需要額外的3 個(gè)CPU 時(shí)鐘周期。如果使用差分模式,加上不是由ADC 轉(zhuǎn)
換結(jié)束實(shí)現(xiàn)的自動(dòng)觸發(fā),每次轉(zhuǎn)換需要25 個(gè)ADC 時(shí)鐘周期。因?yàn)槊看无D(zhuǎn)換結(jié)束后都要
關(guān)閉ADC 然后又啟動(dòng)它。
在連續(xù)轉(zhuǎn)換模式下,當(dāng)ADSC 為1 時(shí),只要轉(zhuǎn)換一結(jié)束,下一次轉(zhuǎn)換馬上開(kāi)始。轉(zhuǎn)換時(shí)
間請(qǐng)見(jiàn) Table 81。
5、差分增益信道
當(dāng)使用差分增益通道,需要考慮轉(zhuǎn)換的確定特征。
差分轉(zhuǎn)換與內(nèi)部時(shí)鐘CKADC2 同步等于ADC 時(shí)鐘的一半。同步是當(dāng)ADC 接口在CKADC2
邊沿出現(xiàn)采樣與保持時(shí)自動(dòng)實(shí)現(xiàn)的。當(dāng)CKADC2 為低時(shí),通過(guò)用戶啟動(dòng)轉(zhuǎn)換( 即,所有的
單次轉(zhuǎn)換與第一次連續(xù)轉(zhuǎn)換) 將與單端轉(zhuǎn)換使用的時(shí)間( 接著的預(yù)分頻后的13 個(gè) ADC 時(shí)
鐘周期)。當(dāng) CKADC2 為高時(shí),由于同步機(jī)制,將會(huì)使用14 個(gè) ADC 時(shí)鐘周期。在連續(xù)轉(zhuǎn)
換模式時(shí),一次轉(zhuǎn)換結(jié)束后立即啟動(dòng)新的轉(zhuǎn)換,而由于CKADC2 此時(shí)為高,所有的自動(dòng)啟
動(dòng)( 即除第一次外) 將使用14 個(gè) ADC 時(shí)鐘周期。
在所有的增益設(shè)置中,當(dāng)帶寬為4 kHz 時(shí)增益級(jí)最優(yōu)。更高的頻率可能會(huì)造成非線性放
大。當(dāng)輸入信號(hào)包含高于增益級(jí)帶寬的頻率時(shí),應(yīng)在輸入前加入低通濾波器。注意,ADC
時(shí)鐘頻率不受增益級(jí)帶寬限制。比如,不管通道帶寬是多少, ADC 時(shí)鐘周期為6 μs,允
許通道采樣率為12 kSPS。
如果使用差分增益通道且通過(guò)自動(dòng)觸發(fā)啟動(dòng)轉(zhuǎn)換,在轉(zhuǎn)換時(shí)ADC 必須關(guān)閉。當(dāng)使用自動(dòng)
觸發(fā)時(shí), ADC 預(yù)分頻器在轉(zhuǎn)換啟動(dòng)前復(fù)位。由于在轉(zhuǎn)換前的增益級(jí)依靠穩(wěn)定的ADC 時(shí)
鐘,該轉(zhuǎn)換無(wú)效。在每次轉(zhuǎn)換( 在寄存器 ADCSRA 的ADEN 位中 寫(xiě) “0” 接著為“1”),通
過(guò)禁用然后重使能ADC,只執(zhí)行擴(kuò)展轉(zhuǎn)換。擴(kuò)展轉(zhuǎn)換結(jié)果有效。
6、改變通道和基準(zhǔn)源
ADMUX寄存器中的MUXn及REFS1:0通過(guò)臨時(shí)寄存器實(shí)現(xiàn)了單緩沖。CPU可對(duì)此臨時(shí)寄
存器進(jìn)行隨機(jī)訪問(wèn)。這保證了在轉(zhuǎn)換過(guò)程中通道和基準(zhǔn)源的切換發(fā)生于安全的時(shí)刻。在轉(zhuǎn)
換啟動(dòng)之前通道及基準(zhǔn)源的選擇可隨時(shí)進(jìn)行。一旦轉(zhuǎn)換開(kāi)始就不允許再選擇通道和基準(zhǔn)
源了,從而保證ADC 有充足的采樣時(shí)間。在轉(zhuǎn)換完成(ADCSRA 寄存器的ADIF 置位) 之
前的最后一個(gè)時(shí)鐘周期,通道和基準(zhǔn)源的選擇又可以重新開(kāi)始。轉(zhuǎn)換的開(kāi)始時(shí)刻為ADSC
置位后的下一個(gè)時(shí)鐘的上升沿。因此,建議用戶在置位ADSC 之后的一個(gè)ADC 時(shí)鐘周期
里,不要操作ADMUX 以選擇新的通道及基準(zhǔn)源。
使用自動(dòng)觸發(fā)時(shí),觸發(fā)事件發(fā)生的時(shí)間是不確定的。為了控制新設(shè)置對(duì)轉(zhuǎn)換的影響,在更
新ADMUX 寄存器時(shí)一定要特別小心。
若ADATE及ADEN都置位,則中斷事件可以在任意時(shí)刻發(fā)生。如果在此期間改變ADMUX
寄存器的內(nèi)容,那么用戶就無(wú)法判別下一次轉(zhuǎn)換是基于舊的設(shè)置還是最新的設(shè)置。在以下
時(shí)刻可以安全地對(duì)ADMUX 進(jìn)行更新:
1. ADATE 或ADEN 為 0
2. 在轉(zhuǎn)換過(guò)程中,但是在觸發(fā)事件發(fā)生后至少一個(gè)ADC 時(shí)鐘周期
3. 轉(zhuǎn)換結(jié)束之后,但是在作為觸發(fā)源的中斷標(biāo)志清零之前
如果在上面提到的任一種情況下更新ADMUX,那么新設(shè)置將在下一次ADC 時(shí)生效。
當(dāng)改變差分通道時(shí)要特別注意。一旦選定差分通道,增益級(jí)要用125 μs 來(lái)穩(wěn)定該值。因
此在選定新通道后的125 μs 內(nèi)不應(yīng)啟動(dòng)轉(zhuǎn)換?;蛏釛壴摃r(shí)間段內(nèi)的轉(zhuǎn)換結(jié)果。