STM32 ADC基本原理及寄存器的详细介绍

ADC简介

Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。
典型的模拟数字转换器将模拟信号转换为表示一定比例电压的数字信号。

STM32F10X ADC的特点

 12位逐次逼近型的模拟数字转换器。
 最多带3个ADC控制器
 最多支持18个通道,可最多测量16个外部和2个内部信号源。
 支持单次和连续转换模式
 转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。
 通道0到通道n的自动扫描模式
 自动校准
 采样间隔可以按通道编程
 规则通道和注入通道均有外部触发选项
 转换结果支持左对齐或右对齐方式存储在16位数据寄存器
 ADC转换时间:最大转换速率 1us。(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到。)
 ADC供电要求:2.4V-3.6V
 ADC输入范围:VREF- ≤ VIN ≤ VREF+

通道与引脚对应关系

Alt
注意:对于少于144引脚的芯片只有16个外部中断,只能研究16个不同的引脚

ADC的基本原理

ADC的框图

Alt
框图看起来比较复杂,下面来详细讲解一下。

ADC引脚

Alt
一般情况下VREF-连接VSSA,VREF+连接VDDA
注意:VDDA的输入范围是:0~3.3V

ADC开关控制

通过设置ADC_CR2寄存器的ADON位可给ADC上电。当第一次设置ADON位时,它将ADC从断电状态下唤醒
ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换
通过清除ADON位可以停止转换,并将ADC置于断电模式。在这个模式中, ADC几乎不耗电(仅几个μA)
Alt
Alt

ADC时钟配置

框图中标注的来自ADC预分频器的ADCCLK是ADC模块的时钟来源。通常,由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频器
Alt
一般情况下:不要让ADC时钟超过14MHz,否则可能不准。也就是说,如果按照默认设置PCLK2为72MHz,此时应为6分频或者8分频。

ADC中断

在框图中的最顶部,显示ADC的各种中断。很显然可以看出:规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。它们都有独立的中断使能位。
注: ADC1和ADC2的中断映射在同一个中断向量上,而ADC3的中断有自己的中断向量。
ADC_ SR寄存器中有2个其他标志,但是它们没有相关联的中断:
Alt
Alt

ADC通道选择

STM32有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
① 规则通道组:相当正常运行的程序。最多16个通道。 规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中(注入通道寄存器)
② 注入通道组:相当于中断。最多4个通道。注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中(规则通道寄存器)
因为规则通道相当于程序正常运行,而注入通道相当于中断。也就是说注入通道的转换可以打断规则通道的转换,当注入通道执行完以后继续执行规则通道
但从字面可能不太容易理解,那么我们就来借助图来理解一下。
Alt
当只有规则通道时顺序执行(自行设置顺序),当加入注入通道以后就相当于触发中断,执行完注入通道以后再执行规则通道。一个和形象的比喻就是我正在吃饭(规则通道),突然接到了快递员的电话(触发中断)说快递到了,让我去取快递,然后我下楼去取快递(注入通道)。当我收到快递回到家以后继续吃饭(规则通道)。

ADC转换方式

STM32F1的ADC的各通道可以单次,连续,扫描或者间断模式执行。

单次转换模式

Alt

连续通道转换

Alt

扫描模式

扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择。一旦这个位被设置, ADC扫描所有被ADC_SQRX寄存器(对规则通道)或ADC_JSQR(对注入通道)选中的所有通道。在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换
Alt
注意:如果在使用扫描模式的情况下使用中断,会在最后一个通道转换完毕后才会产生中断。而连续转换,是在每次转换后,都会产生中断。
如果设置了DMA位,在每次EOC后, DMA控制器把规则组通道的转换数据传输到SRAM中。而注入通道转换的数据总是存储在ADC_JDRx寄存器中

ADC的自动校准

ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。在校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差。
通过设置ADC_CR2寄存器的CAL位启动校准。一旦校准结束, CAL位被硬件复位,可以开始正常转换。建议在上电时执行一次ADC校准。校准阶段结束后,校准码储存在ADC_DR中。
注意: 1 建议在每次上电后执行一次校准。
2 启动校准前, ADC必须处于关电状态(ADON=’0’)超过至少两个ADC时钟周期

Alt

数据对齐

在这里插入图片描述

通道采样时间

ADC使用若干个ADC_ CLK周期对输入电压采样,采样周期数目可以通过ADC_ SMPR1和ADC_ SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。
总体转换时间:
Alt
例如:
在这里插入图片描述
注意:Alt

ADC相关寄存器配置

ADC_CR1寄存器

Alt
在这里插入图片描述
作用:设置扫描模式、中断允许(转换结束、注入转换结束、模拟看门狗)、双模式选择(一般选用独立模式)等。

ADC_CR2寄存器

Alt
作用:设置数据对齐方式、连续转换位、ADC启动位、外部触发转换(一般选用软件转换SWSTART、JSWSTART)。

ADC_SMPR1寄存器与ADC_SMPR2寄存器

ADC_SMPR1寄存器:

在这里插入图片描述

ADC_SMPR2寄存器:

Alt
作用:这两个寄存器非常重要(设置通道采样时间),ADC_SMPR2寄存器设置通道0–通道9的采样时间ADC_SMPR1寄存器设置通道10–通道17的采样时间。

ADC_SQR1/SQR2/SQR3规则序列寄存器

Alt
作用:设置规则序列的长度,对应序列中各个转换的通道编号(最多16个)

ADC_JSQR注入系列寄存器

Alt
作用:设置注入序列通道的长度及序列对应的各个编号(最多4个)

ADC_DR规则通道数据寄存器

Alt
作用:存放规则转换的数据

ADC_JDR注入通道数据寄存器

Alt
作用:存放注入转换的数据

ADC_SR状态寄存器

Alt
作用:存放ADC的状态位(比如:看门狗、EOC等)

你可能感兴趣的:(电机控制,stm32)