DSP

详究2812 的内置ADC

2019-07-13 12:29发布

  AD的简单知识
 AD,就是将模拟量转变为数字量的过程,一般分为取样、保持、量化、编码这4步。
 
 由于模拟信号时间上连续,而数字信号在时间上离散的,所以转换时首先必须按 数字信号的节拍,对被转换的模拟信号采取样品。取样(Sample)的原理如图示。
 开关受取样脉冲信号S(t)控制,S(t)=0时,开关断开,取样输出V1(t)=0;S(t)=1时,开关导通,V1(t)=V(t)。这样就把连续的模拟信号V(t)变成了一个个脉冲信号。
 
 采样定理:取样信号S(t)的频率fs大于或等于模拟信号f(t)的最高频率Fmax(其频带的上限频率)的2倍,
 则输入信号V(t)的主要特征都能够被保留下来,将来可以通过滤波处理,从V1(t)中恢复原来的信号V(t)。
   AD的采样频率和转换时间。  AD的采样频率取决于启动AD的速度,启动AD转换的方法有很多,例如软件直接启动,或者利用EV的一些事件来启动,
 启动的频率才是AD采样的频率例如每隔1ms启动1次,则AD采用频率为1K。而AD时钟和AD的转换时间有关,和AD采样频率是无关的。
                                   2812内部ADC的特点    2812的ADC模块是一个12位分辨率的、具有流水线结构的模数转换器,具有16个通道。  对于每个序列发生器,一旦转换结束,已选择采样的通道值就会被保存到各个通道的结果寄存器中去。
 总共有16个结果寄存器Result Reg0—Result Reg15,用于分别保存16个通道的转换结果。
                                         2812 ADC的功能  1.12位的ADC内核,内置2个采样保持器(S/H-A,S/H-B)。  2.采样模式可以为顺序采样(Sequential Sampling)或者是同步采样(Simultaneous Sampling)  3.模拟输入范围为0—3V(需要注意,输入不可超过3V,否则烧坏2812)一般输入最大值在3V的70%左右,为防止万一,一般先将要采样的信号经过运放处理(基准电压源偏置),    使输入电压范围在AD正常工作采样范围之内,在信号进DSP的AD口时,最好加一嵌位二极管。
 4.快速转换时间运行在25MHZ,ADC时钟或者12.5MSPS(每秒完成12.5个百万次的采样。)  5.总共为16路输入通道,可编程多路选择输入。16路采样输入通道被分成了两组,每组8个,分别是ADCINA0……ADCINA7和ADCINB0……ADCINB7。    A组对应于采样保持器S/H-A,B组对应于采样保持器S/H-B。  6.自动序列化,在单一事件段最大能够提供16个自动A/D转换。  7.序列发生器可以按两个独立的8状态序列发生器(SEQ1和SEQ2)来运行,也可以按一个16状态的序列发生器(SEQ)来运行。  8.共有16个转换结果寄存器来保存转换数值    式中: ADCLO为AD转换的参考电平,在实际使用的过程中,通常将其与GND连接,因此此时ADCLO的值为0。
       4095=2^12-1,对应于满量程输入为3V时的转换结果
 9.有多种触发方式来启动AD转换(SOC=start of conversion),包括:软件直接启动S/W,EVA的事件源,EVB的事件源和外部引脚启动。  
 10.序列发生器可以运行在启动/停止模式。  11.采样-保持的采集时间窗口可以预先设定。(ADCTRL1的位ACQ_PS3—ACQ_PS0决定了采集窗口的大小,这一位控制了SOC脉冲的宽度,也就是一开始开关S(t)的导通时间。
   SOC脉冲的宽度是(ACQ_PS+1)*ADCLK。)
                                            ADC时钟      Example. Clock Chain to the ADC                          ADC工作模式    顺序采样、同步采样 (AdcRegs.ADCTRL1.bit.SEQ_CASC位控制) --- 采样方式
 双序列发生器模式、级联模式(AdcRegs.ADCTRL3.bit.SMODE_SEL位控制)--- 序列放生器的模式
 也就是说在双序列发生器模式下可以采用顺序采样和同步采样,在级联模式下我们依然可以采用顺序采样和同步采样两种方式    序列发生器的连续自动序列化模式和启动/停止模式  一个序列的转换数是由MAXCONVn进行控制的,在启动一个转换序列进行转换时,AD模块将MAXCONVn的值装载进自动序列状态寄存器ADCASEQSR的序列计数器状态位SEQCNTR
 当序列发生器从状态CONV00开始并顺序进行(CONV01,CONV02。。。。)时,SEQCNTR位从装入值开始递减,直到为0,结束一个序列的转换,完成转换数为(MAXCONVn+1)。
 当ADCTRL1的CONT RUN位设为0时,AD的序列发生器运行在启动/停止模式,也就是说这种模式下,序列发生器在完成1个序列的转换之后将停止工作,在下一次转换启动开始之前,
 必须复位序列发生器,将转换器置为CONV00
 复位的方法如下:  AdcRegs.ADCTRL2.bit.RST_SEQ1=1;     //立即复位序列发生器为CONV00
 AdcRegs.ADCTRL2.bit.RST_SEQ2=1;     //立即复位序列发生器为CONV08
 当AD的控制寄存器1的CONT RUN位设为1时,AD的序列发生器运行在连续自动序列化模式当序列转换结束时,转换序列自动重复开始,SOC触发时自动将MAXCONVn装入SEQCNTR
 SEQ的状态变为CONV00。在这种情况下,为了避免重写数据,必须确保在下一个转换序列开始前,读取结果寄存器。