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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数; s1 g) m* n% s& q. j+ v
STM32H743xx 系列有 3 个 ADC,都可以独立工作,# I% T- k2 k; f) F, p( g
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。; A6 t: ]) ^/ x. U8 X
STM32H743 的 ADC 分辨率高达 16 位,
1 k& _0 s) O3 f每个 ADC 具有多达 20 个的采集通道,' J& a( W0 T' w) A3 a
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。
7 N- l6 z) W. n' J. QADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。
& C! \9 V1 p0 G# R/ OSTM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。
+ t% s% V  Y* g4 p; X% c% f
2 i1 k5 K  B: e寄存器
. l0 p$ _; y0 Q1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)9 _* ^7 V8 {+ E' D
用于设置 ADC 时钟的预分频系数# U) v% S0 R6 X& m
由于 ADC 的输入时钟频率不能大于 36M# e4 x$ B1 M. J; n2 b2 l3 k
% }7 e: P- s; K9 X$ j
2.ADC 控制寄存器
6 y0 f* r: V: |1 z& Z; F# Z) fBOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,/ Q8 h* ]7 d4 X9 a7 J4 m
因此该位必须设置为 1。+ Y$ ]7 `; G/ l+ ~& O, U
ADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线
: o' o$ H8 ?& N7 a! @) }9 `( a5 G3 e性校准。
# Q) [& N; p4 U8 `+ tADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。7 d! K6 _0 P; L$ i! m0 X7 B+ o7 r
ADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),
+ \* z, f+ R+ r设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发3 @5 S+ G6 }& V3 m8 i& b. J
时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。
9 J# A5 @3 E$ Z( I- u8 z7 LADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校) q/ \1 u4 V" l4 w% T
准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即7 m! G. m7 J/ G6 \
可判断校准是否完成。; P% w( Q1 G0 g. I" B1 p! P& g7 Y
ADC 配置寄存器(ADCx_CFGR)
; D( f  ]( @+ A2 ]0 uRES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。7 R% i6 V5 U6 ~2 m/ q! H3 W
EXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此. G' b- ~7 V  ]- E: K9 z2 e
设置 EXTEN[1:0]=00,即禁止外部触发即可。& ^" r. y6 L# E7 t8 [
OVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据
+ l" a0 B3 K6 m- z- H4 ?未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,
* ?) j; A; j% N" x) @( x将会被新的结果覆盖。本章,我们设置该位为 1。3 t) X' v9 S; _$ L3 }8 w
CONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表; h! D$ s! K3 D# t5 {7 w
示连续转换模式。本章,我们设置该位为 0。/ \* Y" c1 Z. L
2 o) d. [0 Q8 `7 Z2 N
1.ADC 配置寄存器 2(ADCx_CFGR2)
% h4 v- j9 V2 wOSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本
5 P4 Z3 f2 C2 j3 }( f" X4 M* ~章,我们不使用过采样,设置 OSR[9:0]=0 即可。9 U& m* }0 I5 Y3 f
LSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右" u, f4 Z6 k) J  S
(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。) Q) l: e( Y* i* W/ T

3 G& Z4 m5 `* T1 e5 j& {2.ADC 规则序列寄存器 1(ADCx_SQR1)# Q% f7 U$ X" i, Q0 _4 T. Q
3.ADC 采样时间寄存器 2

/ [4 Y3 K) e* B& Q, V& {# l用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议* G4 Q5 }+ O8 Q% h- L  l+ v
尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以2 [$ w* S5 a2 N: a8 f8 }/ u6 n: q. k
由以下公式计算:" d* ^2 u9 w4 I' u: N# N- g
Tcovn=采样时间+7.5 个周期3 Z" D$ C" u/ t4 ]. m( d+ y
其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如," U5 d# R& Y8 o# `
当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周
! r8 @( F! `' N! o1 B期=0.5us。
' y, H4 F" j3 ]- [1 P. F9 v  z  Q$ _9 x( D- b
4.ADC 通道预选寄存器(ADCx_PCSEL)
- s- s' g5 q9 W4 w/ p该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。# s  i6 f/ v' D+ S2 ?1 G' L
举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC/ h$ x2 s% B3 n# i4 v7 M+ @
功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM32
# @; X' }: @8 {# z( Y芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。
6 z" K- O) r4 F! P3 S
: U5 \- O/ k% _& _5.ADC 规则序列数据寄存器(ADCx_DR)9 B6 Z5 |$ V4 U9 F/ ~
规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC" f* J0 `# M: z+ ]
转换后的结果,
# ~4 B" a! Z% x+ Q% H
/ N) C& S+ g. q$ R; v6.ADC 中断与状态寄存器(ADCx_ISR)
! J  D7 V8 ]; e. O/ a7 X# s8 X这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD5 O7 s. J1 G$ `5 p# E& [
转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否9 Z1 f& B# h2 s& r7 Z
则等待转换完成。
# u2 q- N) |3 R! |9 q  I* C; K& o6 l" [& L
步骤. Y$ L1 T' `1 `7 L. G9 R: N9 E- H
1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。
' j* x7 P3 {7 v2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。7 x: c! y) K5 {
3)开启 AD 转换器。
  Z  ?* e/ p/ V/ O4)配置通道,读取通道 ADC 值。
8 L: U4 B7 }' O0 ^9 N5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。
/ p  x; q! Q$ o: }
- n; {" g4 c: ^9 l视频笔记. x' S  ~4 A; N. O4 c
分辨率: 电压等分,2的多少次方
! P7 w( _+ I/ T( ^2 C. g虚短虚断[百度]- ]- b: A' i) a3 x& |
2分频–就是频率除以2
5 @# W  I7 Z+ P) Y注入通道无法连续转换( `- z+ U5 K& i7 ]( R
单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换4 X1 g, G: k" b2 O7 f0 x

+ q% O0 U! ^% i- d) K) `6 O0 M2 t
20200115142135189.png

- ?7 E6 o  ^# r! Y/ r( _4 H, s$ c8 P, c  O5 j
EOC中断:转换完成启动中断
" K/ C3 ~( F+ T
( z5 S, ~, X1 M& @7 n# f: M程序编写步骤3 z  y* y: y! {; Y" Z# w2 m3 ]
HALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译' z9 ~3 u% Q0 `8 }: i, ?
…
+ r. S' c- p: A  C# t- R
2 ?" q" w+ u6 O; h- B/ s$ ^6 _8 G9 ~6 }
4 |3 @2 \+ I5 I/ ?7 v
赞 收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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