关于STM32G431的过采样ADC电压表【例程分享】
; t5 y! z. Y( }: H1 G4 U( V% U STM32G4是一款ST最新推出的Cortex-M4的低功耗ARM 处理器。它的一个亮点是可运行过采样技术使得ADC达到16位转换精度。
& m7 A- e: {7 Z/ d 过采样单元执行数据预处理能够处理多个ADC转换,并将它们的平均数据宽度增加到最大16位的数据。
4 n% }. m$ @& R( \% a; }; X! g% X m0 @. w5 r
& Z8 {2 _+ r: }: o5 C 过采样率N和除法系数M可以调整。 硬件实现以下功能:平均、数据速率降低、信噪比提高、基本滤波。
: t4 \" v. T) Q4 S+ X4 n) l x N使用ADC CFGR2寄存器中的OVFS[2:0]位定义的,其范围可以从2x到256x。& ?5 L1 X9 N; S, ?* b
M由高达8bit的右移位组成,并使用ADCCFGR2寄存器中的OVSS[3:0]位定义。
8 `+ k% X3 Z$ n- F0 `$ E 求和单元可以产生高达20位(256x12位结果)的结果,该结果首先右移,然后将其截断为16个最低有效位,使用移位留下的最低有效位四舍五入到最近的值,最后再被传输到ADC-DR数据寄存器。
% O4 }- J! J& U. X2 M8 r+ H- i% P7 c1 |2 B% Q
硬件:开发板使用STM32G431Nucleo,利用空余IO口外接了1片OLED显示屏,PA0外接1电位器输入AVDD的分压值,见图1
( y# i9 X, H% O9 f
( H/ L3 \# F6 E1 S6 q9 k
; @7 o8 f: H; j$ [8 V0 r# T
图1$ I' ]7 U" t6 r, q
软件:
6 @# Y2 V, H4 a' E: z在CubeMX中建立一个工程,配置过采样率N=128、除法系数M=3;1 ?3 h8 y4 }0 [( G
4 ?' h% _- ~) J! m. c Y
3 L& J. O- d/ t/ T0 _
$ l+ _' J! P b' K; K
图2 $ h$ `( p- R: s/ ^- g: ~
5 N* h3 H5 N! E" K% t; @
6 ~/ E0 N/ Q' J! `& u. B6 Y. k0 E+ r7 b过采样ADC配置部分代码: . H1 B: G; w6 t) z0 r, S$ U- t
- hadc1.Init.OversamplingMode = ENABLE;
5 n- U- R9 P( ?: k - hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_128;5 f& O9 E1 I( ]( F" y; w3 D
- hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_3;
! ? i& F9 U+ _& G) {7 ` - hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;: d2 ]$ l! J" N9 a+ Z2 F
- hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
t P+ h+ i- o8 c( l: x* [$ B
( O* k; S+ W: ]8 h. t; p
复制代码 . D. N, x [% G6 z3 `7 C% e5 ?5 Y: g
" ^9 j, |6 u* O. n' w
& }* R" L9 t: N" n# W' I7 C- s 运行结果:16位过采样ADC转换结果非常稳定,转换后未经任何软件滤波处理,显示的读数只在最后1位偶尔跳动1个数字。 4 x1 t1 N' V/ F ` p
$ {6 C' k1 e+ Q& M* |# k
|