STM32之ADC

ADC简介

什么是ADC?

ADC,全称:Analog-to-Digital Converter,指模拟/数字转换器

常见的ADC类型

ADC电路类型

优点

缺点

并联比较型

转换速度最快

成本高、功耗高,分辨率低

逐次逼近型

结构简单,功耗低

转换速度较慢

常见ADC类型

并联比较型工作示意图

分压部分 + 比较部分 + 编码部分

优点:转换速度快 缺点:成本高、功耗高、分辨率低

逐次逼近型工作示意图

控制电路+ 数码寄存器 + D/A转换器 + 电压比较器

优点:结构简单、低功耗 缺点:转换速度较慢

特点: 分辨率和采样速度相互矛盾, 分辨率越高,采样速率越低

ADC的特性参数

分辨率(刻度划分)表示ADC能辨别的最小模拟量,用二进制位数表示,比如:8、10、12、16位等
转换时间表示完成一次A/D转换所需要的时间,转换时间越短,采样率就可以越高
精度(物理量的精准程度)最小刻度基础上叠加各种误差的参数,精度受ADC性能、温度和气压等影响
量化误差用数字量近似表示模拟量,采用四舍五入原则,此过程产生的误差为量化误差

STM32各系列ADC的主要特性

主要特性

F1

F4

F7

H7

ADC类型

逐次逼近型

分辨率

12

6/8/10/12

6/8/10/12

8/10/12/14/16

ADC时钟频率

14MHzmax

36MHzmax

采样时间

采样时间越长转换结果相对越准确但是转换速度就越慢

转换时间

ADC时钟频率、分辨率和采样时间等有关

供电电压

VSSA 0VVDDA 2.4V~3.6V(全速运行)

参考电压

VREF 0VVREF+一般为3.3V

输入电压

VREFVINVREF+

ADC工作原理

ADC框图简介(F1)

①参考电压/模拟部分电压

②输入通道

③转换序列

④触发源

⑤转换时间

⑥数据寄存器

⑦中断

ADC框图简介(F4)

①参考电压/模拟部分电压

②输入通道

③转换序列

④触发源

⑤转换时间

⑥数据寄存器

⑦中断

ADC框图简介(H7)

①VREF+电压

②ADC双时钟域架构

③输入通道

④转换序列

⑤触发源

⑥转换时间

⑦参考电压

⑧ADC核心

⑨数据寄存器

⑩中断

⑪通道预选控制信号

参考电压/模拟部分电压

模拟部分电源
参考电压

ADC供电电源:VSSA、 VDDA (2.4V≤VDDA≤3.6V )

ADC输入电压范围:VREF–≤VIN≤VREF+(即0V≤VIN≤3.3V )

输入通道 F1为例

ADC1

IO

ADC2

IO

ADC3

IO

通道0

PA0

通道0

PA0

通道0

PA0

通道1

PA1

通道1

PA1

通道1

PA1

通道2

PA2

通道2

PA2

通道2

PA2

通道3

PA3

通道3

PA3

通道3

PA3

通道4

PA4

通道4

PA4

通道4

PF6

通道5

PA5

通道5

PA5

通道5

PF7

通道6

PA6

通道6

PA6

通道6

PF8

通道7

PA7

通道7

PA7

通道7

PF9

通道8

PB0

通道8

PB0

通道8

PF10

通道9

PB1

通道9

PB1

通道9

连接内部VSS

通道10

PC0

通道10

PC0

通道10

PC0

通道11

PC1

通道11

PC1

通道11

PC1

通道12

PC2

通道12

PC2

通道12

PC2

通道13

PC3

通道13

PC3

通道13

PC3

通道14

PC4

通道14

PC4

通道14

连接内部VSS

通道15

PC5

通道15

PC5

通道15

连接内部VSS

通道16

连接内部温度传感器

通道16

连接内部VSS

通道16

连接内部VSS

通道17

连接内部Vrefint

通道17

连接内部VSS

通道17

连接内部VSS

转换序列(F1为例)

A/D转换被组织为两组:规则组(常规转换组)注入组(注入转换组) 规则组最多可以有16个转换,注入组最多有4个转换

规则组和注入组执行优先级对比

规则序列和注入序列(F1为例)

规则序列寄存器控制关系汇总

寄存器

寄存器位

功能

取值

SQR3

SQ1 [ 4 : 0 ]

设置第1个转换的通道

通道0~17

SQ2 [ 4 : 0 ]

设置第2个转换的通道

通道0~17

SQ3 [ 4 : 0 ]

设置第3个转换的通道

通道0~17

SQ4 [ 4 : 0 ]

设置第4个转换的通道

通道0~17

SQ5 [ 4 : 0 ]

设置第5个转换的通道

通道0~17

SQ6 [ 4 : 0 ]

设置第6个转换的通道

通道0~17

SQR2

SQ7 [ 4 : 0 ]

设置第7个转换的通道

通道0~17

SQ8 [ 4 : 0 ]

设置第8个转换的通道

通道0~17

SQ9 [ 4 : 0 ]

设置第9个转换的通道

通道0~17

SQ10 [ 4 : 0 ]

设置第10个转换的通道

通道0~17

SQ11 [ 4 : 0 ]

设置第11个转换的通道

通道0~17

SQ12 [ 4 : 0 ]

设置第12个转换的通道

通道0~17

SQR1

SQ13 [ 4 : 0 ]

设置第13个转换的通道

通道0~17

SQ14 [ 4 : 0 ]

设置第14个转换的通道

通道0~17

SQ15 [ 4 : 0 ]

设置第15个转换的通道

通道0~17

SQ16 [ 4 : 0 ]

设置第16个转换的通道

通道0~17

SQL [ 3 : 0 ]

设置规则序列要转换的通道数

0~15

注入序列寄存器控制关系汇总

寄存器

寄存器位

功能

取值

JSQR

JSQ1 [ 4 : 0 ]

设置第1个转换的通道

通道0~17

JSQ2 [ 4 : 0 ]

设置第2个转换的通道

通道0~17

JSQ3 [ 4 : 0 ]

设置第3个转换的通道

通道0~17

JSQ4 [ 4 : 0 ]

设置第4个转换的通道

通道0~17

JL [ 1 : 0 ]

设置注入序列要转换的通道数

0~3

注入序列的转换顺序是从JSQx[ 4 : 0 ](x=4-JL[1:0])开始

触发源(F1)

触发转换的方法有两种:

(1)ADON位触发转换(仅限F1系列)

当ADC_CR2寄存器的ADON位为1时,再单独(其他位不可以改变)给ADON位写1,只能启动规则组转换

(2)外部事件触发转换

外部事件触发转换分为:规则组外部触发注入组外部触发

规则组外部触发使用方法:
注入组外部触发使用方法:
触发源(F4/F7)
规则组外部触发使用方法:
注入组外部触发使用方法:
触发源(H7)
规则组外部触发使用方法:

参考《STM32H7xx参考手册_V3(中文版).pdf》825页

注入组外部触发使用方法:

转换时间(F1)

(1)如何设置ADC时钟?
例程中如何设置ADC时钟?
(2)如何设置ADC转换时间?

ADC转换时间: TCONV = 采样时间 + (转换时间)12.5个周期

  1. 转换时间

    Tconversion=(分辨率位数+0.5)×TADC_CLKTconversion​=(分辨率位数+0.5)×TADC_CLK​

    • 12位模式:12.5周期(默认)
    • 10位模式:10.5周期(需配置ADC_Resolution_10b
    • 8/6位模式:8.5/6.5周期

采样时间可通过SMPx[2:0]位设置,x=0~17

SMP = 000:1.5个ADC时钟周期

SMP = 001:7.5个ADC时钟周期

SMP = 010:13.5个ADC时钟周期

SMP = 011:28.5个ADC时钟周期

SMP = 100:41.5个ADC时钟周期

SMP = 101:55.5个ADC时钟周期

SMP = 110:71.5个ADC时钟周期

SMP = 111:239.5个ADC时钟周期

举个例子:ADC时钟频率为12MHz时,ADC最短的转换时间是多少?

TCONV = 采样时间 + 12.5个周期 = 1.5个周期 + 12.5个周期 = 14个周期 = (1/12000000)∗14 s = 1.17us

转换时间(F4/F7)

(1)如何设置ADC时钟?

例程中如何设置ADC时钟?
(2)如何设置ADC转换时间?

ADC转换时间(12位分辨率): TCONV = 采样时间 + 12个周期

采样时间可通过SMPx[2:0]位设置,x=0~18

SMP = 000:3个ADC时钟周期

SMP = 001:15个ADC时钟周期

SMP = 010:28个ADC时钟周期

SMP = 011:56个ADC时钟周期

SMP = 100:84个ADC时钟周期

SMP = 101:112个ADC时钟周期

SMP = 110:144个ADC时钟周期

SMP = 111:480个ADC时钟周期

举个例子:ADC时钟频率为21MHz时,ADC最短的转换时间是多少?

TCONV = 采样时间 + 12个周期 = 3个周期 + 12个周期 = 15个周期 = (1/21000000)∗15 s = 0.71us

转换时间(H7)

(1)如何设置ADC时钟?

(2)如何设置ADC转换时间?

ADC转换时间:TCONV = 采样时间(TSMPL) + 逐次逼近时间(TTSAR)

采样时间可通过SMPx[2:0]位设置,x=0~19

SMP = 000:1.5个ADC时钟周期

SMP = 001:2.5个ADC时钟周期

SMP = 010:8.5个ADC时钟周期

SMP = 011:16.5个ADC时钟周期

SMP = 100:32.5个ADC时钟周期

SMP = 101:64.5个ADC时钟周期

SMP = 110:387.5个ADC时钟周期

SMP = 111:810.5个ADC时钟周期

逐次逼近时间(TTSAR)和分辨率有关,RES[2:0]用于设置分辨率,如:16/14/12/10/8位

逐次逼近时间(TTSAR)和分辨率对应关系表:

举个例子:ADC时钟频率为32MHz时,分辨率为16位,ADC最短的转换时间是多少?

TCONV = TSMPL + TTSAR = (1.5 + 8.5)个ADC周期 = 10个ADC周期 = (1/32000000)∗10s = 0.31us

数据寄存器(F1)

由ADCx_CR2寄存器的ALIGN位设置数据对齐方式,可选择:右对齐或者左对齐

数据寄存器(F4/F7)

由ADCx_CR2寄存器的ALIGN位设置数据对齐方式,可选择:右对齐或者左对齐

数据寄存器(H7)

由OVSS[3:0]和LSHIFT[3:0]位域设置数据对齐方式,可选择:右对齐或者左对齐

中断

F1/F4/F7系列ADC中断事件汇总表:

中断事件

事件标志

使能控制位

规则通道转换结束

EOC

EOCIE

注入通道转换结束

JEOC

JEOCIE

设置了模拟看门狗状态位

AWD

AWDIE

溢出(F1没有)

OVR

OVRIE

DMA请求(只适用于规则组)

规则组每个通道转换结束后,除了可以产生中断外,还可以产生DMA请求,我们利用DMA及时把转换好的数据传输到指定的内存里,防止数据被覆盖。

H7系列ADC中断类型

ADC转换模式

单次转换模式和连续转换模式

CONT

0

1

转换模式

单次转换模式

连续转换模式

转换组/转换模式

单次转换模式(只触发一次转换)

连续转换模式(自动触发下一次转换)

注意:只有规则组才能触发该模式

规则组

转换结果被储存在ADC_DR 

EOC(转换结束)标志位被置1

如果设置了EOCIE位,则产生中断

然后ADC停止

转换结果被储存在ADC_DR 

EOC(转换结束)标志位被置1

如果设置了EOCIE位,则产生中断

注入组

转换结果被储存在ADC_DRJx

JEOC(转换结束)标志位被置1

如果设置了JEOCIE位,则产生中断

然后ADC停止

转换结果被储存在ADC_DRJx

JEOC(转换结束)标志位被置1

如果设置了JEOCIE位,则产生中断

自动注入:将JAUTO位置1

扫描模式

SCAN

0

1

扫描模式

关闭扫描模式

使用扫描模式

关闭扫描模式

使用扫描模式

ADC只转换ADC_SQRxADC_JSQR选中的第一个通道进行转换

ADC会扫描所有被ADC_SQRxADC_JSQR选中的所有通道

不同模式组合的作用

单次转换模式(不扫描)

只转换一个通道,而且是一次,需等待下一次触发

单次转换模式(扫描)

ADC_SQRx ADC_JSQR 选中的所有通道都转换一次

连续转换模式(不扫描)

只会转换一个通道,转换完后会自动执行下一次转换

连续转换模式(扫描)

ADC_SQRx ADC_JSQR 选中的所有通道都转换一次,并自动进入下一轮转换

举个例子:

单次转换模式(不扫描)

使用ADC单通道,并要求进行一次转换

单次转换模式(扫描)

使用ADC多通道,并要求所有通道都转换一次就停止

连续转换模式(不扫描)

使用ADC单通道,并要求对该通道连续转换

连续转换模式(扫描)

使用ADC多通道,并要求所有通道都转换一次后,自动启动下一轮转换

一种比较少用的模式:不连续采样模式(F1手册称为:间断模式),只适用在扫描模式下。

ADC工作模式

工作模式定义了ADC模块的全局运行方式,主要分为以下类型:

1. 独立模式(Independent Mode)
  • 特点:单个ADC独立工作,不与其他ADC交互
  • 配置方法

    c

    hadc.Init.ScanConvMode = DISABLE;  // 禁用扫描模式(单通道)
    hadc.Init.ContinuousConvMode = ENABLE; // 启用连续转换
  • 适用场景:单通道或简单多通道采集
2. 多ADC协同模式(Dual/Triple Mode)
模式触发方式典型应用
交替模式交替触发各ADC高速信号采集(如STM32H7)
同步规则模式同步转换相同通道提高信噪比(求平均值)
同步注入模式注入组同步触发关键信号冗余采集
  • 配置示例(双重交替模式):

    c

    hadc1.Init.DualMode = ADC_DUALMODE_INTERL;
    hadc2.Init.TriggerControlledByADC = ADC_TRIGGER_CONTROLLED_BY_ADC1;
3. 过采样模式(Oversampling)
  • 原理:硬件自动累加多次采样结果,提升分辨率
  • 配置参数

    c

    hadc.Init.OversamplingMode = ENABLE;
    hadc.Init.Oversample.Ratio = ADC_OVERSAMPLING_RATIO_16;
    hadc.Init.Oversample.RightBitShift = ADC_RIGHTBITSHIFT_4;
  • 优势:将12位ADC提升至14-16位有效分辨率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值