在正式的学习如何编写ADC代码时我们先来学习一下ADC的基础知识部分,只有掌握好了这些基础知识才能顺利的进行后面的代码编写。
ADC 指的是模数转换器(Analog-to-Digital Converter),它是一种用于将模拟信号转换为数字信号的电子设备或电路。
模拟信号是连续变化的信号,可以取无限个可能的值,而数字信号则是离散的,只能表示有限个数值。ADC 的作用就是将模拟信号转换为离散的数字信号,以便数字电子系统进行处理、存储和传输。
ADC 的基本工作原理是通过一系列的采样和量化过程来实现模拟到数字的转换:
1.采样(Sampling):ADC 根据一定的时间间隔,从模拟信号中获取一系列离散的采样点。采样率决定了采样点的密度,较高的采样率可以更精确地表示原始模拟信号。
2.量化(Quantization):采样得到的模拟信号样本通常是连续的,量化则将每个采样点映射为一个特定的数字值。量化过程将连续的模拟信号离散化,并分配给每个样本一个数字值。
3.编码(Encoding):编码将量化后的数字值表示为二进制形式,以便于数字系统处理。常见的编码方式包括无符号二进制、补码和格雷码等。
ADC 的性能特性受到多个指标的影响,包括分辨率(Resolution)、采样率(Sampling Rate)、信噪比(Signal-to-Noise Ratio,SNR)、线性度(Linearity)和动态范围(Dynamic Range)等。
应用领域广泛的 ADC 包括音频处理、数据采集、传感器测量、工业控制、通信系统等。根据不同应用的需求,ADC 可以有不同的类型和工作原理,如逐次逼近型 ADC、积分型 ADC、闩锁型 ADC、ΔΣ(Delta-Sigma) ADC 等。
总结来说,ADC 是将模拟信号转换为数字信号的设备,广泛应用于各个领域的电子系统中,使得我们能够对模拟信号进行准确地采集、处理和分析。
在手册中我们可以看到这款STM32F1的ADC位数是12bit的。
ADC 的分辨率决定了它能够将模拟信号转换为多少不同的数字值。12 位的分辨率意味着 ADC 能够将模拟信号分为 2^12(4096)个离散的量化级别。每个量化级别在数字表示上对应于一个不同的数字值。
这个 ADC 具有 16 个复用通道,可以将转换分为两个组:常规组和注入组。一个组包含一系列的转换,可以在任何通道上以任意顺序进行。例如,可以按照以下顺序进行转换:Ch3, Ch8, Ch2, Ch2, Ch0, Ch2, Ch2, Ch15。
常规组(Regular Group):常规组允许进行按照一定顺序执行的转换。可以选择将转换进行到任意通道,并且可以定义转换的顺序。在常规组中,可以设置转换的采样时间、分辨率和触发方式等参数。通过配置 ADC 控制器和寄存器,可以定义常规组的转换顺序和通道的使用。
注入组(Injected Group):注入组也允许进行按照一定顺序执行的转换,但与常规组不同,注入组通常用于特殊的转换需求,如快速转换、优先级更高的转换等。注入组可以在常规组的转换之间进行插入,以满足特定的应用需求。与常规组类似,可以设置注入组转换的参数和顺序。
单次转换模式是一种简单的模式,ADC在执行一次转换之后就会停止工作。在单次转换模式下,ADC可以执行以下操作:
通过设置ADC_CR2寄存器中的ADON(ADC使能)位启动转换。对于常规通道,这是最常用的方法。
通过外部触发器(external trigger)启动转换。外部触发器可以是来自其他外设的信号或特定的事件触发源。
一旦选定的通道的转换完成,ADC会采取以下操作:
转换的结果将存储在16位的ADC_DR(数据寄存器)中。
EOC(End Of Conversion)标志位将被设置,指示转换已完成。
如果已启用中断,将产生一个中断以通知转换完成。
单次转换模式适用于那些只需要在特定事件或时间间隔内获取单次模拟信号的应用场景。例如,对于传感器数据采集、触发式数据采集或周期性地获取模拟信号的要求较低的应用。
连续转换模式允许ADC连续不断地执行模数转换,以持续地获取模拟信号的变化。在连续转换模式下,ADC可以执行以下操作:
通过设置ADC_CR2寄存器中的ADON位启动转换(常规通道)。
通过外部触发器启动转换(常规或注入通道)。
在连续转换模式下,ADC将不断地进行转换,以持续获取选定的通道的模拟信号,直到被显式地停止或发生特定的事件(如中断触发)。
连续转换模式适用于需要持续监测模拟信号变化的应用场景。例如,声音或图像处理、实时控制系统或需要高速数据采集的应用。
ADC的扫描模式(Scan mode)是一种工作模式,允许ADC按照预定义的通道顺序对多个通道进行连续的模数转换。
在扫描模式下,ADC可以按照用户指定的通道顺序连续地进行模数转换,而不需要在每次转换中重新配置通道。以下是扫描模式的关键要点:
通道顺序:用户可以定义一组转换通道,并按照特定的顺序执行转换。通常,这个顺序由用户在配置ADC时设置的通道顺序寄存器(例如ADC_SQRx)来确定。
转换顺序:ADC按照预定义的通道顺序执行模数转换。对于每个通道,ADC执行一次转换,并在完成后自动转到下一个通道进行转换,直到转换完所有指定的通道。
转换结果:每个转换的结果将存储在相应的数据寄存器(例如ADC_DR)中。用户可以使用这些数据寄存器来读取每个通道的转换结果。
扫描结束:一旦完成了指定的所有通道的转换,ADC将发出一个扫描结束标志(Scan End Flag)来指示扫描的完成。
扫描模式适用于需要同时或按照特定顺序转换多个模拟信号的应用。它方便地允许将多个模拟输入通道连接到单个ADC,并按照预定义的顺序进行连续转换。例如,当需要监测多个传感器输入或以特定顺序采集不同模拟信号时,扫描模式是非常有用的。
左对齐(Left-Alignment):
在左对齐模式下,ADC转换结果的最高有效位(MSB)被放置在数据寄存器的最高位(最左侧),而低有效位(LSB)则按照递增的顺序排列在其右侧。也就是说,数据的高位位于数据寄存器的高位,低位填充为零。
D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0
其中D11到D0表示转换结果的有效位。
左对齐的优点是可以直接将转换结果的高位作为有效数据进行处理,对于一些位操作和直接输出到外设的应用比较方便。
在右对齐模式下,ADC转换结果的最低有效位(LSB)被放置在数据寄存器的最低位(最右侧),而高位则按照递增的顺序排列。也就是说,数据的低位位于数据寄存器的低位,高位填充为零。
对于12位ADC转换结果的右对齐模式,排列可能如下所示:
0 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
其中D11到D0表示转换结果的有效位。
右对齐的优点是可以将转换结果直接与常量进行比较或进行数值计算,因为有效位的位置是固定的,更方便进行数据处理。
本篇文章讲解了STM32的ADC的一些基础知识,大家有必要掌握一下。