STMCU小助手
发布时间:2022-7-5 22:09
|
一、ADC原理2 {* d' f* G) U STM32G431内部集成2个有最高12位ADC(ADC1、ADC2),它们是逐次逼近型模数转换器 - u$ |0 B$ T7 V9 n, w5 Z3 N( i ADC功能结构图
主要特性:! c+ V5 Z" X( d, a4 R 1.可配置的转换精度:6位,8位,10位,12位 若精度为12位 : 3.3/ 212=3.3/4096 ,一个单位对应这多的电压值5 o N! z6 ~. y* W 4 _- r$ b2 v0 H N" ~( @& c 2.转换电压范围: 0 ~ VREF+(一般接到3.3V电源,不能超过STM32芯片电源电压)9 k& E. |* O6 H! \7 I
! s/ E+ Y" o: c2 J% O 3.19个转换通道:16个外部通道(IO引脚) + 3个内部通道(温度传感器、内部电压参考、电池供电监测)
4.采样时间可配置& z @2 N5 W. t" y H 5.扫描方向可配置 % [' a! I3 T; F$ F 6.多种转换模式:单次,连续! K* }& B1 n* b5 H3 t G P2 T/ _6 m6 [+ J! r# j( t) K, @6 k 7.数据存放对齐方式可配置:左对齐,右对齐(ADC的结果存储在一个左对齐或右对齐的 16 位数据寄存器中)& X* _: `3 y) c3 x 8.启动转换方式可配置:软件触发,硬件触发 9.可设置上下门限的模拟看门狗 + m* q- A& v y( Y+ ` 10.DMA功能 11.在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断 通道和转换顺序 规则通道:规规矩矩按照顺序来转换,平时用到的就是这类通道.- c3 d* I2 v2 i; Z1 ~* s
3 E& \7 S/ g. P! W/ H2 f ADC_SQR1控制转换的顺序和数量(L[3:0])6 U* X/ A( k8 F4 P & i3 I/ ]& e" L$ q; Y 注入通道: 注入可以理解为插队。它是一种在规则通道转换的时候强行插入要转换的一种。这点和中断有点像,当规则通道转换中,有注入通道插队,那么得先转换注入通道的,然后才倒回来转换规则通道: Z# R( j5 R9 y1 Q7 t7 z) l
( @8 M! {3 |, [% H& r 每个通道都有相应的触发电路,注入通道的触发电路为注入组,规则通道的触发电路为规则组 + D% m4 V, s8 u G 使用控制寄存器启动时,为ADON位写1开始转换,写0停止转换。7 N, \7 T0 N+ E% z; s 使用外部事件来触发转换,这个触发包括内部定时器触发和外部IO触发。 触发源的选择由ADC_CFGR的EXTSEL[3:0]和ADC_JSQR的JEXTSEL[3:0]位来控制,EXTSEL[3:0]用于规则通道的触发源, JEXTSEL[3:0]用于选择注入通道的触发源。选择好触发源后,控制EXTTRIG和JEXTTRIG这两位来激活触发源0 _8 ^1 k& Z- q+ w3 V- z, L / F3 J2 I4 n- b% U 转换时序图: ADC在开始精确转换之前需要一段稳定时间tSTAB。ADC开始转换并经过15个时钟周期后**,EOC标志置1,转换结果存放在16位ADC数据寄存器中。**& U( E" E9 r7 }5 j
ADC必须在时钟ADC_CLK的控制下才能进行A/D转换,ADC_CLK的值是由时钟控制器控制, 可以选择同步时钟也可以选择异步时钟线。时钟控制器为ADC时钟提供了一个专用的可编程预分频器,默认的分频值为2 % M1 n7 H9 C" O6 N* m, B v5 \ 采样时间和转换时间:由ADC_SMPR1和ADC_SMPR2的SMP[2:0]设置,每个通道可以设置不同的时间采样,采样的周期最小是3个周期(1/ADC_CLK),TCONV=采样时间+12周期 当ADC_CLK=30Mhz,ADC为3的周期,那么,总的转换时间为:TCONCV = 3+12 = 15个周期(0.5us) ; F2 {& V) s1 p* N# I4 i. h$ q 当数据转换完成,数据将会以对齐方式(左/右)存入相应的寄存器, e' G3 a8 Q8 O$ B& Z# N! S. E 每个通道也有相应的转换结果寄存器,分别称为规则通道数据寄存器和注入通道数据寄存器 但是,规则通道数据寄存器只有一组,所以存储进去,CPU必须马上读取,一般使用DMA处理;3 A) ^2 ~6 U& J) M! p; j 通常,对于多个规则通道的转换,每次转换完一个数据,需要发出中断请求,CPU读取信息,但是如果转换数据量特别的时候,给CPU带来负担,有可能还没读走就转换了新的数据。9 k2 e1 o$ f6 [8 g: q0 A) V. H- Z5 t 在使能DMA模式的情况下,每完成规则通道组中的一个通道转换后,都会生成一个DMA请求。这样便可将转换的数据从ADC_DR寄存器传输到用软件选择的目标位置。摆脱对CPU的依赖。2 ]1 L5 U( F7 C* i. _, ` 注入通道数据寄存器可以存4组数据,最后一次读取。 模拟看门狗:用于监控高低电压阈值,可作用于一个、多个或全部转换通道,当检测到的电压低于或高于设定电压阈值时,可以产生中断; N M) a5 ~. n/ w
$ D5 T# ^, X: W8 k1 U 如果ADC转换的模拟电压低于阈值下限或高于阈值上限,则AWD模拟看门狗状态位会置1。. W% ^( |: c( h4 F 可以使用ADC_IER寄存器中的AWDIE位使能中断 ' S, s& V$ x( ?
' n' Q. H0 y1 U( k$ S 有4种情况可以产生中断,即规则组转换结束、注入组转换结束和模拟看门狗事件与溢出事件。ADC1和ADC2的中断映射在同一个中断向量上' H2 W1 k0 c0 L- Q3 m. ] 二、ADC工作模式 1.单次转换模式 在单次转换模式下,ADC执行一次转换。ADC_CFGRD的CCONT位为0时,可通过以下方式启动此模式: % H& S! t) Z/ G, O2 i0 Z& ?' A 将ADC_CR寄存器中的ADSTART位置1(仅适用于规则通道)' |$ D' [2 U2 n. Q4 u$ N' m$ P 将JADSTART位置1(适用于注入通道)1 h4 H5 ^' \) C a+ _ 外部触发(适用于规则通道或注入通道)6 {! }/ ?4 x' _! ]' ?" x7 M1 { 完成所选通道的转换之后:& X. F* {. Y6 x! ]( {9 Q 如果转换了规则通道: & v( H, Q7 w e. U- E* Z& Z, g 转换数据存储在16位ADC_DR寄存器中1 D" @6 [$ M3 Q' O EOC(转换结束)标志置1 EOCIE位置1时将产生中断 如果转换了注入通道: , Q i1 D- E1 Z 转换数据存储在16位ADC_JDRy寄存器中1 @- A# v5 ~; a JEOC(注入转换结束)标志置1 JEOCIE 位置1时将产生中断 1 M0 V6 _5 J) ~! [3 Q* _6 R 然后,ADC停止。 4 X( i& W$ o& |* d J 2.不连续采样模式 触发一次,n个连续转换,按照规则通道顺序; j, |8 M3 V) |' B4 V n=3,要转换的通道=0、1、2、3、6、7、9、10(L[3:0]=8) 第1次触发:转换序列0、1、2/ [" W( B4 q; {4 [# ]7 O9 ?) N 第2次触发:转换序列3、6、7 第3次触发:转换序列9、10并生成EOC事件7 l# ?0 K. N3 Q {% ~; e; k 第4次触发:转换序列0、1、2. E3 s1 q' ~$ y7 F … - i3 F) c: q- Q$ K9 F 3.常规扫描模式(连续采样)4 s) e, _- g+ V1 Z& n4 A 连续转换模式下,ADC结束一个转换后立即启动一个新的转换。ADC_CFGRD的CONT位为1时,可通过外部触发或将ADC_CR寄存器中的ADC_DR位置1来启动此模式(仅适用于规则通道)。; n$ d# \. u( D! I; }! Y ~( f 6 S, k+ y" A5 S( r' w) Y( P9 U) C* j
1 o4 s6 `* O1 o' P& t 每次转换之后,如果转换了规则通道组:" b+ X# J8 T0 T6 T' b4 z * D8 r: P# ]4 Q3 Z+ v 上次转换的数据存储在16位ADC_DR寄存器中4 Y. s- t6 ^! Y- d+ |" |' K9 U EOC(转换结束)标志置1 Y e. \4 Q j1 g6 r& q# W* w EOCIE位置1时将产生中断 注意:无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用JAUTO位)。! v% r ]& i% t% E8 R& }2 O; i1 v 8 _8 A) R, G8 V+ J1 v 4.注入转换扫描模式. j) B& c4 w M' d4 i- T0 i 触发注入:在规则通道组转换期间出现外部注入,则当前的转换会复位,并且注入通道序列会切换为单次扫描模式。然后,规则通道组的规则转换会从上次中断的规则转换处恢复。8 Q: v3 Z9 X# w4 z7 J1 r% J 如果在注入转换期间出现规则事件,注入转换不会中断,但在注入序列结束时会执行规则序列。
0 J0 u+ H% c' J* A. R, Y 自动注入:注入组中的通道会在规则组通道之后自动转换。这可用于转换最多由20个转换构成的序列) G& w/ k* b0 S+ J 4 e+ i) A3 n* U$ P" o5 m 5.多重ADC同时模式 一次触发,多个ADC同时转换通道数据 : F$ L3 L7 q6 ~; E* E" }5 v
- C2 x+ c# C! V4 O 在具有两个或更多ADC的器件中,可使用双重(具有两个ADC)和三重(具有三个ADC)ADC模式。多重ADC模式主要解决的问题是:在保证高精度下,提高采样率。 ( B Y' {+ g+ T 6.多重ADC交替模式- k' a# K3 g( M# u9 v$ V+ B 两个或者三个ADC交替对一个通道采样 # |4 k3 C4 Y: I8 l
* Z$ K) F z* a; l6 Z. D) j. n* g 7.多重ADC交替触发模式1 s' a* Z7 F8 a- `. x" b 双重ADC模式: 发生第一次触发时,将转换 ADC1 中注入组的所有通道5 e4 u% j7 g. G. F v 发生第二次触发时,将转换 ADC2 中注入组的所有通道 以此类推3 E1 ~: A! |1 h8 P: x+ }/ { ?0 D 3 a6 s$ l7 _4 w$ n' r
三、ADC配置(STM32CubeMX)6 k' R/ J' F F3 [+ M- R G4原理图) V% F. L' @: D# Z' U 4 _" A q9 c' e) o B/ C
5 d# h4 [* M9 i( F/ K
% r. O5 E( I9 y8 P 将PB15,PB12配置成ADC2的IN15,ADC1IN11通道0 Z( R5 m$ f$ o9 B; G/ |7 W
使能ADC2的通道159 s) s" D4 ?0 j: ^$ n5 Z( C8 l; R9 }) u . y& U7 X. c8 W* L# Z
i I# p0 h8 h7 r- q& D 配置ADC的参数
5 z6 a. L! x; s2 s+ W. n
ADC时钟的选择
2 N8 D7 E, L8 q6 T' K 若没有使用DMA,上面的ADC差不多配置完了 四、部分程序 STM32CubeMX会配置好ADC的初始化,我们只要写ADC的采样函数即可; [- s) a4 n: ?2 W3 x$ v' Q `% t 调用HAL函数即可,HAL_ADC_GetValue()得到返回值。注意,在调用该函数之前一定要初始化adc的句柄。3 p, C# j* l/ b ; ? y" J0 D& \5 |8 w
) s/ \' z, }0 }2 v* z 7 T; m" l" ~! j5 g5 q, } $ u+ B3 }/ ~9 d ^; T# L4 j |
STM32G47x 双 Bank 模式下在线升级
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【经验分享】STM32G4之基本定时器
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
经验分享 | STM32G4双BANK启动应用演示
STM32G4 LPTIM+DMAMUX 实现并行输出应用示例
实战经验 | LAT1578 SAU对NSC分区的影响
经验分享 | STM32G474 HRTIM Triggered-half模式实现两相交错电源180°相位同步方案
STM32大神笔记,超详细单片机学习汇总资料
微信公众号
手机版