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