ADC模塊學習


## 1. 簡述:

  ADC,Analog-to-Digital Converter的縮寫,指模/數轉換器或者模數轉換器,其中

    A指的是模擬,D指的是數字

## 2. 采樣速率:  

  采樣速率是A/D轉換時間的倒數

## 需攻克的疑難點

 

### 1.  為何ADC的結果寄存器讀取時都需要右移四位:

SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4);

解釋:因為28335的ADC采集信號是12位的而結果寄存器是16位的,而同時采集的數據轉化后最終會以

“左對齊”的方式存儲到結果寄存器中(REG0~REG15),所以實際ADC轉化的數據是存儲在結果寄存器的

4~15位上的,而0~3這四個位是空着的。所以讀取寄存器數據時需要右移四位。

 ## 2. ADC的時鍾頻率

簡述:ADC的最高時鍾頻率是25MHZ,不能超過該值。

 

## 3. ADC的轉化頻率

簡述:即完成一次AD/DA所需要的頻率

## 4. ADC采樣頻率

簡述:采樣頻率和時鍾/轉化頻率都沒有關系,只與觸發ADC的頻率有關。觸發得越快,頻率就越高。

但是其最高采樣頻率應該是12.5MHZ,即:1s中可以采樣12500次信號。

## 5. 采樣窗口

簡述:采樣窗口與ACQ_PS (寄存器)和ADCCLK有關
問題:如何盡可能提高ADC的精度?

    1. 時鍾頻率盡可能低

    2. 采樣窗盡可能大

## 關於自動排序器

 簡述:排序器是管理ADC的各個通道的采樣優先級的,因為28335的ADC采樣通道一共有16個,而采樣保持器只有一個,

所以同一時刻只能對一個通道進行采樣保持操作,那么16個通道哪個先采樣哪個后采樣就必須要有個排序。自動排序器

就是擔任這樣的角色。

28335一共有兩個自動排序器,分別是SEQ1和SEQ2。SEQ1/SEQ2分別有8個序列,可以設置到通道ADC的16個采樣通道。

排序器序列一共有CONV0~CONV15,數字越小優先級越高。

## ADC的16個采樣通道

簡述:DSP28335的ADC的輸入采集通道有AB兩組,每組8個輸入通道,一共16個。當ADC工作的級聯模式下時,兩組可

合並為一組。

### 采樣模式有:順序采樣 和 同步采樣。

  順序采樣:即按照ADCINA0~ADCINB7的順序進行采樣

  同步采樣:將AB兩組聯動起來,其采樣順序為:

          第1次采樣:ADCINA0 ADCINB0

       第2次采樣:ADCINA1 ADCINB1

          第3次采樣:ADCINA2 ADCINB2

                              ..........

       第8次采樣:ADCINA7 ADCINB7

  

### 最大采樣通道

  

AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 設置值;//實際最大通道數 = 設置值+1

 

 

## ADC的配置代碼

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;     //ADC采樣時間選擇
         AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    //ADC內核分頻
         AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;           //級聯工作方式
         AdcRegs.ADCTRL3.bit.SMODE_SEL= 0;           // 順序采樣
         AdcRegs.ADCTRL1.bit.CONT_RUN = 1;            //連續采樣
         AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1 ;           //完成排序后,排序器指針回到最初狀態

         AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x2;
         AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;  //將ADCINA0對應到排序器的通道0,通道號數字越小優先級越高
         AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1 ; // 將ADCINA1對應到排序器的通道1
      AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2 ; 
      AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1
= 1; //軟件啟動轉換功能 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; //允許向CPU發出中斷請求

 

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM