zoukankan      html  css  js  c++  java
  • 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发出中断请求

            

    Fist day
  • 相关阅读:
    跟光磊学Python开发-面向对象入门
    插件调用下推操作
    K3Wise老单获取单据行数
    git 添加和删除 global 的 remote.origin.url
    CSV转Excel格式
    java 下载文件
    windows下安装redis并设置自启动
    linxu jdk安装
    Linux安装部署Redis
    CentOS上安装MySQL(使用国内源)
  • 原文地址:https://www.cnblogs.com/NULL-ROOT/p/11736449.html
Copyright © 2011-2022 走看看