STM32学习:探索ADC(数字模拟转换)

ADC模数转换器

  • 什么是ADC
  • STM32的ADC
  • ADC输入电压
  • ADC特点
  • ADC输入引脚
  • ADC时钟
  • ADC输入通道
  • ADC框图分析
  • ADC时序
  • 数据对齐
  • ADC转换方式
  • 单次转换模式
  • 连续转换模式
  • 扫描模式
  • 不连续采样模式
  • ADC寄存器
  • 什么是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:使能扫描模式

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32学习:探索ADC(数字模拟转换)

    发表评论