GD32F450单片机ADC采集值不变问题

[复制链接]
2265|18
手机看帖
扫描二维码
随时随地手机跟帖
suifengkm|  楼主 | 2022-2-10 14:20 | 显示全部楼层 |阅读模式
GD32F450发现ADC采集会出现阶梯状,使用高精度电源以0.01V的变化从0V上升到3.3V过程中(或者使用单片机自身DAC输出),ADC的任意模块、任意通道采集到的值会出现恒定不变情况。例如外部电源电压从0.59V变化到0.63V过程中,ADC采集值在某个区间一直无变化。整个过程其他电压点也会出现类似的情况。单片机的ADC寄存器值不变。此现象目前只出现于GD32F4系列单片机。用了GD32F450、GD32F407、GD32F103、105等单片机。F1系列则无此现象。

求助于大神。可有解。

void dac_init()
{
        rcu_periph_clock_enable(RCU_DAC);                        //打开DAC时钟
       
        dac_deinit();
       
/* once enabled the DAC, the corresponding GPIO pin is connected to the DAC converter automatically */
        gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_4);
         /* configure the DAC0 */
        dac_trigger_source_config(DAC0, DAC_TRIGGER_SOFTWARE);                //DAC触发源
        dac_trigger_enable(DAC0);                                                                        //触发使能
        dac_wave_mode_config(DAC0, DAC_WAVE_DISABLE);                                // DAC噪声波模式
        dac_output_buffer_enable(DAC0);

        /* enable DAC0 for DAC0 */
        dac_enable(DAC0);

}

void adc_init(void)
{
    /* enable ADC clock */
    rcu_periph_clock_enable(RCU_ADC0);
    /* config ADC clock */
    adc_clock_config(ADC_ADCCK_PCLK2_DIV6);
       
        /* enable GPIOA clock */
    rcu_periph_clock_enable(RCU_GPIOA);
       
         /* config the GPIO as analog mode, for ADC */
        gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0);

        /* reset ADC */
    adc_deinit();
    /* ADC mode config */
    adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT);                                        //ADC独立模式
    /* ADC contineous function disable */
    adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE);        //关闭连续模式
    /* ADC scan mode disable */
    adc_special_function_config(ADC0, ADC_SCAN_MODE, DISABLE);                        //关闭扫描模式
    /* ADC data alignment config */
    adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);                                //右对齐
    /* ADC channel length config */
    adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1U);                        //1个转换在规则序列中 也就是只转换规则序列1

    /* ADC trigger config */
    adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_T0_CH0);
    adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, EXTERNAL_TRIGGER_DISABLE);                //规则组外部触发关闭

    /* enable ADC interface */
    adc_enable(ADC0);
    delay_xms(1U);
    /* ADC calibration and reset calibration */
    adc_calibration_enable(ADC0);                //校准ADC0
       
}


void getADCV()
{
        static u16 DacOut = 730;
        float adcU;
        u16 adcV;
       
        DacOut++;
       
        dac_data_set(DAC0, DAC_ALIGN_12B_R, DacOut);        //12位右对齐
       
        dac_software_trigger_enable(DAC0);                                //DAC软件触发
       
        delay_xms(100);
       
        adcV = adc_channel_sample(ADC0,0);
       
        adcU = (adcV*3.286 )/ 4096;
       
        printf("DacOut:%d  ADC:%d  U:%.3f\r\n",DacOut,adcV,adcU);
}




信息输出

信息输出

使用特权

评论回复
suifengkm|  楼主 | 2022-2-10 14:25 | 显示全部楼层
本帖最后由 suifengkm 于 2022-2-10 14:29 编辑

PS:有谁联系过兆易创新的官方技术支持?这个表单无论怎么修改都是提示错误。
QQ浏览器截图20220210141114.png

使用特权

评论回复
AnkerSong| | 2022-2-10 14:56 | 显示全部楼层
F1和F4的库差别不小,建议你先用F4的例程试一下

使用特权

评论回复
suifengkm|  楼主 | 2022-2-10 14:59 | 显示全部楼层
AnkerSong 发表于 2022-2-10 14:56
F1和F4的库差别不小,建议你先用F4的例程试一下

感谢回复。
DAC和ADC的初始化就是用的官方例程。基本上一句没动的搬过来。只是把时钟和IO口初始化放在一起了。

使用特权

评论回复
AnkerSong| | 2022-2-10 15:03 | 显示全部楼层
suifengkm 发表于 2022-2-10 14:59
感谢回复。
DAC和ADC的初始化就是用的官方例程。基本上一句没动的搬过来。只是把时钟和IO口初始化放在一 ...

联系你们销售要技术支持

使用特权

评论回复
suifengkm|  楼主 | 2022-2-10 15:05 | 显示全部楼层
AnkerSong 发表于 2022-2-10 15:03
联系你们销售要技术支持

芯片我们直接从淘宝买的几百片呢。。等我问问淘宝卖家。官方网站的技术支持表单一直填不上

使用特权

评论回复
AnkerSong| | 2022-2-10 15:07 | 显示全部楼层
suifengkm 发表于 2022-2-10 15:05
芯片我们直接从淘宝买的几百片呢。。等我问问淘宝卖家。官方网站的技术支持表单一直填不上 ...

老板大气,直接淘宝买几百片……你们公司在华东这片儿吗?

使用特权

评论回复
suifengkm|  楼主 | 2022-2-10 15:18 | 显示全部楼层
AnkerSong 发表于 2022-2-10 15:07
老板大气,直接淘宝买几百片……你们公司在华东这片儿吗?

我们是云南昆明的。以前用的是ST的,打算逐步用国产的。就选了GD的替代。F4、F1系列。几个型号一样买了几十片,目前也只是小批量试用。几个产品合计两三百片。

使用特权

评论回复
评论
AnkerSong 2022-2-10 15:26 回复TA
18588225643 夏 这是我们GD的PM联系方式,样品申请也可以找他,比你们直接在淘宝买便宜得多,技术的话我们也可以进行支持。 
答案很长吧| | 2022-2-11 11:39 | 显示全部楼层
需要更换一下例程的,不然还是不行的。

使用特权

评论回复
sagade| | 2022-2-11 12:08 | 显示全部楼层
感觉GD32F450也不好买。
论坛应该是有GD的代理的,找代理要技术支持

使用特权

评论回复
AnkerSong| | 2022-2-11 15:13 | 显示全部楼层
sagade 发表于 2022-2-11 12:08
感觉GD32F450也不好买。
论坛应该是有GD的代理的,找代理要技术支持

450确实不好买,407能好一些

使用特权

评论回复
suifengkm|  楼主 | 2022-2-22 16:41 | 显示全部楼层
没人用GD的ADC吗??还是你们的允许误差足够大。???

使用特权

评论回复
AnkerSong| | 2022-2-22 16:53 | 显示全部楼层
suifengkm 发表于 2022-2-22 16:41
没人用GD的ADC吗??还是你们的允许误差足够大。???

找技术支持啊。芯片哪儿买的就去哪儿要支持

使用特权

评论回复
zeshoufx| | 2022-2-22 20:05 | 显示全部楼层
suifengkm 发表于 2022-2-10 15:18
我们是云南昆明的。以前用的是ST的,打算逐步用国产的。就选了GD的替代。F4、F1系列。几个型号一样买了几 ...

云南有搞嵌入式的吗?

使用特权

评论回复
suifengkm|  楼主 | 2022-2-24 15:17 | 显示全部楼层
zeshoufx 发表于 2022-2-22 20:05
云南有搞嵌入式的吗?

有的。只是工资低的一笔。穷的很。

使用特权

评论回复
suifengkm|  楼主 | 2022-2-24 15:19 | 显示全部楼层
AnkerSong 发表于 2022-2-22 16:53
找技术支持啊。芯片哪儿买的就去哪儿要支持

淘宝买的。反馈了。没消息。

使用特权

评论回复
yhl132| | 2022-6-27 10:34 | 显示全部楼层
你好楼主,请问问题解决了吗?我也遇到了一样的问题

使用特权

评论回复
suifengkm|  楼主 | 2023-7-19 15:30 | 显示全部楼层
yhl132 发表于 2022-6-27 10:34
你好楼主,请问问题解决了吗?我也遇到了一样的问题

不好意思。后来一直没上。。解决了。。方法是 adc_clock_config(ADC_ADCCK_PCLK2_DIV6); 设置时钟这句,需要放在最后。(校准后,在设置时钟)

使用特权

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

本版积分规则

3

主题

22

帖子

0

粉丝