STMCU小助手
发布时间:2022-7-5 22:09
|
一、ADC原理' J/ V2 c4 ^$ o( `2 a STM32G431内部集成2个有最高12位ADC(ADC1、ADC2),它们是逐次逼近型模数转换器& I* b: E( M1 t: q8 K2 N 5 z1 q0 m& ^& X( P y0 L. }6 P ADC功能结构图 8 i7 N7 J% |# p: B& R& c1 m
主要特性:0 J% w6 I* p6 G: C 1.可配置的转换精度:6位,8位,10位,12位8 F) L0 A/ A: M$ A* H S % h" R% K, M$ T* l! q g9 Z, W 若精度为12位 : 3.3/ 212=3.3/4096 ,一个单位对应这多的电压值 1 f) D+ \ i% g7 s+ @( G 2.转换电压范围: 0 ~ VREF+(一般接到3.3V电源,不能超过STM32芯片电源电压)1 ?0 l) Q& k, u: n ' p) w) |# J9 r+ P! a8 W( j7 M
: T8 M" c4 ]/ S0 B R P" c% m 3.19个转换通道:16个外部通道(IO引脚) + 3个内部通道(温度传感器、内部电压参考、电池供电监测)! c+ z/ s+ ]# y8 D" f3 G5 i 8 a: h1 Y+ n }! F2 ~
" ^/ R/ }4 o ]; g5 a 4.采样时间可配置 _) r2 \" ?" H4 Q- N: Q$ f( `+ g 5.扫描方向可配置 / V( j( Y* B; ?* z 6.多种转换模式:单次,连续 4 k. b7 O- {, Y5 L: {9 m 7.数据存放对齐方式可配置:左对齐,右对齐(ADC的结果存储在一个左对齐或右对齐的 16 位数据寄存器中)7 B+ o( s# |9 h! @. a% Y ?2 N, y ) P5 K( r4 L; q3 Y 8.启动转换方式可配置:软件触发,硬件触发 9.可设置上下门限的模拟看门狗 n8 n R$ Y% Q + w7 f' w2 G) C6 E% H 10.DMA功能( }& `* ?7 {$ @, C/ F6 d c , x6 @, Z6 }1 S1 X 11.在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断, \* M4 V' R. g" j0 Q6 l, y 3 y t# r$ b/ |0 I6 m4 Z: b' W3 l' d 通道和转换顺序9 p7 i8 i9 L+ w) X0 F( d* f 规则通道:规规矩矩按照顺序来转换,平时用到的就是这类通道. u7 F2 ] {1 e% j0 g+ K( M; |; Q: B
5 ~* ~4 s3 p, {& c( g, W. I2 j( e ADC_SQR1控制转换的顺序和数量(L[3:0])5 t- J( T# a) p6 B: O8 t E 9 _+ B5 |1 X+ I& Q' O' W) N% z$ N 注入通道: 注入可以理解为插队。它是一种在规则通道转换的时候强行插入要转换的一种。这点和中断有点像,当规则通道转换中,有注入通道插队,那么得先转换注入通道的,然后才倒回来转换规则通道) }6 Q9 b3 E8 \- m- M( g3 z
. w4 o4 o* r/ J( r- H/ g 每个通道都有相应的触发电路,注入通道的触发电路为注入组,规则通道的触发电路为规则组 ' s' D7 x- b1 g B" ?4 A+ J 使用控制寄存器启动时,为ADON位写1开始转换,写0停止转换。 使用外部事件来触发转换,这个触发包括内部定时器触发和外部IO触发。* Q2 l9 a, W: c$ q ( U5 o' F" \+ H4 I: N M 触发源的选择由ADC_CFGR的EXTSEL[3:0]和ADC_JSQR的JEXTSEL[3:0]位来控制,EXTSEL[3:0]用于规则通道的触发源,1 T' g3 Q O9 u JEXTSEL[3:0]用于选择注入通道的触发源。选择好触发源后,控制EXTTRIG和JEXTTRIG这两位来激活触发源 G1 c% ?$ w' F5 t* m 9 B1 ^# T- p5 o; }# r0 i$ j 转换时序图: ADC在开始精确转换之前需要一段稳定时间tSTAB。ADC开始转换并经过15个时钟周期后**,EOC标志置1,转换结果存放在16位ADC数据寄存器中。**& w; S7 a+ ^+ ~9 ?2 v3 e
ADC必须在时钟ADC_CLK的控制下才能进行A/D转换,ADC_CLK的值是由时钟控制器控制, 可以选择同步时钟也可以选择异步时钟线。时钟控制器为ADC时钟提供了一个专用的可编程预分频器,默认的分频值为2 5 S$ z" A- T7 |* R 采样时间和转换时间:由ADC_SMPR1和ADC_SMPR2的SMP[2:0]设置,每个通道可以设置不同的时间采样,采样的周期最小是3个周期(1/ADC_CLK),TCONV=采样时间+12周期$ V. E# G# N. ^# S7 O X& W 当ADC_CLK=30Mhz,ADC为3的周期,那么,总的转换时间为:TCONCV = 3+12 = 15个周期(0.5us) 当数据转换完成,数据将会以对齐方式(左/右)存入相应的寄存器6 _2 C, {( O- J1 a 每个通道也有相应的转换结果寄存器,分别称为规则通道数据寄存器和注入通道数据寄存器 但是,规则通道数据寄存器只有一组,所以存储进去,CPU必须马上读取,一般使用DMA处理; 5 J/ r' J9 S' ~1 s# c 通常,对于多个规则通道的转换,每次转换完一个数据,需要发出中断请求,CPU读取信息,但是如果转换数据量特别的时候,给CPU带来负担,有可能还没读走就转换了新的数据。 在使能DMA模式的情况下,每完成规则通道组中的一个通道转换后,都会生成一个DMA请求。这样便可将转换的数据从ADC_DR寄存器传输到用软件选择的目标位置。摆脱对CPU的依赖。 注入通道数据寄存器可以存4组数据,最后一次读取。 K- \8 S) a) r/ n! ?. c8 v 模拟看门狗:用于监控高低电压阈值,可作用于一个、多个或全部转换通道,当检测到的电压低于或高于设定电压阈值时,可以产生中断" J" w1 c5 }4 z! v. p/ Z 5 g& O5 R6 L+ k) v2 A. Y% [
如果ADC转换的模拟电压低于阈值下限或高于阈值上限,则AWD模拟看门狗状态位会置1。 5 q1 K1 {; l7 I* o 可以使用ADC_IER寄存器中的AWDIE位使能中断
' e9 _9 I" O4 A4 { 有4种情况可以产生中断,即规则组转换结束、注入组转换结束和模拟看门狗事件与溢出事件。ADC1和ADC2的中断映射在同一个中断向量上 二、ADC工作模式 1.单次转换模式 在单次转换模式下,ADC执行一次转换。ADC_CFGRD的CCONT位为0时,可通过以下方式启动此模式:# ?. z7 h2 Z3 s, U3 X: j( S 将ADC_CR寄存器中的ADSTART位置1(仅适用于规则通道); C; c' G: z2 Q8 L2 N! x( \0 b 将JADSTART位置1(适用于注入通道). P3 y9 F* w( |" s 外部触发(适用于规则通道或注入通道) 6 C$ p# W/ i M, ^5 H+ {" O# P4 T 完成所选通道的转换之后: 如果转换了规则通道: 转换数据存储在16位ADC_DR寄存器中 EOC(转换结束)标志置1 EOCIE位置1时将产生中断 如果转换了注入通道: 转换数据存储在16位ADC_JDRy寄存器中. ~. w( w2 k4 d JEOC(注入转换结束)标志置10 N) i$ e# R& _) L" E JEOCIE 位置1时将产生中断7 o+ q' i) j5 |) N' {: } 然后,ADC停止。9 |$ W$ w$ h3 a% |$ A 2.不连续采样模式, `, |, c! c$ }$ e9 o% m 触发一次,n个连续转换,按照规则通道顺序- g* ?/ ?# m1 T& @, C# W/ S, n / j6 q& M- j8 l! j7 |2 Z- j n=3,要转换的通道=0、1、2、3、6、7、9、10(L[3:0]=8) 第1次触发:转换序列0、1、2 第2次触发:转换序列3、6、7 第3次触发:转换序列9、10并生成EOC事件 第4次触发:转换序列0、1、2 … : z7 J/ A" z) G 3.常规扫描模式(连续采样) 连续转换模式下,ADC结束一个转换后立即启动一个新的转换。ADC_CFGRD的CONT位为1时,可通过外部触发或将ADC_CR寄存器中的ADC_DR位置1来启动此模式(仅适用于规则通道)。1 d; w0 |$ I1 [$ n3 z$ N
& N# f3 v P' [% p; c7 ^ 每次转换之后,如果转换了规则通道组:+ h2 p2 X( Q8 S* k) b 上次转换的数据存储在16位ADC_DR寄存器中 EOC(转换结束)标志置18 \6 B7 u; o5 {% x6 H! j EOCIE位置1时将产生中断 注意:无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用JAUTO位)。+ V5 E7 O' ~- D+ t. h/ _ 4.注入转换扫描模式 触发注入:在规则通道组转换期间出现外部注入,则当前的转换会复位,并且注入通道序列会切换为单次扫描模式。然后,规则通道组的规则转换会从上次中断的规则转换处恢复。 如果在注入转换期间出现规则事件,注入转换不会中断,但在注入序列结束时会执行规则序列。* `, K9 `# z- f% s! V* T) _9 j
自动注入:注入组中的通道会在规则组通道之后自动转换。这可用于转换最多由20个转换构成的序列4 C8 E; |1 q, c- e 5.多重ADC同时模式 一次触发,多个ADC同时转换通道数据 q. x+ i% l o2 R p$ j6 y t ! \$ z B; I) m
* B. h0 N( e$ U4 A2 H 在具有两个或更多ADC的器件中,可使用双重(具有两个ADC)和三重(具有三个ADC)ADC模式。多重ADC模式主要解决的问题是:在保证高精度下,提高采样率。 6.多重ADC交替模式, {: w l1 O) G' p& J, A; q: q 两个或者三个ADC交替对一个通道采样 1 a4 U1 F, F8 l* u' ~
7.多重ADC交替触发模式2 i ?0 z1 s& m; z' |0 v 双重ADC模式:% ]1 c& B4 e0 R( B$ r" @* ]% ]5 ~ 发生第一次触发时,将转换 ADC1 中注入组的所有通道 发生第二次触发时,将转换 ADC2 中注入组的所有通道0 S" f. T( ~3 _3 X& @- ~ 以此类推
) \+ `9 z0 T, G# G% b f 三、ADC配置(STM32CubeMX) G4原理图 ! o. v& p; B0 X9 ?
将PB15,PB12配置成ADC2的IN15,ADC1IN11通道7 w. ~: m4 Q& ]7 n$ \
1 I' P y6 d7 Q 使能ADC2的通道15 ! O& p& }: P' U2 }" l& Z
配置ADC的参数
5 H/ ~- u& s x0 A+ B
ADC时钟的选择
若没有使用DMA,上面的ADC差不多配置完了: }* b0 k. k3 {( W; m 2 r0 ^8 z, n: [ 四、部分程序 STM32CubeMX会配置好ADC的初始化,我们只要写ADC的采样函数即可 调用HAL函数即可,HAL_ADC_GetValue()得到返回值。注意,在调用该函数之前一定要初始化adc的句柄。6 E* s- o) M: S# i* b9 d* l: ?* Z; P
& y; s$ v- h; j3 q , Q# U( `/ x: r- l |
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
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°相位同步方案
微信公众号
手机版