硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1566|回复: 13
收起左侧

[技术讨论] STM32F407裸机时ADC很稳,使用FreeRTOS后波动变大

[复制链接]

3

主题

7

回帖

16

积分

新手上路

积分
16
发表于 2025-1-9 10:59:15 | 显示全部楼层 |阅读模式
本帖最后由 Freedom109079 于 2025-1-10 09:56 编辑

最近为了测试STM32F407的ADC,特意画了一个最小系统测试ADC的效果。
电路只有5路电压采集和一个串口打印功能。
采样周期也试了

采集方式: 使用定时器1ms触发+DMA方式采集数据, 长度512个字节。
代码生成是使用STM32CUBEMX.
ADC数据处理如下:

// 使用TIM3触发,APB1=84MHz
volatile uint16_t adc1_buffer[ADC1_LEN*ADC1_CH_NUM] = {0};
uint8_t  flag = 0;

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)    //ADC转换完成回调
{
        if(hadc->Instance == ADC1)
        {
                //HAL_TIM_Base_Stop(&htim3);
                HAL_ADC_Stop_DMA(&hadc1);
                flag = 1;
        }
}



  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
                if(flag == 1)
                {
                        flag = 0;
                        for(uint16_t i=0; i<ADC1_LEN; i++)
                        {
                                printf("%d, %d\r\n", adc1_buffer[3*i+1], adc1_buffer[3*i+2]);
                        }
                        //HAL_TIM_Base_Start(&htim3);        
                        HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&adc1_buffer, ADC1_LEN*ADC1_CH_NUM);
                }

}


问题:
当我使用裸机的时候,采集到的ADC数据是很稳的, 基本就2个值的波动。




但是我只在cubemx上选择FreeRTOS,系统参数都是默认的,这时采集到的ADC数据波动就变大了,有十几个值的波动,
FreeRTOS的系统时钟由1ms改为10ms,100ms也没用, 这是为什么????


裸机时的ADC数据波动

裸机时的ADC数据波动

使用FreeRTOS时的ADC数据波动

使用FreeRTOS时的ADC数据波动

STM32F407_Prj.zip

7.99 MB, 下载次数: 9

裸机程序

STM32F407_osPrj.zip

9.02 MB, 下载次数: 6

FreeRTOS程序

回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2025-1-9 17:46:23 | 显示全部楼层
是不是浮空测试的,连接一个稳压源测一下试试呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-1-10 07:59:26 | 显示全部楼层
还要就是,使用FreeRTOS后,没有开启其它外设吧
回复

使用道具 举报

3

主题

7

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2025-1-10 09:12:40 | 显示全部楼层
m1249394401 发表于 2025-1-9 17:46
是不是浮空测试的,连接一个稳压源测一下试试呢

采集的是电阻分压后电压跟随器输出电压
回复

使用道具 举报

3

主题

7

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2025-1-10 09:23:27 | 显示全部楼层
eric2013 发表于 2025-1-10 07:59
还要就是,使用FreeRTOS后,没有开启其它外设吧

板子的STM32F407只画5路ADC采集电阻分压电路。cubemx工程中就配置ADC采集和串口打印功能,其他外设都没有使用, 然后FREERTOS选项中的选择CMSIS_V1,然后定时器时钟源由systick改为TIM1
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-1-11 07:11:25 | 显示全部楼层
Freedom109079 发表于 2025-1-10 09:23
板子的STM32F407只画5路ADC采集电阻分压电路。cubemx工程中就配置ADC采集和串口打印功能,其他外设都没有 ...

那没问题,可以找个12bit或者更高分辨率的示波器,看下VREF引脚抖动变大,或者说,你这个接了稳压基准了吧
回复

使用道具 举报

3

主题

7

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2025-1-11 14:05:38 | 显示全部楼层
eric2013 发表于 2025-1-11 07:11
那没问题,可以找个12bit或者更高分辨率的示波器,看下VREF引脚抖动变大,或者说,你这个接了稳压基准了 ...

我画了3个电路, 一个是普通的磁珠接到VREF,一个用REF3033外部基准电源,一个用了ADR4533外部基准电源,顺便对比测试的,都是这种情况
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-1-12 07:26:02 | 显示全部楼层
Freedom109079 发表于 2025-1-11 14:05
我画了3个电路, 一个是普通的磁珠接到VREF,一个用REF3033外部基准电源,一个用了ADR4533外部基准电源, ...

建议实际测试下抖动效果
回复

使用道具 举报

3

主题

7

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2025-1-12 23:05:30 | 显示全部楼层
eric2013 发表于 2025-1-12 07:26
建议实际测试下抖动效果

这三个电路抖动是有点不一样, 第三个是最好的。  但是使用了freertos系统后抖动都变大了。  今天我用了淘宝买的最小系统板子接两个10K电阻分压测试,跑裸机和跑freertos时ADC的抖动也是不一样,搞不懂,难道我的配置有问题??
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-1-13 09:36:04 | 显示全部楼层
Freedom109079 发表于 2025-1-12 23:05
这三个电路抖动是有点不一样, 第三个是最好的。  但是使用了freertos系统后抖动都变大了。  今天我用了 ...


考虑换个别的RTOS试试,RTX,uCOS或者ThreadX对比下
回复

使用道具 举报

13

主题

68

回帖

107

积分

初级会员

积分
107
发表于 2025-1-13 15:06:11 | 显示全部楼层
中断优先级看看?
回复

使用道具 举报

3

主题

7

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2025-1-13 21:14:02 | 显示全部楼层
myNameIsLin 发表于 2025-1-13 15:06
中断优先级看看?

使用的时DMA方式的。  试过优先级都设置过0, 增加采样周期, 减慢系统的滴答时钟,
回复

使用道具 举报

85

主题

798

回帖

1053

积分

至尊会员

积分
1053
发表于 2025-1-13 21:48:50 | 显示全部楼层
加不加FreeRTOS肯定不会影响ADC,大概率是逻辑问题,建议看看ADC的采样点是不是不一样
回复

使用道具 举报

0

主题

131

回帖

131

积分

初级会员

积分
131
发表于 2025-1-15 01:58:50 | 显示全部楼层
从图中看到数据的所谓“波动”根本上就是MCU的“底躁”,这样说吧,同样是裸机,你换个轮询的方式甚至地址, 它都会影响到底躁,更别说改为rtos了,你可以试试用WFI功能代替轮询,如果说就是“底躁”引起的话,WFI时的“底躁”是最少的。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 02:49 , Processed in 0.049632 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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