stm32f407 ADC多通道DMA方式误差大

[复制链接]
3150|17
 楼主| DHZFSYJ 发表于 2020-7-6 16:57 | 显示全部楼层 |阅读模式
stm32F407分别采集3个通道,通道1采集3v电压,通道2为内部温度,通道3为Vrefint。三个通道都做了20次平均,但是误差还是很大,是什么原因呢,请大神指点一二。

评论

你的采样频率多大,多长时间触发一次?我现在也用F407,ADC1采集8路,ADC2采集8路,定时器100KHz去触发采样,DMA传输,没有这么大误差。我只测试了一个通道,采集3.3v的供电,理论是4095,实际也只有个位数摆动。  发表于 2020-7-9 10:33
 楼主| DHZFSYJ 发表于 2020-7-6 17:01 | 显示全部楼层
[img][/img]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| DHZFSYJ 发表于 2020-7-7 09:05 | 显示全部楼层
ADC1_CH5:采集的是3v电压(通过万用表测量的)
ADC1_TEM:通过内置温度采集芯片温度,应该率高于环境温度
ADC1_BAT:采集内置Vrefint,典型值为1.21V
每个通道都进行了50次平均,实际测试结果如下图,误差很大是什么原因呢?
[img]

[/img]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| DHZFSYJ 发表于 2020-7-7 15:08 | 显示全部楼层
使用ADC轮询的方式,不使用连续采集,精度较高
[img]

[/img]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
m564522634 发表于 2020-7-7 16:39 | 显示全部楼层
DMA 只不过是一个传输的问题,还影响不到你的精度
 楼主| DHZFSYJ 发表于 2020-7-8 09:57 | 显示全部楼层
本帖最后由 DHZFSYJ 于 2020-7-8 09:59 编辑

使用单通道ADC DMA采集3v电压,50次平均之后约为2.7v,没有找到测量不准确的原因。配置界面如下图:
[img]


[/img]
  1. /*
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]  The application entry point.
  3.   * @retval int
  4.   */
  5. int main(void)
  6. {
  7.   /* USER CODE BEGIN 1 */

  8.   /* USER CODE END 1 */
  9.   

  10.   /* MCU Configuration--------------------------------------------------------*/

  11.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  12.   HAL_Init();

  13.   /* USER CODE BEGIN Init */

  14.   /* USER CODE END Init */

  15.   /* Configure the system clock */
  16.   SystemClock_Config();

  17.   /* USER CODE BEGIN SysInit */

  18.   /* USER CODE END SysInit */

  19.   /* Initialize all configured peripherals */
  20.   MX_GPIO_Init();
  21.   MX_DMA_Init();
  22.   MX_ADC1_Init();
  23.   MX_USART1_UART_Init();
  24.   /* USER CODE BEGIN 2 */
  25.   HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue, 50);
  26.   /* USER CODE END 2 */

  27.   /* Infinite loop */
  28.   /* USER CODE BEGIN WHILE */
  29.   while (1)
  30.   {
  31.     /* USER CODE END WHILE */

  32.     /* USER CODE BEGIN 3 */
  33.                
  34.                 if( adc_dma_ok ==1 )
  35.                 {
  36.                         adc_dma_ok = 0;        
  37.                         ADC_Value = 0;
  38.                         for(i = 0; i < 50; i++)
  39.                         {
  40.                                 ADC_Value += ADC_ConvertedValue;
  41.                         }
  42.                         ADC_Value = ADC_Value / 50;
  43.                         ADC_Volt = ADC_Value * 3.3f / 4096;
  44.                         //printf("ADC Value %d\r\n",ADC_Value);
  45.                         printf("vol %f\r\n", ADC_Volt);
  46.                         printf("------------------------\r\n");
  47.                         HAL_Delay(5000);
  48.                         HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue, 50);
  49.                 }
  50.         }
  51.   /* USER CODE END 3 */
  52. }


中断回调函数
  1. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
  2. {
  3.   HAL_ADC_Stop(&hadc1);
  4.         adc_dma_ok = 1;
  5.         i++;
  6. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| DHZFSYJ 发表于 2020-7-8 10:04 | 显示全部楼层
测试结果如下:只有第一次的测量结果3679,非常接近3.0v,其余的采样结果均为2.7v左右,所以平均后的结果为2.7v左右。找了两天没有找到原因,希望有经验的前辈点拨下思路
[img]

[/img]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
zyj9490 发表于 2020-7-8 11:55 | 显示全部楼层
取样时间拉长,通道间的串扰吧。
steelen 发表于 2020-7-8 17:51 | 显示全部楼层
开关电容式的ADC,注意输入阻抗
shcnxjy 发表于 2020-7-8 17:58 | 显示全部楼层
从7楼数据看,有递减趋势,符合输入阻抗不匹配导致ADC采样建立时间不足带来影响的规律
shcnxjy 发表于 2020-7-8 17:59 | 显示全部楼层
可以参考一下这个文档

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
XZL 发表于 2020-7-9 11:58 | 显示全部楼层
ADC的输入阻抗比较小,通过模拟开关切换时,输入电压会被拉低,导致采样结果偏低。
 楼主| DHZFSYJ 发表于 2020-7-9 16:41 | 显示全部楼层
shcnxjy 发表于 2020-7-8 17:58
从7楼数据看,有递减趋势,符合输入阻抗不匹配导致ADC采样建立时间不足带来影响的规律 ...

谢谢前辈~
 楼主| DHZFSYJ 发表于 2020-7-9 16:41 | 显示全部楼层
XZL 发表于 2020-7-9 11:58
ADC的输入阻抗比较小,通过模拟开关切换时,输入电压会被拉低,导致采样结果偏低。 ...

谢谢前辈~
 楼主| DHZFSYJ 发表于 2020-7-9 16:44 | 显示全部楼层
谢谢前辈们,这方面的问题之前都没有关注到。
suifengkm 发表于 2020-10-12 09:21 | 显示全部楼层
遇到同样问题。。单次转换采集上万次以上统计。。ADC值抖动不超过2.。。。。。一旦开启DMA基本上抖动在0-20之间。。。。
sjh00213 发表于 2020-10-12 16:20 | 显示全部楼层
F407的片子以前也遇到过DMA读取AD不准,后来改用ADC查询读取。103系列的没有这个问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

56

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部