10位
A
/D
转
换
器
17
第 17章 10位 A/D转换器
目录
本章包括下列主题:
17.1 简介 ............................................................................................................................ 17-2
17.2 A/D 术语和转换序列 ................................................................................................... 17-4
17.3 寄存器 ........................................................................................................................ 17-5
17.4 A/D 模块配置 ............................................................................................................ 17-11
17.5 初始化 ...................................................................................................................... 17-14
17.6 控制采样过程 ........................................................................................................... 17-15
17.7 控制转换过程 ........................................................................................................... 17-15
17.8 A/D 结果缓冲器 ........................................................................................................ 17-21
17.9 转换序列示例 ........................................................................................................... 17-23
17.10 A/D 采样
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
............................................................................................................ 17-31
17.11 转换功能 ................................................................................................................... 17-32
17.12 A/D 精度 / 误差 ......................................................................................................... 17-33
17.13 休眠和空闲模式期间的操作 ...................................................................................... 17-33
17.14 复位的影响 ............................................................................................................... 17-34
17.15 寄存器映射 ............................................................................................................... 17-35
17.16 电气规范 ................................................................................................................... 17-36
17.17 设计技巧 ................................................................................................................... 17-37
17.18 相关应用笔记 ........................................................................................................... 17-38
17.19 版本历史 ................................................................................................................... 17-39
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-1 页
PIC24F 系列参考手册
17.1 简介
DS39705A_CN 第 17-2 页 超前信息 © 2007 Microchip Technology Inc.
PIC24F 10 位 A/D 转换器具有以下关键特性:
• 逐次逼近寄存器(SAR)转换
• 转换速度最高可达 500 ksps
• 最多可具有 16 路模拟输入通道
• 外部参考电压输入引脚
• 单极差分采样 / 保持(S/H)放大器
• 自动通道扫描模式
• 可选的转换触发器源
• 16 字的转换结果缓冲器
• 可选的缓冲器填充模式
• 4 个结果调整选项
• 可在 CPU 休眠和空闲模式下工作
图 17-1 给出了 10 位 A/D 转换器的框图。转换器最多可在 16 个引脚上有 16 路模拟输入通道,指
定为AN0-AN15。模拟输入引脚和外部参考电压输入引脚的实际数量取决于具体的PIC24F器件。
关于特定器件的信息,请参见相应的 PIC24F 数据手册。
还有两个模拟输入引脚 VREF+ 和 VREF- 用于连接外部参考电压。这两个参考电压输入可以与其他
模拟输入引脚共用。可在软件控制下,选择器件供电电压(AVDD/AVSS)或 VREF+/VREF- 引脚上
的电平作为 A/D 参考电压。
模拟输入通过两个独立的多路开关(MUX A 和 MUX B)连接到 S/H 放大器,该放大器也称为
S/H 通道或 CH0。这使转换器可以在转换期间在两组模拟输入之间切换。单极差分转换可能会使
用某些输入引脚。可选的模拟输入扫描模式可使转换器自动按顺序扫描选定通道范围。
10 位 A/D 转换器提供了一些方法来控制采样和转换过程。采样和转换触发器源可以从多种硬件
源中进行选择,也可以在软件中以手动方式控制。自动采样模式和自动转换触发器可以配合使
用,无需软件即可提供无限自动转换。
在每个采样 / 转换序列结束时,或者在多个序列结束后,可以产生一个控制器级别的中断。每个
中断事件对应的序列数量可以介于 1 和 16 之间。
转换器将其结果存储在内部的 16 字数据缓冲器中,该缓冲器被映射到器件数据空间中。每个 10
位结果可以使用 4 种 16 位输出格式中的任意一种进行存储。
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
图 17-1: 10 位 A/D 转换器框图
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-3 页
比较器
10 位 SAR 转换逻辑
VREF+
DAC
AN12
AN13
AN14
AN15
AN8
AN9
AN10
AN11
AN4
AN5
AN6
AN7
AN0
AN1
AN2
AN3
VREF-
采样控制
S/H
AVSS
AVDD
ADC1BUF0:
ADC1BUFF
AD1CON1
AD1CON2
AD1CON3
AD1CHS
AD1PCFG
AD1CSSL
控制逻辑
数据格式
输入 MUX 控制
转换控制
引脚配置控制
内部数据总线
16
VR+VR-
M
U
X
A
(1
)
M
U
X
B
VINH
VINL
VINH
VINH
VINL
VINL
VR+
VR-V
R
选
择
注 1: 只有 MUX A 支持输入扫描。更多信息,请参见 AD1CSSL (寄存器 17-6)。
PIC24F 系列参考手册
DS39705A_CN 第 17-4 页 超前信息 © 2007 Microchip Technology Inc.
17.2 A/D 术语和转换序列
采样时间是 A/D 模块的 S/H 放大器连接到模拟输入引脚的时间。采样时间可以通过 A/D 转换器
硬件手动或自动启动和结束。为确保 S/H 放大器为 A/D 转换提供所需的精度,必须保证一个最小
采样时间。
转换时间是 A/D 转换器转换 S/H 放大器所保持的电压所需要的时间。转换触发器用于结束采样时
间和开始 A/D 转换或采样 / 转换序列。转换触发器源可以从多种硬件源中进行选择,也可以在软
件中以手动方式控制。A/D 转换器需要 1 个 A/D 时钟周期(TAD)来转换结果数据的每个位,另
外再加上两个额外的时钟周期;对于 10 位转换,总共需要 12 个 TAD 周期。转换时间结束时,结
果将装入 16 个 A/D 结果缓冲器中的一个。然后,可以将 S/H 重新连接到输入引脚,同时可以产
生 CPU 中断。采样时间和 A/D 转换时间之和为转换总时间。图 17-2 显示了基本的转换序列,以
及时间间隔之间的关系。
转换触发器源可以从多种硬件源中进行选择,也可以在软件中以手动方式控制。转换触发器选项
中有一个自动转换选项,该选项使用计数器和 A/D 时钟来设置自动转换之间的时间。自动采样模
式和自动转换触发器可以配合使用,无需软件干预即可提供无限自动转换。
图 17-2: A/D 采样 / 转换序列
采样时间 A/D 转换时间
A/D 转换总时间
S/H 放大器连接到模拟输入引脚
进行采样。
输入从 CH0 断开连接, S/H 放大器保持信号。
转换触发器启动 A/D 转换。
转换完成,结果装入A/D缓冲寄存器。
产生中断(可选)。
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
17.3 寄存器
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-5 页
10 位 A/D 转换器模块总共使用 22 个寄存器进行操作。所有的寄存器均映射到数据存储空间中。
17.3.1 控制寄存器
模块具有 6 个控制和状态寄存器:
• AD1CON1:A/D 控制寄存器 1
• AD1CON2:A/D 控制寄存器 2
• AD1CON3:A/D 控制寄存器 3
• AD1CHS:A/D 输入通道选择寄存器
• AD1PCFG:A/D 端口配置寄存器
• AD1CSSL:A/D 输入扫描选择寄存器
AD1CON1、AD1CON2 和 AD1CON3 寄存器(寄存器 17-1、寄存器 17-2 和寄存器 17-3)控制
A/D 模块的总体操作。这包括:使能模块、配置转换时钟和参考电压源、选择采样和转换触发器,
以及手动控制采样 / 转换序列。
AD1CHS 寄存器 (寄存器 17-4)用于选择要连接到 S/H 放大器的输入通道。它也用于选择输入
多路开关和选择差分采样的参考源。
AD1PCFG 寄存器(寄存器 17-5)用于将 I/O 引脚配置为模拟输入或数字 I/O。
AD1CSSL 寄存器 (寄存器 17-6)用于选择顺序扫描中包含的通道。
17.3.2 A/D 结果缓冲器
该模块包含一个 16 字的双端口 RAM(称为 ADC1BUF),用于存储 A/D 结果。每个单元位置均
映射到数据存储空间,可单独访问。16 个缓冲器单元称为 ADC1BUF0-ADC1BUFF。A/D 结果缓
冲器是只读的。
PIC24F 系列参考手册
寄存器 17-1: AD1CON1:A/D 控制寄存器 1
DS39705A_CN 第 17-6 页 超前信息 © 2007 Microchip Technology Inc.
R/W-0 U-0 R/W-0 U-0 U-0 U-0 R/W-0 R/W-0
ADON — ADSIDL — — — FORM1 FORM0
bit 15 bit 8
R/W-0 R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0, HCS R/C-0, HCS
SSRC2 SSRC1 SSRC0 — — ASAM SAMP DONE
bit 7 bit 0
图注: U = 未实现位,读为 0
R = 可读位 W = 可写位 HCS = 用硬件清零 / 置 1
-n = POR 值 1 = 置 1 0 = 清零 x = 未知
bit 15 ADON: A/D 工作模式位
1 = A/D 转换器模块正在工作
0 = A/D 转换器关闭
bit 14 未实现:读为 0
bit 13 ADSIDL: 空闲模式停止位
1 = 器件进入空闲模式后停止模块操作
0 = 处于空闲模式时继续模块操作
bit 12-10 未实现:读为 0
bit 9-8 FORM1:FORM0: 数据输出格式位
11 = 有符号小数 (sddd dddd dd00 0000)
10 = 小数 (dddd dddd dd00 0000)
01 = 有符号整数 (ssss sssd dddd dddd)
00 = 整数 (0000 00dd dddd dddd)
bit 7-5 SSRC2:SSRC0: 转换触发器源选择位
111 = 内部计数器结束采样并启动转换(自动转换)
110 = 保留
10x = 保留
100 = 保留
011 = 保留
010 = Timer3 比较匹配时结束采样并启动转换
001 = INT0 引脚产生有效电平变换时,结束采样并启动转换
000 = 清零 SAMP 位时结束采样并启动转换
bit 4-3 未实现:读为 0
bit 2 ASAM: A/D 采样自动启动位
1 = 采样在上次转换完成后立即开始; SAMP 位自动置 1
0 = SAMP 位置 1 时开始采样
bit 1 SAMP: A/D 采样使能位
1 = 至少有一个 A/D 采样 / 保持放大器进行采样
0 = A/D 采样 / 保持放大器保持采样结果
当 ASAM = 0时,向该位写入 1将启动采样。当 SSRC<2:0> = 000时,向该位写入 0将结束采样并启
动转换。
bit 0 DONE:A/D 转换状态位
1 = A/D 转换已完成
0 = A/D 转换尚未完成或尚未启动
清零该位不会影响正在进行的任何操作。由软件清零,或者在启动新的转换时清零。
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-7 页
寄存器 17-2: AD1CON2:A/D 控制寄存器 2
R/W-0 R/W-0 R/W-0 U-0 U-0 R/W-0 U-0 U-0
VCFG2 VCFG1 VCFG0 r — CSCNA — —
bit 15 bit 8
R-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
BUFS(1) — SMPI3 SMPI2 SMPI1 SMPI0 BUFM ALTS
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 值 1 = 置 1 0 = 清零 x = 未知
bit 15-13 VCFG2:VCFG0:参考电压配置位
bit 12 保留:保持为 0
bit 11 未实现:读为 0
bit 10 CSCNA:MUX A 输入多路开关设置的 CH0+ S/H 输入的扫描输入选择位
1 = 扫描输入
0 = 不扫描输入
bit 9-8 未实现:读为 0
bit 7 BUFS:缓冲器填充状态位 (1)
1 = A/D 当前正在填充 ADC1BUF8-ADC1BUFF,用户应访问 ADC1BUF0-ADC1BUF7 中的数据
0 = A/D 当前正在填充 ADC1BUF0-ADC1BUF7,用户应访问 ADC1BUF8-ADC1BUFF 中的数据
bit 6 未实现:读为 0
bit 5-2 SMPI3:SMPI0: 每个中断对应采样 / 转换序列数量选择位
1111 = 在每组序列第 16 个采样 / 转换序列的转换完成时产生中断
1110 = 在每组序列第 15 个采样 / 转换序列的转换完成时产生中断
.....
0001 = 在每组序列第 2 个采样 / 转换序列的转换完成时产生中断
0000 = 在每个采样 / 转换序列的转换完成时产生中断
bit 1 BUFM: 缓冲器模式选择位
1 = 缓冲器配置为两个 8 字缓冲器(ADC1BUF0-ADC1BUF7 和 ADC1BUF8-ADC1BUFF)
0 = 缓冲器配置为一个 16 字缓冲器 (ADC1BUF0-ADC1BUFF)
bit 0 ALTS: 交替输入采样模式选择位
1 = 对于第一次采样,使用 MUX A 输入多路开关设置,然后对于所有后续采样,在MUX B 和 MUX A 输
入多路开关设置之间交替
0 = 始终使用 MUX A 输入多路开关设置
注 1: 只有 ADC1BUF 用作两个缓冲器(BUFM = 1)时才有效。
VCFG2:VCFG0 VR+ VR-
000 AVDD AVSS
001 外部 VREF+ 引脚 AVSS
010 AVDD 外部 VREF- 引脚
011 外部 VREF+ 引脚 外部 VREF- 引脚
1xx AVDD AVSS
PIC24F 系列参考手册
寄存器 17-3: AD1CON3:A/D 控制寄存器 3
DS39705A_CN 第 17-8 页 超前信息 © 2007 Microchip Technology Inc.
R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ADRC — — SAMC4 SAMC3 SAMC2 SAMC1 SAMC0
bit 15 bit 8
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ADCS7 ADCS6 ADCS5 ADCS4 ADCS3 ADCS2 ADCS1 ADCS0
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 值 1 = 置 1 0 = 清零 x = 未知
bit 15 ADRC: A/D 转换时钟源位
1 = A/D 内部 RC 时钟
0 = 时钟基于系统时钟而产生
bit 14-13 未实现:读为 0
bit 12-8 SAMC4:SAMC0: 自动采样时间位
11111 = 31 TAD
·····
00001 = 1 TAD
00000 = 0 TAD (不推荐)
bit 7-0 ADCS7:ADCS0: A/D 转换时钟选择位
11111111 = 128 TCY
11111110 = 127 TCY
······
00000001 = TCY
00000000 = TCY/2
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
寄存器 17-4: AD1CHS:A/D 输入通道选择寄存器
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-9 页
R/W-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
CH0NB — — — CH0SB3 CH0SB2 CH0SB1 CH0SB0
bit 15 bit 8
R/W-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
CH0NA — — — CH0SA3 CH0SA2 CH0SA1 CH0SA0
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 值 1 = 置 1 0 = 清零 x = 未知
bit 15 CH0NB: MUX B 多路开关设置的通道 0 负输入选择位
1 = 通道 0 负输入为 AN1
0 = 通道 0 负输入为 Vr-
bit 14-12 未实现:读为 0
bit 11-8 CH0SB3:CH0SB0: MUX B 多路开关设置的通道 0 正输入选择位
1111 = 通道 0 正输入为 AN15
1110 = 通道 0 正输入为 AN14
1101 = 通道 0 正输入为 AN13
·····
0001 = 通道 0 正输入为 AN1
0000 = 通道 0 正输入为 AN0
bit 7 CH0NA: MUX A 多路开关设置的通道 0 负输入选择位
1 = 通道 0 负输入为 AN1
0 = 通道 0 负输入为 Vr-
bit 6-4 未实现:读为 0
bit 3-0 CH0SA3:CH0SA0: MUX A 多路开关设置的通道 0 正输入选择位
1111 = 通道 0 正输入为 AN15
1110 = 通道 0 正输入为 AN14
1101 = 通道 0 正输入为 AN13
·····
0001 = 通道 0 正输入为 AN1
0000 = 通道 0 正输入为 AN0
PIC24F 系列参考手册
寄存器 17-5: AD1PCFG:A/D 端口配置寄存器
DS39705A_CN 第 17-10 页 超前信息 © 2007 Microchip Technology Inc.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
PCFG15 PCFG14 PCFG13 PCFG12 PCFG11 PCFG10 PCFG9 PCFG8
bit 15 bit 8
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
PCFG7 PCFG6 PCFG5 PCFG4 PCFG3 PCFG2 PCFG1 PCFG0
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 值 1 = 置 1 0 = 清零 x = 未知
bit 15-0 PCFG15:PCFG0: 模拟输入引脚配置控制位
1 = 对应模拟通道的引脚处于数字模式,允许端口读输入, A/D 输入多路开关输入连接到 AVSS
0 = 对应模拟通道的引脚处于模拟模式,禁止端口读输入, A/D 模块对引脚电压进行采样
寄存器 17-6: AD1CSSL:MUX A 的 A/D 输入扫描选择寄存器 (1)
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
CSSL15 CSSL14 CSSL13 CSSL12 CSSL11 CSSL10 CSSL9 CSSL8
bit 15 bit 8
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
CSSL7 CSSL6 CSSL5 CSSL4 CSSL3 CSSL2 CSSL1 CSSL0
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 值 1 = 置 1 0 = 清零 x = 未知
bit 15-0 CSSL15:CSSL0: A/D 输入通道扫描选择位
1 = 选择对应的模拟通道 Anxx 用于 MUX A 顺序扫描
0 = 在顺序扫描中忽略对应的模拟通道
注 1: 仅支持 MUX A 扫描。
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
17.4 A/D 模块配置
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-11 页
在执行 A/D 转换时应该遵循以下步骤:
1. 配置 A/D 模块:
• 选择参考电压源来匹配模拟引脚上的期望电压范围
• 选择模拟转换时钟以使所需数据速率与处理器时钟匹配
• 确定采样将如何发生
• 确定输入如何分配到 S/H 通道
• 选择所需的采样 / 转换序列
• 选择如何将转换结果送到缓冲器
• 选择中断速率
• 打开 A/D 模块
2. 配置 A/D 中断(如需要):
• 清零 AD1IF 位
• 选择 A/D 中断优先级
下面几节描述了每个配置步骤的选项。
17.4.1 选择参考电压源
A/D 转换的参考电压使用 VCFG2:VCFG0 控制位 (AD1CON2<15:13>)进行选择。参考高电压
(VR+)和参考低电压(VR-)可以为内部 AVDD 和 AVSS 电压轨,也可以为 VREF+ 和 VREF- 输入
引脚电压。
在低引脚数器件上,外部参考电压引脚可与 AN0 和 AN1 输入共用。在引脚与 VREF+ 和 VREF- 输
入引脚共用时, A/D 转换器仍然可以对这些引脚的输入进行转换。
施加于外部参考引脚的电压必须满足某些规范。更多详细信息,请参见第 17.16 节“电气规范”。
17.4.2 选择 A/D 转换时钟
A/D 转换器存在一个最高的转换速率。模拟模块时钟 TAD 控制转换时序。 A/D 转换需要 12 个时
钟周期(12 TAD)。 A/D 时钟基于器件指令时钟而产生。
A/D转换时钟的周期由软件使用一个8位计数器选择。TAD共有64个可能选项,由ADCS7:ADCS0
位(AD1CON3<7:0>)指定。公式 17-1 给出了 TAD 值,它是 ADCS 控制位和器件指令时钟周期
TCY 的函数。为了正确进行 A/D 转换,所选择的 A/D 转换时钟(TAD)必须可确保 TAD 时间至少
为 75 ns。
公式 17-1: A/D 转换时钟周期
A/D 转换器还具有其专用的 RC 时钟源,可用于执行转换。当器件在休眠模式下执行转换时,应
使用 A/D RC 时钟源。将 ADRC 位 (AD1CON3<15>)置 1 选择 RC 振荡器。当 ADRC 位置 1
时, ADCS 位对 A/D 操作无影响。
注: 当 ADON = 1时,不应写 SSRC、ASAM、BUFS SMPI、BUFM 和 ALTS 位,以及
AD1CON3 和 AD1CSSL 寄存器。否则可能产生不确定的转换数据。
TCY (ADCS + 1)
ADCS = – 12 TADTCY
2
注 :基于 TCY = FOSC/2,打盹模式和 PLL 被禁止。
TAD =
PIC24F 系列参考手册
17.4.3 配置模拟端口引脚
DS39705A_CN 第 17-12 页 超前信息 © 2007 Microchip Technology Inc.
AD1PCFG 寄存器用于指定用作模拟输入的器件引脚的输入条件。当引脚的模拟通道对应的
PCFGn 位(AD1PCFG
)被清零时,引脚配置为模拟输入。AD1PCFG 寄存器在器件复位时
清零,所以 A/D 输入引脚在默认情况下配置为模拟输入。当配置为模拟输入时,相关的端口 I/O
数字输入缓冲器被禁止,所以它不消耗电流。
AD1PCFG 寄存器和对应的 TRIS 寄存器位均可控制 A/D 端口引脚的操作。用作模拟输入的端口
引脚还必须将对应的 TRIS 位置 1,以将引脚指定为输入。在器件复位后,所有 TRIS 位均置 1。
如果与 A/D 通道相关的 I/O 引脚配置为数字输出(TRIS 位清零) ,但引脚配置为模拟模式
(AD1PCFG = 0),则将转换的是端口数字输出电平 (VOH 或 VOL)。
当对应的PCFGn位置1时,引脚配置为数字I/O。在该配置中,模拟多路开关的输入连接到AVSS。
17.4.4 CH0 输入选择
A/D 转换器采用了两组独立的输入多路开关,使用户可以选择要采样的模拟通道。它们合称为多
路开关 A (MUX A)和多路开关 B (MUX B)。由 CH0SA3:CH0SA0 和 CH0NA 指定的输入合
称为 MUX A 输入。由 CH0SB3:CH0SB0 和 CH0NB 指定的输入合称为 MUX B 输入。
从功能角度来说,MUX A 与 MUX B 彼此非常相似。两个多路开关均允许选择任意的模拟输入通
道进行单独采样,也允许在多个输入选项中进行选择,作为差分采样中的负参考源。此外,MUX
A 可以配置为进行顺序模拟通道扫描,而 MUX B 可以选择的参考源更多。第 17.4.4.1 节“配置
MUX A 和 MUX B 输入”和第 17.4.4.3 节 “扫描多个输入”中对此进行了更详细的讨论。
17.4.4.1 配置 MUX A 和 MUX B 输入
用户可以选择 16 个模拟输入中的任意一个连接到 CH0 的正输入。对于 MUX A,通常使用
CH0SA3:CH0SA0 位(AD1CHS<3:0>)选择正输入的模拟通道。对于 MUX B,正输入通道使
用 CH0SB3:CH0SB0 位(AD1CHS<11:8>)选择。
对于 CH0 的负 (反相)输入,用户有两种选择:即可以通过 CH0NA 和 CH0NB 位(分别为
AD1CHS<7,15>)进行选择。置 1 任何一位均选择 AN1 作为多路开关的负输入,清零任何一位
则选择当前的 VR- 源。
注 1:在读 PORT 寄存器时,配置为模拟输入的所有引脚均读为 0。
2:指定为数字输入的所有引脚(包括 AN15:AN0 引脚)上的模拟电平可能会导致输入
缓冲器消耗的电流超出器件的规定范围。
注: 不同的PIC24F器件具有不同数量的模拟输入。请根据具体器件的数据手册确定所提
供的模拟输入。
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
17.4.4.2 交替 MUX A 和 MUX B 输入选择
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-13 页
默认情况下, A/D 转换器仅采样和转换由 MUX A 选择的输入。ALTS(AD1CON2<0>)用于允
许模块在连续采样期间在由 MUX A 和 MUX B 选择的两组输入之间交替。
如果 ALTS 位为 0,则仅选择由 CH0SA 和 CH0NA 位指定的输入进行采样。当 ALTS 位为 1时,
模块将交替采样,即在前一次采样 MUX A 输入,而在下一次采样 MUX B 输入。
如果在通道 0 的第一次采样 / 转换序列时,ALTS 位为 1,则选择对由 CH0SA<3:0> 和 CH0NA 指
定的输入进行采样。在下一次采样 / 转换序列时,选择对由 CH0SB<3:0> 和 CH0NB 指定的输入
进行采样。后续的采样转换序列将一直重复这种形式。
17.4.4.3 扫描多个输入
使用MUX A来选择模拟输入时,A/D模块可以扫描多个模拟通道。CSCNA位(AD1CON2<10>)
用于允许在选定数量的模拟输入之间扫描 CH0 通道输入。当 CSCNA 位置 1 时,CH0SA 位被忽
略,而对由 AD1CSSL 寄存器指定的通道进行顺序采样。
AD1CSSL 寄存器中的每个位对应于一个模拟通道。如果 AD1CSSL 寄存器中的某个位置 1,则
在扫描序列中将包含对应的模拟通道。在每次发生中断后,始终从第一个选定通道开始,从编号
较低的输入扫描到编号较高的输入。
AD1CSSL 位仅指定通道的正输入。 CH0NA 位在扫描期间仍用于选择通道的负输入。
扫描仅对于 MUX A 输入选择可用。 MUX B 输入选择(由 CH0SB<3:0> 位指定)将仍选择交替
输入。当选择在 MUX A 和 MUX B 之间交替采样(ALTS = 1)时,将在由 AD1CSSL 寄存器指
定的一组扫描输入和由 CH0SB 位指定的固定输入之间交替采样。
17.4.5 使能模块
当 ADON 位(AD1CON1<15>)置 1 时,模块可使用所有的功能。当 ADON 为 0时,模块被禁
止。电路的数字和模拟部分被关闭,以最大程度地节省功耗。
在通过将 ADON 位置 1 而使能模块时,用户必须等待模拟阶段达到稳定状态。关于稳定时间的信
息,请参见第 17.16 节“电气规范”。
注: 如果所选的扫描输入数量大于每次中断获取的采样数量,则编号较高的输入将不被
采样。
PIC24F 系列参考手册
DS39705A_CN 第 17-14 页 超前信息 © 2007 Microchip Technology Inc.
17.5 初始化
例 17-1 显示了 A/D 模块的简单初始化代码示例。在这种特定配置中,所有 16 个模拟输入引脚均
设置为模拟输入。在空闲模式下工作被禁止,输出数据使用无符号小数格式, AVDD 和 AVSS 用作
VR+ 和 VR-。采样启动和转换启动(转换触发器)在软件中手动执行。输入扫描被禁止,中断在每
个采样 / 转换序列(1 个转换结果)后发生,仅转换 1 个通道(AN0)。A/D 转换器时钟为 TCY/2。
该示例显示了通过手动置 1 和清零 SAMP 位 (AD1CON1<1>)控制采样 / 转换序列的一种方
法。第17.6节“控制采样过程”和第17.7节“控制转换过程”中完整地讨论了该方法和其他方法。
例 17-1: A/D 初始化代码示例
AD1PCFG = 0; // Configure A/D port
// all input pins are analog
AD1CON1 = 0x2208; // Configure sample clock source
// and conversion trigger mode.
// Unsigned Fraction format (FORM<1:0>=10),
// Manual conversion trigger (SSRC<3:0>=000),
// Manual start of sampling (ASAM=0),
// No operation in Idle mode (ADSIDL=1).
AD1CON2 = 0; // Configure A/D voltage reference
// and buffer fill modes.
// Vr+ and Vr- from AVdd and AVss (VCFG<2:0>=000),
// Inputs are not scanned,
// Interrupt after every sample
AD1CON3 = 0; // Configure A/D conversion clock as Tcy/2
AD1CHS = 0; // Configure input channels,
// CH0+ input is AN0,
// CH0- input is Vr- (AVss).
AD1CSSL = 0; // No inputs are scanned.
IFS0bits.AD1IF = 0; // Clear A/D conversion interrupt.
// Configure A/D interrupt priority bits (AD1IP<2:0>) here, if
// required.Default priority level is 4.
IEC0bits.AD1IE = 1; // Enable A/D conversion interrupt
AD1CON1bits.ADON = 1; // Turn on A/D
AD1CON1bits.SAMP = 1; // Start sampling the input
Delay(); // Ensure the correct sampling time has elapsed
// before starting conversion.
AD1CON1bits.SAMP = 0; // End A/D sampling and start conversion
// Example code for A/D ISR:
void __attribute__ ((__interrupt__)) _ADC1Interrupt(void)
{
IFS0bits.AD1IF = 0;
}
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
17.6 控制采样过程
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-15 页
17.6.1 手动采样
在 ASAM 位(AD1CON1<2>)清零时将 SAMP 位(AD1CON1<1>)置 1 会使 A/D 转换器开始
采样。有几种选项可以用于结束采样和完成转换。只有 SAMP 位再次置 1 后,才会继续采样。请
参见图 17-3 的示例。
17.6.2 自动采样
将 ASAM 位置 1 会使 A/D 转换器在转换完成后自动开始采样。有几种选项可以用于结束采样并
完成转换。在通道转换完成之后,将继续对通道进行采样。请参见图 17-4 的示例。
17.6.3 监视采样状态
SAMP 位指示 A/D 转换器的采样状态。通常,当 SAMP 清零时(指示采样结束),DONE 位自动
清零,指示转换开始。如果 SAMP 为 0,而 DONE 为 1,则说明 A/D 转换器处于无效状态。
17.6.4 中止采样
处于手动采样模式时,清零 SAMP 位将终止采样。如果 SSRC2:SSRC0 = 000,则它还会自动启
动转换。
在自动采样模式下,清零 ASAM 位时将不会终止正在进行的采样 / 转换序列;不过,在后续的转
换完成之后,将不会自动继续采样。
17.7 控制转换过程
转换触发器源会终止采样和启动选定的转换序列。SSRC2:SSRC0 位(AD1CON1<7:5>)用于选
择转换触发器源。
17.7.1 手动控制
当 SSRC2:SSRC0 = 000时,转换触发器由软件控制。清零 SAMP 位(AD1CON1<1>)会启动
转换序列。
图 17-3 所示的示例为将 SAMP 位置 1 启动采样,而清零 SAMP 位则终止采样并启动转换。用户
软件必须考虑置 1 和清零 SAMP 位的时间,以确保输入信号有足够的采样时间。
图 17-4 所示的示例为将 ASAM 位置 1 启动自动采样,而清零 SAMP 位则终止采样并启动转换。
转换完成之后,模块将自动恢复为采样状态。SAMP 位在采样时间间隔开始时自动置 1。用户软
件必须考虑清零 SAMP 位的时间,以确保输入信号有足够的采样时间,应了解:清零 SAMP 位
的时间包括转换时间和采样时间。
注 1:可用的转换触发器源根据 PIC24F 器件型号的不同而不同。请参见具体器件的数据
手册,了解可用的转换触发器源。
2:在使能 A/D 模块时,不应更改 SSRC 选择位。如果用户希望更改转换触发器源,则
应先通过清零 ADON 位(AD1CON1<15>)而禁止 A/D 模块。
PIC24F 系列参考手册
图 17-3: 转换 1 个通道,手动采样启动,手动转换启动
DS39705A_CN 第 17-16 页 超前信息 © 2007 Microchip Technology Inc.
例 17-2: 转换 1 个通道,手动采样启动,手动转换启动:代码示例
图 17-4: 转换 1 个通道,自动采样启动,手动转换启动
A/D CLK
SAMP
ADC1BUF0
TSAMP TCONV
BCF AD1CON1, SAMPBSF AD1CON1, SAMP指令执行
DONE
int ADCValue;
AD1PCFG = 0xFFFB; // AN2 as analog, all other pins are digital
AD1CON1 = 0x0000; // SAMP bit = 0 ends sampling
// and starts converting
AD1CHS = 0x0002; // Connect AN2 as CH0 input
// in this example AN2 is the input
AD1CSSL = 0;
AD1CON3 = 0x0002; // Manual Sample, Tad = 2 Tcy
AD1CON2 = 0;
AD1CON1bits.ADON = 1; // turn ADC ON
while (1) // repeat continuously
{
AD1CON1bits.SAMP = 1; // start sampling...
Delay(); // Ensure the correct sampling time has elapsed
// before starting conversion.
AD1CON1bits.SAMP = 0; // start Converting
while (!AD1CON1bits.DONE); // conversion done?
ADCValue = ADC1BUF0; // yes then get ADC value
}
A/D CLK
SAMP
ADC1BUF0
TSAMP TCONV
BCF AD1CON1, SAMP
TCONV
BSF AD1CON1, ASAM BCF AD1CON1, SAMP
TSAMP
TAD0 TAD0
指令执行
第 17 章 10 位 A/D 转换器
10位
A
/D
转
换
器
17
17.7.2 时控转换触发器
© 2007 Microchip Technology Inc. 超前信息 DS39705A_CN 第 17-17 页
当 SSRC2:SSRC0 = 111时,转换触发器由 A/D 时钟控制。 SAMC 位(AD1CON3<12:8>)用
于选择在启动采样和启动转换之间的 TAD 时钟周期数。在启动采样之后,模块将进行计数,计数
数量为 SAMC 位指定的 TAD 时钟数。SAMC 位必须始终设定为至少 1 个时钟周期,以确保满足采
样要求。
公式 17-2: 时控转换触发器时间
图 17-5 所示为如何将时钟控制的转换触发器与由用户软件启动的采样配合使用。
图 17-5: 转换 1 个通道,手动采样启动,基于 TAD 的转换启动
例 17-3: 转换 1 个通道,手动采样启动,基于 TAD 的转换启动:代码示例
TSMP = SAMC<4:0> * TAD
A/D CLK
SAMP
ADC1BUF0
TSAMP TCONV
BSF AD1CON1, SAMP指令执行
DONE
int ADCValue;
AD1PCFG = 0xEFFF; // all PORTB = Digital; RB12 = analog
AD1CON1 = 0x00E0; // SSRC<3:0> = 111 implies internal
// counter ends sampling and starts
// converting.
AD1CHS = 0x000C; // Connect AN12 as CH0 input.
// in this example AN12 is the input
AD1CSSL = 0;
AD1CON3 = 0x1F02; // Sample time = 31Tad,
// Tad = 2 Tcy
AD1CON2 = 0;
AD1CON1bits.ADON = 1; // turn ADC ON
while (1) // repeat continuously
{
AD1CON1bits.SAMP = 1; // start sampling then...
// after 31Tad go to conversion
while (!AD1CON1bits.DONE); // conversion done?
ADCValue = ADC1BUF0; // yes then get ADC value
} // repeat
PIC24F 系列参考手册
17.7.2.1 自由采样转换序列
DS39705A_CN 第 17-18 页 超前信息 © 2007 Microchip Technology Inc.
将自动转换触发器模式(SSRC2:SSRC0 = 111)与自动采样启动模式(ASAM = 1)相结合,可
使 A/D 模块在无需用户或其他器件资源干预的情况下安排采样 / 转换序列。这种“时钟控制”模式
(如图 17-6 所示)可使之在模块初始化之后进行连续的数据收集。
图 17-6: 转换 1 个通道,自动采样启动,基于 TAD 的转换启动
例 17-4: 转换 1 个通道,自动采样启动,基于 TAD 的转换启动:代码示例
17.7.2.2 使用时钟控制转换触发器和自动采样时的采样时间注意事项
用户必须确保采样时间超出第 17.10 节“A/D 采样要求”中所述的采样要求。假设模块设置为自
动采样并使用时控转换触发器,则采样时间间隔由 SAMC 位指定。
A/D CLK
SAMP
ADC1BUF1
TSAMP TCONV
DONE
TSAMP TCONV
ADC1BUF0
BSF AD1CON1, ASAM指令执行
由软件复位
int ADCValue, count;
int *ADC16Ptr;
AD1PCFG = 0xFFFB; // AN2 as analog,
// all ot