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

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

[复制链接]
STMCU小助手 发布时间:2021-12-19 17:00
ADC性能参数
. b5 c+ }# T+ \  h5 _5 ^$ cSTM32H743xx 系列有 3 个 ADC,都可以独立工作,  Y: h; h2 j$ I  h2 a
其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。
# u, l2 M1 T' k3 x" v( nSTM32H743 的 ADC 分辨率高达 16 位,1 o# x: w, a, R- K: W  n
每个 ADC 具有多达 20 个的采集通道,
8 r  x4 B( s5 I. p3 t这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。3 ]. ?, _) d7 }* Z1 O
ADC 的结果可以左对齐或右对齐方式存储在 32 位数据寄存器中。2 K1 s  ?4 f: ?7 g8 v( k
STM32H743 的 ADC 最大的转换速率为 4.5Mhz,也就是转换时间为 0.22us(12 位分辨率时),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。
' |* F: _" Y7 E& L
% y( C2 n! y6 t5 U寄存器
' j: [) v; t: Q; i8 `1.ADC 通用控制寄存器(ADCx_COMMON_CCR,x=12 或3)
' @* P2 L  ~2 S0 Y( a# a% X4 y+ S用于设置 ADC 时钟的预分频系数
4 I* @2 A& L8 i. R' @; s3 d由于 ADC 的输入时钟频率不能大于 36M
& i5 N7 w' z& c0 X' Q+ |: n9 |
% H0 o' Y1 i: ^2.ADC 控制寄存器
, E# m* f* h7 r8 MBOOST 位,用于设置是否使用 BOOST 模式。当 BOOST=0 时,ADC 转换时钟必须小于20Mhz;当 BOOST=1 时,ADC 转换时钟必须大于 20Mhz。我们设置的 32M 的 ADC 转换时钟,
, K* S. N6 T" U& v因此该位必须设置为 1。, P% e6 \- _0 U: }0 @
ADCALLIN 位,用于设置线性 ADC 校准。设置该位为 1,可以设置 ADC 的校准模式为线, `1 x) r" ~0 p' d
性校准。
/ X1 t. r3 }5 `+ B7 X& RADEN 位,用于使能 ADC 转换器。需要设置该位为 1,ADC 才可以正常工作。
, x6 f' X5 g/ BADSTART 位,用于启动 ADC 规则通道的转换序列。当使用硬件触发时(EXTEN[1:0]!=0),
0 q/ u, V+ D9 b) i1 ^3 b6 U/ P- `设置该位为 1,必须在相应的硬件触发事件产生时,才会启动 ADC 转换。而当不使用硬件触发
" T2 N: ]* \' c* w* ]% b0 e9 n时(EXTEN[1:0]=0),设置该位为 1 则可以立即启动 ADC 转换。8 D- o/ O" v3 O% a" @) o0 Z
ADCAL 位,用与控制/读取 ADC 校准状态。设置该位为 1 时,可以启动 ADC 校准,等校
2 V/ ~9 q* i3 q, ]( V4 N准完成以后,硬件会自动清零该位。因此在设置改位为 1 以后,通过判断该位是否变为 0,即/ n6 F' `  o5 F
可判断校准是否完成。
: J. i9 x$ m1 K( `) N+ m+ |ADC 配置寄存器(ADCx_CFGR)( v' m/ i) B- l3 Z1 A
RES[2:0]位,用于设置 ADC 转换的分辨率:0,16 位;1,14 位;2,12 位;3,10 位;4,8 位;其他值:保留。本章我们使用 16 位分辨率,因此设置这 3 个位全 0 即可。) f1 [( h" [% ]
EXTEN[1:0]位,用于设置规则通道的外部触发方式和极性。本章我们使用软件触发,因此8 q5 |+ r/ u5 H3 ~. C( p# g
设置 EXTEN[1:0]=00,即禁止外部触发即可。0 S; S) F+ n6 [: L# ~
OVRMOD 位,用于设置是否使能覆写功能。当设置该位为 0 时,如果上一次转换的数据
8 f8 J/ S) ~) i未及时读取,新的转换结果将被丢弃;当设置该位为 1 时,如果上一次转换的数据未及时读取,
, s: H6 C, r7 Z( A. E将会被新的结果覆盖。本章,我们设置该位为 1。
7 q6 {5 ^0 k* S+ u. O. KCONT 位,用于设置转换模式。当 CONT=0 时,表示单次转换模式;当 CONT=1 时,表
' k& F, v2 C) D: W$ h+ T% p示连续转换模式。本章,我们设置该位为 0。! o) y8 h+ s; f$ ^7 X/ E

/ V" ^! E9 E. ?5 {8 x1.ADC 配置寄存器 2(ADCx_CFGR2)
& r# C0 m5 Z( _9 @$ fOSR[9:0]位,用于设置 ADC 的过采样率。OSR[9:0]=0~1023,表示 1x~1024x 过采样。本  \; I4 G1 r( T+ v1 m
章,我们不使用过采样,设置 OSR[9:0]=0 即可。& u; [( p( \4 G4 j$ h
LSHIFT[3:0]位,用于设置输出结果的左移位数,0~15 表示左移 0~15 位。本章不使用左右+ |- \. y3 `" Z* m
(数据右对齐),因此设置 LSHIFT[3:0]=0 即可。2 I$ Q/ `' T  ~- y1 H7 C

" [( ]' D; N* `, I* ?7 E# `' }2.ADC 规则序列寄存器 1(ADCx_SQR1)) u1 t( a5 {+ D! H
3.ADC 采样时间寄存器 2

4 V3 v4 a  e& a- G- c. k% j用于设置 ADC 通道 10~19 的采样时间。对于每个要转换的通道,采样时间建议) z1 v/ m' g( }6 h
尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。ADC 的转换时间可以8 i- O' g) l0 A+ d- V6 |
由以下公式计算:/ W5 f5 C( z" |1 e- L% S
Tcovn=采样时间+7.5 个周期7 g: _( I# j, O
其中:Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,
7 t  t  j; @: C. h9 e, U当 ADCCLK=32Mhz 的时候,并设置 8.5 个周期的采样时间,则得到:Tcovn=8.5+7.5=16 个周1 j$ h8 q6 G! x$ E5 _& {6 \
期=0.5us。
5 |( h1 H" |0 j/ ]& v' W2 M8 A' q* Z  [" g- W& S4 N3 y3 A2 t
4.ADC 通道预选寄存器(ADCx_PCSEL)
% ^: w# E% f( X* G9 A2 r& W$ X8 P该寄存器用于控制 ADC 具体某个输入通道和对应 IO 的连接,相当于在 ADC 输入和 IO 之间,加了一个开关,想要正常使用某个通道,则必须设置对应的 PCSELy 位为 1(y=0~19),否则无法得到对应 IO 口的正常电压。注意:在 STM32H7 之前的的其他 STM32 芯片上面,是没有的,该寄存器的存在,有利于隔离 ADC 和 IO 的隔离。
: A! Q# Y! c% L( ?: I举个简单的例子,在 STM32H7 上面,即便是 ADC 通道对应的 IO 口,只要不使用 ADC
! T/ `8 T$ Z6 x  F8 x& u功能(PCSEL 不设置为 1),那么该 IO 口就可以兼容 5V,但是在 STM32H7 之前的其他 STM324 M; ?& H9 {$ r5 Q0 s
芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。8 }! h' F/ }- f( a
' s2 x, v1 m7 r+ {( p0 s
5.ADC 规则序列数据寄存器(ADCx_DR), k1 e) \8 [5 Z& a' W
规则序列中的AD转化结果都将被存在这个寄存器里面,我们读取该寄存器,即可得到ADC
: N9 X. {+ m3 O+ B" {9 j转换后的结果,
7 N  f, `, m; ?( ~9 m( f  x) B0 z3 {+ A  U5 h  U2 h1 r
6.ADC 中断与状态寄存器(ADCx_ISR)4 f/ b' m: ]$ B/ j* F  I
这里我们仅介绍将要用到的是 EOC 位,我们通过判断该位来决定是否此次规则通道的 AD' ^' |/ k" v/ w9 O& n
转换已经完成,如果该位位 1,则表示转换完成了,就可以从 ADCx_DR 中读取转换结果,否
6 g. K. `2 h9 `& p则等待转换完成。8 f) T4 O, R( {: j! p' I' N: `! U

: M- Z! d0 |7 b' o! V步骤% U+ l7 G( W( }3 T/ s+ k; {0 U. I# v
1)开启 PA 口时钟和 ADC1 时钟,设置 PA5 为模拟输入。8 ~: n) h& m( J+ L/ ?& W% x$ A; ]# f
2)初始化 ADC,设置 ADC 时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息。
' H0 k( n5 E' x' w& ?# R: v3)开启 AD 转换器。; t" h7 m  u/ o  T
4)配置通道,读取通道 ADC 值。5 j6 Z1 ~& e% q3 X3 w; j2 u
5) 这里还需要说明一下 ADC 的参考电压,阿波罗 STM32H7 开发板使用的是 STM32H743IIT6,该芯片只有 Vref+参考电压引脚,Vref+的输入范围为:1.8~VDDA。阿波罗 STM32H7 开发板通过 P5 端口,来设置 Vref+的参考电压,默认的我们是通过跳线帽将 ref+接到 3.3V,参考电压就是 3.3V。如果大家想自己设置其他参考电压,将你的参考电压接在 Vref+上就 OK 了(注意要共地)。本章我们的参考电压设置的是 3.3V。$ q/ O/ m8 [$ T" f# ?
; }9 Y- `0 P2 w; m
视频笔记
0 o5 W- V8 f( A1 O) C分辨率: 电压等分,2的多少次方
) G- K& ?: l! L" K% v5 A) X虚短虚断[百度]/ Q$ v" m9 h+ D1 A" [; v
2分频–就是频率除以2
  Y' J1 p* V; C/ s5 P注入通道无法连续转换
( ^6 ~5 y4 u$ w0 _" q+ i$ S- J. F单次转换:只转换一次, 连续转换:多次单次转换合在一起,扫描模式:一组通道按顺序循环转换3 \3 \' z  ^7 X

$ ?" C/ V! \: [4 ~4 b
20200115142135189.png

3 U* D! B9 G1 P$ q) l9 J1 z2 S; [6 J" k7 x
EOC中断:转换完成启动中断; d8 V. k  D. |6 [2 I' i
, H" A% D' L: F7 B. r
程序编写步骤
5 @* v. ?5 O! a9 D4 z* q! \  Q( nHALLIB文件添加 stm32h7xx_hal.adc.c 和stm32h7xx_hal.adc_ex.c,编译
; ]% {" T7 P1 _% I…- i) ^. z7 L: c6 e

+ e+ D7 x2 }  K, W6 A7 e. @2 G
1 t7 v! O, F" z' p1 l9 l% V2 U- f/ k% V  U% B& F4 H2 _' c
赞 收藏 评论0 发布时间:2021-12-19 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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