ar做網(wǎng)站百度云網(wǎng)盤登錄入口
TMS320F280025 模數(shù)轉(zhuǎn)換器ADC原理分析與應(yīng)用
`
文章目錄
- TMS320F280025 模數(shù)轉(zhuǎn)換器ADC原理分析與應(yīng)用
- 逐次比較型ADC和雙積分型ADC工作原理
- 逐次比較型 ADC
- 雙積分型 ADC
- 280025ADC
- ADC原理分析
- ADC時(shí)鐘
- SOC
- SOC內(nèi)部原理
- ADC觸發(fā)方式
- ADC采集(采樣和保持)窗口
- 通道寄生電容
- 基準(zhǔn)電壓發(fā)生器模塊
- 外部參考模式
- 內(nèi)部參考模式
- 選擇參考模式
- 后處理模塊
- 偏移校正
- 設(shè)定值計(jì)算誤差
- 限制和過零檢測(cè)
- 觸發(fā)到采樣延遲捕獲
- ADC優(yōu)先級(jí)
- 輪轉(zhuǎn)優(yōu)先級(jí)
- 高優(yōu)先級(jí)
- ADC中斷
- 中斷溢出
- 繼續(xù)中斷模式
- 早期中斷配置模式
- ADC模擬引腳
- ADC(定時(shí)器觸發(fā)采樣)使用
- AdcDriver.c
- AdcDriver.h
- CPUtimers.c
- CPUtimers.h
逐次比較型ADC和雙積分型ADC工作原理
逐次比較型 ADC
采用逐次逼近法的 AD 轉(zhuǎn)換器是有一個(gè)比較器、 DA 轉(zhuǎn)換器、 緩沖寄存器和控制邏輯電路組成, 如下圖所示:
基本原理是: 從高位到低位逐次試探比較, 就像用天平秤物體, 從重到輕逐級(jí)增減砝碼進(jìn)行試探。 逐次逼近法的轉(zhuǎn)換過程是: 初始化時(shí)將逐次逼近寄存器各位清零, 轉(zhuǎn)換開始時(shí), 先將逐次逼近寄存器最高位置 1, 送入 DA 轉(zhuǎn)換器, 經(jīng) DA轉(zhuǎn)換后生成的模擬量送入比較器, 稱為 U0, 與送入比較器的待轉(zhuǎn)換的模擬量 Ux進(jìn)行比較, 若 U0<Ux, 該位 1 被保留, 否則被清除。 然后再將逐次逼近寄存器次高位置 1, 將寄存器中新的數(shù)字量送 DA 轉(zhuǎn)換器, 輸出的 U0 再與 Ux 比較, 若 U0<Ux,該位 1 被保留, 否則被清除。 重復(fù)此過程, 直至逼近寄存器最低位。 轉(zhuǎn)換結(jié)束后,將逐次逼近寄存器中的數(shù)字量送入緩沖寄存器, 得到數(shù)字量的輸出。 逐次逼近的操作過程是在一個(gè)控制電路的控制下進(jìn)行的。
雙積分型 ADC
采用雙積分法的 AD 轉(zhuǎn)換器由電子開關(guān)、 積分器、 比較器和控制邏輯等部件組成。 如下圖所示:
其基本原理: 將輸入電壓變換成與其平均值成正比的時(shí)間間隔, 再把此時(shí)間間隔轉(zhuǎn)換成數(shù)字量, 屬于間接轉(zhuǎn)換。 雙積分法 AD 轉(zhuǎn)換的過程是: 先將開關(guān)接通待轉(zhuǎn)換的模擬量 Vi, Vi 采樣輸入到積分器, 積分器從零開始進(jìn)行固定時(shí)間 T 的正向積分, 時(shí)間 T 到后, 開關(guān)再接通與 Vi 極性相反的基準(zhǔn)電壓 Vref, 將 Vref輸入到積分器, 進(jìn)行反向積分, 直到輸出為 0V 時(shí)停止積分。 Vi 越大, 積分器輸出電壓越大, 反向積分時(shí)間也越長(zhǎng)。 計(jì)數(shù)器在反向積分時(shí)間內(nèi)所計(jì)的數(shù)值, 就是輸入模擬電壓 Vi 所對(duì)應(yīng)的數(shù)字量, 實(shí)現(xiàn)了 AD 轉(zhuǎn)換。
280025ADC
TMS32F280025有兩個(gè)逐次比較型ADC,分別是ADCA和ADCC,每個(gè)ADC都具有以下特點(diǎn):
?12位分辨率
?比率計(jì)VREFHI設(shè)定的外部引用和VREFLO引腳
?選擇內(nèi)部參考2.5 v和3.3 v
?單端信號(hào)轉(zhuǎn)換
?輸入多路復(fù)用器,最多16個(gè)通道
?16單獨(dú)結(jié)果可尋址寄存器
?16 可配置的soc
?多個(gè)觸發(fā)源
?四靈活的PIE中斷
?可配置中斷位置
?四個(gè)PBB后處理模塊,每個(gè)具有:
-偏移校準(zhǔn)
-誤差校準(zhǔn)
-高,低和過零比較,具有中斷和ePWM跳閘能力
-觸發(fā)到樣本延遲捕獲
?優(yōu)先級(jí):輪轉(zhuǎn)/高優(yōu)先級(jí)
?電壓處理成轉(zhuǎn)換結(jié)果需要大約10.5個(gè)ADCCLK
ADC框圖如圖所示
1.使用ADC時(shí)設(shè)置好參考電壓,配置ADC SOC通道、采樣周期、觸發(fā)方式;
2.當(dāng)設(shè)置的觸發(fā)方式觸發(fā)ADC時(shí),模擬信號(hào)首先到ADC校準(zhǔn)和控制模塊,該模塊可以直接產(chǎn)生ADC中斷;
3.然后模擬信號(hào)到輸入電路模塊,經(jīng)過采樣保持電路進(jìn)行采樣;
4.采樣后經(jīng)過轉(zhuǎn)化器得到數(shù)字量;
5.該數(shù)字量會(huì)保存在對(duì)應(yīng)的ADC結(jié)果寄存器中,每個(gè)SOC對(duì)應(yīng)一個(gè)結(jié)果寄存器,讀取該寄存器即可得到ADC轉(zhuǎn)化結(jié)果,也可以用過后處理模塊進(jìn)行后處理再輸出
ADC原理分析
ADC框圖分為以下幾個(gè)模塊:模擬數(shù)字控制邏輯、后處理模塊、模擬-數(shù)字核心模塊、基準(zhǔn)電壓發(fā)生器模塊、模擬系統(tǒng)控制、輸入電路、轉(zhuǎn)換、SOCx (0-15)
ADC時(shí)鐘
基本ADC時(shí)鐘直接由系統(tǒng)時(shí)鐘(SYSCLK)提供。SYSCLK用于生成ADC采集窗口。寄存器ADCCTL2有一個(gè)決定adccclk的precale字段。ADCCLK用于對(duì)轉(zhuǎn)換器進(jìn)行時(shí)鐘控制,僅在轉(zhuǎn)換階段有效。在所有其他時(shí)間,包括在采樣和保持窗口期間,ADCCLK信號(hào)被門控關(guān)閉。
核心需要大約10.5個(gè)ADCCLK周期來將電壓處理成轉(zhuǎn)換結(jié)果。用戶必須確定所需的獲取窗口的持續(xù)時(shí)間
為ADCCTL2確定一個(gè)合適的值。PRESCALE,請(qǐng)參閱設(shè)備數(shù)據(jù)手冊(cè)以確定SYSCLK和ADCCLK的最大頻率
SOC
SOC在框圖中的位置
SOC內(nèi)部原理
每個(gè)ADC的SOC都可以設(shè)置對(duì)應(yīng)的觸發(fā)方式、通道和采樣周期
ADC觸發(fā)方式
每個(gè)SOC可以配置為在許多輸入觸發(fā)器之一上啟動(dòng)。SOCx的主要觸發(fā)器選擇在ADCSOCxCTL中。TRIGSEL寄存器,可以選擇:
? Disabled (software only)
?CPU定時(shí)器0/1/2
?GPIO:輸入X-Bar INPUT5
?ADCSOCA或ADCSOCB從每個(gè)ePWM模塊
此外,每個(gè)SOC也可以在ADCINT1或ADCINT2標(biāo)志設(shè)置時(shí)觸發(fā)。這是通過配置ADCINTSOCSEL1寄存器(用于SOC0到SOC7)或ADCINTSOCSEL2寄存器(用于SOC8到SOC15)來實(shí)現(xiàn)的。
ADC采集(采樣和保持)窗口
外部信號(hào)源在快速有效地驅(qū)動(dòng)模擬信號(hào)的能力上各不相同。為了達(dá)到額定分辨率,信號(hào)源需要對(duì)ADC核心中的采樣電容充電至信號(hào)電壓的0.5 lbs以內(nèi)。采集窗口是采樣電容器允許充電的時(shí)間量,可通過ADCSOCxCTL配置為SOCx.ACQPSregister。
ACQPS是一個(gè)9位寄存器,可以設(shè)置為0到511之間的值,導(dǎo)致采集窗口持續(xù)時(shí)間:
采集窗口= (ACQPS + 1)?(系統(tǒng)時(shí)鐘(SYSCLK)周期時(shí)間)
?采集窗口持續(xù)時(shí)間基于系統(tǒng)時(shí)鐘(SYSCLK),而不是ADC時(shí)鐘(ADCCLK)。
?選擇的采集窗口持續(xù)時(shí)間必須至少與一個(gè)ADCCLK周期一樣長(zhǎng)。
?數(shù)據(jù)表指定最小采集窗口持續(xù)時(shí)間(以納秒為單位)。用戶負(fù)責(zé)選擇滿足此要求的獲取窗口持續(xù)時(shí)間。
通道寄生電容
每個(gè)通道的寄生電容不一樣,所以如果采樣速率過高的話,注意選用的通道的寄生電容是否會(huì)影響采樣
基準(zhǔn)電壓發(fā)生器模塊
ADC的基準(zhǔn)電壓可以位內(nèi)部電壓也可以位外部電壓
外部參考模式
ADC模塊共享VREFHI和VREFLO輸入。在外部參考模式下,這些引腳用作比率參考,以確定ADC轉(zhuǎn)換輸入范圍。
?在沒有外部VREFLO引腳的設(shè)備上,VREFLO內(nèi)部連接到設(shè)備模擬地,VSSA。
?請(qǐng)參閱設(shè)備數(shù)據(jù)表以確定VREFHI和VREFLO的允許電壓范圍。
?外部參考模式需要VREFHI引腳上的外部電容。具體數(shù)值請(qǐng)參見設(shè)備數(shù)據(jù)手冊(cè)。
內(nèi)部參考模式
在內(nèi)部參考模式下,器件驅(qū)動(dòng)電壓到VREFHI引腳上。然后,VREFHI和VREFLO引腳設(shè)置ADC轉(zhuǎn)換范圍。
內(nèi)部參考電壓可配置為2.5V或1.65V。當(dāng)選擇1.65V內(nèi)部參考電壓時(shí),在轉(zhuǎn)換前將ADC輸入信號(hào)內(nèi)部除以2,有效地使ADC轉(zhuǎn)換范圍從VREFLO到3.3V。
內(nèi)部參考模式還需要VREFHI引腳上的外部電容。具體數(shù)值請(qǐng)參見設(shè)備數(shù)據(jù)手冊(cè)。
選擇參考模式
電壓參考模式必須通過使用ADC_setVREF()或SetVREF()函數(shù)來配置,具體取決于使用的頭文件,在C2000Ware中提供。使用這些函數(shù)中的任何一個(gè)都可以確保在ADC修剪寄存器中加載正確的修剪。此函數(shù)必須在設(shè)備復(fù)位后至少調(diào)用一次。
不要通過直接寫入ANAREFCTL寄存器來配置電壓參考模式。
后處理模塊
作用如下:
偏移校正
去除可能由外部傳感器和信號(hào)源引起的與ADCIN通道相關(guān)的偏移量零開銷;保存周期
設(shè)定值計(jì)算誤差
減去一個(gè)參考值,該參考值可用于從設(shè)定點(diǎn)或預(yù)期值自動(dòng)計(jì)算誤差,減少樣本輸出延遲和軟件開銷
限制和過零檢測(cè)
自動(dòng)執(zhí)行高/低限制或過零檢查,可以產(chǎn)生一個(gè)行程到ePWM和/或中斷減少樣本到ePWM的延遲和減少軟件開銷;在沒有CPU干預(yù)的情況下,基于超出范圍的ADC轉(zhuǎn)換觸發(fā)ePWM
觸發(fā)到采樣延遲捕獲
能夠記錄SOC被觸發(fā)和開始采樣之間的延遲,允許軟件技術(shù)減少延遲錯(cuò)誤
ADC優(yōu)先級(jí)
輪轉(zhuǎn)優(yōu)先級(jí)
當(dāng)同時(shí)設(shè)置多個(gè)SOC標(biāo)志時(shí),優(yōu)先級(jí)的兩種形式之一決定轉(zhuǎn)換順序。默認(rèn)的優(yōu)先級(jí)方法是輪循。在這個(gè)方案中,沒有SOC具有比其他SOC更高的固有優(yōu)先級(jí)。優(yōu)先級(jí)取決于輪循指針(RRPOINTER)。反映在ADCSOCPRIORITYCTL寄存器中的RRPOINTER指向最后轉(zhuǎn)換的SOC。最高優(yōu)先級(jí)的SOC被分配給下一個(gè)比RRPOINTER值大的值,在SOC15之后繞回SOC0。在重置時(shí),該值為16,因?yàn)?表示已經(jīng)發(fā)生了轉(zhuǎn)換。當(dāng)RRPOINTER等于16時(shí),優(yōu)先級(jí)最高的是SOC0。當(dāng)ADC模塊復(fù)位或復(fù)位值被寫入SOCPRICTL寄存器時(shí),RRPOINTER復(fù)位。通過寫入和清除與ADC實(shí)例對(duì)應(yīng)的SOFTPRES位來復(fù)位ADC模塊。
高優(yōu)先級(jí)
ADCSOCPRIORITYCTL寄存器中的SOCPRIORITY字段可用于從單個(gè)soc分配高優(yōu)先級(jí)到所有soc。當(dāng)配置為高優(yōu)先級(jí)時(shí),SOC在任何當(dāng)前轉(zhuǎn)換完成后中斷輪詢輪,并插入作為下一個(gè)轉(zhuǎn)換。轉(zhuǎn)換完成后,在轉(zhuǎn)換中斷的地方繼續(xù)輪詢輪。如果同時(shí)觸發(fā)兩個(gè)高優(yōu)先級(jí)的SOC,則優(yōu)先級(jí)低的SOC。
高優(yōu)先級(jí)模式首先分配給SOC0,然后按數(shù)字順序遞增。寫入SOCPRIORITY字段的值定義了第一個(gè)優(yōu)先級(jí)不高的SOC。換句話說,如果將值4寫入SOCPRIORITY,則將SOC0、SOC1、SOC2和SOC3定義為高優(yōu)先級(jí),其中SOC0最高。
ADC中斷
每個(gè)SOC都有相應(yīng)的轉(zhuǎn)換結(jié)束(EOC)信號(hào)。此EOC信號(hào)可用于觸發(fā)ADC中斷。ADC可以配置為在采集窗口的末端或電壓轉(zhuǎn)換的末端產(chǎn)生EOC脈沖。這是使用ADCCTL1寄存器中的INTPULSEPOS位配置的。參見15.12節(jié)了解EOC脈沖的準(zhǔn)確位置。
每個(gè)ADC模塊有4個(gè)可配置的ADC中斷。這些中斷可以由16個(gè)EOC信號(hào)中的任何一個(gè)觸發(fā)??梢灾苯幼x取每個(gè)ADCINT的標(biāo)志位,以確定相關(guān)的SOC是否完成,或者中斷是否可以傳遞給PIE
ADCCTL1.ADCBSY位清楚并不表示一組soc中的所有轉(zhuǎn)換都已完成,僅表示ADC準(zhǔn)備處理下一個(gè)轉(zhuǎn)換。要確定一個(gè)SOC序列是否完成,將ADCINT標(biāo)志鏈接到序列中的最后一個(gè)SOC,并監(jiān)視該ADCINT標(biāo)志
中斷溢出
如果EOC信號(hào)在ADCINTFLG寄存器中設(shè)置了一個(gè)標(biāo)志,但該標(biāo)志已經(jīng)設(shè)置,則會(huì)發(fā)生中斷溢出。
默認(rèn)情況下,溢出中斷不傳遞給PIE模塊。當(dāng)ADCINTFLG寄存器中的給定標(biāo)志發(fā)生溢出時(shí),將設(shè)置ADCINOVF寄存器中的相應(yīng)標(biāo)志。此溢出標(biāo)志僅用于檢測(cè)是否發(fā)生溢出;該標(biāo)志不會(huì)阻止進(jìn)一步的中斷傳播到PIE模塊。
當(dāng)ADC中斷溢出發(fā)生時(shí),應(yīng)用程序必須檢查ISR內(nèi)或后臺(tái)循環(huán)中適當(dāng)?shù)腁DCINTOVF標(biāo)志,并在檢測(cè)到溢出時(shí)采取適當(dāng)?shù)男袆?dòng)。下面的代碼片段演示了在嘗試清除ADCINT標(biāo)志后,如何在ISR內(nèi)檢查ADCINTOVF標(biāo)志。
// Clear the interrupt flag
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag for ADC-A
// Check if an overflow has occurred
if(1 == AdcaRegs.ADCINTOVF.bit.ADCINT1) //ADCINT overflow occurred
{AdcaRegs.ADCINTOVFCLR.bit.ADCINT1 = 1 //Clear overflow flag AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1 //Re-clear ADCINT flag
}
//
// Clear the interrupt flag
//
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
//
// Check if an overflow has occurred
//
if(true == ADC_getInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1))
{ADC_clearInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1);ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
}
繼續(xù)中斷模式
ADCINTSEL1N2和ADCINTSEL3N4寄存器中的INTxCONT位配置了當(dāng)ADCINTFLG尚未從先前中斷中清除時(shí)如何處理中斷。默認(rèn)情況下禁用此模式,并且不會(huì)向PIE發(fā)出額外的重疊中斷。通過激活此模式,ADC中斷總是到達(dá)PIE。如果在設(shè)置ADCINTFLG時(shí)發(fā)生中斷,那么無(wú)論INTxCONT位的配置如何,ADCINTOVF寄存器都保持設(shè)置。
早期中斷配置模式
啟用早期中斷模式可以允許應(yīng)用程序在ADC結(jié)果準(zhǔn)備好之前進(jìn)入ADC中斷服務(wù)程序。這允許應(yīng)用程序做任何必要的前期工作,以便應(yīng)用程序可以在ADC結(jié)果可用時(shí)立即對(duì)ADC結(jié)果采取行動(dòng)。如果早期中斷的時(shí)機(jī)太早,則應(yīng)用程序需要浪費(fèi)時(shí)間,直到更新的ADC結(jié)果可用為止。為了防止這種情況,ADC中斷進(jìn)入早期中斷模式的時(shí)間可以通過ADCINTCYCLE寄存器中的DELAY字段進(jìn)行配置。
?要使用可配置的中斷時(shí)間,ADC必須處于早期中斷模式。為了實(shí)現(xiàn)這一點(diǎn),在ADCCTL1中將位INTPULSEPOS清除為0。
?ADCINTCYCLE寄存器中的DELAY值設(shè)置了在ADCINT標(biāo)志被設(shè)置之前SOC脈沖下降沿之后額外的SYSCLK周期數(shù)。
?如果DELAY值超過EOC,則ADC中斷與EOC一起產(chǎn)生。
?當(dāng)INTPULSEPOS設(shè)置為1時(shí),將值寫入DELAY對(duì)中斷的產(chǎn)生沒有任何影響。
ADC模擬引腳
ADC引腳分配如下表
ADC(定時(shí)器觸發(fā)采樣)使用
AdcDriver.c
#include "main.h"//
// Defines
//
#define RESULTS_BUFFER_SIZE 5//
// Globals
//