STM32学习笔记---ADC模数转换

一、STM32-ADC模数转换概述

1、ADC简介

  • ADC的概念
    Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。
  • ADC的作用
    采集传感器的数据,测量输入电压,检查电池电量剩余,监测温湿度等。
    典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。
    STM32学习笔记---ADC模数转换_第1张图片

2、ADC的性能指标

  • 量程:能测量的电压范围
  • 分辨率:ADC的分辨率通常以输出二进制数的位数表示,位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。
  • 转化时间:模拟输入电压在允许的最大变化范围内,从转换开始到获得稳定的数字量输出所需要的时间称为转换时间

3、STM32F4-ADC配置

  • STM32F40X有3个ADC,每个可配置 12 位、10 位、8 位或 6 位分辨率
  • 每个ADC 有16个外部通道。另外还有两个内部 ADC 源 和 V BAT 通道挂在 ADC1上
  • 这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。
  • ADC具有独立模式、双重模式和三重模式,对于不同 AD转换要求几乎都有合适的模式可选
  • ADC 的结果可以左对齐或右对齐方式存储在 16位数据寄存器中。

4、ADC的功能框图

STM32学习笔记---ADC模数转换_第2张图片
1、输入电压范围
2、输入通道
3、转换顺序
4、转换时间
5、数据寄存器
6、中断
7、触发源

4.1、电压输入范围
  • ADC 输入范围为:V REF- ≤ V IN ≤ V REF+ 。由 V REF- 、V REF+ 、V DDA 、V SSA 、这四个外部引脚决定。
  • 我们在设计原理图的时候一般把 V SSA 和 V REF- 接地,把 V REF+ 和 V DDA 接 3.3V,得到ADC的输入电压范围为:0~3.3V
  • 如果我们想让输入的电压范围变宽,去到可以测试负电压或者更高的正电压,我们可以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到0~3.3V,这样 ADC 就可以测量了

STM32学习笔记---ADC模数转换_第3张图片

4.2、输入通道

每个ADC 有16个外部通道。另外还有两个内部 ADC 源 和 V BAT 通道挂在 ADC1上
STM32学习笔记---ADC模数转换_第4张图片
STM32学习笔记---ADC模数转换_第5张图片

4.3、转换顺序
  • 规则通道组:
    顾名思意,规则通道就是很规矩的意思,我们平时一般使用的就是这个通道。相当正常运行的程序。最多16个通道。
    规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中
  • 注入通道组:
    注入,可以理解为插入,插队的意思,是一种不安分的通道。相当于中断。最多4个通道。
    注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中
    STM32学习笔记---ADC模数转换_第6张图片
4.4、转换时间
  • ADC 时钟
    ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大值是 36MHz,典型值为30MHz。对于 STM32F407我们一般设置PCLK2=HCLK/2=84MHz。所以程序一般使用 4分频或者 6分频。
    STM32学习笔记---ADC模数转换_第7张图片
  • ADC 的总转换时间
    Tconv = 采样时间 + 12个周期
    STM32学习笔记---ADC模数转换_第8张图片
    最小采样时间: T = 3 + 12 = 15个周期 =0.42us(ADC时钟=36MHz下得到)
4.5、数据寄存器
  • 规则数据寄存器 ADC_DR
    在这里插入图片描述
    ADC_DR只有一个,是一个 32 位的寄存器,只有低 16 位有效并且只是用于独立模式存放转换完成数据。因为 ADC 的最大精度是 12 位,ADC_DR 是16 位有效,这样允许 ADC存放数据时候选择左对齐或者右对齐,具体是以哪一种方式存放,由 ADC_CR2的 11 位 ALIGN 设置。
  • 使用 DMA
    由于规则通道组只有一个数据寄存器,因此,对于多个规则通道的转换,使用 DMA 非常有帮助。这样可以避免丢失在下一次写入之前还未被读出的 ADC_DR 寄存器中的数据。
    在使能 DMA 模式的情况下(ADC_CR2 寄存器中的 DMA 位置 1),每完成规则通道组中的一个通道转换后,都会生成一个 DMA 请求。
4.6、中断
  • 转换结束中断
    规则通道和注入通道的数据转换结束后,都可以产生中断
  • 模拟看门狗中断
    当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断
  • 溢出中断
    如果发生 DMA传输数据丢失,会置位 ADC 状态寄存器 ADC_SR的 OVR位,如果同时使能了溢出中断,那在转换结束后会产生一个溢出中断。
  • DMA 请求
    规则和注入通道转换结束后,除了产生中断外,还可以产生 DMA请求,把转换好的数据直接存储在内存里面。
    STM32学习笔记---ADC模数转换_第9张图片
4.7、触发源
  • 软件触发
    ADC转换可以由ADC 控制寄存器 2: ADC_CR2的 ADON这个位来控制,写 1的时候开始转换,写 0 的时候停止转换
  • 外部事件触发
    触发包括内部定时器触发和外部 IO触发。触发源有很多,具体选择哪一种触发源,由 ADC控制寄存器ADC_CR2的 EXTSEL[2:0]和 JEXTSEL[2:0]位来控制
    STM32学习笔记---ADC模数转换_第10张图片

5、ADC的工作模式

STM32学习笔记---ADC模数转换_第11张图片
STM32学习笔记---ADC模数转换_第12张图片
STM32学习笔记---ADC模数转换_第13张图片
STM32学习笔记---ADC模数转换_第14张图片

二、单通道采集实例

利用ADC采集FSM4中电位器的数据
STM32学习笔记---ADC模数转换_第15张图片

1、CubeMx配置

1、将引脚配置为ADC
STM32学习笔记---ADC模数转换_第16张图片
2、使能串口
STM32学习笔记---ADC模数转换_第17张图片
3、使能时钟
STM32学习笔记---ADC模数转换_第18张图片
STM32学习笔记---ADC模数转换_第19张图片
4、ADC配置
STM32学习笔记---ADC模数转换_第20张图片
5、中断使能
STM32学习笔记---ADC模数转换_第21张图片

2、代码实现

1、初始化
STM32学习笔记---ADC模数转换_第22张图片
STM32学习笔记---ADC模数转换_第23张图片
2、数据采样
轮询方式实现
STM32学习笔记---ADC模数转换_第24张图片
STM32学习笔记---ADC模数转换_第25张图片
STM32学习笔记---ADC模数转换_第26张图片
STM32学习笔记---ADC模数转换_第27张图片

通过中断采集
STM32学习笔记---ADC模数转换_第28张图片
STM32学习笔记---ADC模数转换_第29张图片
采集完成触发中断
STM32学习笔记---ADC模数转换_第30张图片
STM32学习笔记---ADC模数转换_第31张图片
STM32学习笔记---ADC模数转换_第32张图片
STM32学习笔记---ADC模数转换_第33张图片
STM32学习笔记---ADC模数转换_第34张图片

三、多通道采集实例

利用ADC采集电位器及STM32内部温度传感器的数据
STM32学习笔记---ADC模数转换_第35张图片
STM32学习笔记---ADC模数转换_第36张图片

1、CubeMx配置

1、配置电位器和温度通道
STM32学习笔记---ADC模数转换_第37张图片
2、配置串口
STM32学习笔记---ADC模数转换_第38张图片
3、使能时钟
STM32学习笔记---ADC模数转换_第39张图片
STM32学习笔记---ADC模数转换_第40张图片
4、ADC配置,使用轮询方式:扫描模式,因为有两个通道
STM32学习笔记---ADC模数转换_第41张图片

2、代码实现

1、使能ADC,然后轮询检测
STM32学习笔记---ADC模数转换_第42张图片
ADC轮流获取电位和温度,每启动一次会自动轮询两个通道。

你可能感兴趣的:(stm32,单片机,arm)