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

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

[复制链接]
flyingstar 发布时间:2025-3-5 10:12
对于STM32内部ADC采集时候,难免会受到外部干扰的,导致数据不稳定情况。一般在实际使用过程中,我们就需要对增加采样次数来提高分辨率的技术。而STM32cube MX 软件自带过采样的功能。下面就和大家介绍一下STM32如何使用软件配置过采样的功能,从而实现数据的稳定性。" C$ {- i* h/ O8 Q9 h) ]

1 \9 S2 E& P1 s: r, T下面和大家具体分享一下软件配置步骤和注意事项:
' y$ `/ M  v7 c& W" E4 H一:过采样的基本知识分享:
; m6 n9 k3 E* c& W+ K! J+ \% Z( e; q
$ V* P; C5 L) e- ^8 G+ ^. y% z" Q1.1 基本的原理:使用STM32通过多次采取ADC的数据,并对结果进行取平均值处理,提高有效分辨率。每增加4倍的采样次数,分辨率可提高1位;我们在实际的使用过程中,可以根据自己的需求进行设置和更改。
) Z+ p. T  o) `; u& x0 O( i3 r5 f- f7 t. A! N( w9 G
二:软件配置步骤' p" H* @: m0 k+ t' n% Y

) \( }* i+ j' _$ z9 }2.1 配置ADC: h) a  o. X6 v+ }* t
2 e, u! w* u9 i. X, t' \( |" Y. A
选择ADC通道:确定要采样的模拟输入通道。
$ m0 [# J- U, V5 f5 C# Y' O
; ~3 s. o6 F7 B% y$ o, Z0 J! I8 A设置采样时间:根据信号特性调整采样时间。
, J1 @3 }" _1 k. r) W' o: x2 X# o7 O5 F0 o
配置ADC分辨率:通常设置为12位。
0 J! [: I3 Q4 g1 T
  f/ N' b  ?3 d' g: _& x% n2.2 配置过采样* ?) }4 v, C4 n

$ M* {0 j1 _, d设置过采样比率:例如16倍过采样。* a; j/ q- Q! \$ C/ G$ ~# ^$ ]  k
: `6 F8 }5 s) r/ X/ M" R: z
设置右移位数:根据过采样比率调整,如16倍过采样需右移2位。
6 G1 Z+ S" [8 n3 E) Q9 Y
% R0 M+ e1 o" x# B% y- D, S5 k/ n2.3 启动ADC# H: o: P) N4 k" z6 ]
' ~0 |" l8 d. J: B" z
启动转换:ADC开始采样并存储结果。
6 M2 q: s4 h2 ]# D* w( c0 P
& T, z  ~+ S( U* L% S- O等待转换完成:通过轮询或中断方式检查转换状态。
5 {6 t. W0 c- \. f( ^2 m1 F) q$ W4 O! M# F
2.4 读取和处理数据1 N$ H4 T/ ^4 A% D: L/ Q
. v& m6 [7 {' d7 P
读取ADC数据:从数据寄存器获取采样值。
- ^  A* [7 }9 u$ s
1 a5 {( L$ r2 I" v0 r. u4 ?计算平均值:对多次采样结果取平均,得到最终值。+ }  Z  h! r2 ^. n4 L! d) Y

* b$ z1 O% e# P  X6 u/ o, T: z2 U7 WSTM32 cube MX 软件配置如下:
  a' {2 {  p7 C* `, z
: b" h; ]+ O( p  N/ Y' ^  e 1739758927294651.png
( h; D. o7 }/ d2 Q1 U$ J) s! N# R3 I+ z  y9 V
主要代码如下所示:2 q& D$ v1 x3 I2 N

0 m6 ?1 U, y& K# g5 { 微信图片_20250305101856.png
( c( V% u/ c. B 微信图片_20250305101903.png
$ Q. P6 y; e: \: M# _                                                                                                                                                                                                         ADC 配置为在单转换模式下从 SW 触发器转换单通道。ADC 过采样功能与 3 个设置一起使用:  N9 H7 {: l% U$ _( ?
* n, h! z. y5 G  g9 ~
       第一步:启用 ADC 过采样:比率 16,位右移 4。
# H# e/ H) Z" i, }$ N3 E! e
8 ^: d4 G6 w  O" _: s' Y6 L       第二步:启用 ADC 过采样:比率 16,无位元右移。) l7 @0 |# O" O
+ r& G# W8 ]* |6 r( D& M9 b& h* Q4 B# a
       第三步:禁用 ADC 过采样。
& O1 q' a3 p' t3 q5 D: r8 @6 T; N: s$ A  U4 I+ l( e
       程序循环执行,上述步骤代码;1 h2 W8 ~3 o, P+ h: l" h
& v2 u/ u" w5 u9 D& y* b
        示例执行:
" Z8 l' {  d4 o) j' @7 L! H+ t% @/ c) A: L" s* H. m* ]
        在主程序执行中,ADC 组使用 3 个过采样设置定期连续转换所选通道。. O3 Q% U* e5 l0 s  s2 |

; V" w9 d  |3 x% G7 b$ W7 I# Z        然后,对数据进行评估:
$ z  C  Q6 A' h) y' L) H; A
8 c- C( _# ~" l- M& @         数据范围有效性检查- S$ Z9 R6 M! j3 F) m

( ^8 J# i( `, p$ x" m! a        用户可以评估过采样的预期结果:启用过采样的 ADC 转换数据比禁用过采样的 ADC 转换数据的变化更小。/ z) _: G) r/ x% w5 |8 z1 q% j
# a! _( n! j! E7 N
        对 16 位的过采样转换数据进行软件计算,以获得相当于浮点分辨率 12 位的精确数据。
. M5 F+ y; x6 x( f) _
9 u/ R1 E& W: I* K. t         程序仿真效果如下所示:
6 T8 O$ p0 `6 O8 d  D: c8 n
$ s. N. l" s4 o8 \: u! O8 W; }         1739760381181705.png
7 J% s" B) n8 m8 E6 Y& Y) o) l
1 b0 `8 V2 K( \% D                                                                                                                                                                                                           注意事项:
$ X: K4 g  D; R6 I6 V4 M3 ~; V' |2 p
         噪声水平:过采样适用于噪声较大的信号。( G. D. U% L; E+ ^8 O  t+ y+ A3 O
) w" Z- N3 b' _
        采样时间:确保采样时间足够捕获信号。
9 C# s. U2 ^9 p  I
5 {, |( c: P/ Q$ m& @         时钟频率:ADC时钟频率需满足过采样要求。: M1 Q) {* b# q- g' T8 b; B0 S5 X

; u0 J: C% e/ ?- b+ k6 C- G          项目总结:: l7 W6 i" m9 M1 z: b7 t( @( g
* `5 T6 Y/ d) ]% N  F: g  }
          STM32 ADC过采样通过增加采样次数提高分辨率,适用于需要高精度但硬件分辨率不足的场景。合理配置过采样比率和右移位数是关键。
- F4 Y4 M1 ^$ G' V, Z  u0 y, A: c! V
6 n3 N+ Z4 z, j8 _% T  M         几种常用得滤波算法分享:
; G) ]: f8 d9 S2 H% y# T9 F/ n+ u/ s) ?+ G. J8 n0 a) e9 J* s! |
         1:一阶互补滤波算法:& x% n" C9 `  r

5 h. O) f3 _% k+ P  y/ L6 i         取值:k = 0-1,本次取值滤波结果 =(1-K),本次采样值需要加上上次滤波得结果数据5 b* E/ s" t, q/ [3 Q8 G" |# Y8 e

- r2 Z$ G! P6 J; }6 W2 x1 T. n1 G  E         代码如下所示:
" R5 e, c! V" V/ J  F& V8 G8 w; W# G0 v5 r2 [! E
          微信图片_20250305101911.png
! l3 w* M. d  T$ G5 q" N% O5 b
2 P. v6 \$ I/ ?$ ?         从代码中,我们可以看到该种滤波算法还是有很大得弊端的,效果比较一般,对于高精度的场合不建议使用。. N/ U* }$ g7 @* b4 e
* @* W$ A( N! n0 R
          2: 采用中值算法滤波
: I7 k- r7 U( q: ^8 c8 B
* T3 G- Z- n! ?- L2 o, @8 ]$ X% N          主要是程序在执行的时候,连续采集N次(需要注意下这里下,这里的N必须取值奇数),程序需要按大到小或者从小到达的顺序进行排序,然后取中间数值做为有效值。( m9 I/ ~9 n# p$ H/ g. n  A

6 `% b- ^/ Y. Y+ {( ]          代码如下:
: d1 l, M9 |" ?1 L8 n, t$ O7 d+ Y( D
, ^( D4 ]$ J/ i7 o2 i   微信图片_20250305101915.png 4 E$ u; O# @# X  w

' Z9 ?5 ?. Z/ U: F4 E! ^  Z3 z- u  @9 U/ X0 f$ ~/ S% L4 A9 M
可以有效的去除数据因为外界干扰引起的数据的波动,对一些大滞后系统:比如温度、液位等变化缓慢的有良好的滤波效果,上述代码可以有效消除异常数据和平稳变化的采样值效果比较好;4 C  K7 |: M/ b! L" Z5 D
$ U- |8 _4 `' M4 S# O+ n
        3:算术平均数滤波
  h% M( h& v9 d5 S; O/ }! w
  ?0 Q) n8 y) t5 x        连续取值N个数据,对所有的数据进行取平均值;7 R. `4 T* x( N& V) x# s3 T1 h
1 Y: l7 c% U3 z9 R9 ^6 Q6 D/ |
         代码如下:$ s; C3 A0 W/ s$ J

' \) v; H$ \# H5 E3 w( x6 X        
微信图片_20250305101920.png 8 R5 v& d/ I1 F
                                                                                                                                                                                                             这里取值时候,需要根据被控对象进行选择,N值取值过大,会导致响应过慢,数据的灵敏度过低,所以采用算术平均值滤波时候,需要我们格外的注意;, v5 @/ B. q: g$ ]/ I

8 K0 v( ], Y( m& }; N- e9 V  B1 d( |& e         4:滑动滤波算法# a: x7 W4 J/ I  @
% f3 j: }1 \( S) G( W. S: c
          把连续取N个采样值看成一个队列,队列的长度固定为N。每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果;3 n* u' t) l7 \! [+ y
微信图片_20250305101925.png
  C) Q5 [5 c  Z! ~0 l( b                                                                                                                                                                                                            好了,几种常用的滤波算法,已经和大家分享完毕,欢迎大家相互讨论。+ P9 ?2 V& u( a3 T" D4 u# k
, ~# }$ i, I2 D
收藏 评论0 发布时间:2025-3-5 10:12

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版