ADC:模拟数字转换器,用于将模拟信号转换为数字形式,以便在数字系统中进行处理。
ADC工作原理:(两个阶段)
采样阶段:ADC首先对模拟信号进行采样,即在一定时间内获取信号的瞬时值。
量化阶段:采样后的模拟信号通过量化器,将其转换为相应的数字形式,这个数字形式通常是二进制代码。
ADC主要参数:
参考电压(Reference Voltage):ADC使用参考电压来确定模拟信号的幅度范围。通常,ADC需要一个已知的电压作为参考,以便将模拟电压映射到数字代码。
通道数(Number of Channels):表示ADC能够同时处理的模拟输入通道的数量。多通道ADC可以同时转换多个信号
采样率(Sampling Rate):表示ADC每秒可以进行多少次采样。采样率越高,ADC能够捕获更高频率的信号。
分辨率(Resolution):表示ADC可以将模拟信号分成多少个离散级别。以数字信号的位数
N来表示,一般有10位、12位、16位等,例如:12位ADC具有4096个离散级别(2的12次方)转换时间(Conversion Time):表示ADC从开始转换到完成转换所需的时间,转换时间通常由ADC的时钟频率和分辨率决定。
STM32的ADC:
- STM32F103系列提供了
3个ADC,精度为12位,每个ADC最多有16个通道和2个内部信号源。 - STM32F103的ADC是一种逐次逼近型模拟数字转换器。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在
16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阈值。ADC的输入时钟不得超过14****MHz,它是由PCLK2经分频产生。 
ADC常见类型:
- 逐次逼近型(Successive Approximation):这是最常见的ADC类型之一,通过逼近法逼近模拟信号的大小,STM32中的ADC通常采用这种类型。
 - Sigma-Delta型:通过比较信号的累积值和一个参考值,产生一个高精度的输出。
 - Flash型:通过一组比较器和编码器,以高速并行方式进行转换,适用于高速应用。(精度不高)
 
逐次逼近型ADC工作原理:
- 采样:先采集输入模拟电压,并保持稳定。
 - 二分搜索:
- 从**最高位(MSB)**开始,依次猜测每一位是
1还是0。 - 每次猜测后,用DAC生成对应的模拟电压,与输入电压比较:
- 若输入电压 ≥ DAC****电压,该位保留
1,否则置0。 
 - 若输入电压 ≥ DAC****电压,该位保留
 - 重复此过程,直到确定最低位(LSB)。
 
 - 从**最高位(MSB)**开始,依次猜测每一位是
 - 输出结果:最终寄存器中的数字值就是转换结果。
 
ADC可以中断:
- 转换结束中断:
- 数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。
 
 - 模拟看门狗中断:
- 当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由 ADC_LTR 和 ADC_HTR 设置。例如我们设置高阈值是2.5V,那么模拟电压超过 2.5V 的时候,就会产生模拟看门狗中断,反之低阈值也一样。
 
 
ADC可以产生DMA请求:
- 规则和注入通道转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据直接存储在内存里面。要注意的是只有ADC1和ADC3可以产生DMA请求。
 
数据对齐原理:
16位的寄存器只用到了其中的12位。
可以使用高12位,数据就是左对齐。
也可以使用低12位,数据就是右对齐。
**右对齐:**高
4位补零,读取的值就是实际值。
**左对齐:**低
4位补零,读取的值是实际值的16倍。
实际使用中,最好使用低12位,这样就得到数据可以直接使用。
ADC转换时间计算:
- ADC使用若干个ADC_CLK周期对输入电压采样。总转换时间如下计算:
 - T(CONV) = 采样时间+ 
12.5个ADC周期。 - 当ADCCLK=
14MHz,假设采样时间为1.5周期。 - T(CONV) = 1.5 + 12.5 = 14周期 = 1μs。