OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4866|回复: 1

为何ADC采样通过循环扫描跟通过中断两种方式计算的电压值不一样

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-8-4
在线时间
1 小时
发表于 2020-8-10 21:12:33 | 显示全部楼层 |阅读模式
1金钱
中断计算方式
        ADC_InitStructer.ADC_ContinuousConvMode=DISABLE;
        ADC_InitStructer.ADC_ScanConvMode=DISABLE;
        ADC_InitStructer.ADC_DataAlign=ADC_DataAlign_Right;
        ADC_InitStructer.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
        ADC_InitStructer.ADC_Mode=ADC_Mode_Independent;
        ADC_InitStructer.ADC_NbrOfChannel=1;
        ADC_Init(ADC1,&ADC_InitStructer);
       
        NVIC_InitStructer.NVIC_IRQChannel=ADC1_2_IRQn;
        NVIC_InitStructer.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructer.NVIC_IRQChannelSubPriority=2;
        NVIC_Init(&NVIC_InitStructer);
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
        ADC_Cmd(ADC1,ENABLE);
        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1));
        Delay_nms(10);
        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1));
        ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
void ADC1_2_IRQHandler()
{
       
        if(ADC_GetITStatus(ADC1,ADC_IT_EOC)!=RESET)
        {
                ADC1_Val=ADC_GetConversionValue(ADC1);
                Delay_nms(5);
        }
        ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
}

void ADC_GET_Valche()
{
        u8 i=0;
        u16 templ=0,temp_Val=0;
        float Temp_ADC;
        ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
        for(i=0;i<1;)
        {
                ADC_SoftwareStartConvCmd(ADC1,ENABLE);
                templ+=ADC1_Val;
                Delay_nms(5);
                i++;
        }
        temp_Val=templ/1;
        printf("temp_Val= %d\r\n",temp_Val);
        Temp_ADC=(float)temp_Val*(3.3/4096);
        printf("Temp_ADC= %.4f\r\n",Temp_ADC);
       
}
循环扫描方式
void UserADC_Init(void)
{
        GPIO_InitTypeDef                                GPIO_InitStructer;
        ADC_InitTypeDef                                  ADC_InitStructer;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
       
        RCC_ADCCLKConfig(RCC_PCLK2_Div8);
       
        GPIO_InitStructer.GPIO_Mode=GPIO_Mode_AIN;
        GPIO_InitStructer.GPIO_Pin=GPIO_Pin_1;
        GPIO_Init(GPIOA,&GPIO_InitStructer);
       
        ADC_InitStructer.ADC_Mode=ADC_Mode_Independent;
        ADC_InitStructer.ADC_ContinuousConvMode=DISABLE;
        ADC_InitStructer.ADC_DataAlign=ADC_DataAlign_Right;
        ADC_InitStructer.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
        ADC_InitStructer.ADC_NbrOfChannel=1;
        ADC_InitStructer.ADC_ScanConvMode=DISABLE;
        ADC_Init(ADC1,&ADC_InitStructer);
       
        ADC_Cmd(ADC1,ENABLE);
        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1))
        Delay_nms(10);       
        ADC_StartCalibration(ADC1);
        while(ADC_GetSoftwareStartConvStatus(ADC1))
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);

}

u16 ADC_Val(u16 ch,u16 tims)
{
        u16 tem;
        u16 Val=0;
        ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
        for(tem=0;tem<tims;)
        {
                ADC_SoftwareStartConvCmd(ADC1,ENABLE);
                while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)!=RESET)
                Val+=ADC_GetConversionValue(ADC1);
                Delay_nms(5);
                tem++;
        }
        return Val/tims;
}

void Printf_ADC_Vache()
{
        u16 Vache=ADC_Val(ADC_Channel_1,1);
        float volatil=0;
        Delay_nms(500);
        printf("ADC cai yang zhi %d\r\n",Vache);
        volatil=(float)Vache*(3.3/4096);
        printf("ADC zhi %.4f\r\n",volatil);
}
同一个点位       循环扫描测量值为3.2219,        中断方式计算结果为3.2911

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2021-4-7
在线时间
61 小时
发表于 2022-4-6 16:50:57 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表