你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32ADC过采样及几种ADC采样的处理方法

[复制链接]
flyingstar 发布时间:2025-3-5 10:12
对于STM32内部ADC采集时候,难免会受到外部干扰的,导致数据不稳定情况。一般在实际使用过程中,我们就需要对增加采样次数来提高分辨率的技术。而STM32cube MX 软件自带过采样的功能。下面就和大家介绍一下STM32如何使用软件配置过采样的功能,从而实现数据的稳定性。
( Y2 X' X. ?  d) o5 ^
2 j! N. x3 a. P5 V) f" F8 K0 U/ {9 T下面和大家具体分享一下软件配置步骤和注意事项:
+ \& {2 o. V* P: I) p一:过采样的基本知识分享:& f1 U# k7 Q  {2 |) D
  }* R0 R# e& m! F
1.1 基本的原理:使用STM32通过多次采取ADC的数据,并对结果进行取平均值处理,提高有效分辨率。每增加4倍的采样次数,分辨率可提高1位;我们在实际的使用过程中,可以根据自己的需求进行设置和更改。: v, i9 B& d! v
( Z; m/ T: U7 \
二:软件配置步骤" ]; Z6 e- L2 H9 W

9 K! ?4 u1 ~( I5 P! L' |3 H2.1 配置ADC; X# ^1 Z. }: x9 N# F

) ?( j! v1 t% G: U8 T2 C0 F选择ADC通道:确定要采样的模拟输入通道。
! Y* e# X, E; X8 y4 ^1 w. b( n' @; [, s) j. z& z. O
设置采样时间:根据信号特性调整采样时间。
# a7 m/ e9 Y. c5 S# n' N8 z  N' ]$ M; \5 V1 Y, t6 t' |
配置ADC分辨率:通常设置为12位。
8 O3 ]- D" L6 x0 R% i8 u/ e2 O: |, a/ q- V) d' J  {
2.2 配置过采样
! S$ f6 Z% h. T# R# Z1 d
/ A* A: B- T$ H2 }8 T3 h9 c" \设置过采样比率:例如16倍过采样。
) P; e( ?5 A7 a; |; I' i2 u  V4 H' }: ^+ [
设置右移位数:根据过采样比率调整,如16倍过采样需右移2位。
% o. j9 P* d% k* }% c5 m8 _3 t& Q& c* A. L! S' y- i
2.3 启动ADC, z1 Z# a: J) z

" \: m  g8 F1 a( k启动转换:ADC开始采样并存储结果。3 H  d' A/ _5 q" Y( y& V5 k
8 M( g1 M' n9 ^3 X7 C7 U, F
等待转换完成:通过轮询或中断方式检查转换状态。* g2 Y* N7 a# Y! M
2 k, d5 K6 ~) F# O' f
2.4 读取和处理数据
2 ~0 B6 H3 M7 L/ T3 H9 d" k( s; V0 _% Y( e, T
读取ADC数据:从数据寄存器获取采样值。
' ~/ X1 L/ z, b6 I
% |# I2 r+ A" t: h) M( D4 o计算平均值:对多次采样结果取平均,得到最终值。
: \* V1 X0 l+ M8 {
: S; E" r. G1 Y- [STM32 cube MX 软件配置如下:* f. T1 v( [5 o) A' Q+ ^+ @3 s
/ S0 i0 {5 v( H6 \' F
1739758927294651.png * Y5 }; o/ J5 l5 C

& S2 @/ h4 N1 t8 @: c5 @; p主要代码如下所示:
2 @+ w1 |4 ^5 }
6 T1 T2 E8 y# N8 r  ^/ l 微信图片_20250305101856.png
8 S& D, A+ E& C) C; n* k" u; v  K 微信图片_20250305101903.png % m" |1 r8 H. H5 }  m
                                                                                                                                                                                                         ADC 配置为在单转换模式下从 SW 触发器转换单通道。ADC 过采样功能与 3 个设置一起使用:
2 y, u9 s( \7 _- h
( Q, D% `" ]6 V7 j/ f2 F       第一步:启用 ADC 过采样:比率 16,位右移 4。
' a7 {1 s: m3 O7 b7 u$ i9 r) D; D: C7 e. }* p3 l. E/ m
       第二步:启用 ADC 过采样:比率 16,无位元右移。8 Z; Q8 \6 a& w

9 @; q% d7 b! x  Z/ ^5 _       第三步:禁用 ADC 过采样。
5 b3 @% j- p  s! }; E: A+ X, I/ Z" j: b$ U" }! T# L. I
       程序循环执行,上述步骤代码;
( k9 h7 s3 N# _8 W
& z* P" F# e8 M! p6 ]        示例执行:
+ F) A8 q$ m3 X8 ?3 e8 A7 E- c" L  C% w+ U8 h
        在主程序执行中,ADC 组使用 3 个过采样设置定期连续转换所选通道。
! [3 r. }; a7 ^4 c# \; S1 Y, z! {- t* b
        然后,对数据进行评估:
4 r9 t( F) R& y
$ i% o& ]% ^5 d, a$ S8 d+ j4 n         数据范围有效性检查
- K9 w% {. j* c' p0 J0 C5 W  E, v1 C6 |; K! I
        用户可以评估过采样的预期结果:启用过采样的 ADC 转换数据比禁用过采样的 ADC 转换数据的变化更小。
. l2 O% b6 l: k- g1 B2 F; {+ j' s! h: s. t5 j: V
        对 16 位的过采样转换数据进行软件计算,以获得相当于浮点分辨率 12 位的精确数据。+ G- }( i  [  f, X" e1 F2 E2 z

' \; b3 \, \" [2 N$ @7 E  p, O         程序仿真效果如下所示:# a$ `1 i* b5 T. m! }  o( e: b4 P
0 e6 u' K) B9 S0 F3 p% s
         1739760381181705.png 9 A1 a2 e+ H( \  f1 |% e

8 X4 ?( I9 |; I/ f7 N# D; X1 i) {                                                                                                                                                                                                           注意事项:8 z! X$ Q4 B' c, `
6 b. q  j2 v+ Q
         噪声水平:过采样适用于噪声较大的信号。
) O3 z: O! J, Q& J" D  m
3 \- S/ A( t6 X        采样时间:确保采样时间足够捕获信号。
2 o: }* M8 K" K: S0 B2 U3 o4 s# E2 z* [5 c& I" M. q; C1 k% e5 l. M
         时钟频率:ADC时钟频率需满足过采样要求。& L% u0 n2 r- e7 _  ^- ~# K3 ]

. {( @+ ?( Q1 L* Y) ]          项目总结:7 p1 h9 c8 A% t8 P+ ]) n
0 f- p& i. t  s
          STM32 ADC过采样通过增加采样次数提高分辨率,适用于需要高精度但硬件分辨率不足的场景。合理配置过采样比率和右移位数是关键。
8 S, `) q# M: z$ u( N1 A( w( v! r, [9 P0 \' k/ @3 n  R
         几种常用得滤波算法分享:- D! Q- g; e9 B& U4 e9 L3 v, B
" S$ X/ X3 k3 u/ }  p% L% U$ \; y
         1:一阶互补滤波算法:% u/ q% J: \. Z- V+ ]) D3 ?
( x3 ]. t5 ]* g( P& T: B
         取值:k = 0-1,本次取值滤波结果 =(1-K),本次采样值需要加上上次滤波得结果数据. Z$ G, H+ V/ Q! d+ K9 u2 g
  m' }: x5 S! J) w  _3 m
         代码如下所示:/ T7 l$ K) K$ U

' c. E* r+ I6 C          微信图片_20250305101911.png + w. X; v. h  j% o3 O
7 M. \# Y$ W. m8 P7 D* _
         从代码中,我们可以看到该种滤波算法还是有很大得弊端的,效果比较一般,对于高精度的场合不建议使用。3 J- i$ w- f, [0 N  o
' A/ S6 g9 v, @* b  N; ~& B& q
          2: 采用中值算法滤波
/ T: n. k  J7 i) d3 m5 c/ U$ C
# c7 P1 b" W" S) _          主要是程序在执行的时候,连续采集N次(需要注意下这里下,这里的N必须取值奇数),程序需要按大到小或者从小到达的顺序进行排序,然后取中间数值做为有效值。
8 C' Q- [4 s+ h8 A- d; d  [- J5 c& q
% T+ Y1 A2 _0 t          代码如下:- c: L' u' Y6 N
2 a2 d" n& s. u5 u
   微信图片_20250305101915.png $ G2 s" X" J0 G* B3 R/ k3 N, G' k0 `5 ^
; w0 b" ?- A) ]: Y: Q/ ~
5 S6 a: f0 T+ B3 X0 ~6 J
可以有效的去除数据因为外界干扰引起的数据的波动,对一些大滞后系统:比如温度、液位等变化缓慢的有良好的滤波效果,上述代码可以有效消除异常数据和平稳变化的采样值效果比较好;
9 d+ W; F, T+ Q: M5 w/ w5 l4 e4 I3 ]' }( H+ r# g+ r% {
        3:算术平均数滤波
4 d3 ^; Y1 f7 S" i. m: v0 n
5 ^% V) {" u2 i; Z9 D# @' P: Q        连续取值N个数据,对所有的数据进行取平均值;3 E% T8 u$ s9 \; Y. w7 F4 c$ ]2 T

$ n! k$ {( y1 N; n5 v  Z2 ?         代码如下:0 o! `( u* Y' ?2 Y) |9 N

4 n4 r  }  y" x! U. m) e  L5 E" r        
微信图片_20250305101920.png - ^. H4 }4 l: G: m4 q% ?% L- @" f
                                                                                                                                                                                                             这里取值时候,需要根据被控对象进行选择,N值取值过大,会导致响应过慢,数据的灵敏度过低,所以采用算术平均值滤波时候,需要我们格外的注意;4 e, f+ V  c8 f3 u' b. N  W' t
/ S1 }8 F2 m- F( @+ |
         4:滑动滤波算法* P- x  X! d8 d& R" k1 d' B

! ^% b7 i% R8 j          把连续取N个采样值看成一个队列,队列的长度固定为N。每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果;
6 ~( N) ?" ^4 B9 ]0 F+ w
微信图片_20250305101925.png
% c! ?8 [5 Z- r* e$ t                                                                                                                                                                                                            好了,几种常用的滤波算法,已经和大家分享完毕,欢迎大家相互讨论。
2 o, Q  r- a: i' o# ?
+ V+ @# J4 S  @% z/ t  u1 H2 B( u
赞 收藏 评论0 发布时间:2025-3-5 10:12

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版