STM32-F407入门系列:学习ADC外设的基础知识

目录

1  ADC介绍

1.1 模拟信号&数字信号

1.2 模数转换ADC

1.3 ADC分类

2 STM32 ADC

2.1 功能框图

2.1.1 ADC电源和参考电压 

2.1.2 输入通道

2.1.3 通道和转换顺序 

2.1.4 触发源

2.1.5 转换时间

2.1.6 数据寄存器

2.1.7 模拟看门狗


1  ADC介绍

1.1 模拟信号&数字信号

模拟信号是用连续变化的数值来表示要说明的信息,在时间上是连续的,如果用数值表示需要一系列无限个数值,并且要表示精确可能需要小数点后很多位数

数字信号是用有限个“0”和“1”的代码来表示信息中某一个字符,当很多字符组合起来时,才能表达完整的信息

模拟数据是由传感器采集得到连续变化的值,例如温度、压力,以及目前在电话、无线电和电视广播中的声音和图像

数字数据则是模拟数据经量化后得到的离散的值,例如在计算机中用二进制代码表示的字符、图形、音频与视频数据

1.2 模数转换ADC

ADC常见的量化指标:

1、分辨率:指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2^{n}的比值,又称为精度,通常以数字信号的位数来表示。比如12位的ADC,那么它的分辨率就是2^{12},即4096,如若你的模拟量是温度,测温范围是0~100度,那么你就可以把100度分成4096份,当温度有100/4096度的变化时,都可以测量出来

2、ADC的参考电压:将模拟电压值转换为数字值的电压基准,由于数字信号本身不具有实际意义,仅仅表示一个相对大小,故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小,即模数转换器可进行转换的电压范围:0~REF(引脚输入的参考电压),输出的数字量则表示输入信号相对于参考信号的大小

总结:ADC是测量0~V_{ref}(参考电压)模拟量电压的器件,所以一般通过传感器把其他(温度、湿度、电流、压力等)转换为模拟量电压信号,然后使用AD转换,得到转换结果后可以反推出原始模拟量信息

1.3 ADC分类

根据A/D转换器的速度和精度,大致可以分为三类:

1、高速低(或中等)精度A/D转换器,具体的结构有全并行、两步型、插值折叠型和流水线型,此类A/D转换速度快,但是精度不高,消耗功耗大,占用的芯片面积也很大,主要用于视频处理、通信、高速数字测量仪器和雷达等领域

2、中速中精度A/D转换器,这一类型的A/D转换器是以速度来换取精度,如逐次逼近型A/D转换器,这一类A/D转换器的数据输出通常是串行的,它们的转换速度在几十kHz到几百kHz之间,精度也比高速A/D转换器高,主要用于传感器、自动控制、音频处理等领域

3、中速或低速高精度A/D转换器,此类A/D转换器速度不快,但精度很高(16~24位),如∑-\DeltaA/D转换器,该类型A/D转换器主要用于音频、通信、地球物理测量、测试仪、自动控制等领域

2 STM32 ADC

STM32F407内部集成3个最高有12位的ADC(ADC1、ADC2、ADC3),它们是逐次逼近型模数转换器

主要特性:

可配置的转换精度:6位、8位、10位、12位

转换电压范围:0~V_{REF+}(一般接到3.3V电源,不能超过STM32芯片电源电压)

19个转换通道:16个外部通道(IO引脚)+3个内部通道(温度传感器、内部电压参考、电池供电监测)

采样时间可配置

扫描方向可配置

多种转换模式:单次、连续

数据存放对齐方式可配置:左对齐、右对齐

启动转换方式可配置:软件触发、硬件触发

可设置上下门限的模拟看门狗

DMA功能

在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断

2.1 功能框图

2.1.1 ADC电源和参考电压 

名称

信号类型

备注

VREF+

正模拟参考电压输入

ADC高/正参考电压,

1.8V ≤ VREF+ ≤ VDDA

VDDA

模拟电源输入

模拟电源电压等于VDD,
全速运行时,

2.4V ≤ VDDA ≤ VDD(3.6V)
低速运行时,

1.8V ≤ VDDA ≤ VDD(3.6V)

VREF-

负模拟参考电压输入

ADC低/负参考电压,

VREF- = VSSA

VSSA

模拟电源接地输入

模拟电源接地电压等于VSS

可通过将ADC_CR2寄存器中的ADON位置1来为ADC供电,首次将ADON位置1时,会将ADC从掉电模式中唤醒

SWSTART或JSWSSTART位置1时,启动AD转换

可通过将ADON位清零来停止转换并使ADC进入掉电模式,在此模式下,ADC几乎不耗电

2.1.2 输入通道

ADC1

ADC2

ADC3

通道0

PA0

PA0

PA0

通道1

PA1

PA1

PA1

通道2

PA2

PA2

PA2

通道3

PA3

PA3

PA3

通道4

PA4

PA4

PF6

通道5

PA5

PA5

PF7

通道6

PA6

PA6

PF8

通道7

PA7

PA7

PF9

通道8

PB0

PB0

PF10

通道9

PB1

PB1

PF3

通道10

PC0

PC0

PC0

通道11

PC1

PC1

PC1

通道12

PC2

PC2

PC2

通道13

PC3

PC3

PC3

通道14

PC4

PC4

PF4

通道15

PC5

PC5

PF5

通道16

连接到内部温度传感器

连接内部VSS

连接内部VSS

通道17

连接到Vref_int

连接内部VSS

连接内部VSS

通道18

连接到VBAT

连接内部VSS

连接内部VSS

2.1.3 通道和转换顺序 

共16条复用通道,可以将转换分为两组:规则转换和注入转换,每个组包含一个转换序列,该序列可以按任意顺序在任意通道上完成

规则通道:即规规矩矩按照顺序来转换

注入通道:注入可以理解为插队,当规则转换中有注入通道插队,那么得先转换注入通道,再接着转换规则通道

规则序列:规则序列寄存器有3个,分别是SQR3、SQR2、SQR1

三个寄存器控制着16个通道的转换顺序

若使通道16第一个转换,则在SQ1[4:0]写16即可;若使通道1第八个转换,则在SQ8[4:0]写1即可;

具体使用多少个通道,由SQR1的位L[3:0]决定,最多16个通道

寄存器

寄存器位

功能

取值

SQR3

SQ1[4:0]

设置第1个转换的通道

通道0~18

SQ2[4:0]

设置第2个转换的通道

通道0~18

SQ3[4:0]

设置第3个转换的通道

通道0~18

SQ4[4:0]

设置第4个转换的通道

通道0~18

SQ5[4:0]

设置第5个转换的通道

通道0~18

SQ6[4:0]

设置第6个转换的通道

通道0~18

SQR2

SQ7[4:0]

设置第7个转换的通道

通道0~18

SQ8[4:0]

设置第8个转换的通道

通道0~18

SQ9[4:0]

设置第9个转换的通道

通道0~18

SQ10[4:0]

设置第10个转换的通道

通道0~18

SQ11[4:0]

设置第11个转换的通道

通道0~18

SQ12[4:0]

设置第12个转换的通道

通道0~18

SQR1

SQ13[4:0]

设置第13个转换的通道

通道0~18

SQ14[4:0]

设置第14个转换的通道

通道0~18

SQ15[4:0]

设置第15个转换的通道

通道0~18

SQ16[4:0]

设置第16个转换的通道

通道0~18

L[3:0]

需要转换多少个通道

1~16

注入序列:注入序列寄存器JSQR只有一个,最多支持4个通道,具体由JSQR的JL[2:0]决定

寄存器

寄存器位

功能

取值

JSQR

JSQR1[4:0]

设置第1个转换的通道

通道0~18

JSQR2[4:0]

设置第2个转换的通道

通道0~18

JSQR3[4:0]

设置第3个转换的通道

通道0~18

JSQR4[4:0]

设置第4个转换的通道

通道0~18

JL[1:0]

需要转换多少个通道

1~4

 单次转换模式:单次转换模式下,ADC执行一次转换,CONT位为0时,可通过以下方式启动:

1、将ADC_CR2寄存器中的SWSTART位置1(仅适用于规则通道)

2、将JSWSTART位置1(适用于注入通道)

3、外部触发(适用于规则通道或注入通道)

完成所选通道转换之后:

若转换了规则通道,则:

  1、转换数据存储在16位ADC_DR寄存器中

  2、EOC(转换结束)标志置1

  3、EOCIE位置1时将产生中断

若转换了注入通道,则:

  1、转换数据存储在16位ADC_JDR1寄存器中

  2、JEOC(注入转换结束)标志置1

  3、JEOCIE位置1时将产生中断

然后,ADC停止

连续循环转换模式:在连续转换模式下,ADC结束一个转换后立即启动一个新的转换,CONT位置1时,可通过外部触发或将ADC_CR2寄存器中的SWSTRT位置1来启动此模式(仅适用于规则通道)

每次转换之后:

若转换了规则通道组,则:

  1、上次转换的数据存储在16位ADC_DR寄存器中

  2、EOC(转换结束)标志置1

  3、EOCIE位置1时将产生中断

2.1.4 触发源

ADC转换可以由控制寄存器ADC_CR2的位ADON来启动,也可以由外部事件的触发来启动转换

使用控制寄存器启动时,为ADON位写1开始转换,写0停止转换

使用外部事件来触发转换,这个触发包括内部定时器触发和外部IO触发

触发源的选择由ADC_CR2的EXTSE[3:0]和JEXTSEL[3:0]位来控制,EXTSEL[3:0]用于规则通道的触发源,JEXTSEL[3:0]用于选择注入通道的触发源,选择好触发源后,控制ADC_CR2的EXTTRIG和JEXTTRIG这两位来激活触发源

若使能了外部触发事件,还可以通过设置ADC控制寄存器2,即ADC_CR2的EXTEN[1:0]和JEXTEN[1:0]来控制触发极性,可以有四种状态:禁止触发检测、上升沿检测、下降沿检测以及上升沿和下降沿均检测

2.1.5 转换时间

ADC时钟:ADC的时钟来源于ADC预分频器,是由PCLK2(APB2、84MHz)经过ADC预分频器得到,最大为36MHz,通常设置为21MHz,分频因子由ADC通用寄存器ADC_CCR的ADCPRE[1:0]设置,可设置的分频系数有2、4、6、8

采样时间:ADC需要若干个ADC_CLK周期完成对输入的电压进行采样,采样的周期可通过ADC采样时间寄存器ADC_SMPR1和ADC_SMPR2的SMP[2:0]位设置,ADC_SMPR2控制的是通道0~9,ADC_SMPR1控制的通道是10~18,每个通道可以分别设置成不同的时间进行采样,其中采样的周期最小是3个,想要通过设置达到最快的采样,就设置周期为3个,周期等于1/ADC_CLK

2.1.6 数据寄存器

当ADC转换完成后,根据转换组的不同,规则组的数据放在ADC_DR寄存器,注入组的数据放在JDRx寄存器,如果使用双重或三重模式那规则组数据是存放在通用寄存器ADC_CDR中的

如下图数据以两种方式对齐,根据ADC_CR2寄存器中的ALIGN位来选择,注入通道组的转换数据将减去ADC_JOFRx寄存器中写入的用户自定义偏移量,因此结果可以是一个负值,SEXT位表示扩展的符号值

对于规则组中的通道,不会减去任何偏移量,因此只有十二个位有效

 

 

2.1.7 模拟看门狗

如果 ADC转换的模拟电压低于阈值下限或高于阈值上限,则AWD模拟看门狗状态位会置1,这些阈值在ADC_HTR和ADC_LTR的16位寄存器的12个最低有效位中进行编程,可以使用ADC_CR1寄存器中的AWDIE位使能中断

阈值与ADC-CR2寄存器中的ALIGN位的所选对齐方式无关,在对齐之前,会将模拟电压与阈值上限和下限进行比较

 

物联沃分享整理
物联沃-IOTWORD物联网 » STM32-F407入门系列:学习ADC外设的基础知识

发表评论