自学内容网 自学内容网

ADC(Analog-to-digital converter)模拟-数字转换器

ADC简介

ADC(Analog-to-Digital Converter),即模拟-数字转换器,是一种将模拟信号转换成数字信号的电子设备。它在现代电子系统中扮演着至关重要的角色,广泛应用于传感器信号处理、通信系统、医疗设备、工业自动化等多个领域

ADC的工作原理

ADC的工作原理主要包括以下几个步骤:

采样(Sampling)

  • 采样是将连续的模拟信号转换为一系列离散的信号值的过程。这个过程需要一个采样器,它在预定的时间间隔内测量模拟信号的幅度。
  • 奈奎斯特采样定理指出,为了无失真地重建原始信号,采样频率必须至少是信号最高频率的两倍。这是为了避免混叠现象,即高频信号在采样后错误地表现为低频信号。

保持(Hold)

  • 保持电路的作用是在采样瞬间捕获模拟信号的值,并在量化和编码过程中保持这个值不变。这通常通过一个采样-保持电路实现,该电路包括一个电容来存储电压,一个开关(如场效应管)来捕获电压,以及一个运算放大器来提供一个低阻抗的输出,从而减少电容上的电压变化。
  • 采样保持电路确保在ADC完成量化和编码的过程中,输入信号的值不会因外部变化而改变。

量化(Quantization)

  • 量化是将连续的模拟信号幅度映射到有限数量的离散电平上的过程。这个过程涉及到将采样值与预定义的量化电平进行比较,并选择最接近的电平。
  • 量化误差是量化过程中不可避免的,它是由模拟信号的连续值与量化电平之间的差异引起的。量化误差的大小与ADC的分辨率有关,分辨率越高,量化误差越小。

编码(Encoding)

  • 编码是将量化后的离散电平转换为数字代码的过程。最常见的编码方式是二进制编码,其中每个量化电平都对应一个唯一的二进制数。
  • 编码的目的是为了使数字系统能够处理和存储这些量化值。编码的位数决定了ADC的分辨率,例如,一个8位的ADC可以提供256个不同的量化电平。

ADC的分类

逐次逼近型ADC(Successive Approximation Register, SAR ADC):

工作原理:逐次逼近型ADC通过一个逐次逼近寄存器(SAR)来比较输入信号与内部数字模拟转换器(DAC)产生的电压。SAR从最高位开始,逐位确定输入信号的数字值,直到所有位都被确定。

特点:这种类型的ADC具有较高的分辨率和相对较快的转换速度。它们通常用于需要中等速度和高分辨率的应用,如音频处理和精密测量。

应用场景:电池供电设备、便携式设备、音频设备等。

闪存型ADC(Flash ADC):

工作原理:闪存型ADC使用一组并行的比较器,每个比较器都有一个唯一的参考电压。输入信号同时与所有比较器的参考电压进行比较,比较结果通过编码器转换为数字输出。

特点:由于所有比较器同时工作,闪存型ADC可以实现非常快的转换速度,通常在纳秒级别。但是,由于需要大量的比较器,这种ADC的功耗和成本相对较高。

应用场景:高速数据采集系统、通信系统、雷达系统等。

逐步逼近型ADC(Stepping ADC):

逐步逼近型ADC与逐次逼近型ADC类似,但它们的名称可能会引起一些混淆。逐步逼近型ADC通常指的是一种特定的逐次逼近ADC,其中比较过程是逐步进行的,每一步都调整DAC的输出以更接近输入信号。

特点:逐步逼近型ADC在转换速度和功耗之间提供了良好的平衡,适用于需要快速转换和高分辨率的应用。

应用场景:数字相机、精密测量仪器、工业控制系统等。

除了以上ADC,还有其他类型的ADC,例如:

  • Sigma-Delta ADC:通过过采样和噪声整形技术来提高分辨率,适用于音频和高精度测量。
  • Pipeline ADC:将转换过程分成多个阶段,每个阶段处理一部分转换,适用于高速和高分辨率应用。
  • CMOS ADC:使用互补金属氧化物半导体技术制造,具有低功耗和低成本的特点,适用于便携式和电池供电设备。

ADC的主要技术指标

测量范围(Input Range):也称为量程或输入电压范围,它指明了ADC能够处理的模拟信号的最大和最小电压值。

分辨率(Resolution):分辨率是指ADC能够区分的最小电压变化,通常以位数(bit)来表示。例如,一个8位ADC有256个可能的输出值,而一个16位ADC有65536个可能的输出值。分辨率越高,ADC能够提供的电压级别就越多,转换精度也就越高。

转换速度(Conversion Speed):转换速度是指ADC完成一次从模拟信号到数字信号的转换所需的时间,这个时间可以短至几纳秒到几毫秒不等。

采样时间(Sampling Time):采样时间是指ADC在采样阶段捕获并保持输入信号的瞬间值的时间。在这段时间内,输入信号的值被存储,以便进行量化和编码。采样时间的长短会影响ADC对快速变化信号的响应能力。

采样率(Sampling Rate):采样率是指在单位时间内(通常是一秒)ADC能够进行的采样次数。它与转换速度有关,但并不完全相同。采样率受到ADC的转换速度和系统设计的限制。

除了这些指标,ADC的其他重要特性还包括:

  • 量化误差(Quantization Error):由于模拟信号的连续性和数字信号的离散性之间的差异,量化过程中产生的误差。
  • 线性度(Linearity):ADC输出与输入之间的关系的线性程度。理想的ADC应该具有完美的线性关系。
  • 噪声(Noise):ADC在转换过程中引入的额外电压波动,这会降低信号的信噪比。
  • 功耗(Power Consumption):ADC在工作时消耗的电能,这对于便携式和电池供电的设备尤为重要。

I.MX6ull ADC介绍

i.MX6ULL处理器中的ADC(模拟-数字转换器)是一个逐次逼近型ADC,专为集成在微控制器系统级芯片(SoC)中运行而设计。

ADC的特性如下:

  • 配置寄存器:用于设置ADC的工作参数,如分辨率、采样率等。
  • 32位、字对齐、字节使能寄存器:支持32位数据宽度的寄存器,但不支持字节和半字访问。
  • 线性逐次逼近算法:采用逐次逼近算法进行模数转换,最高可达12位分辨率,具有10位或11位的准确度。
  • 最高10位有效位数(ENOB):在专用的单端输入通道上,可以达到10位的有效位数。
  • 最高1MS/s采样率:ADC的采样速度可以达到每秒100万个样本。
  • 最多8个单端外部模拟输入:ADC可以接收最多8个单端模拟信号输入。
  • 单次或连续转换模式:支持单次转换和连续转换,单次转换完成后自动返回空闲状态。
  • 输出模式:以右对齐无符号格式输出,包括:
    • 12位
    • 10位
    • 8位
  • 可配置的采样时间和转换速度/功耗:用户可以根据需要调整采样时间和转换速度,以优化功耗。
  • 转换完成和硬件平均完成标志及中断:提供转换完成和硬件平均完成的状态标志,以及相应的中断功能。
  • 输入时钟可选择多达三个源:ADC的输入时钟可以从三个不同的时钟源中选择。
  • 异步时钟源:为了降低噪声,可以选择异步时钟源,并有选项输出时钟。
  • 自动比较并中断:支持自动比较功能,可以设置为小于、大于、等于、在范围内或超出范围的可编程值,并在满足条件时产生中断。
  • 硬件平均函数
  • 自校准模式

ADC states module(ADC的状态模块)

There are three possible states which ADC module can be in:
Disabled State(禁用状态):
The ADC module is disabled during reset or stop mode (if internal clock is not selected as source of clock).
ADC模块在复位或停止模式下被禁用(如果没有选择内部时钟作为时钟源)。
Idle State(空闲状态):
The module is idle when a conversion has completed and another conversion has not been initiated. When idle and the asynchronous clock output enable is disabled (ADACKEN = 0), the module is in its lowest power state.
当一个转换完成而另一个转换尚未启动时,模块处于空闲状态。当空闲且异步时钟输出使能(ADACKEN = 0)被关闭时,模块处于最低功耗状态。
Conversion State(转换状态):
The ADC can perform an analog-to-digital conversion on any of the software selectable channels. All modes perform conversion by a successive approximation algorithm.
ADC可以在任何软件选择通道上执行模数转换。所有模式都通过逐次逼近算法进行转换。

ADC框图

与GPIO管脚相关的ADC外部信号 

NOTE

The ADC input signals connect to GPIO[0:9]. The GPIO default configuration is enabled for keeper. The keeper causes an undesired jump behavior in ADC. To avoid the problem, disable keeper before starting ADC. For detailed information about keeper, refer to the GPIO block.
i.MX6ULL中的ADC输入信号连接到GPIO[0:9]。GPIO的默认配置是启用了keeper功能。Keeper功能可能会导致ADC出现不希望的跳变行为。为了避免这个问题,在开始ADC转换之前需要禁用keeper。

Keeper功能

  • 定义:Keeper功能允许GPIO引脚在微控制器进入低功耗模式时保持其逻辑电平,而不是进入高阻态。
  • 目的:这在需要保持引脚状态的场景中非常有用,比如在电源管理或低功耗模式下保持某些信号的稳定性。

对ADC的影响

  • 当GPIO引脚配置为ADC输入时,Keeper功能可能会导致ADC读数出现跳变或不稳定。这是因为Keeper功能可能会引入额外的噪声或干扰,影响模拟信号的稳定性。
  • 为了获得准确的ADC转换结果,通常需要确保输入信号的稳定性和纯净性。

Clock Select and Divide Control (ADC时钟选择和分频控制 )

The ADC digital module has two clock sources:
• IPG clock
• Internal clock (ADACK) is a dedicated clock used only by the ADC

i.MX6ULL的ADC数字模块有两个主要的时钟源:

IPG时钟(Integer Prescaler General clock):这是SOC(系统级芯片)中的一个通用时钟源,可以被SOC中的多个外设使用。

内部时钟(ADACK):这是一个专门为ADC设计的时钟源,由ADC模块内部生成。ADACK时钟允许ADC在SoC的其他部分处于低功耗模式时继续运行,例如,当MCU处于停止模式时。使用ADACK时钟可以减少ADC转换过程中的噪声,因为它可以独立于可能受到其他外设活动影响的IPG时钟。

ADC digital block generates IPG clock/2 by internally dividing the IPG clock.  The final clock is chosen from the following clocks.
• IPG clock
• IPG clock divided by 2
• ADACK

i.MX6ULL的ADC数字模块通过内部将IPG时钟(Integer Prescaler General clock)分频来生成IPG时钟/2的时钟信号。ADC的最终时钟可以从以下时钟源中选择:

  • IPG时钟
  • IPG时钟除以2:ADC数字模块可以生成IPG时钟的一半
  • ADACK

时钟源选择:ADC的时钟源通过ADC配置寄存器(ADC_CFG)中的ADICLK[1:0]位来选择,有以下三种选项:

00:选择IPG时钟作为ADC的时钟源

01:选择IPG时钟除以2作为ADC的时钟源。

11:选择异步时钟(ADACK)作为ADC的时钟源。选项

10:   保留的。

IPG时钟:这是复位后的默认选择。

IPG时钟除以二:适用于较高的IPG时钟速率,允许通过ADIV位进一步分频,最大可分频至IPG时钟的1/16。

异步时钟(ADACK):由ADC模块内部的时钟源生成。即使在MCU处于停止模式时,也可以使用ADACK作为输入时钟源进行转换。

时钟分频:选定的时钟源将根据ADC_CFG中的ADIV[1:0]位的配置进行分频。分频选项包括:

00:不分频(除以1)。

01:除以2。

10:除以4。

11:除以8。

时钟频率要求:选定的时钟频率必须在ADCK(ADC时钟)的指定频率范围内。如果时钟太慢,ADC可能无法按照规格执行;如果时钟太快,则必须通过ADIV位进行分频以降低到适当的频率。

Hardware Average Function 硬件平均函数

The hardware average function can be enabled (AVGE=1) to perform a hardware average
of multiple conversions. The number of conversions is determined by the AVGS[1:0]
bits, which select 4, 8, 16 or 32 conversions to be averaged. While the hardware average
function is in progress the ADACT bit will be set.
After the selected input is sampled and converted, the result is placed in an accumulator
from which an average is calculated once the selected number of conversions has been
completed. When hardware averaging is selected the completion of a single conversion
will not set the COCOn bit.
If the compare function is either disabled or evaluates true, after the selected number of
conversions are completed, the average conversion result is transferred into the data
result registers, ADC_Rn , and the COCOn bit is set. An ADC interrupt is generated upon
the setting of COCOn if the respective ADC interrupt is enabled (AIENn=1).
硬件平均功能可以被启用(AVGE=1),以对多个转换结果进行硬件平均。平均的转换次数由AVGS[1:0]位决定,可以选择4、8、16或32次转换进行平均。在硬件平均功能执行期间,ADACT位将被设置。
在对选定的输入进行采样和转换后,结果被放入一个累加器中,一旦完成选定的转换次数,就会从该累加器中计算出平均值。如果选择了硬件平均功能,单个转换的完成不会使COCOn位被置位。
如果比较函数被禁用或评估为真,在完成选定次数的转换后,平均转换结果被传输到数据结果寄存器ADC_Rn中,并且设置COCOn位。如果相应的ADC中断被启用(AIENn=1),则在设置COCOn位时会触发ADC中断。

Automatic Compare Function 自动比较功能

The compare function can be configured to check if the result is less than or greater than or equal to a single compare value, or if the result falls within or outside a range determined by two compare values. The compare mode is determined by ACFGT, ACREN and the values in the compare value register (ADC_CV).

比较功能可以被配置为检查结果是否小于、大于或等于一个单一的比较值,或者结果是否落在由两个比较值确定的范围内或范围外。比较模式由ADCx_GC寄存器中的ACFGT、ACREN位和比较值寄存器(ADC_CV)中的值决定。

ACFGT = 0, ACREN = 0, CV1 相对于 CV2 无特定关系

功能: 小于阈值比较模式描述: 如果结果小于CV1寄存器的值,则比较为真。

ACFGT = 1, ACREN = 0, CV1 相对于 CV2 无特定关系

功能: 大于或等于阈值比较模式描述: 如果结果大于或等于CV1寄存器的值,则比较为真。

ACFGT = 0, ACREN = 1, CV1 小于或等于 CV2

功能: 超出范围,不包括边界比较模式描述: 如果结果小于CV1或者结果大于CV2,则比较为真。

ACFGT = 0, ACREN = 1, CV1 大于 CV2

功能: 在范围内,不包括边界比较模式描述: 如果结果小于CV1并且结果大于CV2,则比较为真。

ACFGT = 1, ACREN = 1, CV1 小于或等于 CV2

功能: 在范围内,包括边界比较模式描述: 如果结果大于或等于CV1并且结果小于或等于CV2,则比较为真。

ACFGT = 1, ACREN = 1, CV1 大于 CV2

功能: 超出范围,包括边界比较模式描述: 如果结果大于或等于CV1或者结果小于或等于CV2,则比较为真。

Calibration Function 校准功能

The ADC contains a self-calibration function that is required to achieve the specified accuracy.   Calibration should be run or valid calibration values should be written after power up and system reset (as the calibration register will be reset on reset assertion) with specified settings before any conversion is initiated.   The calibration function sets the calibration value at the end of running the full calibration sequence in ADC_CAL register.   The user must configure the ADC correctly prior to starting the calibration process, and must allow the process to run the full calibration sequence by checking the status of ADC_GC[CAL] and ADC_GS[CALF] so that the generated calibration value can be loaded.

ADC包含一个自校准功能,需要达到指定的精度。在启动任何转换之前,应在通电和系统复位(因为校准寄存器将在复位断言时复位)后以指定的设置运行校准或写入有效的校准值。校准函数在ADC_CAL寄存器中运行完整校准序列结束时设置校准值。在开始校准过程之前,用户必须正确配置ADC,并且必须允许该过程通过检查ADC_GC[CAL]和ADC_GS[CALF]的状态来运行完整的校准序列,以便可以加载生成的校准值。

To complete calibration, the user must follow the below procedure

• Configure ADC_CFG with actual operating values for maximum accuracy.
• Configure the ADC_GC values along with CAL bit
• Check the status of CALF bit in ADC_GS and the CAL bit in ADC_GC
• When CAL bit becomes '0' then check the CALF status and COCO[0] bit status

要完成校准,用户必须遵循以下程序:

•ADC_CFG配置与实际操作值,以获得最大的准确性。

•配置ADC_GC值和CAL位

•检查ADC_GS中的CALF位状态和ADC_GC中的CAL位状态

•当CAL位变为‘0’时,检查CALF状态和COCO[0]位状态

 ADC重点寄存器介绍

The ADC-Digital contains 32-bit, word aligned, byte enables registers; byte or half word
access are not supported. All configuration registers are accessible via 32-bit access bus
Interface. Write access to reserved locations have no impact while read access to reserved
locations always return 0.
ADC-Digital包含32位,字对齐,字节启用寄存器;不支持字节或半字访问。所有配置寄存器都可以通过32位访问总线接口访问。对保留位置的写访问没有影响,而对保留位置的读访问总是返回0。

a.Control register (ADCx_HC0)

ADC_HC0 is used to control software triggers. Writing ADC_HC0 while ADC_HC0 is
actively controlling a conversion aborts the current conversion. In software trigger mode
(ADTRG=0), writes to ADC_HC0 subsequently initiate a new conversion (if the ADCH
bits are equal to a value other than all 1s).
ADC_HC0寄存器用于控制软件触发的ADC转换。在软件触发模式下(ADTRG=0),向ADC_HC0寄存器写入数据会启动新的转换(如果ADCH位不等于全1)。如果在ADC_HC0正在控制转换时向其写入数据,会中止当前的转换。这种特性可以用于显式禁用ADC,并且将输入通道与所有信号源隔离,从而防止在连续转换结束后额外执行一次转换。

AIEN(ADC中断使能位)是用来控制转换完成中断的开启或关闭的位。

当ADC_HS[COCO0]=1(转换ADC_HC0完成)时,提供相应的中断被启用。

1:转换完成中断使能。

0:转换完成中断禁用。

在软件触发模式(ADTRG=0)下,向ADC_HC0寄存器写入数据会启动新的转换(如果ADCH位不等于全1)。如果在ADC_HC0正在控制转换时向其写入数据,会中止当前的转换。AIEN位允许用户选择是否需要在转换完成时接收中断通知,这对于需要及时响应转换结果的应用程序非常有用。

输入通道选择: 这是一个5位的字段,用于从多个输入通道中选择一个。当所有通道选择位都被设置(ADCH = 11111b)时,逐次逼近转换子系统将关闭。这个特性允许用户明确地禁用ADC,并将输入通道与所有信号源隔离。通过这种方式终止连续转换可以防止额外的单次转换被执行。

b.Status register 状态寄存器(ADCx_HS)

COCO0是一个只读位,它在每次转换完成时被设置。

  • COCO0:转换完成标志位。
    • 当比较功能被禁用(ADC_GC[ACFE]=0)且硬件平均功能被禁用(ADC_GC[AVGE]=0)时,每次转换完成都会设置COCO0标志位。
    • 当比较功能被启用(ADC_GC[ACFE]=1)时,只有在转换完成且比较结果为真时,COCO0标志位才会被设置。
    • 当硬件平均功能被启用(ADC_GC[AVGE]=1)时,只有在完成选定次数的转换后(由ADC_CFG[AVGS]字段决定),COCO0标志位才会被设置。
    • COCO0标志位在完成校准和测试序列后也会被设置。
    • 当相应的ADC_HCn寄存器被写入或相应的ADC_Rn寄存器被读取时,COCO0位会被清除。 
  • 转换完成标志位对于实现中断驱动的ADC转换非常有用。当COCO0位被设置时,如果转换完成中断被启用(AIEN=1),则会产生一个中断,通知处理器转换已经完成。

c.Data result register 数据结果寄存器(ADCx_R0)

Contains the result of an ADC conversion of the channel selected by the respective channel control register (ADC_HC0).   Unused bits in the ADC_Rn register are cleared in unsigned right justified modes.   For example when configured for 10-bit single-ended mode, D[31:10] are cleared.   The table below describes the behavior of the data result registers in the different modes of operation.

包含由各自通道控制寄存器(ADC_HC0)选择的通道的ADC转换结果。ADC_Rn寄存器中未使用的位在无符号右对齐模式下被清除。例如,当配置为10位单端模式时,D[31:10]被清除。下表描述了在不同的转换模式下,数据结果寄存器中各位的配置和格式。

  • 12位单端:寄存器的高20位(D31-D12)被清零,低12位(D11-D0)包含转换结果。
  • 10位单端:寄存器的高22位(D31-D10)被清零,中间10位(D9-D0)包含转换结果。
  • 8位单端:寄存器的高24位(D31-D8)被清零,低8位(D7-D0)包含转换结果。

Format(格式):在(unsigned right justified)无符号右对齐格式下,未使用的位被清零,转换结果根据所选的转换模式占据寄存器的低位。

位31-12:保留位,只读,且总是具有值0。

位11-0:这些位构成了CDATA字段,用于存储ADC转换的结果

CDATA字段:这是实际存储ADC转换结果的部分。根据ADC的配置,CDATA字段可能包含不同数量的有效数据位。例如,如果ADC被配置为12位模式,那么CDATA字段将包含12位有效数据。

d.Configuration register 配置寄存器(ADCx_CFG)

Selects the mode of operation, clock source, clock divide, configure for low power, long sample time, high speed configuration and selects the sample time duration.

选择工作模式、时钟源、时钟分频、配置为低功耗、长采样时间、高速配置和选择采样时长

 

  • 位16 (OVWREN):数据覆盖使能。控制是否允许新转换的数据覆盖数据结果寄存器中的现有(未读)数据。
    • 1:使能覆盖。
    • 0:禁止覆盖。
  • 位15-14 (AVGS):(硬件平均选择)字段用于配置ADC的硬件平均功能,它决定了在生成ADC平均结果之前,需要对多少个ADC转换结果进行平均。此功能在ADC_GC[AVGE]=1时激活。
    • 00:平均4个样本。
    • 01:平均8个样本。
    • 10:平均16个样本。
    • 11:平均32个样本。
  • 位13 (ADTRG):转换触发选择。仅支持软件触发。当选择软件触发时,向ADC_HC0写入数据后启动转换。
    • 0:选择软件触发。
    • 1:保留。
  • 位12-11 (REFSEL):电压参考选择。选择用于转换的电压参考源。
    • 00:选择VREFH/VREFL作为参考电压。
    • 01-11:保留。
  • 位10 (ADHSC):高速配置。配置ADC为高速操作,内部ADC时钟高于正常。
    • 0:正常转换。
    • 1:高速转换。
  • 位9-8 (ADSTS)
  • ADSTS字段:定义了采样时间的持续长度,与ADLSMP字段结合使用,可以提供不同的采样周期选项。
    • 00:如果ADLSMP=0(短采样),采样周期为2个ADC时钟周期;如果ADLSMP=1(长采样),采样周期为12个ADC时钟周期。
    • 01:如果ADLSMP=0,采样周期为4个ADC时钟周期;如果ADLSMP=1,采样周期为16个ADC时钟周期。
    • 10:如果ADLSMP=0,采样周期为6个ADC时钟周期;如果ADLSMP=1,采样周期为20个ADC时钟周期。
    • 11:如果ADLSMP=0,采样周期为8个ADC时钟周期;如果ADLSMP=1,采样周期为24个ADC时钟周期。
  • 位7 (ADLPC):低功耗配置。将ADC硬块置于低功耗模式,并通过控制其在SAR控制器块中的定时来减少比较器使能周期。
    • 0:ADC硬块不在低功耗模式。
    • 1:ADC硬块在低功耗模式。
  • 位6-5 (ADIV):时钟分频选择。选择ADC用于生成内部时钟ADCK的分频比。
    • 00:输入时钟。
    • 01:输入时钟/2。
    • 10:输入时钟/4。
    • 11:输入时钟/8。
  • 位4 (ADLSMP)
  • 采样时间模式:ADC的采样时间可以设置为短或长两种模式
    • 如果ADLSMP=0,则采样时间较短,适用于低阻抗输入,可以提高转换速度。
    • 如果ADLSMP=1,则采样时间较长,适用于高阻抗输入,确保更准确的采样。
  • ADLSMP位与ADSTS字段配合使用,以确定采样时间的长度。当ADLSMP设置为1时,ADC将采用长采样时间模式,具体的采样时间由ADC_CFG寄存器中的ADSTS[1:0]字段定义。
  • 位3-2 (MODE):转换模式选择。用于设置ADC分辨率模式。
    • 00:8位转换。
    • 01:10位转换。
    • 10:12位转换。
    • 11:保留。
  • 位1-0 (ADICLK):输入时钟选择。选择生成内部时钟ADCK的输入时钟源。
    • 00:IPG时钟。
    • 01:IPG时钟除以2。
    • 10:保留。
    • 11:异步时钟(ADACK)。

e.General control register 通用控制寄存器(ADCx_GC)

Controls the calibration, continuous convert, hardware averaging functions, conversion  active, compare function and voltage reference select of the ADC module.
控制ADC模块的校准、连续转换、硬件平均功能、转换激活、比较功能和电压基准选择

  • 位7 (CAL):校准。设置此位开始校准序列。在校准进行中时,该位保持设置状态,校准完成后清除。必须检查ADC_GS[CALF]位以确定校准序列的结果。一旦开始,校准过程不能通过写入ADC寄存器来中断,否则结果将无效,ADC_GS[CALF]位将被设置。设置CAL位将中止任何当前转换。
  • 位6 (ADCO):连续转换使能。控制ADC是否执行连续转换。
    • 0:执行一次转换或一组转换(如果启用了硬件平均功能)。
    • 1:如果启用了硬件平均功能,则在启动转换后执行连续转换或转换组。
  • 位5 (AVGE):硬件平均使能。控制是否启用ADC的硬件平均功能。
    • 0:禁用硬件平均功能。
    • 1:启用硬件平均功能。
  • 位4 (ACFE):比较功能使能。控制是否启用比较功能。
    • 0:禁用比较功能。
    • 1:启用比较功能。
  • 位3 (ACFGT):比较功能大于使能。配置比较功能以检查转换结果与比较值寄存器(ADC_CV)的相对值。
    • 0:配置为“小于阈值,超出范围不包括,范围内不包括”。
    • 1:配置为“大于或等于阈值,超出范围包括,范围内包括”。
  • 位2 (ACREN):比较功能范围使能。配置比较功能以检查输入的转换结果是否在由ADC_CV寄存器中的比较值形成的范围内或范围外。
    • 0:禁用范围功能,仅比较ADC_CV寄存器的比较值1(CV1)。
    • 1:启用范围功能,比较ADC_CV寄存器的两个比较值(CV1和CV2)。
  • 位1 (DMAEN):DMA 使能 启用DMA(直接内存访问)逻辑。

                0 DMA 被禁用(默认)

                1 DMA 被启用

  • 位0 (ADACKEN):异步时钟输出使能。启用ADC的异步时钟源以及时钟源输出,而不考虑转换状态和ADC的输入时钟选择(ADC_CFG[ADICLK])设置。根据MCU(微控制单元)的配置,异步时钟可能被其他模块使用(参见模块介绍部分)。设置此位允许即使在ADC空闲或从不同的时钟源操作时也能使用时钟。此外,由于ADACK时钟已经运行,因此使用已选择的异步时钟启动单次或首次连续转换的延迟被减少。
    • 0:禁用异步时钟输出;仅在ADICLK选择并有转换活动时启用异步时钟。
    • 1:无论ADC状态如何,都启用异步时钟和时钟输出。

f.General status register 通用状态寄存器(ADCx_GS)

Indicates the status of the asynchronous wakeup interrupt, calibration failure and
conversion active functions.
反映异步唤醒中断、校准失败和转换激活功能的状态。

AWKST (异步唤醒中断状态):用于存储在停止模式下发生的异步中断状态。当ipg_stop信号解除(deasserted)并且ipg_clk时钟开始时,该位被设置。通过向该位写入'1'来清除它。清除这个位也会解除向CPU的异步中断。

1 表示在停止模式下发生了异步唤醒中断。

0 表示没有异步中断发生。

CALF (校准失败标志):显示校准序列的结果。如果在完成校准序列之前写入任何ADC寄存器或进入任何停止模式,校准序列将失败。通过向该位写入'1'来清除它。

0 表示校准正常完成。

1 表示校准失败,ADC的精度规格不能保证。

ADACT (转换活动):指示正在进行转换或硬件平均。当转换开始时,ADACT被设置,当转换完成或中止时,它被清除。

0 表示转换没有进行。

1 表示转换正在进行。

g.Compare value register 比较值寄存器(ADCx_CV)

Contains compare values used to compare with the conversion result when the compare
function is enabled (ADC_GC[ACFE]=1). The compare values are right justified.
Therefore, the compare function only uses the compare value register bits that are related
to the ADC mode of operation. (e.g. in 8 bit mode, CV1 = ADC_CV[7:0] and CV2 =
ADC_CV[23:16], similarly in 10 bit mode, CV1 = ADC_CV[9:0] and CV2 =
ADC_CV[25:16] etc.) The compare value 2 in this register is utilized only when the
compare range function is enabled (ADC_GC[ACREN]=1).
该寄存器包含用于在启用比较功能(ADC_GC[ACFE]=1)时与转换结果进行比较的比较值。比较值按右对齐排列。因此,比较功能仅使用与操作模式相关的比较值寄存器位(例如,在8位模式下,CV1=ADC_CV[7:0]和CV2=ADC_CV[23:16],在10位模式下,CV1=ADC_CV[9:0]和CV2=ADC_CV[25:16]等)。该寄存器中的比较值2仅在启用比较范围功能(ADC_GC[ACREN]=1)时使用。

CV2 (比较值2):

[27-16]用于存储第二个比较值,当比较功能和比较范围功能都被启用时(即ADC控制寄存器中的ACFE位和ACREN位都设置为1),这个值用于与转换结果进行比较。这意味着,如果转换结果落在CV1和CV2定义的范围内,那么比较条件被满足。

CV1 (比较值1):

[15-0](如果ADC是16位的)或位9到0(如果ADC是10位的)用于存储第一个比较值,当比较功能被启用时(即ADC控制寄存器中的ACFE位设置为1),这个值用于与转换结果进行比较。这可以用于检测转换结果是否超过或低于某个特定的阈值。

I.MX6ull ADC编程思路

初始化ADC:在初始化ADC之前,需要配置ADC的时钟源、采样时间、分辨率等参数。例如,可以设置ADC为12位分辨率,选择合适的时钟源和采样时间。

配置ADC通道:根据需要选择ADC通道,配置相应的引脚,并在设备树中进行相应的设置。例如,如果使用ADC1的通道1和通道2,需要在设备树中指定num-channels属性,并配置pinctrl以指定引脚。

校准ADC:在ADC使用之前,需要进行校准以确保准确性。可以通过软件触发校准过程,并检查校准状态位(CALF)来确认校准是否成功。

使能ADC:配置好ADC参数后,可以开启ADC。在ADC控制寄存器中设置相应的使能位,如使能ADACK(异步时钟输出使能位)。

读取ADC值:ADC正常工作后,可以通过读取ADC的数据寄存器来获取转换结果。在读取之前,可能需要等待转换完成标志位(COCO0)被置位。

处理ADC值:读取到的ADC值可能需要进一步处理,如转换为电压值。这通常涉及到将ADC值乘以一个比例因子,该比例因子由ADC的参考电压和分辨率决定。

使用中断或轮询:可以选择使用中断或轮询的方式来检测ADC转换的完成。如果使用中断,需要配置ADC的中断控制位(AIEN),并在中断服务程序中处理转换完成的事件。

考虑使用DMA:如果需要,可以启用DMA来自动处理ADC数据的传输,减少CPU的负担。这需要在ADC控制寄存器中设置DMA使能位(DMAEN)。

比较功能:如果需要,可以配置ADC的比较功能,以便在转换结果超出设定的阈值时触发事件。这涉及到设置比较值寄存器(CV1和CV2)和比较功能使能位(ACFE)。

测试和验证:在完成编程后,需要通过测试来验证ADC的功能是否符合预期。这可能包括检查ADC的转换结果是否准确,以及比较功能和中断是否按预期工作。

结语:

无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力


原文地址:https://blog.csdn.net/2301_79695216/article/details/144004987

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!