ADC 实验

目录

ADC 实验

ADC 简介

单通道ADC 采集实验

ADC 寄存器

硬件设计

程序设计(还没拷贝完)

单通道ADC 采集(DMA 读取)实验

ADC & DMA 寄存器

硬件设计

多通道ADC 采集(DMA 读取)实验

ADC 寄存器

硬件设计

单通道ADC 过采样(16 位分辨率)实验

ADC 寄存器

硬件设计

内部温度传感器实验

内部温度传感器简介

硬件设计

光敏传感器实验

光敏传感器简介

硬件设计

DAC 实验

DAC 简介

DAC 输出实验

DAC 寄存器

硬件设计

DAC 输出三角波实验

DAC 寄存器

硬件设计

DAC 输出正弦波实验

DAC 寄存器

硬件设计

ADC 实验

本章,我们将介绍STM32F103 的ADC(Analog-to-digital converters,模数转换器)功能。

我们通过四个实验来学习ADC,分别是单通道ADC 采集实验、单通道ADC 采集(DMA 读取)

实验、多通道ADC 采集(DMA 读取)实验和单通道ADC 过采样(16 位分辨率)实验。

ADC 简介

ADC 即模拟数字转换器,英文详称Analog-to-digital converter,可以将外部的模拟信号转换

为数字信号。

STM32F103 系列芯片拥有3 个ADC(C8T6 只有2 个),这些ADC 可以独立使用,其中

ADC1 和ADC2 还可以组成双重模式(提高采样率)。STM32 的ADC 是12 位逐次逼近型的模

拟数字转换器。它有18 个通道,可测量16 个外部和2 个内部信号源,其中ADC3 根据CPU 引

脚的不同其通道数也不同,一般有8 个外部通道。ADC 中的各个通道的A/D 转换可以单次、

连续、扫描或间断模式执行。ADC 的结果可以以左对齐或者右对齐存储在16 位数据寄存器中。

STM32F103 的ADC 主要特性我们可以总结为以下几条:

1、12 位分辨率;

2、转换结束、注入转换结束和发生模拟看门狗事件时产生中断

3、单次和连续转换模式

4、自校准

5、带内嵌数据一致性的数据对齐

6、采样间隔可以按通道分别编程

7、规则转换和注入转换均有外部触发选项

8、间断模式

9、双重模式(带2 个或以上ADC 的器件)

10、ADC 转换时间:时钟为72MHz 为1.17us

11、ADC 供电要求:2.4V 到3.6V

12、ADC 输入范围:VREF–≤VIN≤VREF+

13、规则通道转换期间有DMA 请求产生

下面来介绍ADC 的框图:

图中,我们按照ADC 的配置流程标记了七处位置,分别如下:

①输入电压

在前面ADC 的主要特性也对输入电压有所提及,ADC 输入范围VREF–≤VIN≤VREF+,最终

还是由VREF–、VREF+、VDDA和VSSA决定的。下面看一下这几个参数的关系,如图30.1.2 所示:

从上图可以知道,VDDA和VREF+接VCC3.3,而VSSA和VREF-是接地,所以ADC 的输入范

围即0~3.3V。

②输入通道

在确定好了ADC 输入电压后,如何把外部输入的电压输送到ADC 转换器中呢,在这里引

入了ADC 的输入通道,在前面也提及到了ADC1 和ADC2 都有16 个外部通道和2 个内部通

道;而ADC3 就有8 个外部通道。外部通道对应的是上图中的ADCx_IN0、ADCx_IN1…

ADCx_IN15。ADC1 的通道16 就是内部通道,连接到芯片内部的温度传感器,通道17 连接到

Vrefint。而ADC2 的通道16 和17 连接到内部的VSS。ADC3 的通道9、14、15、16 和17 连接

到的是内部的VSS。具体的ADC 通道表见表30.1.1 所示:

③转换顺序

当ADC 的多个通道以任意顺序进行转换就诞生了成组转换,这里有两种成组转换类型:

规则组和注入组。规则组就是图中的规则通道,注入组就是图中的注入通道。为了避免大家对

输入通道,以及规则通道和注入通道的理解混淆,后面规则通道以规则组来代称,注入通道以

注入组来代称。

规则组最多允许16 个输入通道进行转换,而注入组最多允许4 个输入通道进行转换。这里

讲解一下规则组和注入组。

规则组(规则通道)

规则组,按字面理解,“规则”就是按照一定的顺序,相当于正常运行的程序,平常用到最

多也是规则组。

注入组(注入通道)

注入组,按字面理解,“注入”就是打破原来的状态,相当于中断。当程序执行的时候,中

断是可以打断程序的执行。同这个类似,注入组转换可以打断规则组的转换。假如在规则组转

换过程中,注入组启动,那么注入组被转换完成之后,规则组才得以继续转换。

为了便于理解,下面看一下规则组和注入组的执行优先级对比图,如图30.1.3 所示:

了解了规则组和注入组的概念后,下面来看看它们的转换顺序,即转换序列。转换序列可

以分为规则序列和注入序列。下面分别来介绍它们。

规则序列

规则组最多允许16 个输入通道进行转换,那么就需要设置通道转换的顺序,即规则序列。

规则序列寄存器有3 个,分别为SQR1、SQR2 和SQR3。SQR3 控制规则序列中的第1 个到第

6 个转换;SQR2 控制规则序列中第7 个到第12 个转换;SQR1 控制规则序列中第13 个到第16

个转换。规则序列寄存器控制关系汇总如表30.1.2 所示:

从上表可以知道,当我们想设置ADC 的某个输入通道在规则序列的第1 个转换,只需要

把相应的输入通道号的值写入SQR3 寄存器中的SQ1[4:0]位即可。例如想让输入通道5 先进行转换,那么就可以把5 这个数值写入SQ1[4:0]位。如果还想让输入通道8 在第2 个转换,那么

就可以把8 这个数值写入SQ2[4:0]位。最后还要设置你的这个规则序列的输入通道个数,只需

把输入通道个数写入SQR1 的SQL[3:0]位。注意:写入0 到SQL[3:0]位,表示这个规则序列有

1 个输入通道的意思,而不是0 个输入通道。

注入序列

注入序列,跟规则序列差不多,决定的是注入组的顺序。注入组最大允许4 个通道输入,

它的注入序列由JSQR 寄存器配置。注入序列寄存器JSQR 控制关系如表30.1.3 所示:

注入序列有多少个输入通道,只需要把输入通道个数写入到JL [ 1 : 0 ]位,范围是0~3。注

意:写入0 表示这个注入序列有一个输入通道,而不是0 个输入通道。这个内容很简单。编程

时容易犯错的是注入序列的转换顺序问题,下面给大家讲解一下。

如果JL[ 1 : 0 ]位的值小于3,即设置注入序列要转换的通道个数小于4,则注入序列的转

换顺序是从JSQx[ 4 : 0 ](x=4-JL[1:0])开始。例如:JL [ 1 : 0 ]=10、JSQ4 [ 4 : 0 ]= 00100、JSQ3 [ 4 : 0 ]= 00011、JSQ2 [ 4 : 0 ]= 00111、JSQ1 [ 4 : 0 ]= 00010,意味着这个注入序列的转换顺序

是:7、3、4,而不是2、7、3。如果JL[ 1 : 0 ]=00,那么转换顺序是从JSQ4 [ 4 : 0 ]开始。

④触发源

在配置好输入通道以及转换顺序后,就可以进行触发转换了。ADC 的触发转换有两种方法:

分别是通过ADON 位或外部事件触发转换。

(1)ADON 位触发转换

当ADC_CR2 寄存器的ADON 位为1 时,再独立给ADON 位写1(其它位不能一起改变,

这是为了防止误触发),这时会启动转换。这种控制ADC 启动转换的方式非常简单。

(2)外部触发转换

另一种方法是通过外部事件触发转换,例如定时器捕获、EXTI 线和软件触发,可以分为规

则组外部触发和注入组外部触发。

规则组外部触发使用方法是将EXTTRIG 位置1,并且通过EXTSET[2:0]位选择规则组启动

转换的触发源。如果EXTSET[2:0]位设置为111,那么可以通过SWSTART 为启动ADC 转换,

相当于软件触发。

注入组外部触发使用方法是将JEXTTRIG 位置1,并且通过JEXTSET[2:0]位选择注入组启

动转换的触发源。如果JEXTSET[2:0]位设置为111,那么可以通过JSWSTART 为启动ADC 转

换,相当于软件触发。

ADC1 和ADC2 的触发源是一样的,ADC3 的触发源和ADC1/2 有所不同,这个需要注意。

⑤转换时间

(1)ADC 时钟

在学习转换时间之前,我们先来了解ADC 时钟。从标号⑤框出来部分可以看到ADC 时钟是

要经过ADC 预分频器的,那么ADC 的时钟源是什么?ADC 预分频器的分频系数可以设置的

范围又是多少?以及ADC 时钟频率的最大值又是多少?下面将为大家解答。

ADC 的输入时钟是由PCLK2 经过分频产生的,分频系数是由RCC_CFGR 寄存器的

ADCPRE[1:0]位设置的,可选择2/4/8/16 分频。需要注意的是,ADC 的输入时钟频率最大值是

14MHz,如果超过这个值将会导致ADC 的转换结果准确度下降。

一般我们设置PCLK2 为72MHz。为了不超过ADC 的最大输入时钟频率14MHz,我们设

置ADC 的预分频器分频系数为6,就可以得到ADC 的输入时钟频率为72MHz/6,即12MHz。

例程中,我们也是如此设置的。

(2)转换时间

STM32F103 的ADC 总转换时间的计算公式如下:

⑥数据寄存器

ADC 转换完成后的数据输出寄存器。根据转换组的不同,规则组的完成转换的数据输出到

ADC_DR 寄存器,注入组的完成转换的数据输出到ADC_JDRx 寄存器。假如是使用双重模式,

规则组的数据也是存放在ADC_DR 寄存器。下面给大家简单介绍一下这两个寄存器。

(1)ADC 规则数据寄存器(ADC_DR)

ADC 规则组数据寄存器ADC_DR 是一个32 位的寄存器,独立模式时只使用到该寄存器低

16 位保存ADC1/2/3 的规则转换数据。在双ADC 模式下,高16 位用于保存ADC2 转换的数

据,低16 位用于保存ADC1 转换的数据。

因为ADC 的精度是12 位的,ADC_DR 寄存器无论高16 位还是低16,存放数据的位宽都

是16 位的,所以允许选择数据对齐方式。由ADC_CR2 寄存器的ALIGN 位设置数据对齐方式,

可选择:右对齐或者左对齐。

细心的朋友可能发现,规则组最多有16 个输入通道,而ADC 规则数据寄存器只有一个,

如果一个规则组用到好几个通道,数据怎么读取?如果使用多通道转换,那么这些通道的数据

也会存放在DR 里面,按照规则组的顺序,上一个通道转换的数据,会被下一个通道转换的数

据覆盖掉,所以当通道转换完成后要及时把数据取走。比较常用的方法是使用DMA 模式。当

规则组的通道转换结束时,就会产生DMA 请求,这样就可以及时把转换的数据搬运到用户指

定的目的地址存放。注意:只有ADC1 和ADC3 可以产生DAM 请求,而由ADC2 转换的数据

可以通过双ADC 模式,利用ADC1 的DMA 功能传输。

(2)ADC 注入数据寄存器x(ADC_JDRx)(x=1~4)

ADC 注入数据寄存器有4 个,注入组最多有4 个输入通道,刚好每个通道都有自己对应的

数据寄存器。ADC_JDRx 寄存器是32 位的,低16 位有效,高16 位保留,数据也同样需要选

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

对齐。

⑦中断

ADC 中断可分为三种:规则组转换结束中断、注入组转换结束中断、设置了模拟看门狗状

态位中断。它们都有独立的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值