6 到 14 位 Delta Sigma ADC 数据手册 V 1.30 001-65734 Rev. *B 6 到 14 位 Delta Sigma ADC 数据手册 Copyright © 2009-2014 Cypress Semiconductor Corporation. All Rights Reserved. 调制器 订单 抽取 速率 分辨率 采样率 采样率 (CLK = 2 MHz) (CLK = 8 MHz) 数量 抽取器 SC 模块 闪存 RAM 通道 (I/O 引脚) CY8C28x45、 CY8C28x43、 CY8C28x52、 CY8C28x33、 CY8C28x23 1 32 6 15625.0 62500.0 2 2 148 3 2 1 64 7.5 7812.5 31250.0 2 2 156 3 2 1 128 9 3906.3 15625.0 2 2 185 5 2 1 256 10.5 1953.1 7812.5 2 2 185 5 2 2 32 8 15625.0 62500.0 2 2 187 5 2 2 64 10 7812.5 31250.0 2 2 216 7 2 2 128 12 3906.3 15625.0 2 2 216 7 2 2 256 14 1953.1 7812.5 2 2 216 7 2 1 32 6 15625.0 62500.0 3 6 180 6 3 1 64 7.5 7812.5 31250.0 3 6 192 6 3 1 128 9 3906.3 15625.0 3 6 234 9 3 1 256 10.5 1953.1 7812.5 3 6 234 9 3 2 32 8 15625.0 62500.0 3 6 215 6 3 2 64 10 7812.5 31250.0 3 6 257 9 3 2 128 12 3906.3 15625.0 3 6 257 9 3 2 256 14 1953.1 7812.5 3 6 257 9 3 1 32 6 15625.0 62500.0 4 8 200 7 4 1 64 7.5 7812.5 31250.0 4 8 216 7 4 1 128 9 3906.3 15625.0 4 8 271 11 4 1 256 10.5 1953.1 7812.5 4 8 271 11 4 2 32 8 15625.0 62500.0 4 8 243 7 4 2 64 10 7812.5 31250.0 4 8 298 11 4 2 128 12 3906.3 15625.0 4 8 298 11 4 2 256 14 1953.1 7812.5 4 8 298 11 4 赛普拉斯半导体公司 uctor Corporation 文档编号:001-65734 Rev. *B • 198 Champion Court • San Jose, CA 95134-1709 • 408-943-2600 修订日期 December 5, 2014 6 到 14 位 Delta Sigma ADC 数据手册 有关其他转换器的信息,请参见应用手册 “ 模拟 — 模数转换器选择 ”AN2239。 特性和概述 6 到 14 位分辨率 2 到 4 个通道同步采样 数据为无符号或有符号 2 的补码格式 在 6 位分辨率情况下,最大采样率为 65,500 sps,在 14 位分辨率情况下,最大采样率为 7812 sps 在硬件中完全实现了 Sinc2 滤波器,并降低了 CPU 开销和抗锯齿要求 用户可以选择 1 阶或 2 阶调制器,以提高信噪比 输入范围由内部和外部参考选项定义 不需要数字模块 通过配置向导,可以轻松地选择彼此全部同步的 2、 3 或 4 通道 delta-sigma ADC 测量 抽取滤波器的内部定时器不允许使用数字模块 DelSigMulti 用户模块是积分转换器,需要 32 到 256 个积分周期,以生成单一个输出采样。更改复用输入 会使得更改后的前两个采样失效。此 DelSigMulti 用户模块最多支持 4 通道同时同步 delta-sigma ADC 采 样。 通过配置向导,可以轻松地选择每个通道使用的模拟模块数和每个通道的抽取滤波器过采样率。 在放置模块之前,请读取 “ 参数 ” 一节。 注意: 如果仅需要 1 个通道或需要多个不同步通道,则应当使用常规 “DelSig”、“DelSigPlus” 用户 模块。 图 1. DelSigMulti 框图的一个通道 文档编号:001-65734 Rev. *B 页 2/21 6 到 14 位 Delta Sigma ADC 数据手册 功能说明 如图 1 所示, DelSigMulti 用户模块由三个主要功能组成: 调制器 Sinc2 抽取滤波器 定时发生器 每个组件均提供了一些选项,可以通过调整这些选项对给定应用情况的性能与资源利用间合理的平衡。 调制器 调制器是 1 位过采样电路,它以所产生的 1 和 0 的密度形式表示输入电压。调制器输出通过低通抽取滤波 器降低到最终采样率,该低通抽取滤波器会将多个 1 位样本转换为具有较高分辨率的样本。通常,抽取速 率越高 (即过采样率越高),则分辨率结果越高,但是其他因素 (例如调制器的阶数)也会影响分辨率结 果。 Delta-Sigma 转换器的主要优点是调制器可提供 “ 噪声整形 ”。通常,信号采样中固有的量化噪声是一种 大致均匀分布的噪声 (白噪声),其频率介于 “DC” 与采样频率一半 (即奈奎斯特频率)之间。简单而 言, delta-sigma 调制器会将某些量化噪声从较低频率转换为较高频率,之后这些频率会由抽取滤波器进行 衰减。二阶调制器需要两个开关电容模拟 PSoC 模块,它对噪声整形的效果要好于仅需要一个模拟 PSoC 模块的一阶调制器。在最高抽取速率为 256X 时,与一阶调制器相比,二阶调制器将有效分辨率提高了 3.5 位。 图 2. DelSigMulti 一阶调制器的原理图 模拟模块配置为积分器。比较器的输出极性对参考复用器进行配置,以便在输入中增减参考电压,并置入 积分器中。此参考控制尝试将积分器输出拉回零。一位比较器输出也会馈入到 sinc2 抽取滤波器中。 文档编号:001-65734 Rev. *B 页 3/21 6 到 14 位 Delta Sigma ADC 数据手册 请注意:1 位过采样率是由四分发生器决定的,四分发生器为生成控制开关电容 (SC) PSoC 模块的 φ1 和 φ2 时钟。确定输出速率的方法是:将数据除以 4,得到 1 位过采样率,然后再将该结果除以抽取速率得 到最终采样率。 公式 1 下面的规格表中给出了可以使用的最高数据时钟频率。对于 8 MHz 的数据时钟和 256 的抽取速率,采样率 为: 公式 2 二阶调制器的构造方法是:将一阶调制器的模拟输出馈送到相似的 PSoC 模块中,并修改反馈排列,以便 将第二个模块的 1 位比较器输出反馈给这两个模块,如下图所示: 图 3. DelSigMulti 二阶调制器的原理图 由于模拟比较器总线在模拟 PSoC 模块阵列的列中垂直运行,二阶调制器的模块必须叠加放置。 DelSigMulti 的范围是通过 ±VRef 建立的。您可以在 PSoC Designer“ 全局资源 ” 窗口中设置 VRef。对于 固定量程,将 VRef 设置为 ±VBandgap ;对于 CY8C29x66 系列 PSoC 器件,设置为 ±1.6 VBandgap。对于 可调整量程,将 VRef 设置为 ±Port 2[6]。为了提供比例式量程,将 VRef 设置为 ±VDD/2。下面的 1 表中, 列出了完整选项: 表 1. 针对 Ref Mux 全局参数设置的输入电压范围 VDD = 5 V RefMux 设置 VDD = 3.3 V (VDD/2) ± 带隙 1.2 < Vin < 3.8 0.35 < Vin < 2.95 (VDD/2) ± (Vdd/2) 0 < Vin < 5 0 < Vin < 3.3 带隙 ± 带隙 0 < Vin < 2.6 0 < Vin < 2.6 (1.6* 带隙) ± (1.6* 带隙) 0 < Vin < 4.16 NA 文档编号:001-65734 Rev. *B 页 4/21 6 到 14 位 Delta Sigma ADC 数据手册 VDD = 5 V RefMux 设置 VDD = 3.3 V (2* 带隙)± 带隙 1.3 < Vin < 3.9 NA (2* 带隙)± P2[6] (2.6 - VP2[6]) < Vin < (2.6 + VP2[6]) NA P2[4] ± 带隙 (VP2[4] - 1.3) < Vin < (VP2[4] + 1.3) (VP2[4] - 1.3) < Vin < (VP2[4] + 1.3) P2[4] ± P2[6] (VP2[4]-VP2[6]) < Vin < (VP2[4]+VP2[6]) (VP2[4]-VP2[6]) < Vin < (VP2[4]+VP2[6]) Sinc2 抽取滤波器 抽取过滤器的响应由下列 z 域关系提供: 公式 3 本章节绘制的频率域传输函数将频率标准化,使输出采样率 (Fnom)等于 1.0。 -3 dB 点出现在紧靠 0.318×Fnom 上方,函数的零点出现在 Fnom 的每个整数倍数的位置。由于 1 位采样率比额定输出速率高 32 到 256, Nyquist 限制比 Fnom 高 4 到 7 个八度,因而极大降低了对抗锯齿滤波器的要求。在图形右侧, 抽取速率为 256 的 1 位 Nyquist 频率以粗垂直线显示。虽然有可能实现较高的抽取速率,但是由于存在器 件本底噪声,它们几乎不会产生的影响。对于 14 位拓扑,即抽取速率为 256 的二阶调制器,分辨率受信 噪比限制。要在 DC 或慢速移动信号测量中获取可重复的 14 位分辨率,需要计算多个输出采样值的平均 值,或者应用更复杂的信号处理技术实现。 图 4. Sinc2 抽取滤波器量级响应 文档编号:001-65734 Rev. *B 页 5/21 6 到 14 位 Delta Sigma ADC 数据手册 与早先的 DELSIG8 和 DELSIG11 不同,此用户模块在硬件中完整实现传输函数的分子和分母。这需要改 进的 “ 类型 2” 抽取滤波器。该滤波器既可用于一阶调制器拓扑,也可用于二阶调制器拓扑。抽取滤波器通 过以 1 位采样率运行的双积分器实现传输函数的分母。分子由以额定输出采样率运行的双微分器 (第二差 分运算符)实现。 DelSigMulti 用户模块使用的 CPU 开销和中断延迟被限制在大约 80 个周期或更少的范围 内,以便从 I/O 空间中的抽取滤波器寄存器获得采样数据。类型 2 抽取滤波器实际上是为 n 比特转换器生 成从 0 到 2n-1 的无符号值。可以配置中断服务例程,以将此转换为从 -2n-1 到 +2n-1-1 的 2 的补码值。 表 2. Delta Sigma ADC 特性表 Delta Sigma ADC DELSIG8、 DELSIG11 特性 DelSig DelSigPlus DelSigMulti 分辨率 8、 11 6-14 6-14 6-14 数字模块 1 1-2 0 0 模拟模块 1-2 1-2 1-2 2-8 支持的器件 支持 CY8C24/27/29,不 支持 CY8C24x94、 CY8C28x45 CY8C24x94、 CY8C29xxx、 CY8C28x45 CY8C24x94、 CY8C28x45 CY8C28x45 CPU 开销和中断延迟 高 低 低 低 时序发生器和要求 向模拟调制器提供 φ1 和 φ2 时钟的四分时钟发生器也会向抽取滤波器提供位时钟。对应于输出采样率的抽 取因子由字时钟确定。字时钟由抽取滤波器内部定时器生成。 类型 2 抽取滤波器是 Sinc2 滤波器的全硬件版本。其体系结构使您可以选择将内部定时器用于抽取和中断 目的。要计算有效分辨率,请使用下列等式: 单一调制器:(log2( 抽取滤波器速率 ) - 1) × 1.5 双端调制器:(log2( 抽取滤波器速率 ) - 1) × 2 数据格式位可以加权为有符号 (2s 补码输出)或无符号 (偏移二进制数据)数值。 表 3. 抽取滤波器数据输出移位 抽取速率 调制器类型 有效分辨率 移位 32 单端 6 4 32 双端 8 2 64 单端 8 (7.5) 4 64 双端 10 2 文档编号:001-65734 Rev. *B 页 6/21 6 到 14 位 Delta Sigma ADC 数据手册 抽取速率 调制器类型 有效分辨率 移位 128 单端 9 5 128 双端 12 2 256 单端 11 (10.5) 5 256 双 14 2 直流和交流电的电气特性 下列各值表示预计的性能,它们是根据初始特性数据得到的。除非另有指定,否则条件为:TA = 40、 25、 85 和 125 °C, Vdd = 5.0 V。 表 4. 电压为 5.0 V 时的结果汇总 参数 典型值 限制 单位 注意 8 位、 24 MHz CPU Clk、 1 MHz 数据时钟、高功耗 增益 -2.6482 2 %FSR 偏移 -47.0072 13 mV DNL 0.161 <1 LSB INL 0.27 – LSB SNR 45.86 – dB 8 位、 24 MHz CPU Clk、 2 MHz 数据时钟、高功耗 增益 -2.3168 2 %FSR 偏移 -62.3507 13 mV DNL 0.069 <1 LSB INL 0.172 – LSB SNR 45.86 – dB 文档编号:001-65734 Rev. *B 页 7/21 6 到 14 位 Delta Sigma ADC 数据手册 下列各值表示预计的性能,它们是根据初始特性数据得到的。除非另有指定,否则条件为:TA = 40、 25、 85 和 125 °C, Vdd = 3.3 V。 表 5. 电压为 3.3 V 时的结果汇总 参数 典型值 限制 单位 注意 8 位、 24 MHz CPU Clk、 1 MHz 数据时钟、高功耗 增益 -2.7182 2 %FSR 偏移 -40.1334 5 mV DNL – <1 LSB INL – – LSB SNR – – dB 8 位、 24 MHz CPU Clk、 2 MHz 数据时钟、高功耗 增益 -2.8219 2 %FSR 偏移 -42.8073 5 mV DNL 0.064 <1 LSB INL 0.161 – LSB SNR 46.02 – dB 放置 如果 DelSigMulti 用户模块是在工具栏中选择的或者是通过在选择器视图中双击其图标选择的,将打开一个 选择窗口,该窗口给出了选择适当拓扑的指南。稍后可以通过右键单击位置视图中的用户模块并从上下文 菜单中选择 “User Module Selection Options...” (用户模块选择选项 ...)。 一阶调制器的设计需要一个 PSoC 模拟模块。名为 “ADC” 的模拟模块可以放置在任何开关电容 PSoC 模块中。 二阶调制器的设计使用两个开关电容 PSoC 模块:ADC0 和 ADC1。由于连接它们的模拟比较器总线在模 拟阵列的每列中垂直运行,开关电容 PSoC 模块必须垂直累加放置。 虽然模拟模块有多种放置方法,但是 DelSigMulti 仍只使用 PSoC 器件的唯一硬件抽取滤波器。抽取滤波 器是在放置模拟模块时自动分配的;不需要附加操作。因此,给定配置中只能放置 DelSigMulti 用户模块的 一个实例。重新通过动态配置,可以同时加载 (激活)多个配置,而不用对阻止两个 DelSigMulti 用户模 块同时运行而执行的检查。如果发生这种情况,则两个实例似乎都可以工作;但是,只有一个最近加载的 实例可以控制抽取过滤器。两个中断仍可以运行,但是可能会有干扰。 文档编号:001-65734 Rev. *B 页 8/21 6 到 14 位 Delta Sigma ADC 数据手册 参数和资源 放置 DelSigMulti 实例后,必须配置下列某些参数才能正确执行操作:输入信号复用器选择、时钟相位和轮 询选择。 DataFormat0/1/2/3 此参数可以采用无符号 (默认值)或有符号值。对于 n 位分辨率,无符号数据采用的值为从零到 2n1。符号数据值属于 -2n-1 到 +2n-1-1 的范围内。 0/1/2/3 代表所使用的 delta-sigma ADC 通道数量。 Clock Phase0/1/2/3 时钟相位的选择用于将一个模拟 PSoC 模块的输出与另一个模拟 PSoC 模块的输入同步。开关电容 模拟 PSoC 模块使用两相时钟 (φ1、 φ2)来获取和传输信号。通常, DelSigMulti 的输入是在 φ1 上 采样的。这便产生一个问题:许多用户模块在 φ1 期间将其输出自动调零,仅在 φ2 期间给出有效输 出。如果此类模块的输出馈送到 DelSigMulti 的输入,则 DelSigMulti 对中间值采样。通过选择时钟相 位,可以交换相位,以便在 φ2 中获取输入信号。 0/1/2/3 表示所使用的 delta-sigma ADC 通道的数 量。 PosInput0/1/2/3 此参数确定单端输入的信号源,或差分输入的非反相输入。 0/1/2/3 表示所使用的 delta-sigma ADC 通道数量。 NegInput0/1/2/3 与 NegInputGain0/1/2/3 NegInput 选择了一个差分信号对的反相输入源。如果使用单端输入,则可以将此参数设置为任意合 法值。通过将 NegInputGain 参数设置为 “ 断开连接 ” (零增益),可以断开单端输入与转换器的 连接。 NegInputGain 调整了反相输入相对于同相输入的增益 (请参见上述 NegInput 参数)。对于单端输 入,此参数应该采用 “ 断开连接 ” 值。对于差分输入, NegInputGain 可以设置为 1.000。如果需 要,应用于反相输入的增益还可以按 1/16 增量在 0.0625 与 1.9375 之间相对于同相输入进行调整。 0/1/2/3 代表所使用的 elta-sigma ADC 通道数量。 中断生成控制 PSoC Designer 中选中使能中断生成控制复选框时,该选框有两个可选的额外参数。该选框位于 Project > Settings > Chip Editor 路径下。当多个外覆层和多个用户模块跨外覆层所共享的中断一起使用时,中断 生成控制起着关键作用: InterruptAPI IntDispatchMode InterruptAPI InterruptAPI 参数允许有条件生成用户模块的中断处理程序和中断向量表入口。选择 “Enable” (使能)以生成中断处理程序和中断向量表入口。选择 “Disable” (禁用)以取消生成中断处理程 序和中断向量表入口。 如果项目有多个覆盖层,其中一个模块资源由不同的覆盖层使用,则选择时一定要加以注意。选择以 仅为实际需要它们的覆盖层生成中断,以节省代码空间。 文档编号:001-65734 Rev. *B 页 9/21 6 到 14 位 Delta Sigma ADC 数据手册 IntDispatchMode IntDispatchMode 参数用于指定中断请求的处理方式,这些中断在同一个模块但在不同外覆层中的多 个用户模块所共享。当您选择 ActiveStatus 时,固件在为共享中断请求提供服务之前测试哪个覆盖层 处于活动。每次共享的中断发出请求时,都会进行该测试操作。这会增加延迟,还会产生为共享中断 请求提供服务的不确定过程,但是不需要使用任何 RAM。当您选择 OffsetPreCalc 时,仅当最初加 载覆盖层时,固件才会计算共享中断请求的来源。这种计算可减少中断延迟,并产生为共享中断请求 提供服务的确定过程,但会占用一个字节的 RAM 空间。 应用编程接口 (API) 应用程序编程接口 (API)例程作为用户模块的一部分提供,从而使设计人员能够采用更高级的方式处理 模块。本章节指定每个函数的接口和 “include” 文件给出的相关常量。 每次放置用户模块时,都会为其分配一个实例名称。在默认情况下, PSoC Designer 向给定项目中此用户 模块的第一个实例分配 DelSigMulti_1。可将该值更改为符合标识符语法规则的任意唯一值。分配的实例名 称成为每个全局函数名称、变量和常量符号的前缀。为简便起见,在以下说明中将实例名称缩写为 DelSigMulti。 注意: 在这里,如同所有用户模块中的 API 一样,可通过调用 API 函数,进行更改 A 和 X 寄存器的值。如果调用 后需要使用 A 和 X 的值,则调用函数要保留调用前的 A 和 X 值。选择这种 “ 寄存器易失 ” 策略是为了 提高效率,并且从 PSoC Designer 的 1.0 版本起已强制使用。 C 编译器会自动遵循该要求。汇编语言编程 员也要确保其代码遵循该策略。虽然一些用户模块 API 函数可以保留 A 和 X 不变,但是无法保证它们将来 也会如此。 对于大型储存器模型器件,调用程序需要保留 CUR_PP、 IDX_PP、 MVR_PP 以及 MVW_PP 寄存器中的 所有值。尽管目前尚未修改某些寄存器,但无法保证在将来的版本中也会如此。 DelSigMulti_Start 说明: 对此用户模块执行所有必需的初始化,并设置开关电容 PSoC 模块的功耗水平。所有通道都是在相同 电源级别下配置的。 C 原型: void DelSigMulti_Start(BYTE bfPowerSetting) 汇编: mov A, bfPowerSetting lcall DelSigMulti_Start 参数: bPowerSetting:一字节有四个 2 位字段,每个字段分别指定每个通道的功耗级别。在复位和配置之 后,分配给 DelSigMulti 的模拟 PSoC 模块关闭电源。下表列出了 C 语言和汇编语言中提供的符号名 称及其相关值。 文档编号:001-65734 Rev. *B 页 10/21 6 到 14 位 Delta Sigma ADC 数据手册 符号名称 屏蔽 DelSigMulti_CH0_OFF 00h DelSigMulti_CH0_LOWPOWER 01h DelSigMulti_CH0_MEDPOWER 02h DelSigMulti_CH0_HIGHPOWER 03h DelSigMulti_CH1_OFF 00h DelSigMulti_CH1_LOWPOWER 04h DelSigMulti_CH1_MEDPOWER 08h DelSigMulti_CH1_HIGHPOWER 0Ch DelSigMulti_CH2_OFF 00h DelSigMulti_CH2_LOWPOWER 10h DelSigMulti_CH2_MEDPOWER 20h DelSigMulti_CH2_HIGHPOWER 30h DelSigMulti_CH3_OFF 00h DelSigMulti_CH3_LOWPOWER 40h DelSigMulti_CH3_MEDPOWER 80h DelSigMulti_CH3_HIGHPOWER C0h 返回值: 无 其他影响: 通过本次或下次执行该函数可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针寄存器 也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 DelSigMulti_Stop 说明: 将开关电容 PSoC 模块的功耗级别设置为关闭。 C 原型: void DelSigMulti_Stop(void) 汇编: lcall DelSigMulti_Stop 文档编号:001-65734 Rev. *B 页 11/21 6 到 14 位 Delta Sigma ADC 数据手册 参数: 无 返回值: 无 其他影响 : 通过本次或下次执行该函数可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针寄存器 也会出现这种状况。如果需要,调用 fastcall16 函数时,可通过调用函数将保留各个寄存器的值。 DelSigMulti_SetPower 说明: 设置 UM 的每个通道的开关电容 PSoC 模块的功耗级别。 C 原型: void DelSigMulti_SetPower(BYTE bPowerSetting) 汇编: mov A, bPowerSetting lcall DelSigMulti_SetPower 参数: bPowerSetting:一字节有四个 2 位字段,每个字段分别指定每个通道的功耗级别。在复位和配置之 后,分配给 DelSigMulti 的模拟 PSoC 模块关闭电源。下表列出了 C 语言和汇编语言中提供的符号名 称及其相关值。 符号名称 屏蔽 DelSigMulti_CH0_OFF 00h DelSigMulti_CH0_LOWPOWER 01h DelSigMulti_CH0_MEDPOWER 02h DelSigMulti_CH0_HIGHPOWER 03h DelSigMulti_CH1_OFF 00h DelSigMulti_CH1_LOWPOWER 04h DelSigMulti_CH1_MEDPOWER 08h DelSigMulti_CH1_HIGHPOWER 0Ch DelSigMulti_CH2_OFF 00h DelSigMulti_CH2_LOWPOWER 10h DelSigMulti_CH2_MEDPOWER 20h DelSigMulti_CH2_HIGHPOWER 30h 文档编号:001-65734 Rev. *B 页 12/21 6 到 14 位 Delta Sigma ADC 数据手册 符号名称 屏蔽 DelSigMulti_CH3_OFF 00h DelSigMulti_CH3_LOWPOWER 40h DelSigMulti_CH3_MEDPOWER 80h DelSigMulti_CH3_HIGHPOWER C0h 返回值: 无 其他影响: 通过本次或下次执行该函数可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针寄存器 也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 DelSigMulti_StartAD 说明: 激活此用户模块的中断并开始采样。 C 原型: void DelSigMulti_StartAD(void) 汇编 lcall DelSigMulti_StartAD 参数: 无 返回值: 无 其他影响: 通过此函数的本次执行或下次执行可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针 寄存器也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 DelSigMulti_StopAD 说明: 通过禁用中断,关闭 A/D。模拟电源仍提供给模拟模块。 C 原型: void DelSigMulti_StopAD(void) 汇编: lcall DelSigMulti_StopAD 参数: 无 文档编号:001-65734 Rev. *B 页 13/21 6 到 14 位 Delta Sigma ADC 数据手册 返回值: 无 其他影响: 通过此函数的本次执行或下次执行可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针 寄存器也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 DelSigMulti_fIsDataAvailable 说明: 检查新 ADC 采样数据是否已就绪。当 ADC 产生的结果已就绪时,进行设置标志。此 API 函数允许 用户检查标志。为整个 UM 进行检查数据的可用性。所有通道都同步,因此所有数据同时是新数据或 旧数据。因此,仅进行一项检查,该检查适用于所有通道的所有采样数据。用户必须使用另一个 API 函数清除此标志。 C 原型: BYTE DelSigMulti_fIsDataAvailable(void) 汇编: lcall DelSigMulti_fIsDataAvailable cmp A, 0 jz .DataNotAvailable 参数: 无 返回值: 如果已转换每个通道的数据,且这些数据准备读取,则返回非零值。如果尚未转换每个通道的数据且 这些数据未就绪,则返回零。 其他影响: 通过此函数的本次执行或下次执行可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针 寄存器也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 而当前,仅修改了 CUR_PP 页面指针寄存器。 DelSigMulti_GetAllDataClearFlag 说明: 此函数用于使用一个函数检索通道的数据。 RAM 阵列指针传递到此函数中,此函数将 ADC 结果放入 该 RAM 阵列。用户必须确保其 RAM 阵列大小适合 ADC 通道的数量和分辨率。此函数为 ADC 数据 已就绪的信号清除标志。调用此函数之前,必须调用 DelSigMulti_fIsDataAvailable(),以确保数据采 样已就绪。 C 原型: void DelSigMulti_GetAllDataClearFlag(BYTE* pbRamBuffer) 文档编号:001-65734 Rev. *B 页 14/21 6 到 14 位 Delta Sigma ADC 数据手册 汇编: mov A, >pbRamBuffer mov X, <pbRamBuffer lcall DelSigMulti_GetAllDataClearFlag 参数: pbRamBuffer:此参数确定 ADC 采样数据复制到 RAM 位置。复制的数据为 ADC 结果。用户必须确 保 RAM 阵列类型与 ADC 结果的数据类型相匹配。 ADC 通道数据放置在首先从通道 0 数据开始的用 户阵列中,字节顺序为 MSB 优先。例如:如果 UM 有 3 个 10 位无符号数据的通道,则该阵列会按 下列顺序将 6 个字节复制到用户阵列中:Ch0_Result_MSB、 Ch0_Result_LSB、 Ch1_Result_MSB、 Ch1_Result_LSB、 Ch2_Result_MSB、 Ch2_Result_LSB。如果用户拥有的阵 列类型与 BYTE 类型是不同的,则用户应将传递给的函数的阵列指针强制传换成 BYTE 指针。 返回值: 无 其他影响 : 通过此函数的本次执行或下次执行可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针 寄存器也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 当前,仅修改 CUR_PP 页面指针寄存器。 DelSigMulti_cGetData DelSigMulti_iGetData 说明: 以有符号 8 位或 16 位 2 的补码格式返回转换的数据。请注意,用户模块 DataFormat 参数决定了基 本表示。当基本表示是无符号数据时,调用有符号格式函数不会更改数据值。必须调用 DelSigMulti_fIsDataAvailable(),以确保数据采样已就绪。通道编号会传递给此函数。 C 原型: CHAR DelSigMulti_cGetData(BYTE bChannelNumber) // use for 8-bit resolution or lower INT DelSigMulti_iGetData(BYTE bChannelNumber) // use for 9-bit resolution or higher 汇编: mov A, [bChannelNumber] lcall DelSigMulti_cGetData - or mov A, [bChannelNumber] lcall DelSigMulti_iGetData ; Result will be in A ; LSB will be in A, MSB in X upon return 参数: bChannelNumber:此参数确定了被返回通道的数据。 返回值: 以 8 位或 16 位的 2 补码格式返回转换的数据采样。 其他影响: 通过此函数的本次执行或下次执行可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针 寄存器也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 当前,仅修改 CUR_PP 页面指针寄存器。 文档编号:001-65734 Rev. *B 页 15/21 6 到 14 位 Delta Sigma ADC 数据手册 DelSigMulti_bGetData DelSigMulti_wGetData 说明: 以 8 位或 16 位的无符号格式返回转换的数据。请注意,用户模块 DataFormat 参数决定了基本表 示。当基本表示是有符号数据时,调用无符号格式函数不会更改数据值。必须调用 DelSigMulti_fIsDataAvailable(),以确保数据采样已就绪。通道编号会传递给此函数。 C 原型: BYTE DelSigMulti_bGetData(BYTE bChannelNumber) // use for 8-bit resolution or lower WORD DelSigMulti_wGetData(BYTE bChannelNumber) // use for 9-bit resolution or higher 汇编: mov A, [bChannelNumber] lcall DelSigMulti_bGetData - or mov A, [bChannelNumber] lcall DelSigMulti_wGetData ; Result will be in A ; LSB will be in A, MSB in X upon return 参数: bChannelNumber:此参数确定了被返回通道的数据。 返回值: 根据该函数,以 8 位或 16 位的无符号格式返回转换的数据采样。 其他影响: 通过此函数的本次执行或下次执行可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针 寄存器也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 当前,仅修改 CUR_PP 页面指针寄存器。 DelSigMulti_ClearFlag 说明: 复位数据可用标志。 C 原型: void DelSigMulti_ClearFlag(void) 汇编: lcall DelSigMulti_ClearFlag 文档编号:001-65734 Rev. *B 页 16/21 6 到 14 位 Delta Sigma ADC 数据手册 参数: 无 返回值: 无 其他影响: 通过此函数的本次执行或下次执行可以修改 A 和 X 寄存器在大型存储器模型中,所有 RAM 页面指针 寄存器也会出现这种状况。如果需要,当调用 fastcall16 函数时,调用函数将保留各个寄存器的值。 当前,仅修改 CUR_PP 页面指针寄存器。 固件源代码示例 注意: 应将 DelSigMulti 用户模块设置为双通道,其中每个通道的分辨率不超过 8 位。 下面是汇编语言示例: include "m8c.inc" include "memory.inc" include "PSoCAPI.inc" ; part specific constants and macros ; Constants & macros for SMM/LMM and Compiler ; PSoC API definitions for all User Modules ; two bytes are required for this example code BUFF_SIZE: equ 2; AREA userRAM(RAM,REL) ; reserve a 2-bytes area in RAM to load data in RamBuffer: blk BUFF_SIZE AREA text(ROM, REL) export _main _main: M8C_EnableGInt ; enable global interrupts mov A,DelSigMulti_CH0_HIGHPOWER | DelSigMulti_CH1_HIGHPOWER ; Establish power setting... call DelSigMulti_Start ; and initialize call DelSigMulti_StartAD ; Commence sampling process mainloop: call DelSigMulti_fIsDataAvailable ; Retrieve the status byte cmp A, 0 jz mainloop ; spin lock until(data is Available) mov A, >RamBuffer mov X, <RamBuffer call DelSigMulti_GetAllDataClearFlag ; fastcall convention places ADC results in RAM array defined by RamBuffer pointer call ProcessSample ; pass the sample to the dummy fcn jmp mainloop ProcessSample: ;... ret 文档编号:001-65734 Rev. *B ; (do something useful with the data) 页 17/21 6 到 14 位 Delta Sigma ADC 数据手册 等效的 C 代码: #include <m8c.h> #include "PSoCAPI.h" // part specific constants and macros // PSoC API definitions for all User Modules BYTE RamBuffer[2]; void main(void) { M8C_EnableGInt; // start both channels of DelSigMulti ADC DelSigMulti_Start(DelSigMulti_CH0_HIGHPOWER|DelSigMulti_CH1_HIGHPOWER); DelSigMulti_StartAD(); while(1) { // check if data sample is available if( DelSigMulti_fIsDataAvailable() ) { DelSigMulti_GetAllDataClearFlag(RamBuffer); // copy ADC data to buffer before processing } } } 配置寄存器 下面一节详述了此用户模块更改的寄存器。 模拟寄存器、一阶调制器 表 6. “ADC” 模拟开关电容 PSoC 模块使用的寄存器 寄存器 ADC_CH0/1/2/3_CR0 1 7 6 0 5 0 ADC_CH0/1/2/3_CR1 PosInput0/1/2/3 4 1 3 0 2 1 0 0 0 0 0 0 0 InvertingGain0/1/2/3 ADC_CH0/1/2/3_CR2 0 1 0 0 0 ADC_CH0/1/2/3_CR3 1 1 1 0 NegInput0/1/2/3 功耗 PosInput0/1/2/3 选择单端输入信号或差分输入信号的同相输入。 NegInput0/1/2/3 选择差分输入的反相输 入。只要 InvertingGain0/1/2/3 字段设置为零,反相输入就会断开连接。通过 DelSigMulti_Start 和 DelSigMulti_SetPower API 函数设置功耗级别。 0/1/2/3 代表所使用的 delta-sigma ADC 通道的数量。 文档编号:001-65734 Rev. *B 页 18/21 6 到 14 位 Delta Sigma ADC 数据手册 模拟寄存器、二阶调制器 表 7. “ADC0” 和 “ADC1” 模拟开关电容 PSoC 模块所使用的寄存器 寄存器 7 6 ADC0_CH0/1/2/3_CR0 1 5 0 4 0 3 0 ADC0_CH0/1/2/3_CR1 PosInput0/1/2/3 2 1 1 0 0 0 0 0 0 0 InvertingGain0/1/2/3 ADC0_CH0/1/2/3_CR2 0 1 0 0 0 ADC0_CH0/1/2/3_CR3 1 1 1 0 NegInput0/1/2/3 功耗 ADC1_CH0/1/2/3_CR0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 ADC1_CH0/1/2/3_CR1 LinkToADC0 ADC1_CH0/1/2/3_CR2 0 0 0 0 0 0 0 ADC1_CH0/1/2/3_CR3 1 1 1 0 0 0 功耗 PosInput0/1/2/3 选择单端输入信号或差分输入信号的同相输入。 NegInput0/1/2/3 选择差分输入的反相输 入。只要 InvertingGain0/1/2/3 字段设置为零,反相输入就会断开连接。 LinktoADC0 由模块位置确定,它 将 ADC0 模块的输出连接到 ADC1 PSoC 模块的 “A” 输入电容。 DelSigMulti_Start 和 DelSigMulti_SetPower API 函数设置了功耗级别。 0/1/2/3 代表所使用的 delta-sigma ADC 通道数量。 抽取滤波器控制寄存器 表 8. 抽取滤波器控制寄存器 位 7 DECx_DH 数据高字节 DECx_DL 数据低字节 DEC_CR0 ACC_IGEN DEC_CR1 0 IDEC ICLKS3 ICLKS2 DECx_CR 0 POL GOOO GOOE 0 DEC_CR3 DEC1_EN CLK_IN1 DEC0_EN CLK_IN0 DEC_CR4 DEC3_EN CLK_IN3 DEC2_EN CLK_IN2 DEC_CR5 0 DECx_CR 模式 6 5 4 3 2 ICLKS ACE_IGEN ICLKS1 DCLKS3 1 0 DCLKS0 DCLKS2 DCLKS1 DATA_IN DSCLK 数据输出移位 数据格式 抽取速率 抽取滤波器是用于实现 Sinc2 滤波器的专用硬件。它由三个控制寄存器和两个数据输出寄存器组成。 DCol 选择连接哪个列比较器。 DCLKSEL 选择使用哪个数字模块来控制抽取滤波器定时。这两个参数都是在器 件编辑器中设置的。 DEC_CR2 中的移位是根据抽取速率设置的,在 DEC_CR2 中也进行了指定,其目的 是最大程度地减少软件中必须完成的对齐数据。 文档编号:001-65734 Rev. *B 页 19/21 6 到 14 位 Delta Sigma ADC 数据手册 数字模块寄存器 表 9. 数字模块控制寄存器 位 7 DxCxxCR0 6 5 4 3 2 1 0 使能 此寄存器在使用时配置有附加数字模块,以便通过调用函数 DelSigMulti_StartAD 启动此 UM 的生成时钟。 该寄存器通过调用函数 ADelSigMulti _StopAD 来停止生成时钟。 文档编号:001-65734 Rev. *B 页 20/21 6 到 14 位 Delta Sigma ADC 数据手册 版本历史记录 版本 1.2 创作者 DHA 说明 增加了 DRC,以检查源时钟在数字源和模拟源中是否不同。 改进了 GetAllDataClearFlagAPI 实现。 改进了时钟选择 DRC。 1.2.b DHA 在向导中添加了帮助文件。 更新了本用户模块数据手册中的代码示例。 1.30 MYKZ 1. 已经将模拟用户模块放置在非相邻的列中。 2. 增加了在 ADC 时钟超过 8 MHz 时的设计规则检查。 注意: PSoC Designer 版本 5.1 在所有用户模块数据手册中都介绍了 “ 版本历史记录 ”。本数据手册详 细介绍当前和先前用户模块版本之间的区别。 文档编号:001-65734 Rev. *B 修订日期 December 5, 2014 页 21/21 Copyright © 2009-2014 赛普拉斯半导体公司。此处所包含的信息可能会随时更改,恕不另行通知。除赛普拉斯产品内嵌的电路外,赛普拉斯半导体公司不对任何其他电路的使用承担任何责任。也 不会根据专利权或其他权利以明示或暗示的方式授予任何许可。除非与赛普拉斯签订明确的书面协议,否则赛普拉斯产品不保证能够用于或适用于医疗、生命支持、救生、关键控制或安全应用领 域。此外,对于合理预计会发生运行异常和故障并对用户造成严重伤害的生命支持系统,赛普拉斯将不批准将其产品用作此类系统的关键组件。若将赛普拉斯产品用于生命支持系统,则表示制造商 将承担因此类使用而招致的所有风险,并确保赛普拉斯免于因此而受到任何指控。 PSoC Designer™ 和 Programmable System-on-Chip™ 是赛普拉斯半导体公司的商标, PSoC® 是赛普拉斯半导体公司的注册商标。此处引用的所有其他商标或注册商标归其各自所有者所有。 所有源代码 (软件和 / 或固件)均归赛普拉斯半导体公司 (赛普拉斯)所有,并受全球专利法规 (美国和美国以外的专利法规)、美国版权法以及国际条约规定的保护和约束。赛普拉斯据此向获 许可者授予适用于个人的、非独占性、不可转让的许可,用以复制、使用、修改、创建赛普拉斯源代码的派生作品、编译赛普拉斯源代码和派生作品,并且其目的只能是创建自定义软件和 / 或固 件,以支持获许可者仅将其获得的产品依照适用协议规定的方式与赛普拉斯集成电路配合使用。除上述指定用途外,未经赛普拉斯的明确书面许可,不得对此类源代码进行任何复制、修改、转换、 编译或演示。 免责声明:赛普拉斯不针对该材料提供任何类型的明示或暗示保证,包括 (但不仅限于)针对特定用途的适销性和适用性的暗示保证。赛普拉斯保留在不另行通知的情况下对此处所述材料进行更 改的权利。赛普拉斯不对此处所述之任何产品或电路的应用或使用承担任何责任。对于合理预计可能发生运转异常和故障,并对用户造成严重伤害的生命支持系统,赛普拉斯不授权将其产品用作此 类系统的关键组件。若将赛普拉斯产品用于生命支持系统,则表示制造商将承担因此类使用而导致的所有风险,并确保赛普拉斯免于因此而受到任何指控。 产品使用可能受适用于赛普拉斯软件许可协议的限制。