STM32F2XX——ADC多通道DMA采集时AD值大于4095的问题解决方法

发布者:caoda143最新更新时间:2019-02-12 来源: eefocus关键字:STM32F2XX  ADC  DMA采集  AD值 手机看文章 扫描二维码
随时随地手机看文章

前言

  最近在调试STM32F2XX系列ADC多通道DMA采集时,发现采集的AD值大于4095,有的65000多了,这是什么节奏?adc不是12位吗,最大才0xfff,即4095,怎么会出现这种情况呢?难到是adc数据对齐方式出现问题了,adc的对齐明明设置的是右对齐啊,神马情况?


ADC结构体参数分析

  百思不得adc之姐,只能keil单步调试,一步一步查看adc结构体的参数。我使用的是adc dma方式采集,共9个通道。初始化程序如下:


void ADC_DMA_Config(void)

{

    ADC_InitTypeDef       ADC_InitStructure;

    ADC_CommonInitTypeDef ADC_CommonInitStructure;

    DMA_InitTypeDef       DMA_InitStructure;

    GPIO_InitTypeDef      GPIO_InitStructure;


    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC, ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);


    DMA_InitStructure.DMA_Channel = DMA_Channel_0;  

    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;

    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC_ConvertedValue;  

    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

    DMA_InitStructure.DMA_BufferSize = Sample_Num*Channel_Num;         

    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

    DMA_InitStructure.DMA_Priority = DMA_Priority_High;

    DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         

    DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;

    DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

    DMA_Init(DMA2_Stream0, &DMA_InitStructure);

    DMA_Cmd(DMA2_Stream0, ENABLE);



    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

    GPIO_Init(GPIOC, &GPIO_InitStructure);


    /* ADC Common Init **********************************************************/

    ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;

    ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;

    ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;

    ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

    ADC_CommonInit(&ADC_CommonInitStructure);


    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

    ADC_InitStructure.ADC_ScanConvMode = ENABLE;

    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

    ADC_InitStructure.ADC_NbrOfConversion = 9;

    ADC_Init(ADC1, &ADC_InitStructure);



    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 4, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 5, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 6, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 7, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 8, ADC_SampleTime_3Cycles);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 9, ADC_SampleTime_3Cycles);


    ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);

    ADC_DMACmd(ADC1, ENABLE);

    ADC_Cmd(ADC1, ENABLE);


}


  其中涉及adc的初始化结构体代码部分如下:


    ADC_InitTypeDef       ADC_InitStructure;


    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

    ADC_InitStructure.ADC_ScanConvMode = ENABLE;

    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

    ADC_InitStructure.ADC_NbrOfConversion = 9;

    ADC_Init(ADC1, &ADC_InitStructure);


  一步一步调式发现结构体有一项ADC_ExternalTrigConv是0x08002d54,这一项并没有初始化对其赋值,忘记给结构体的这一项赋值了。最后这个值通过ADC_Init函数赋值给CR2的时候,第11位(也就是数据对其位)是1了,左对齐了!!!!! 

 这里写图片描述 


  下面来重点分析下adc初始化结构体中的各项参数的意义: 

  对于STM32,在使用ADC的时候需要配置几个参数。 

(1) 第一个参数是ADC_Mode,这里设置为独立模式:


ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;


在这个模式下,双ADC不能同步,每个ADC接口独立工作。所以如果不需要ADC同步或者只是用了一个ADC的时候,就应该设成独立模式了。


(2) 第二个参数是ADC_ScanConvMode,这里设置为DISABLE。


ADC_InitStructure.ADC_ScanConvMode = ENABLE;


如果只是用了一个通道的话,DISABLE就可以了,如果使用了多个通道的话,则必须将其设置为ENABLE。


(3) 第三个参数是ADC_ContinuousConvMode,这里设置为ENABLE,即连续转换。 

如果设置为DISABLE,则是单次转换。两者的区别在于连续转换直到所有的数据转换完成后才停止转换,而单次转换则只转换一次数据就停止,要再次触发转换才可以。所以如果需要一次性采集1024个数据或者更多,则采用连续转换。


(4) 第四个参数是ADC_ExternalTrigConv,即选择外部触发模式。这里只讲三种:


1、第一种是最简单的软件触发,参数一般为ADC_ExternalTrigConv_None(注意STM32F2XX系列这个有点蹊跷,后面会讲这个)。设置好后还要记得调用库函数:


ADC_SoftwareStartConvCmd(ADC1, ENABLE);

1

void ADC_SoftwareStartConv(ADC_TypeDef* ADCx)

{

  /* Check the parameters */

  assert_param(IS_ADC_ALL_PERIPH(ADCx));


  /* Enable the selected ADC conversion for regular group */

  ADCx->CR2 |= (uint32_t)ADC_CR2_SWSTART;

}


#define  ADC_CR2_SWSTART                     ((uint32_t)0x40000000)      

 /*!


ADC_SoftwareStartConv函数里直接置位CR2的ADC_CR2_SWSTART位,这样触发就启动了。


2、第二种是定时器通道输出触发。共有这几种:ADC_ExternalTrigConv_T1_CC1、ADC_ExternalTrigConv_T1_CC2、ADC_ExternalTrigConv_T2_CC2、


ADC_ExternalTrigConv_T3_T以及ADC_ExternalTrigConv_T4_CC4。定时器输出触发比较麻烦,还需要设置相应的定时器。以


ADC_ExternalTrigConv_T2_CC2触发为例设置相应的定时器:


void TIM2_Configuration(void)


{


TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;


TIM_OCInitTypeDef         TIM_OCInitStructure;


TIM_TimeBaseStructure.TIM_Prescaler = 4;


TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


TIM_TimeBaseStructure.TIM_Period = 0XFF;


TIM_TimeBaseStructure.TIM_ClockDivision = 0;


TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;


TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);



TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;


TIM_OCInitStructure.TIM_Pulse = 0X7F;


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;


TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;        


 //配置CC2的属性。若CC3作为ADC的触发源,则应改为TIM_OC3Init(TIM2, &TIM_OCInitStructure);


TIM_OC2Init(TIM2, &TIM_OCInitStructure);


TIM_Cmd(TIM2, ENABLE);

TIM_CtrlPWMOutputs(TIM2, ENABLE);

}


这样设置之后就可以用定时器2的输出触发了,至于触发的周期,设置TIM2的时间即可。这里不再赘述。


3、第三种是外部引脚触发,对于规则通道,选择EXTI线11和TIM8_TRGO作为外部触发事件;而注入通道组则选择EXTI线15和TIM8_CC4作为外部触发事件。


(5) 第五个参数是ADC_DataAlign,这里设置为ADC_DataAlign_Right右对齐方式。建议采用右对齐方式,因为这样处理数据会比较方便。当然如果要从高位开始传输数据,那么采用左对齐优势就明显了。


(6) 第六个参数是ADC_NbrOfChannel,顾名思义:通道的数量。要是到多个通道采集数据的话就得设置一下这个参数。此外在规则通道组的配置函数中也许将各个通道的顺序定义一下,如:



      ADC_RegularChannelConfig(ADC1,ADC_Channel_13,1,ADC_SampleTime_13Cycles5);


      ADC_RegularChannelConfig(ADC1,ADC_Channel_14,2,ADC_SampleTime_13Cycles5);


  多通道数据传输时有一点还要注意:若一个数组为ADC_ValueTab[4],且设置了两个通道:通道1和通道2,则转换结束后,ADC_ValueTab[0]和ADC_ValueTab[2]存储的是通道1的数据,而ADC_ValueTab[1]和ADC_ValueTab[3]存储的是通道2的数据。如果数组容量大则依次类推。


  补充一点:在使用DMA传输数据的时候,需要设置外设地址和存储器地址,外设地址当然就是ADC的地址了,而存储器的地址如果使用8位数据的话,存储器必须定义为8位缓冲区;如果使用16位数据格式的话,存储器则为16位缓冲器,不可定义为32位或更多,否则,数据将出错。


问题的解决方法

  上面分析了adc结构体的参数,下面再来单独看看ADC_ExternalTrigConv这一项。 

  在stm32f2xx_adc.h文件中有这个成员的参数定义,发现里面并没有ADC_ExternalTrigConv_None这个常见的定义。


/** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion 

  * @{

  */ 

#define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000)

#define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x01000000)

#define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x02000000)

#define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x03000000)

#define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x04000000)

#define ADC_ExternalTrigConv_T2_CC4                ((uint32_t)0x05000000)

#define ADC_ExternalTrigConv_T2_TRGO               ((uint32_t)0x06000000)

#define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x07000000)

#define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x08000000)

#define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x09000000)

#define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x0A000000)

#define ADC_ExternalTrigConv_T5_CC2                ((uint32_t)0x0B000000)

#define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x0C000000)

#define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x0D000000)

#define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x0E000000)

#define ADC_ExternalTrigConv_Ext_IT11              ((uint32_t)0x0F000000)


  再来看看stm32f10x_adc.h文件中的ADC_ExternalTrigConv的参数定义:


/** @defgroup ADC_external_trigger_sources_for_regular_channels_conversion 

  * @{

  */


#define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x00020000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x00060000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x00080000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x000A0000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO    ((uint32_t)0x000C0000) /*!< For ADC1 and ADC2 */


#define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x00040000) /*!< For ADC1, ADC2 and ADC3 */

#define ADC_ExternalTrigConv_None                  ((uint32_t)0x000E0000) /*!< For ADC1, ADC2 and ADC3 */   //f2xx系列并没有这个定义


#define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x00000000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x00020000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x00060000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x00080000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x000A0000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x000C0000) /*!< For ADC3 only */


  对比发现stm32f2xx系列并没有ADC_ExternalTrigConv_None这个定义,很是奇怪,现在还不明白ST的工程师为什么做这个变动。 

  那么问题怎么解决呢? 

  一种是进行adc结构体的初始化操作,在配置之前恢复默认值。即调用ADC_StructInit(&ADC_InitStructure);修改如下:


    ADC_StructInit(&ADC_InitStructure);//新增加的

    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

    ADC_InitStructure.ADC_ScanConvMode = ENABLE;

    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

    ADC_InitStructure.ADC_NbrOfConversion = 9;

    ADC_Init(ADC1, &ADC_InitStructure);


  调用ADC_StructInit(&ADC_InitStructure)语句,ADC_ExternalTrigConv会恢复默认值0。如下: 

 这里写图片描述 

  另一种方法是直接配置该参数为0,如下:


    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

    ADC_InitStructure.ADC_ScanConvMode = ENABLE;

    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

    ADC_InitStructure.ADC_ExternalTrigConv= 0;//新增加的

    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

    ADC_InitStructure.ADC_NbrOfConversion = 9;

    ADC_Init(ADC1, &ADC_InitStructure);


  这两种方法都可以解决adc采样对齐方式异常问题。 

  但是ADC_ExternalTrigConv= 0在stm32f2xx_adc.h中其实是对应ADC_ExternalTrigConv_T1_CC1的。 

 

  也就是说调用软件触发函数ADC_SoftwareStartConv函数里直接置位CR2的ADC_CR2_SWSTART位也可以触发定时器触发方式的adc通道。

关键字:STM32F2XX  ADC  DMA采集  AD值 引用地址:STM32F2XX——ADC多通道DMA采集时AD值大于4095的问题解决方法

上一篇:STM32——多通道ADC的DMA方式采集方法
下一篇:STM32—DMA使用

推荐阅读最新更新时间:2024-03-16 16:23

基于TMS320F206 DSP的图像采集卡设计
  数字信号处理器DSP是数字信号处理理论与超大规模集成电路VLSI技术融合的结晶。目前DSP技术正广泛地应用于通信、语音、图像、航天航空、仪器仪表等领域,在推动当代信息处理数字化方面正发挥着越来越大的作用。   在利用电话线传输视频图像这一低比特率多媒体通信领域中,如果选用图像处理的专用芯片,如SAA7110、8×8 3104VCP以及LSI公司的专用芯片等,或者选用具有高速运算性能的高档DSP进行图像处理,都会使产品价格大幅度标升。本文介绍的采用TI公司的低档DSP芯片TMS320F206和视频A/D芯片TLC5510的图像采集卡,则为低比特率多媒体通信提供了一个廉价的解决方案。    1 TLC5510芯片和TMS320
[嵌入式]
DMA+ADC单通道转换、多通道转换
在stm32中,使用ADC时往往采用DMA传输方式,由DMA把转换的数据传输到SRAM,再进行处理。 一、单通道转换 本章节选用ADC1进行配置实验: ADC通道与GPIO对应表: ADC结构体成员变量: typedef struct { uint32_t ADC_Mode; FunctionalState ADC_ScanConvMode; FunctionalState ADC_ContinuousConvMode; uint32_t ADC_ExternalTrigConv; uint32_t ADC_DataAlign; uint8_t ADC_NbrOfChannel; }ADC_Init
[单片机]
<font color='red'>DMA</font>+<font color='red'>ADC</font>单通道转换、多通道转换
stm32之ADC oled显示
六路adc的显示结果 ** 一些基本的代码: ** 初始化ADC //初始化ADC void Adc_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, EN
[单片机]
stm32之<font color='red'>ADC</font> oled显示
基于51单片机的烟雾报警器设计-ADC0809
一.硬件方案 火灾报警器采用51单片机为核心控制器,利用气体传感器MQ-2、ADC0809模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片,当环境中可燃气体浓度或温度等发生变化时系统会发出相应的灯光报警信号和声音报警信号,以此来实现火灾报警,智能化提示。 主要由51单片机+MQ-2烟雾传感+ADC0809模数转换芯片+LCD1602显示屏+继电器电路+按键+蜂鸣器;如图: 二.设计功能 (1)采用LCD1602实时显示当前的烟雾值和设置值; (2)烟雾浓度的报警值可以通过按键设定; (3)当前烟雾值在正常范围时,绿灯亮; (4)当前烟雾超过上限值时,红灯亮,蜂鸣器响; (5)三个按键功能:设置、加、
[单片机]
基于51单片机的烟雾报警器设计-<font color='red'>ADC</font>0809
STC单片机内置ADC的使用方法
STC系列单片机中的STC89LE516AD/X2提供了8路8位精度的高速A/D转换器,位于P1口上,从而省去了片外ADC的麻烦。这8路ADC为电压输入型,可做按键扫描,电池电压检测,频谱检测等。ADC转换过程需要17个机器周期。通过对相关功能寄存器的适当配置,就可以控制其工作。下面就对相关功能寄存器进行介绍。 A/D转换寄存器总表: 寄存器 地址 名称 7 6 5 4 3 2 1 0 初始初
[单片机]
模数转换器ADC
6.1 ADC结构及寄存器说明 模数转换器ADC的主要功能是将模拟信号转化为数字信号以便于微控制器进行数据处理 ADC按转换原理分为逐次比较型、双积分型和∑-∆型 逐次比较型ADC通过逐次比较将模拟信号转化为数字信号转换速度快,但精度较低,是最常用的ADC 双积分型ADC通过两次积分将模拟信号转化为数字信号,精度高,抗干扰能力强,但速度较慢,主要用于万用表等测量仪器 ∑-∆型ADC具有逐次比较型和双积分型的双重优点,正在逐步广泛地得到应用 STM32ADC是12位逐次比较器,多达18个通道,可测量16个外部和2个内部信号源,各通道的转换可以单词、连续、扫描或间断模式执行,转换结果可以左对齐或右对齐方式存储在16位数据寄
[单片机]
<font color='red'>模数转换器</font><font color='red'>ADC</font>
Linear 推出具微微安培输入的缓冲型 18 位 8 通道 ADC LTC2358-18
亚德诺半导体 (Analog Devices, Inc.,简称 ADI) 旗下凌力尔特公司推出 18 位 8 通道同时采样逐次逼近型寄存器 (SAR) ADC LTC2358-18,该器件具集成的微微安培输入缓冲器。下面就随电源管理小编一起来了解一下相关内容吧。 在电路板空间稀缺的现状下,LTC2358-18 通过去掉通常在驱动非缓冲型开关电容器 ADC 输入时所需的前端信号调理电路,显着地节省了空间和成本。每个通道合起来节省了 3 个放大器、6 个电阻器和两个电容器组件,8 个通道总共可节省 88 个组件,从而节省了 BOM 成本和大量电路板空间,并使功耗降低超过 40%。微微安培输入以及在 30VP-P 共模范围内 128d
[电源管理]
用于时间交织ADC的高精度开环跟踪保持电路设计
0  引言   随着数字通信系统的发展,高速数字处理系统对模拟信号和数字信号之间的转换要求越来越高。目前高性能模数转换器(ADC)的两大主要发展方向是高速、中低精度ADC和低速、高精度ADC。前端T&H电路通常是ADC设计的一个关键,其动态精度的好坏直接影响着ADC性能的优劣。   1 开环T&H电路   在超高速ADC的设计中,一般多采用全并行Flash结构或者是时间交织结构。   而在时间交织结构中,其前端T&H电路则可以根据设计要求分别采用开环或者闭环结构。闭环结构速度较低,精度较高,而开环结构速度高,但本身精度较低。本设计中采用后者。   T&H电路的失真主要来源于非线性MOS开关电阻、开关寄生电容和开
[电源管理]
用于时间交织<font color='red'>ADC</font>的高精度开环跟踪保持电路设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved