CH32V003F4P6 ADC异常

用ADC采样内部vref,电源3.8V左右。连续采样,出来的结果偶尔会出现800+的数值,正常是320左右

例如:

adc:320

adc:812

adc:320

adc:320

adc:321

adc:321

adc:321

是什么原因,如何避免?


电源是锂电池,电压比较稳定,用示波器观察没有纹波或者跳变。


采样程序如下

int adcConvert(unsigned char averageTime){

    ADC_DiscModeChannelCountConfig(ADC1, 1);

    ADC_RegularChannelConfig(ADC1, 8, 1, ADC_SampleTime_241Cycles);

    ADC1->CTLR2|=((uint32_t)0x00e0000);  //SWSTART_SEL

    for(unsigned char x=0;x<=averageTime;x++){

        ADC1->CTLR2|=((uint32_t)0x00400000); //start convert;

        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));

        int adc;

        adc=ADC_GetConversionValue(ADC1);

        printf("adc:%d\n",adc);;

        result+=adc;

        if(x==0)result=0;

    }

    return result/averagetime;


您好,附件是我的测试例程,采样值还是比较稳定的,可以参考一下。若要配置不连续转换,可直接在ADC初始化的时候配置,此外软件启动转换可直接调用库函数试一下。若方便也可以将你完整工程发我(lzs@wch.cn)看一下,我这边可以测试一下。

icon_rar.gifCH32V003 ADC_Vref.zip



只有登录才能回复,可以选择微信账号登录