打印

GD32F103VET6 ADC读取数据跳动

[复制链接]
1660|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liupk|  楼主 | 2022-1-19 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
adc读取压力传感器(MP3V5050V)值,当压力值缓慢上升时,
stm32f103vet6读取的压力值是类似0.2  0.4   0.6  0.8  1.0  1.2   .......
这样比较平稳的接近线性的很丝滑的上升。
使用GD32f103vet6读取时是类似 1, 4,6, 10, 15,18   ......这样的跳跃性很大的上升。
ADC 预分频器的值和采样时间都试了一遍也没有任何好转,有知道这是什么原因么


使用特权

评论回复
沙发
yljon| | 2022-1-19 13:50 | 只看该作者
会不会是参考电压造成的???我不知道,我乱猜的。

使用特权

评论回复
板凳
laocuo1142| | 2022-1-20 10:13 | 只看该作者
分辨率是不是没设置,哈哈

使用特权

评论回复
地板
liupk|  楼主 | 2022-1-20 15:54 | 只看该作者
本帖最后由 liupk 于 2022-1-19 20:56 编辑
laocuo1142 发表于 2022-1-19 15:13
分辨率是不是没设置,哈哈

我用的是GD32F103vet6,没有找到类似adc_resolution_config(ADC_RESOLUTION_12B);这样能配置分辨率的函数,所以没有配置分辨率,但是我使用函数信号发生器发出1hz的三角波,使用GD32F103vet6的adc2读取发现也是数据跳动不光滑,但是结果是能够从0读取到4095的,应该是默认就是12位,我在查下手册,看看能不能单独配置这个分辨率

使用特权

评论回复
5
liupk|  楼主 | 2022-1-20 15:56 | 只看该作者
void ADCx_Init(void)
{

        dma_parameter_struct dma_data_parameter;
        rcu_periph_clock_enable(RCU_GPIOC);
        gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
        gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
        gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
        gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_3);


        rcu_periph_clock_enable(RCU_ADC2);
        rcu_periph_clock_enable(RCU_AF);
        rcu_periph_clock_enable(RCU_DMA1);       
        rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV16);
               


        adc_deinit(ADC2);
        adc_mode_config(ADC_MODE_FREE);
        adc_special_function_config(ADC2, ADC_CONTINUOUS_MODE, ENABLE);
        /* ADC scan mode disable */
        adc_special_function_config(ADC2, ADC_SCAN_MODE, ENABLE);
        /* ADC data alignment config */
        adc_data_alignment_config(ADC2, ADC_DATAALIGN_RIGHT);

        /* ADC channel length config */
        adc_channel_length_config(ADC2, ADC_REGULAR_CHANNEL, NOFCHANEL);//常规通道长度配置
        /* ADC regular channel config */
        adc_regular_channel_config(ADC2, 0, ADC_CHANNEL_10, ADC_SAMPLETIME_239POINT5);
        adc_regular_channel_config(ADC2, 1, ADC_CHANNEL_11, ADC_SAMPLETIME_239POINT5);
        adc_regular_channel_config(ADC2, 2, ADC_CHANNEL_12, ADC_SAMPLETIME_239POINT5);
        adc_regular_channel_config(ADC2, 3, ADC_CHANNEL_13, ADC_SAMPLETIME_239POINT5);
        /* ADC trigger config */
        adc_external_trigger_source_config(ADC2,ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
        adc_external_trigger_config(ADC2, ADC_REGULAR_CHANNEL, ENABLE);
        /* ADC DMA function enable */
        adc_dma_mode_enable(ADC2);//使能 DMA 模式
        /* enable ADC interface */
        adc_enable(ADC2);
        delay_ms(2);
        /* ADC calibration and reset calibration */
        adc_calibration_enable(ADC2);
        /* ADC_DMA_channel configuration */

                /* ADC DMA_channel configuration */
        dma_deinit(DMA1,DMA_CH4);
        /* initialize DMA single data mode */
        dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC2)); //外设地址
        dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
        dma_data_parameter.memory_addr = (uint32_t)(&ADC_ConvertedValue); //搬运目标地址
        dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
        dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
        dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
        dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
        dma_data_parameter.number = 4;
        dma_data_parameter.priority = DMA_PRIORITY_HIGH;
        dma_init(DMA1, DMA_CH4, &dma_data_parameter);
        /* enable DMA circulation mode */
        dma_circulation_enable(DMA1, DMA_CH4);
        /* enable DMA channel */
        dma_channel_enable(DMA1, DMA_CH4);

        adc_software_trigger_enable(ADC2,ADC_REGULAR_CHANNEL);


}

使用特权

评论回复
6
liupk|  楼主 | 2022-1-20 16:01 | 只看该作者
yljon 发表于 2022-1-18 18:50
会不会是参考电压造成的???我不知道,我乱猜的。

参考电压用的是REF3033AIDBZR,目前还没找到原因,等我在测试看看

使用特权

评论回复
7
华强半导体miti| | 2022-1-20 17:36 | 只看该作者
GD32F103系列 今年不主推了哦,建议测试GD32F303系列

使用特权

评论回复
8
zljiu| | 2022-2-6 19:31 | 只看该作者
这个波动有点大啊

使用特权

评论回复
9
tfqi| | 2022-2-6 19:43 | 只看该作者
这个跳动太有规律了

使用特权

评论回复
10
nawu| | 2022-2-6 20:01 | 只看该作者
绝对是程序的问题

使用特权

评论回复
11
gwsan| | 2022-2-6 20:15 | 只看该作者
我怀疑这些数据是假的

使用特权

评论回复
12
aoyi| | 2022-2-6 20:31 | 只看该作者
实际给的数据是多少啊

使用特权

评论回复
13
liupk|  楼主 | 2022-2-8 10:15 | 只看该作者
解决了,是时钟问题,我做了如下设置希望大家能参考到
RCC_PCLK2Config(RCC_HCLK_Div16); //设置APB2外设时钟
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//9倍频
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV16);
adc_regular_channel_config(ADC2, 0, ADC_CHANNEL_10, ADC_SAMPLETIME_239POINT5);
adc_regular_channel_config(ADC2, 1, ADC_CHANNEL_11, ADC_SAMPLETIME_239POINT5);
adc_regular_channel_config(ADC2, 2, ADC_CHANNEL_12, ADC_SAMPLETIME_239POINT5);
adc_regular_channel_config(ADC2, 3, ADC_CHANNEL_13, ADC_SAMPLETIME_239POINT5);

使用特权

评论回复
14
wyq165| | 2022-2-9 14:02 | 只看该作者
这几路输入都接了吗?有没有悬空的。这几个通道间如果有一路输入电压小于0V,会影响其他路ADC的

使用特权

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

本版积分规则

个人签名:安得广厦电子科技

34

主题

437

帖子

5

粉丝