目录
1. 特性
- 12位的逐次逼近型ADC
- 多达32个单端外部模拟输入通道
- 单端12位、10位、8位分辨率可选
- 单端输出为右对齐无符号格式
- 单次、连续转换模式
- 单次转换完成后自动返回空闲状态
- 可配置的采样时间和转换速度/功率
- 转换完成/硬件平均完成标志和中断
- 输入时钟最多可从四个源中选择
- 低功耗模式下运行,噪音更低
- 可选择硬件通道选择的硬件转换触发器
- 对于小于、大于或等于、在范围内或超出范围的可编程值的自动比较中断
- 硬件平均功能
- 可选电压参考:外部或备用
- 自校准模式
2. 模块框图

3. ADC的电气信号
3.1 模拟电源(VDDA、VSS)
ADC的模拟部分使用VDDA作为电源,有一些封装内部将VDDA与VDD连接,如果外部的引脚可用,一般情况下VDDA与VDD连接到相同电位。VSSA同理。
3.2 参考电压的选择
VREFSH和VREFSL是ADC模块的高参考电压和低参考电压。
ADC可通过配置SC2[REFSEL]寄存器选择VREFSH和VREFSL的电压参考对,将VREFSH配置为VREFH或VALTH。每个参考对应满足以下条件:
- 正参考源(如VREFH或VALTH)必须介于最小参考高压(Ref Voltage High)和VDDA之间
- 地参考源(VREFL)必须与VSSA保持相同电位
系统提供两组参考源:
- 外部参考对:VREFH(正极)和VREFL(负极)
- 备用参考对:VALTH(正极)和VREFL(负极)
注:备用参考源VALTH的具体实现(可选择外部引脚或内部源)取决于MCU的硬件配置
在某些封装中,VREFH 在内部连接到 VDDA,VREFL 连接到 VSSA。如果可从外部获取,正参考源可以连接到与 VDDA 相同的电位,或者可以由外部源驱动到最小 VREFH 和 VDDA 电位之间的电平。VREFH 绝不能超过 VDDA。将地参考源连接到与 VSSA 相同的电压电位。
3.3 模拟输入通道
ADC模块最多支持32个模拟输入通道,具体的通道选择是根据SC1[ADCH]位域进行配置。
3.4 寄存器访问
ADC模块的寄存器支持8位、16位、32位的读功能,但是只支持32位的写功能,如果通过8位或16位的方式写则会发生传输错误。
4. 功能描述
在复位期间或当 SC1n[ADCH] 都为高电平时,ADC 模块被禁用;详情请参阅电源管理信息。当一次转换完成且尚未启动另一次转换时,该模块处于空闲状态。当模块处于空闲状态时,它处于最低功耗状态。ADC 可以对任何软件可选通道进行模数转换。所有模式都通过逐次逼近算法进行转换。
为了满足精度的的需求,ADC模块必须使用片上的校准功能。
当转换完成时,结果会被放置在 Rn 数据寄存器中。然后相应的 SC1n[COCO] 会被置位,如果相应的转换完成中断已启用,或者当 SC1n[AIEN] = 1 时,会产生一个中断。
ADC 模块具有将转换结果与 CV1 和 CV2 寄存器的内容自动进行比较的能力。通过设置 SC2[ACFE] 来启用比较功能,并且该功能在任何转换模式和配置中都可运行。
ADC 模块具有自动对多次转换的结果进行平均的能力。通过设置 SC3[AVGE] 来启用硬件平均功能,并且该功能在任何转换模式和配置中都可运行。
4.1 时钟选择和分频控制
ADC 模块的时钟源可从四个时钟源中选择其一。该时钟源会通过一个可配置的值进行分频,以生成输入时钟 ADCK 到该模块。通过配置 CFG1[ADICLK]来选择时钟。对于该 MCU 所定义的 ALTCLKx。请参阅芯片配置信息。在 MCU 处于正常停止模式时,可以使用 ALTCLKx 作为输入时钟源进行转换。复位后,ALTCLK1 是默认选择。
无论选择哪个时钟,其频率必须落在 ADCK 的指定频率范围内。如果可用时钟太慢,ADC 可能无法按照规格执行。如果可用时钟太快,则必须将时钟分频到适当的频率。该分频器由 CFG1[ADIV]指定,可以分频为 1、2、4 或 8。ADC 总线时钟频率必须大于或等于 ADC ALT 时钟频率。请参考设备数据手册以获取 ADC 规格。
4.2 参考电压选择
ADC 可配置为接受两个电压参考对之一作为用于转换的参考电压(VREFSH 和 VREFSL)。每对包含一个正参考,其必须在最小参考电压高值和 VDDA 之间,以及一个接地参考,其必须与 VSSA 处于相同电位。这两对是外部的(VREFH 和 VREFL)和备用的(VALTH)。这些电压参考使用 SC2[REFSEL]进行选择。根据 MCU 配置,替代的 VALTH 电压参考可能会选择额外的外部引脚或内部源。有关此 MCU 特定的电压参考,请参阅芯片配置信息。
4.3 硬件触发和通道选择
ADC 模块具有一个可选的异步硬件转换触发(ADHWT),当设置 SC2[ADTRG]且发生硬件触发选择事件 ADHWTSn 时启用。此触发源并非在所有 MCU 上都可用。有关 ADHWT 源以及此 MCU 特定的 ADHWTSn 配置的信息,请参阅特定芯片的 ADC 信息。
当 ADHWT 源可用且硬件触发启用,即 SC2[ADTRG] = 1 时,在硬件触发选择事件 ADHWTSn 发生后,ADHWT 的上升沿会启动一次转换。如果在触发的上升沿发生时转换正在进行中,则该上升沿会被忽略。在连续转换配置中,只观察到启动连续转换的初始上升沿,并且在转换中止之前,ADC 会在启动转换的相同 SCn 寄存器上继续进行转换。硬件触发功能与任何转换模式和配置结合运行。
硬件触发选择事件 ADHWTSn 必须在接收 ADHWT 信号之前设置。若未满足这些条件,转换器可能忽略触发信号或采用错误配置。若在转换过程中触发选择事件被置位,该事件必须保持有效直至当前转换完成,并持续保持置位状态直到接收到 ADHWT 信号以触发新转换。转换所用的通道和状态字段取决于当前有效的触发选择信号:
- ADHWTSA激活选择SC1A
- ADHWTSn激活选择SC1n
当转换完成时,结果被放置在与接收到的ADHWTSn相关联的Rn寄存器中。例如:
- ADHWTSA激活选择RA寄存器
- ADHWTSn激活选择Rn寄存器
与接收到的 ADHWTSn 相关的转换完成标志,即 SC1n[COCO],随后会被设置,如果相应的转换完成中断已启用,即 SC1[AIEN]=1,就会产生一个中断。
4.4 转换控制
通过配置CFG1[mode]来选择转换模式。转换可以通过软件或硬件触发器启动。
此外,ADC模块可以配置为:
- 低功耗操作
- 长采样时间
- 连续转换
- 硬件平均值
- 自动将转换结果与软件确定的比较值进行比较
4.4.1 启动转换
- 在写入SC1A后,如果选择了软件触发操作,即当SC2[ADTRG]=0时。
- 在硬件触发或 ADHWT 事件之后,如果选择了硬件触发操作,即 SC2[ADTRG] = 1,并且发生了硬件触发选择事件 ADHWTSn。所选择的通道和状态字段取决于有效的触发选择信号:
- ADHWTSA 有效时选择 SC1A。
- ADHWTSn 有效时选择 SC1n。
- 如果两者都无效,则选择关闭状态。
- 当连续转换被启用时,即当 SC3[ADCO] = 1 时,在将结果传输到数据寄存器之后。
注:在转换完成之前选择多个 ADHWTSn 会导致不可预测的结果。为避免这种情况,在转换完成之前仅选择一个 ADHWTSn。
如果连续转换已启用,在当前转换完成后会自动启动新的转换。在软件触发操作中,即当 SC2[ADTRG] = 0 时,在写入 SC1A 后开始连续转换,并持续进行直到被中止。在硬件触发操作中,即当 SC2[ADTRG] = 1 且一个 ADHWTSn 事件已发生时,在硬件触发事件后开始连续转换,并持续进行直到被中止。
如果硬件平均已启用,在当前转换完成后会自动启动新的转换,直至完成正确数量的转换。在软件触发操作中,在写入 SC1A 后开始转换。在硬件触发操作中,在硬件触发后开始转换。如果连续转换也已启用,在所选数量的转换中的最后一个转换完成后,会启动一组新的待平均的转换。
4.4.2 完成转换
此处参考用户手册中的table44-4.
4.5 自动比较功能
比较功能可以配置为检查结果是否小于或大于等于单个比较值,或者结果是否落在由两个比较值确定的范围内或范围外。
比较模式由 SC2[ACFGT]、SC2[ACREN] 以及比较值寄存器(CV1 和 CV2)中的值来确定。在对输入进行采样和转换后,CV1 和 CV2 中的比较值按如下表所述使用。如下表所示(此表截取自用户手册),有六种比较模式。
当 SC2[ACREN] = 1 且 CV1 的值小于或等于 CV2 的值时,设置 SC2[ACFGT] 将选择一个包含端点的触发 - 如果 - 在比较范围内的功能。清除 SC2[ACFGT] 将选择一个不包含端点的触发 - 如果 - 在比较范围外的功能。
如果 CV1 大于 CV2,设置 SC2[ACFGT] 将选择一个包含端点的触发 - 如果 - 在比较范围外的功能。清除 SC2[ACFGT] 将选择一个不包含端点的触发 - 如果 - 在比较范围内的功能。
如果所选条件为真,则设置SC1n[COCO]。
在启用比较功能的情况下完成转换后,如果比较条件不成立,SC1n[COCO] 不会被设置,并且转换结果数据不会被传输到结果寄存器 Rn 中。如果硬件平均功能已启用,比较功能会将平均结果与比较值进行比较。相同的比较功能定义适用。当 SC1n[COCO] 被设置且相应的 ADC 中断已启用(即 SC1n[AIEN] = 1)时,会产生 ADC 中断。
注:比较功能可以在 MCU 处于等待或正常停止模式时监控通道上的电压。当满足比较条件时,ADC 中断会唤醒 MCU。
4.6 校准功能
ADC配备有校准机制,可提供数据表中规定的高精度。通电或重置后,必须校准ADC。不这样做可能会导致ADC转换结果低于指定的精度。
4.6.1 校准前提条件
-
参考电压稳定
- 系统上电后,必须等待参考电压 VREFH 完全稳定(时间取决于具体硬件设计,通常需参考数据手册中的 VREF 启动时间参数)。
-
校准时机
- 每次系统复位(包括硬复位、看门狗复位等)后,必须重新校准 ADC,否则精度无法保证。
-
多 ADC 实例隔离
- 若 MCU 支持多路 ADC(如 ADC0、ADC1),同一时间仅允许校准一路 ADC。
- 示例:校准 ADC0 时,需确保 ADC1、ADC2 等其他实例处于 空闲状态(未启动转换)。
4.6.2 校准前配置
-
时钟频率限制
- 将 ADC 输入时钟 ADCK 分频至 ≤ 最大标称频率的一半(通过 CFG1[ADIV] 配置分频值)。
- 注意:超频可能导致校准失效或误差增大。
-
校准寄存器初始化
- 执行校准前,必须清空所有校准相关寄存器,写入
0000_0000h
至以下寄存器:CLPS
,CLP3
,CLP2
,CLP1
,CLP0
,CLPX
,CLP9
- 目的:避免残留值干扰校准算法。
- 执行校准前,必须清空所有校准相关寄存器,写入
-
硬件平均模式设置
- 配置 SC3 寄存器:
SC3[CAL] = 1
:启动校准模式SC3[AVGE] = 1
:启用硬件平均SC3[AVGS] = 11b
:选择最大平均次数(通常为 32 次平均,具体取决于 MCU 型号)
- 作用:通过多次采样提升校准精度。
- 配置 SC3 寄存器:
4.6.3 校准执行流程
-
启动校准
- 写入配置后的 SC3 寄存器,触发校准流程。
-
等待校准完成
- 监控转换完成标志位
SC1n[COCO]
,当其置1
时表示校准结束。 - 典型耗时:几十微秒至数毫秒(取决于平均次数和时钟频率)。
- 监控转换完成标志位
4.6.4 校准后应用配置
-
恢复工作模式
- 重新配置 ADCK 时钟:根据应用需求调整分频系数(可设置为最大允许频率以提高转换速度)。
- 关闭硬件平均(可选):
- 若应用对速度敏感,设置
SC3[AVGE] = 0
以禁用平均功能。 - 若需保持高精度,保留
AVGE
和AVGS
配置。
- 若应用对速度敏感,设置
-
校准值存储与验证
- 保存 OFS 值:将自动生成的
OFS
寄存器值存储至非易失性存储器(如 Flash),便于后续恢复。 - 精度验证:输入已知基准电压(如 VREFH/2),检查转换结果是否符合预期误差范围。
- 保存 OFS 值:将自动生成的
4.6.5 常见问题与解决
-
校准后精度仍不足:
- 检查 VREFH 是否稳定,或是否存在电源噪声。
- 确认校准期间其他 ADC 实例未运行,避免交叉干扰。
-
触发标志未置位:
- 检查 ADCK 时钟配置是否超限,或校准寄存器未正确清空。
-
应用模式切换异常:
- 确保校准后重新配置了 SC3 寄存器(尤其
AVGE
和ADCO
位)。
- 确保校准后重新配置了 SC3 寄存器(尤其
校准时间计算公式
总校准时间 =
12 × ( 平均次数 × [采样时间(采样周期数+1) + 1个保持周期 + 34个比较周期] ) + 首次转换同步时间(约5个ADC周期 + 5个模块时钟周期)
参数说明:
- 平均次数:由
SC3[AVGS]
配置的硬件平均次数(例如 4、8、16、32 次) - 采样周期数:由
CFG1[ADLSMP]
和CFG2[ADLSTS]
配置的采样时间 - 比较周期:固定为 34 个时钟周期,用于校准算法内部比较
高精度 ADC 的 PCB 设计准则
-
参考电压去耦
- 电容配置:在
VREFH
和VREFL
之间添加 1nF、100nF、10μF 的旁路电容 - 布局要求:
- 电容尽可能靠近 MCU 的
VREFH
和VREFL
引脚 - 使用短而宽的走线降低电感效应
- 电容尽可能靠近 MCU 的
- 电容配置:在
-
模拟电源去耦
- 电容配置:在
VDDA
和VSSA
之间添加 1nF、100nF、10μF 的旁路电容 - 布局要求:
- 电容直接放置在
VDDA
和VSSA
引脚附近 - 优先使用多层板,确保电源平面低阻抗
- 电容直接放置在
- 电容配置:在
-
关键信号布线规则
- 低阻抗路径:
VDDA
、VSSA
、VREFH
、VREFL
的走线需宽且短,避免锐角
- 噪声隔离:
- 远离高频或开关信号(如 PWM、时钟线、数字总线)
- 必要时增加地屏蔽或隔离带
- 低阻抗路径:
4.7 用户自定义偏移量功能
OFS 是一个二进制补码、左对齐的寄存器,其中包含由校准产生的偏移误差校正值。
OFS(偏移校准寄存器)是一个采用二进制补码格式且左对齐的寄存器,用于存储校准生成的偏移误差校正值。该寄存器中的数值会从模数转换结果中扣除,修正后的结果将被传输到结果寄存器 Rn 中。如果修正后的结果超过当前工作模式的最大允许值或低于最小允许值,系统将强制将其限制在该模式对应的有效范围内。
OFS 寄存器的数据格式与数据结果寄存器 Rn 不同,这种设计旨在无论选择何种转换模式,都能保留校准值的分辨率。在低分辨率模式下,低位会被忽略。例如:
- 8位单端模式:
- 使用 OFS[14:7] 校准位对 D[7:0] 转换结果进行减法补偿
- OFS[15] 表示符号位(若为负值,实际等效于对结果进行加法操作)
- OFS[6:0] 位被忽略
注:此设计通过高位对齐机制,确保校准精度不受工作模式切换影响。不同模式下被忽略的位数根据分辨率自动调整,需参考具体模式配置文档以确定位域映射关系。
OFS 寄存器会在自校准序列完成后(即 SC3[CAL] 位被清除时)根据校准需求自动设置。您可以根据需要手动写入 OFS 以覆盖校准结果。但需注意:
- 若写入的 OFS 值与校准值不同,可能导致 ADC 无法满足误差规格
- 建议操作:在覆盖用户指定值前,请将校准生成的值存储在内存中,以便后续恢复
注:此机制允许灵活调整偏移误差补偿,但需谨慎操作以确保精度。校准值由硬件自校准算法生成,通常代表最优补偿方案,非必要不建议手动修改。
可以使用偏移校准功能来消除应用程序偏移或直流偏置值。USR_OFS 可以用二进制补码格式的数字进行写入,该偏移将从结果或硬件平均值中减去。若要添加偏移量,以二进制补码格式存储负偏移量,其效果将是加法。导致超出范围值的偏移校正将被强制为最小值或最大值。对于单端转换,最小值为 0000h。
4.8 MCU正常停止模式操作
停止模式是一种低功耗待机模式,在此期间,MCU上的大多数或所有时钟源都被禁用。
4.8.1 启用备用时钟源的正常停止模式
如果为转换时钟选择的备用时钟源已启用,ADC 在正常停止模式期间继续运行。
如果当 MCU 进入正常停止模式时转换正在进行中,它会持续到完成。在 MCU 处于正常停止模式时,可以通过硬件触发或如果连续转换已启用的方式来启动转换。
如果比较和硬件平均功能被禁用,当一次转换完成时,会设置 SC1n[COCO] 并产生一个 ADC 中断,以在相应的 ADC 中断被启用时(即当 SC1n[AIEN] = 1 时)将 MCU 从正常停止模式唤醒。结果寄存器 Rn 将包含在正常停止模式期间发生的首次完成转换的数据。如果硬件平均功能被启用,当所选的转换次数完成时,SC1n[COCO] 将被设置,并在启用时产生中断。如果比较功能被启用,只有在满足比较条件时,SC1n[COCO] 才会被设置,并在启用时产生中断。如果选择了单次转换且比较结果不为真,ADC 将返回其空闲状态,并且无法将 MCU 从正常停止模式唤醒,除非通过另一个硬件触发启动新的转换。