watercici 发表于 2018-10-13 11:04:41

AD采集的值没有太大变化,可能是有哪些原因呢?

现象:我现在用AD采集电压值,但是电压从3.3V增加到4.7V了,可是AD采集的值还是没有太大变化,基本在0x0800左右变化,换算成相应的模拟值,一直在1.0V左右。
我的AD用的是STM32内部的12位的,其具体设置:
希望大家给些思路,大概可能由哪些原因造成的,(我的这个程序之前没有问题,只是在原来的程序上新加了部分功能,可是AD这部分程序都没有变化)谢谢。
void init_adcl(void)
{
        ADC_InitTypeDef adc_obj;       
        GPIO_InitTypeDef gpio_obj;
        DMA_InitTypeDef dma_obj;
        NVIC_InitTypeDef NVIC_InitStructure;
        //peirph clock
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);

        //NVIC config                                  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        /*DMA1 channel1 configuration*/
        DMA_DeInit(DMA1_Channel1);        //½«DMA µÄͨµÀ1 ¼Ä´æÆ÷ÖØÉèΪȱʡֵ
        dma_obj.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMAÍâÉèADC »ùµØ
        dma_obj.DMA_MemoryBaseAddr = (u32)&adc_value;//DMA ÄÚ´æ»ùµØÖ·
        dma_obj.DMA_DIR = DMA_DIR_PeripheralSRC;//ÄÚ´æ×÷ΪÊý¾Ý´«ÊäµÄÄ¿µÄµØ
        dma_obj.DMA_BufferSize = ADC1_DATA_SIZE;//DMA ͨµÀµÄDMA »º´æµÄ´óС   
        dma_obj.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //ÍâÉèµØÖ·¼Ä´æÆ÷
        dma_obj.DMA_MemoryInc = DMA_MemoryInc_Enable;        //ÄÚ´æµØÖ·¼Ä´æÆ÷µÝÔö
        dma_obj.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //Êý¾Ý¿í¶ÈΪ16 λ
        dma_obj.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//Êý¾Ý¿í¶ÈΪ16 λ
        dma_obj.DMA_Mode = DMA_Mode_Normal;           //Õý³£¹¤×÷ģʽ
//        dma_obj.DMA_Mode = DMA_Mode_Circular;
//        dma_obj.DMA_Priority = DMA_Priority_High;
        dma_obj.DMA_Priority = DMA_Priority_VeryHigh;
        dma_obj.DMA_M2M = DMA_M2M_Disable;
       
        DMA_Init(DMA1_Channel1 , &dma_obj);
       
        /*Enable DMA1 channel1*/
        DMA_Cmd(DMA1_Channel1 , ENABLE);       
        DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);//ÅäÖÃDMA·¢ËÍÍê³Éºó²úÉúÖжÏ

        //periph clcok
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
        //gpio config
        gpio_obj.GPIO_Pin =        GPIO_Pin_8;
        gpio_obj.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOB , &gpio_obj);

        ADC_DeInit(ADC1);//½«ÍâÉè ADC1 µÄÈ«²¿¼Ä´æÆ÷ÖØÉèΪȱʡֵ
        /*ADC1 configuration*/
        adc_obj.ADC_Mode = ADC_Mode_Independent; //ADC ¹¤×÷ģʽ:ADC1 ºÍADC2¹¤×÷ÔÚ¶ÀÁ¢Ä£Ê½
        adc_obj.ADC_ScanConvMode = DISABLE; //½ûֹɨÃèģʽ
        adc_obj.ADC_ContinuousConvMode = ENABLE; //Ä£Êýת»»¹¤×÷ÔÚÁ¬Ðø×ª»»Ä£Ê½
        adc_obj.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //Íⲿ´¥·¢×ª»»¹Ø±Õ
        adc_obj.ADC_DataAlign = ADC_DataAlign_Right;//ADC Êý¾ÝÓÒ¶ÔÆë
        adc_obj.ADC_NbrOfChannel = 1;
        ADC_Init(ADC1 , &adc_obj);

        RCC_ADCCLKConfig(RCC_PCLK2_Div8); //9Mhz
        //ÉèÖÃÖ¸¶¨ADC µÄ¹æÔò×éͨµÀ£¬ÉèÖÃËüÃǵÄת»¯Ë³ÐòºÍ²ÉÑùʱ¼ä               
        ADC_RegularChannelConfig(ADC1 , ADC_Channel_9 , 1 , ADC_SampleTime_1Cycles5);
        /*Enable ADC1 DMA*/
        ADC_DMACmd(ADC1 , ENABLE);
        /*Enable ADC3*/
        ADC_Cmd(ADC1 , ENABLE);
        /*¸´Î»Ð£×¼¼Ä´æÆ÷*/
        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1));
       
        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1));
       
        ADC_SoftwareStartConvCmd(ADC1 , ENABLE);

}

wenyangzeng 发表于 2018-10-13 13:17:13

这个采样周期1Cycles也太短了吧。

ADC_SampleTime_1Cycles5

huangyanga 发表于 2018-10-13 13:39:36

用的什么主控呢,确定PB8是ADC_Channel_9?

watercici 发表于 2018-10-13 13:43:17

本帖最后由 watercici 于 2018-10-13 14:59 编辑

huangyanga 发表于 2018-10-13 13:39
用的什么主控呢,确定PB8是ADC_Channel_9?
STM32F103RBPB8没有AD映射。

watercici 发表于 2018-10-13 13:44:06

wenyangzeng 发表于 2018-10-13 13:17
这个采样周期1Cycles也太短了吧。

ADC_SampleTime_1Cycles5

之前没问题的时候就是这个采样周期,我也试过将周期改大,但效果还是一样的

watercici 发表于 2018-10-13 18:06:10

结贴:谢谢楼上的提醒,的确是通道分配错了,PB8没有ADC映射,是电路设计出错了

watercici 发表于 2018-10-13 18:06:37

watercici 发表于 2018-10-13 13:43
STM32F103RBPB8没有AD映射。

您说的对,谢谢!
页: [1]
查看完整版本: AD采集的值没有太大变化,可能是有哪些原因呢?