ADC

ADC
KayerADC
1. ADC介绍
Analog-to-Digital Converter(模拟数字转换器),用于将模拟信号转换为数字形式,以便在数字系统中进行处理。一般传感器会把观测的物理量转换为电压值,也就是所谓的模拟信号。ADC转换器就是把模拟的物理量(电压值)转换为计算机认识的数字量。
ADC有三种常见类型:
- 逐次逼近型(Successive Approximation)
- 这是最常见的ADC类型之一,通过逼近法逼近模拟信号的大小
- STM32中的ADC通常采用这种类型。
- Sigma-Delta型
- 通过比较信号的累积值和一个参考值,产生一个高精度的输出。
- Flash型
- 通过一组比较器和编码器,以高速并行方式进行转换,适用于高速应用。
ADC建立了模拟量和数字量之间的联系。
STM32F103系列提供了3个ADC,精度为12位,每个ADC最多有16个通道和2个内部信号源。
STM32F103的ADC是一种逐次逼近型模拟数字转换器。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阈值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。
2. ADC工组原理
2.1 两个阶段
- 采样阶段
- ADC首先对模拟信号进行采样,即在一定时间内获取信号的瞬时值。
- 量化阶段
- 采样后的模拟信号通过量化器,将其转换为相应的数字形式。
- 这个数字形式通常是二进制代码.
2.2 主要参数
参考电压(Reference Voltage)
- ADC使用参考电压来确定模拟信号的幅度范围。
- VDDA 模拟电源正
- VSSA 模拟电源负
- VREF+ 模拟参考电压正
- VREF- 模拟参考电压负
- 在实际电路设计中
- 一般 VREF+ 和 VDDA 接3.3V
- 一般VREF-和VSSA接地
- 所以ADC的测量范围是0-3.3V
通道数(Number of Channels)
- 表示ADC能够同时处理的模拟输入通道的数量,一共18个。
- 16个外部通道(ADCx_IN0-ADCx_IN15),对应着16个IO口
- 内部温度传感器(测量芯片温度),通道16
- 内部参考电压,通道17
- 多通道ADC可以同时转换多个信号
- 两个通道组
- 注入通道
- 注入通道组内的通道转换完成之后,会把转换后的结果存储到注入通道数据寄存器中。
- 注入组允许最多4个通道
- 注入通道数据寄存器有4个,不用担心数据被覆盖问题。
- 规则通道
- 规则通道组内的通道转换完成之后,会把转换后的结果存储到规则通道数据寄存器中。
- 规则组允许最多16个通道
- 由于规则通道寄存器寄存器只有一个,当多路要转换时,寄存器的内的值要及时取走,否则后面通道转换结果会覆盖前面的结果
- 一般会使用DMA把数据寄存器的数据取走
- 注入通道的转换可以打断规则通道的转换
- 注入通道
- 表示ADC能够同时处理的模拟输入通道的数量,一共18个。
采样率(Sampling Rate)
- 表示ADC每秒可以进行多少次采样。
- 采样率越高,ADC能够捕获更高频率的信号。
转换时间(Conversion Time)
- 表示ADC从开始转换到完成转换所需的时间。
- 转换时间通常由ADC的时钟频率和分辨率决定。
分辨率(Resolution)
- 表示ADC可以将模拟信号分成多少个离散级别。
- 以数字信号的位数N来表示,一般有10位、12位、16位等
- 12位ADC具有4096个离散级别。
触发源
- 软件触发
- 操作控制寄存器ADC_CR2的一些相关位。
- 硬件触发
- 使用定时器的TRGO触发。
- 软件触发
转换方式
ADC_CR1寄存器SCAN:扫描模式 (Scan mode)
- 开启扫描模式: 多通道,顺序扫描,挨个转换。
- 关闭扫描模式: 只转换通道组中第一个通道。
ADC_CR2寄存器CONT:连续转换 (Continuous conversion)
- 开启连续模式:通道组内转换一轮之后,继续转换下一轮。不会停。
- 关闭连续模式:通道组内转换一轮之后,停止转换,等待下次启动。(单次转换)
3. 逐次逼近型
ADC核心组件
- 比较器
- 用来比较电压大小
- 有两个输入端
- +输入端
- -输入端
- 有一个输出端
- 若 + > - 输出高电平
- 若 + < - 输出低电平
- 8位寄存器
- 用来存放比较结果
- 从左往右置位
- 高电平为1,低电平为0
- 8位DA转换器
- 根据参考电压把寄存器的值换算成模拟电压
- 转换后的电压接入到比较器的 – 端,与 + 端的待测电压进行比较
- 逻辑控制电路
- 输入高电平,说明待测电压大
- 输入低电平,说明待测电压小
- 输出部分
- 根据8位寄存器的值,输出最终转换后的结果
3.1 转换过程分析
假设参考标准电压为255V,ADC的分辨率为8位。
8位寄存器最高位置1 0x80
传递给DA转换器,得到电压位 0x80=128V
比较器进行比较 33V < 128V,输出低电平
逻辑控制电路刚才的位置0,下一位置1 0x40
0x40 = 64V
比较器进行比较 33V < 64V,输出低电平
逻辑控制电路刚才的位置0,下一位置1 0x20
0x20 = 32V
比较器进行比较 33V > 32V,输出高电平
逻辑控制电路刚才的位置1保留,下一位置1 0x30
0x30 = 48V
比较器进行比较 33V < 48V,输出低电平
逻辑控制电路刚才的位置1去掉,下一位置1 0x28
….
经过逐步逼近,一直比较到最后一位:0x21=33V
最后把寄存器的值输出
4. 中断
- 转换结束中断
数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。
- 模拟看门狗中断
当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由 ADC_LTR 和 ADC_HTR 设置。例如我们设置高阈值是2.5V,那么模拟电压超过 2.5V 的时候,就会产生模拟看门狗中断,反之低阈值也一样。
5. DMA 请求
规则和注入通道转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据直接存储在内存里面。要
只有ADC1和ADC3可以产生DMA请求。
6. 数据对齐
16位的寄存器只用到了其中的12位。
可以使用高12位,数据就是左对齐。
也可以使用低12位,数据就是右对齐。
- 右对齐:高4位补零,读取的值就是实际值。
- 左对齐:低4位补零,读取的值是实际值的16倍。
7. 转换时间
ADC使用若干个ADC_CLK周期对输入电压采样。总转换时间如下计算:
TCONV = 采样时间 + 12.5个ADC周期。
当ADCCLK=14MHz,假设采样时间为1.5周期。
TCONV = 1.5 + 12.5 = 14周期 = 1μs。
8. 电压转换
模拟电压经过ADC转换后,是一个12位的数字值,如果通过串口以16进制打印出来的话,可读性比较差,那么有时候就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(用万用表测)对比,看看转换是否准确。
一般在设计原理图的时候会把ADC的输入电压范围设定在:0~3.3v,因为ADC是12位的,那么12位满量程对应的就是 3.3V,12位满量程(全部是1)对应的数字值是:2^12-1。数值 0 对应的就是0V。
如果转换后的数值为X ,X对应的模拟电压为 Y,那么会有这么一个等式成立:(2^12 -1)/ 3.3 = X / Y,所以Y =(3.3 * X )/(2^12 – 1)= 3.3 * X / 4095。