[STM32F4] AD采集模块,采集到的数据老是有波动,求大神指教

[复制链接]
3161|3
 楼主| chonchonyudon 发表于 2015-4-9 22:45 | 显示全部楼层 |阅读模式
void ADC3_IN4_Config(void)
{
    GPIO_InitTypeDef         GPIO_InitStructure;
    DMA_InitTypeDef          DMA_InitStructure;
    ADC_InitTypeDef          ADC_InitStructure;
    ADC_CommonInitTypeDef    ADC_CommonInitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);                  
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,  ENABLE);


    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    DMA_InitStructure.DMA_Channel            = DMA_Channel_0;
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Addr;              
    DMA_InitStructure.DMA_Memory0BaseAddr    = (uint32_t)&ADC1ConvertedValue;        
    DMA_InitStructure.DMA_DIR                = DMA_DIR_PeripheralToMemory;   
    DMA_InitStructure.DMA_BufferSize         = RTD_RX_NO;                          
    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_PeripheralDataSize_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);                                             


    ADC_DeInit();
    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;                     
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;                           
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                          
    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;     
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                        
    ADC_InitStructure.ADC_NbrOfConversion = 1;                             
    ADC_Init(ADC1, &ADC_InitStructure);

    ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;                  
    ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;        
    ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles;  
    ADC_CommonInit(&ADC_CommonInitStructure);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_480Cycles);

    ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);                     

    ADC_DMACmd(ADC1, ENABLE);

    ADC_Cmd(ADC1, ENABLE);

    ADC_SoftwareStartConv(ADC1);
}
 楼主| chonchonyudon 发表于 2015-4-9 22:49 | 显示全部楼层
采集到的数字量老是有波动,波动范围在200左右,硬件查看了下所加电压模拟量,又没有太大波动。参考电压加的是2.5V。请路过大神帮忙解答一下,小弟刚接触这款芯片不久
forrest11 发表于 2015-4-9 23:18 | 显示全部楼层
200的波动对应多少电压范围,可能噪声就是有这么大。还有就是注意采样频率和时序。
airwill 发表于 2015-4-10 09:08 | 显示全部楼层
从参考电源看, 200的波动对应多少电压范围,120mV 多
太大了, 先检查信号的纹波和参考电压的噪声吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部