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

【经验分享】STM32H7学习继续(STM32H7系列9) ADC

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数
$ r6 X9 k0 S) Y  ?STM32H743xx 系列有 3 个 ADC,都可以独立工作,9 d4 n* D3 T, G: j, {/ C
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。" N" ]: b# A* q1 t+ p0 L
STM32H743 的 ADC 分辨率高达 16 位,
; ~% X1 n/ n2 ~5 w0 K' g1 G每个 ADC 具有多达 20 个的采集通道,- z! s% c/ u* M1 M( J! r( u
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。
6 Y% D, x# X0 i9 [# V" bADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。
( B8 v8 ?, w% P' eSTM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。
3 K# {0 P  T8 J. F( H! C( h' s! Y% R" @8 c4 |
寄存器$ N; R4 N2 J* l( o# T( O
1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)- ^) ]  s8 S' Q) T6 Z, O2 q
用于设置 ADC 时钟的预分频系数; c, U% @( U7 W' J
由于 ADC 的输入时钟频率不能大于 36M
! u- D9 {4 H) u4 w. o6 a) a  H
; U8 p. J+ ^* v- X2.ADC 控制寄存器
0 U  ~8 k' [2 |' x) f( G% N) [: ~BOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,
; d% j% y' t7 l. M# F因此该位必须设置为 1。
& _1 Z% A) S4 P& G; AADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线
. |0 J6 L+ U" d% X3 N. L, E5 |2 `% f性校准。
' }' P4 n' F! q! @: ~4 NADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。0 U" w! r0 A$ k2 |: V/ E
ADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),3 d/ }1 q+ ]" a* d. j$ u6 B
设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发/ {6 [. O. N# a( k- K% c1 {
时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。8 e8 O2 ^, x! ^  T) N% ~
ADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校
* l" A- }. ~; t% Z0 H/ j准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即) t5 o- H6 N( j
可判断校准是否完成。
% V( a! e3 z$ e, x9 H7 p/ q* i- gADC 配置寄存器(ADCx_CFGR)& B7 `# J! V0 R$ q  V
RES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。
7 W. i" n- @  @) s+ Z8 O1 WEXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此
( M8 U3 n5 v0 O4 Y% l: O! A9 M8 Z& P设置 EXTEN[1:0]=00,即禁止外部触发即可。4 a) ?  g7 {/ Q: O
OVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据1 U% I0 h- M) _5 y
未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,
9 g! n) i. b  L( ?; R; N3 j/ M将会被新的结果覆盖。本章,我们设置该位为 1。% p. W$ d! j. c& v
CONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表  ~' Y* {4 x) w* q3 j* G3 r/ i% t
示连续转换模式。本章,我们设置该位为 0。
8 @$ I! H" N, V/ j: ]0 U4 r8 @% v9 r8 [& b3 P5 l* p
1.ADC 配置寄存器 2(ADCx_CFGR2)
& i, N$ o+ a& m. ZOSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本
) i- K+ @& ~+ m" K. f- @0 l7 k( ]章,我们不使用过采样,设置 OSR[9:0]=0 即可。
; u7 s, {: y9 B* OLSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右: b+ J7 V0 v+ F4 k* D
(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。
+ C5 N5 c1 t1 N# d
& X. s) \) f* i# \: Y8 Q8 c+ k2.ADC 规则序列寄存器 1(ADCx_SQR1)
+ e8 @, S" j9 }. b3.ADC 采样时间寄存器 2
8 z9 V; a% V2 n( A% ?
用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议
+ Z! Q3 m. w  a% ^2 N+ l尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以
3 V( }, |' h9 |+ @# U; m由以下公式计算:
0 I$ j8 s, t& Y) Y0 |: kTcovn=采样时间+7.5 个周期: B7 {" k& M' J7 t6 z* {
其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,
# b* j8 N6 ^( x当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周
6 x0 f2 o+ F/ w* b8 X期=0.5us。
5 ^# z% m  g, k! `) V
/ w* A% n9 F0 _0 v$ e% i+ p4.ADC 通道预选寄存器(ADCx_PCSEL). S1 V9 e1 |. u' s# u, r
该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。
. S9 B8 c$ k% L0 Y8 v举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC
" m/ n7 l  N. m, N; b功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM321 I" C5 N! p3 @/ f- m
芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。0 X4 n/ v9 W5 w9 ^) U3 O
" m7 K0 b. d! X  G2 s5 u
5.ADC 规则序列数据寄存器(ADCx_DR)5 {) U+ G# W( h5 ?( V' t
规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC; @# ]* B0 B- N4 j) M5 _" _
转换后的结果,3 K$ U' n# B( R' V; N, u: F, h. x
- b( B1 S& i8 z7 n
6.ADC 中断与状态寄存器(ADCx_ISR)# j$ J' s, C6 d2 t2 r! p  [
这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD) F3 A' Q3 F1 ?6 }
转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否% V( T7 o+ V7 ~# o' |# E, M
则等待转换完成。% ?7 g! C3 X* [* G

  q6 l" z0 U* `2 X  W步骤
* e( w$ h  B, b$ e+ R1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。
4 Q9 w, O0 H4 s$ W% I5 }2 h2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。
0 G% q2 f6 W: K- O" O% f+ N3)开启 AD 转换器。
6 i% @5 D% j$ e& |9 }4 `6 v4)配置通道,读取通道 ADC 值。" }/ C" e9 V! V3 H( I: p
5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。
+ q- d& ~& c0 N% m0 y
! `4 e/ {& L# T8 d- W* ~视频笔记
* x7 S0 A! t, _4 v# o" `分辨率: 电压等分,2的多少次方  T3 ]3 T/ i8 b/ E3 J6 E
虚短虚断[百度]
% J; W- ]6 w  ~- X+ r/ |2分频–就是频率除以22 N5 `- j$ `) h, k* X
注入通道无法连续转换
/ C" m8 d1 s: ~/ W单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换! S4 _. ^/ c- @/ y. y4 J
, {; b6 _" X& D8 r. b8 Q$ z
20200115142135189.png

0 Q, q9 ^4 n7 Z$ E" }2 u' a" Z5 Z+ Q3 V& P
EOC中断:转换完成启动中断
; ^* Y- N1 l( H9 X6 C* f
' h$ z3 \/ q9 j7 B3 {: ~程序编写步骤
+ @3 s* |6 H& ^  G# N' X$ G. z9 }HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译
0 X  t( m, r! a; |: C8 \1 h…8 T4 ^! R8 B# w3 V- [' t" E

1 ?8 E. Y; M. c6 Q0 D; y8 c
) s' x" k( E$ m0 W0 P6 b* d% K$ D& M& a( H. ?5 z- G0 e/ ?1 L% j
赞 收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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