什么是ADC
ADC:(Analog to Digital Converter )模拟数字转换器,本质上是将模拟量转换为数字量。
模拟量:连续的量,温度,湿度,烟雾,电压,光; 数字量:离散的量 STM32F4这个芯片内部有一个温度传感器,开发板板载了一个型号 DS18B20的温度传感器,这个温度传感器内置了ADC,DS18B20为单总线通信。但是芯片内部也有温度传感器,只能测量芯片内部的工作温度,并且没有自带ADC。
STM32的ADC
当前芯片具有3个ADC外设,分别是ADC1,ADC2,ADC3。
12 位 ADC 是逐次趋近型模数转换器。 1、12位的ADC->是模拟量转换为数字量的数字量的最大值(0-4095)。 2、逐次趋近型->转换的数据慢慢的向真实数据靠近。 它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 VBAT 通道的信号。 1、16个外部源-》GPIO引脚 2、两个内部源-》温度传感器,芯片参考电压 3、VBAT-》纽扣电池电压,后备电源
采样模式:这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。 数据存储:ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。 十二位的ADC放入16位的数据寄存器中需要左右对齐 ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。 ADC在STM32内部是将电压值转换为数字量,这里锁输入的电压值的范围一般都是固定的,如果用户没有自定义输入电压阈值的上下限,一般输入的电压范围都是0V-3.3V。加入用户自定义输入电压阈值的下限为1.2V,上限为3.0V,这个时候ADC允许输入的电压范围是1.2V-3.0V。
ADC输入电压
ADC两个非常重要的电压,分别是正模拟参考电压VREF+和负模拟参考电压VREF-; ADC允许输入的电压范围:VREF- —— VREF+ (0V-3.3V) VREF+:1.8V——VDDA=VDD=3.3V VREF-:VSSA=VSS=0V 示例:如果输入的电压采样后为1.1V,则转换的数字量为1365;
ADC特点
● 可配置 12 位、10 位、8 位或 6 位分辨率 正常:ADC输出数字量范围:0-4095(基于分辨率12位) 8位分辨率(0-255):1.1V -》 85 分辨率越高转换的精度越高。 ● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断 ● 单次和连续转换模式 ● 用于自动将通道 0 转换为通道“n”的扫描模式=》多通道 ● 数据对齐以保持内置数据一致性 ● 可独立设置各通道采样时间 ● 外部触发器选项,可为规则转换和注入转换配置极性 ● 不连续采样模式 ● 双重/三重模式(具有 2 个或更多 ADC 的器件提供) ● 双重/三重 ADC 模式下可配置的 DMA 数据存储 ● 双重/三重交替模式下可配置的转换间延迟 ● ADC 转换类型(参见数据手册) ● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V ● ADC 输入范围:VREF— VIN VREF+ ● 规则通道转换期间可产生 DMA 请求
ADC输入引脚
目前STM32F4有3个ADC,每个ADC的外部输入源16个,可能有的引脚被三个ADC或者两个ADC共有。 假设PA0,可以是ADC1的通道1,可以是ADC2的通道5,可以是ADC3的通道10。 对于ADC1来说,有8个模拟输入通道可以被3个ADC共用;
ADC时钟
ADC 具有两个时钟方案: ● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用 此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 fPCLK2/2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。
● 用于数字接口的时钟(用于寄存器读/写访问) 此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR) 分别为每个 ADC 使能/禁止数字接口时钟。
对于ADC1来说,有8个模拟输入通道可以被3个ADC共用; 对于ADC2来说,有8个模拟输入通道可以被ADC1和ADC2共用; 对于ADC3来说,有8个模拟输入通道专门用于ADC3;
ADC输入通道
1、外部输入通道–16个 有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。 ● 一个规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。 ● 一个注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位。 如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。 2、内部输入通道–3个温度传感器、VREFINT 和 VBAT 内部通道 ● 温度传感器内部连接到通道 ADC1_IN16。 ● 内部参考电压 VREFINT 连接到 ADC1_IN17。 ● VBAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。 注意: 温度传感器、VREFINT 和 VBAT 通道只在主 ADC1 外设上可用
ADC框图分析
ADC的触发转换方式: 1、通用定时器触发ADC转换,这里没有基本定时器,因为基本定时器智能触发DAC转换; 2、外部中断可以产生一个触发脉冲,触发ADC转换; 软件触发。
ADC时序
数据对齐
ADC转换方式
ADC转换模式:1、单次转换 2、连续转换模式
单次转换模式
在规则通道中:ADC1_CH1 单次:在单次转换模式下,ADC 执行一次转换。给一次触发信号,触发一次ADC转换。 第一次:采集ADC1_CH1的模拟量数据 -> 软件触发 -> 模拟量数据转换为数字量 ->保存到DR; 第二次:采集ADC1_CH1的模拟量数据 -> 软件触发 -> 模拟量数据转换为数字量 ->保存到DR;
配置单次转换模式:CONT 位为 0 时,可通过以下方式启动此模式: ● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道),开启规则通道;软件触发转换 ● 将 JSWSTART 位置 1(适用于注入通道) ,开启注入通道;软件触发转换 ● 外部触发(适用于规则通道或注入通道)。定时器触发,外部中断触发。 完成所选通道的转换之后:
● 如果转换了规则通道: — 转换数据存储在 16 位 ADC_DR 寄存器中 — EOC(转换结束)标志置 1 — EOCIE 位置 1 时将产生中断 ● 如果转换了注入通道: — 转换数据存储在 16 位 ADC_JDR1 寄存器中 — JEOC(注入转换结束)标志置 1 — JEOCIE 位置 1 时将产生中断 然后,ADC 停止。
连续转换模式
在规则通道中:ADC1_CH1 在连续转换模式下CONT 位为 1时,ADC 结束一个转换后立即启动一个新的转换。将ADC配置连续模式,只需要在第一次转换时给触发信号,后面不需要再给。只适用于规则通道。 第一次:采集ADC1_CH1的模拟量数据 -> 软件触发 -> 模拟量数据转换为数字量 ->保存到DR; 第二次:采集ADC1_CH1的模拟量数据 -> 模拟量数据转换为数字量 ->保存到DR;
● 如果转换了规则通道组: — 上次转换的数据存储在 16 位 ADC_DR 寄存器中 — EOC(转换结束)标志置 1 — EOCIE 位置 1 时将产生中断
扫描模式
扫描模式是针对于多通道,在规则通道中:ADC1_CH1 ADC1_CH2 ADC1_CH3 为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。 1、单次扫描模式 第一次触发:ADC1_CH1 -> ADC1_CH2 -> ADC1_CH3 -> 等待第2次触发 ->ADC停止 第二次触发:ADC1_CH1 -> ADC2_CH4 -> ADC1_CH7 -> 等待第3次触发 2、连续扫描模式 第一次触发:ADC1_CH1 -> ADC1_CH2 -> ADC1_CH3 ->(转换完成) -> ADC1_CH1 -> ADC1_CH2 -> ADC1_CH3 ->连续转换。
扫描模式的配置: 通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。
不连续采样模式
ADC寄存器
数据寄存器ADC_DR
位 15:0 DATA[15:0]:规则数据 (Regular data) 这些位为只读。它们包括来自规则通道的转换结果。数据有左对齐和右对齐两种。 状态寄存器ADC_SR 位 1 EOC:规则通道转换结束 (Regular channel end of conversion) 规则组通道转换结束后,硬件将该位置 1。通过软件或通过读取 ADC_DR 寄存器将该位清零。 0:转换未完成 (EOCS=0) 或转换序列未完成 (EOCS=1) 1:转换已完成 (EOCS=0) 或转换序列已完成 (EOCS=1)
控制寄存器2 ADC_CR2 位 10 EOCS:结束转换选择 (End of conversion selection) 此位由软件置 1 和清零。 0:在每个规则转换序列结束时将 EOC 位置 1。溢出检测仅在 DMA=1 时使能。 1:在每个规则转换结束时将 EOC 位置 1。使能溢出检测。 位 1 CONT:连续转换 (Continuous conversion) 此位由软件置 1 和清零。该位置 1 时,转换将持续进行,直到该位清零。 0:单次转换模式 1:连续转换模式 位 30 SWSTART:开始转换规则通道 (Start conversion of regular channels) 通过软件将该位置 1 可开始转换,而硬件会在转换开始后将该位清零。 0:复位状态 1:开始转换规则通道 注意:该位只能在 ADON = 1 时置 1,否则不会启动转换。
控制寄存器1 ADC_CR1 位 8 SCAN:扫描模式 (Scan mode) 通过软件将该位置 1 和清零可使能/禁止扫描模式。在扫描模式下,转换通过 ADC_SQRx 或 ADC_JSQRx 寄存器选择的输入。 0:禁止扫描模式 1:使能扫描模式
|