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

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

[复制链接]
flyingstar 发布时间:2025-3-5 10:12
对于STM32内部ADC采集时候,难免会受到外部干扰的,导致数据不稳定情况。一般在实际使用过程中,我们就需要对增加采样次数来提高分辨率的技术。而STM32cube MX 软件自带过采样的功能。下面就和大家介绍一下STM32如何使用软件配置过采样的功能,从而实现数据的稳定性。
% F+ x  k* q4 f! ~4 P1 I4 v, A
2 p( z6 i/ v. k6 Z' P下面和大家具体分享一下软件配置步骤和注意事项:1 F; y- R; l( i- @. }
一:过采样的基本知识分享:
0 |  Q) \# D( W" Z. ?. b$ u$ U6 Z$ Q$ @$ k
1.1 基本的原理:使用STM32通过多次采取ADC的数据,并对结果进行取平均值处理,提高有效分辨率。每增加4倍的采样次数,分辨率可提高1位;我们在实际的使用过程中,可以根据自己的需求进行设置和更改。
9 o. {) T% H5 N6 y5 j' b& q( b+ U  Y, `9 z2 c
二:软件配置步骤
0 A8 O) _& z; a( H/ t8 b% l8 y
' I  a, q- A* D6 v5 I( z2.1 配置ADC
; B' L  N& ]2 v. [. G7 ]0 P' ]3 h; }7 g% s
选择ADC通道:确定要采样的模拟输入通道。
/ t, \% {* O8 W) t$ J& i; W
2 {7 ?7 I1 e- h6 j8 D* q设置采样时间:根据信号特性调整采样时间。5 U5 H+ d' m9 G

$ {8 ^7 K& J* q: ?配置ADC分辨率:通常设置为12位。
3 I/ W( n) I4 L5 ?+ d; [4 l6 D; [% z& e
2.2 配置过采样
8 d, ~0 f2 ^  q0 @6 H' H! P1 _; j# g+ z
设置过采样比率:例如16倍过采样。+ Y5 j4 l# i+ L) B6 }, G

; ~3 V+ t' ^$ F* E6 y- p设置右移位数:根据过采样比率调整,如16倍过采样需右移2位。0 t5 G' m" u# H3 O

% [' i, C3 `9 w6 \' f2.3 启动ADC& Y2 a$ S# ?0 }( j" P5 k

( l) p6 A& B- m, d* J. x2 u7 ]3 \6 o启动转换:ADC开始采样并存储结果。& q2 b  E5 M) {# g- k
- M, ~# x1 C" A1 N1 N
等待转换完成:通过轮询或中断方式检查转换状态。" n* ]4 y4 I6 H3 a) G

' B# k. L! F) J2 S2.4 读取和处理数据: x, L& c, |! R' U) q+ f
8 x/ O- N% @+ B
读取ADC数据:从数据寄存器获取采样值。
+ Q0 v& x" W' S. o+ I
) A7 D" Q. k0 p- Y$ t5 L计算平均值:对多次采样结果取平均,得到最终值。. |( Y* q# z* V

! r% x6 t- ]- MSTM32 cube MX 软件配置如下:' M$ ?- M3 Q' x8 t3 f! I

, c$ v1 O$ F$ y: r 1739758927294651.png * Q$ }" c8 s4 b  ]5 l8 B2 H0 _2 l
( t0 P4 L  h, |
主要代码如下所示:9 v' ^" m- O' `/ ]0 w1 {( ?
8 N( n6 @+ Z0 l3 ~, d
微信图片_20250305101856.png ! Q1 [; y7 h) ?# n$ M! }5 D- r3 G9 m+ p
微信图片_20250305101903.png
) R- U7 F& y% ?+ I3 m! t                                                                                                                                                                                                         ADC 配置为在单转换模式下从 SW 触发器转换单通道。ADC 过采样功能与 3 个设置一起使用:
* T, k7 X8 f" I' U9 z1 H
3 O8 m1 j& W/ v5 H) [) s' f       第一步:启用 ADC 过采样:比率 16,位右移 4。
; s9 V( W8 T! J! b9 }1 J; H7 S" X3 G. J
       第二步:启用 ADC 过采样:比率 16,无位元右移。9 m6 E/ A% }, ?
: q6 x8 D; c4 d8 ^, b
       第三步:禁用 ADC 过采样。
: C# k4 l! y$ D# m. Z+ H3 f! h7 f" ]6 \7 `
       程序循环执行,上述步骤代码;
2 K& C0 f9 S0 g/ A7 G/ ^# s% |* e' a
        示例执行:
7 E/ f2 F! ?0 n& J, L( I- X
2 ]* d  y/ u! }7 g        在主程序执行中,ADC 组使用 3 个过采样设置定期连续转换所选通道。4 Y* ?. A# H4 r/ M
+ q- N1 n7 I+ \5 P; I5 ~
        然后,对数据进行评估:
* X9 y  K; L7 N1 K) g$ x* t
' K) S0 Q7 v" x" B( W$ Q9 U' K9 \         数据范围有效性检查1 A% x2 x0 T) q$ `7 t) {
0 J' E8 Y- v$ w2 C
        用户可以评估过采样的预期结果:启用过采样的 ADC 转换数据比禁用过采样的 ADC 转换数据的变化更小。
) T" x7 E) O* ^" A3 p# l) ~- R3 L  Z
' z/ q- w- ?% c) U/ d# \* I% N        对 16 位的过采样转换数据进行软件计算,以获得相当于浮点分辨率 12 位的精确数据。* Y, _1 k0 a: F+ r# W6 [& y6 `
4 u, p, a; X* D$ X$ H
         程序仿真效果如下所示:
8 a9 w7 f! g4 v& f
* U& H& f0 l& h7 D$ H0 [7 L5 J         1739760381181705.png
" |' K1 L, g. v- F1 \
) |9 S) _2 t) H6 u; M* g$ ?                                                                                                                                                                                                           注意事项:
. I. o: O" o9 a7 u& j* L
  g1 [; e2 i( E3 F9 I/ k         噪声水平:过采样适用于噪声较大的信号。
) f: d0 i; O2 f: l* X4 Y5 Q) T1 {& ~+ \2 D: I
        采样时间:确保采样时间足够捕获信号。
% L6 B1 d, H- x* J/ ]" c1 r6 g
3 H5 f. N4 }, \6 R9 {& Q         时钟频率:ADC时钟频率需满足过采样要求。
. E' N  G2 C( D2 u+ u
# v) }; U9 }; H' T: t% g          项目总结:7 V: n  j4 o$ s7 g$ s
; Q9 `5 W- I; P9 x8 }  l. y
          STM32 ADC过采样通过增加采样次数提高分辨率,适用于需要高精度但硬件分辨率不足的场景。合理配置过采样比率和右移位数是关键。
% \! \+ Y) Z8 ~5 n; _
* h8 k, M) V! j2 e         几种常用得滤波算法分享:
8 r' h3 }2 p8 V1 |3 A; u+ m1 s( {+ D+ r8 Y0 e$ q4 i7 {
         1:一阶互补滤波算法:
3 X4 o6 U3 C" V% U2 g8 V3 a# b0 @# P6 Y
         取值:k = 0-1,本次取值滤波结果 =(1-K),本次采样值需要加上上次滤波得结果数据1 X/ n* j+ k8 `3 l7 @

3 f  J: g: k8 W) V+ _         代码如下所示:2 F! h, {) i. q8 f

0 s# [& M' G$ ^" |0 A0 G          微信图片_20250305101911.png 0 T* n' b6 e0 C/ C4 b

* j7 A- E- v& B. G# _         从代码中,我们可以看到该种滤波算法还是有很大得弊端的,效果比较一般,对于高精度的场合不建议使用。
& P" M' X2 x6 ~, }+ Z6 `$ R
7 W9 Y, p3 e. L          2: 采用中值算法滤波( p8 g- Y5 @8 E0 {, s
  x6 k6 [* u% [3 v0 h1 w
          主要是程序在执行的时候,连续采集N次(需要注意下这里下,这里的N必须取值奇数),程序需要按大到小或者从小到达的顺序进行排序,然后取中间数值做为有效值。8 U; f% o3 |0 L3 h# M
8 o; d, A2 e% m- H8 {
          代码如下:
) e8 _# t% i. v5 R1 h. f: h, a( d) p2 U2 D# i, H+ @, [+ [. u
   微信图片_20250305101915.png
0 m# g4 n& T2 w5 [- o, o, x
! |, B( K# N1 ?& @$ H
) |* I$ I; }+ \# ?  A可以有效的去除数据因为外界干扰引起的数据的波动,对一些大滞后系统:比如温度、液位等变化缓慢的有良好的滤波效果,上述代码可以有效消除异常数据和平稳变化的采样值效果比较好;
$ q4 J& S  G& d4 Q( k* g; x4 P5 N/ j9 u
        3:算术平均数滤波3 J: l) S, l; b' R) X, J
: D( z* y& V) `# Z3 D. n4 H( n
        连续取值N个数据,对所有的数据进行取平均值;
/ @" k2 v, B7 i
' T3 \' b# q3 g6 M         代码如下:# y9 `/ B  Q9 A  X

2 S3 N9 D2 M7 f6 s4 f        
微信图片_20250305101920.png 7 j4 ?, W+ M) n' d5 y
                                                                                                                                                                                                             这里取值时候,需要根据被控对象进行选择,N值取值过大,会导致响应过慢,数据的灵敏度过低,所以采用算术平均值滤波时候,需要我们格外的注意;
& U% W' X: }1 D/ ]" n/ ^0 f4 n6 H1 \- x( i
         4:滑动滤波算法
' q) K: u! @' {  U) _
2 T( a$ z( A3 h1 Z( \" W5 J          把连续取N个采样值看成一个队列,队列的长度固定为N。每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果;' `; I  i# d2 u/ {' k) j
微信图片_20250305101925.png 2 M+ }8 O+ Y. O4 _( B$ x0 X8 k
                                                                                                                                                                                                            好了,几种常用的滤波算法,已经和大家分享完毕,欢迎大家相互讨论。2 U, h& b9 K5 n) D$ ?# I
$ ]2 k' ?0 \5 V0 J! k4 b
收藏 评论0 发布时间:2025-3-5 10:12

举报

0个回答

所属标签

相似分享

官网相关资源

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