打印
[应用相关]

stm32 adc 测量偏差的简单解决方案 hal库

[复制链接]
525|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
t60yz|  楼主 | 2022-4-30 20:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近用stm32 去检测电压发现会偏差70mv左右,而且上下波动20mv左右
于是找到了一些解决方法
1.最重要的一步
在初始化adc之后,进行校准
 MX_ADC1_Init();
HAL_Delay(200);
HAL_ADCEx_Calibration_Start(&hadc1);




使用特权

评论回复
沙发
t60yz|  楼主 | 2022-4-30 20:05 | 只看该作者
关于延时本人经测试,并没有太大差别,但又帖子说明,可以减小误差,自行测试。

使用特权

评论回复
板凳
t60yz|  楼主 | 2022-4-30 20:05 | 只看该作者
2.延长采样时间
(1)在配置中修改

使用特权

评论回复
地板
t60yz|  楼主 | 2022-4-30 20:06 | 只看该作者
(2)在代码中修改
找到下面代码中simplingtime,右键查找ADC_SAMPLETIME_71CYCLES_5的定义,选择你所需要的周期

使用特权

评论回复
5
t60yz|  楼主 | 2022-4-30 20:09 | 只看该作者
//void MX_ADC1_Init(void)
//{
//  ADC_ChannelConfTypeDef sConfig = {0};

    /** Common config
    */
  //  hadc1.Instance = ADC1;
  //  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  //  hadc1.Init.ContinuousConvMode = DISABLE;
  //  hadc1.Init.DiscontinuousConvMode = DISABLE;
  //  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  //  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  //  hadc1.Init.NbrOfConversion = 1;
  //  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  //  {
//       Error_Handler();
    }
    /** Configure Regular Channel
    */
  //  sConfig.Channel = ADC_CHANNEL_0;
  //  sConfig.Rank = ADC_REGULAR_RANK_1;
    sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
  //  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  //  {
  //      Error_Handler();
//   }

//}

使用特权

评论回复
6
t60yz|  楼主 | 2022-4-30 20:11 | 只看该作者
计算公式:
采样时间=(12.5+采样周期)/时钟频率

使用特权

评论回复
7
t60yz|  楼主 | 2022-4-30 20:12 | 只看该作者
3.进行软件滤波
这里采样最简单的方法
因为我测得数据中发现是围绕着目标值上下波动,且周期性出现尖峰,
直接采样多次测量,取平均值得方法。

 for(i=0; i<max; i++ )
        {   HAL_ADC_Start(&hadc1);
            while(HAL_OK==HAL_ADC_PollForConversion(&hadc1,10))
            {
                HAL_ADC_Stop(&hadc1);
                sum+=HAL_ADC_GetValue(&hadc1);
            }
        }

        adc_Value=sum/max;
        sum=0;
        adc_Value=adc_Value*3300/4096;//采集到的out电压  mv

使用特权

评论回复
8
t60yz|  楼主 | 2022-4-30 20:14 | 只看该作者
10种软件滤波得方法

4.其他原因导致的测量偏差
最主要的就是没有共地,或者多地。
测试中,实用的stm32f103rc8t6最小系统板,因为采样了usb转ttl模块供电,同时使用了,usb线,接在排插上供电,多地,导致测量数据大幅偏差。

使用特权

评论回复
9
littlelida| | 2022-5-1 17:32 | 只看该作者
确实adc校准在有些时候很重要

使用特权

评论回复
10
Bblythe| | 2022-10-7 08:06 | 只看该作者

根据色彩的变化记录每一行的颜色跳变点,由此识别出车牌区域。

使用特权

评论回复
11
Pulitzer| | 2022-10-7 11:05 | 只看该作者

计算量小,计算快。缺点也严重:在不同的图像中,颜色分布差别大,处理效果也不会很好。

使用特权

评论回复
12
Uriah| | 2022-10-7 18:06 | 只看该作者

图像由前景和背景组成,在灰度直方图上,前景和背景会形成高峰,在双峰之间的最低谷处就是阈值。

使用特权

评论回复
13
帛灿灿| | 2023-6-1 07:03 | 只看该作者

在实际的项目应用当中,单片机引脚的复用相当厉害

使用特权

评论回复
14
Bblythe| | 2023-6-1 08:06 | 只看该作者

但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。

使用特权

评论回复
15
童雨竹| | 2023-6-1 10:02 | 只看该作者

时间片轮的设计思想

使用特权

评论回复
16
Pulitzer| | 2023-6-1 11:05 | 只看该作者

事实上很多做项目的工程师本身自己也会在用

使用特权

评论回复
17
公羊子丹| | 2023-6-1 12:08 | 只看该作者

结构化模块化的程序设计的思想,使最基本的要求

使用特权

评论回复
18
公羊子丹| | 2023-6-1 13:01 | 只看该作者

需要在做项目的过程中经历磨难

使用特权

评论回复
19
Wordsworth| | 2023-6-1 14:04 | 只看该作者

硬件设计和软件设计本来就是鱼和熊掌的关系,两者不可兼得

使用特权

评论回复
20
Clyde011| | 2023-6-1 15:07 | 只看该作者

写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的

使用特权

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

本版积分规则

180

主题

1019

帖子

0

粉丝