打印

STM32F103 AD问题

[复制链接]
2298|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
beicheng|  楼主 | 2013-7-29 09:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家stm32 ad 采样的问题:

采样的结果始终在2000左右波动,折合电压1.6左右,而且波动的比较明显。

我这个采样脚接的是2v的固定电平,所以结果明显不对,配置改了几次没有效果,有没有人遇到过这个问题?
ad采的值完全不对,式了DMA和定时采样都一样。

相关帖子

沙发
beicheng|  楼主 | 2013-7-29 10:04 | 只看该作者
void  ADC1_Init(u8 ADC_Channel)
{
    ADC_InitTypeDef ADC_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        RCC_ADCCLKConfig(RCC_PCLK2_Div6); //六分频后作为AD时钟。   RCC_CFGR |= 0x00008000;

        /* Enable DMA clock */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//开启dma时钟。  RCC_AHBENR |= 0x00000001
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);        //RCC_APB2ENR |= 0x00000e00;  
    /* Enable ADC2 clock */
        ADC_DeInit(ADC1);
        /* ADC2 registers reset ----------------------------------------------------*/

        /* Enable ADC1 */
        ADC_Cmd(ADC1, ENABLE);                                                                                                //开启ADC1

        ADC_InitStructure.ADC_Mode =  ADC_Mode_Independent;  //转换模式,为独立转换。转换模式太多了,以后深究
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //对齐方式,ADC 结果是 12 位的,显然有个对齐左边还是右边的问题。一般是右对齐
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;  //连续转换模式开启
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  //ADC 外部出发开关,关闭
        ADC_InitStructure.ADC_NbrOfChannel = 1;  //开启通道数,2 个
        ADC_InitStructure.ADC_ScanConvMode = ENABLE;  //扫描转换模式开启
        ADC_Init(ADC1, &ADC_InitStructure);
        ADC_RegularChannelConfig(ADC1,  ADC_Channel,  1,  ADC_SampleTime_239Cycles5);  //规则组通道设置,关键函数  转换器 ADC1,选择哪个通道 channel,
        //  ADC1 to DMA, Enable
//        ADC_DMACmd(ADC1, ENABLE);  //ADC 命令,和 DMA 关联。
        //ADC1 Enable
        ADC_Cmd(ADC1,ENABLE); //开启 ADC1
        //Reset the Calibration  of ADC1
        ADC_ResetCalibration(ADC1);  
        //wait until the Calibration's  fini sh
        while(ADC_GetResetCalibrationStatus(ADC1));
         
        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1));  
       
       /* Configure one bit for preemption priority */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

        //  NVIC_StructInit(&NVIC_InitStructure);
        /* Enable the ADC Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ADC_PRE_EMPTION_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = ADC_SUB_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        /* Enable the Update Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIM1_UP_PRE_EMPTION_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIM1_UP_SUB_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        /* Enable the TIM1 BRK Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = BRK_PRE_EMPTION_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = BRK_SUB_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                //没有打开紧急停车功能
        NVIC_Init(&NVIC_InitStructure);

        /* Enable the DMA_CHANEL1 Interrupt */
/*        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = DMA_CH1_PRE_EMPTION_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = DMA_CH1_SUB_PRIORITY;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);                   */

        ADC1->CR2 |= 0x00400000;
        ADC1->CR1 |= 0x00000020;
         
//        ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //连续转换开始,从选择开始,MCU 可以不用管了,ADC 将通过 DMA 不断刷新制定 RAM 区
        //  Attach them;
}

使用特权

评论回复
板凳
logokfu| | 2013-7-29 11:34 | 只看该作者
硬件呢,电源怎么做的呢,ad口加电容没有啊

使用特权

评论回复
地板
coody| | 2013-7-29 11:51 | 只看该作者
STM32F103系列的ADC好多人都感觉比较垃圾,跳动大

使用特权

评论回复
5
beicheng|  楼主 | 2013-7-30 15:15 | 只看该作者
**kfu 发表于 2013-7-29 11:34
硬件呢,电源怎么做的呢,ad口加电容没有啊

没加电容,最小开发板,就直接把3.3V或者地接在采样口上

使用特权

评论回复
6
logokfu| | 2013-7-30 15:25 | 只看该作者
beicheng 发表于 2013-7-30 15:15  没加电容,最小开发板,就直接把3.3V或者地接在采样口上

采样有软件校准,不知道你用了没有,保证电源稳定就可以了。

使用特权

评论回复
7
beicheng|  楼主 | 2013-7-30 15:55 | 只看该作者
**kfu 发表于 2013-7-30 15:25
采样有软件校准,不知道你用了没有,保证电源稳定就可以了。

大师,可不可以给段您的配置,包括采样的那个IO的,谢谢了,huiguang_1@163.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

24

帖子

0

粉丝