7.5.1 积分型ADC

积分型ADC是一种流行的对于慢速信号做高精度数据转换的方式。这类ADC有着非常低的失调与增益误差,且高度线性。更进一步的优势是积分型ADC在实现时仅仅需要很少的电路。积分型ADC的一个常用场景是用在测量仪器中,例如电压表或者电流表。

双斜积分型ADC的简化架构图如下图所示:

双斜的意思是指这个ADC通过两个阶段完成转换,阶段Ⅰ和阶段Ⅱ,如下图所示:

阶段Ⅰ:阶段Ⅰ时间间隔固定为\(T_1\),通过运行\(2^N\)个时钟周期得到,因此我们有:

\[T_1=2^NT_{clk} \tag{7.5.1}
\]

其中\(T_{clk}\)是一个时钟周期,在这个间隔中,开关\(S_1\)连接到\(-V_{in}\),从而\(V_x\)跟随\(V_{in}\)的幅度上升。假定\(V_x\)一开始等于零(通过\(S_2\)上的一个脉冲),\(V_{in}\)保持固定,我们会有如下的关系式:

\[V_x(t)=-\int_{0}^t\frac{-V_{in}}{R_1C_1}d\tau=\frac{V_{in}}{R_1C_1}t \tag{7.5.2}
\]

因此,在阶段Ⅰ结束时,\(V_x\)会等于\(V_{in}T_1/R_1C_1\)。

阶段Ⅱ:阶段Ⅱ的时间是变化的\(T_2\),上图中展示了对于三种不同的输入电压的情况。在阶段Ⅱ一开始,计数器复位,\(S_1\)被连接到\(V_{ref}\),使得\(V_x\)电压开始以固定的斜率下降。为了求得数字输出值,计数器持续计数,直到\(V_x\)小于零,此时计数器值会等于输入信号\(V_{in}\)的数字码。因此,假定数字输出值做了归一化,最大值为单位值,计数器输出\(B_{out}\)可以被定义为:

\[B_{out}=b_12^{-1}+b_22^{-2}+...+b_{N-1}2^{-(N-1)}+b_N2^{-N} \tag{7.5.3}
\]

从而我们有:

\[T_2=2^NB_{out}T_{clk}=(b_12^{N-1}+b_22^{N-2}+...+b_{N-1}2+b_N)T_{clk} \tag{7.5.4}
\]

为了直到为什么计数器会给出正确的值,我们求解\(V_x\)在第Ⅱ阶段时的方程:

\[V_x(t)=-\int_{T_1}^t\frac{V_{ref}}{R_1C_1}d\tau +V_{x}(T_1)=\frac{-V_{ref}}{R_1C_1}(t-T_1)+\frac{V_{in}T_1}{R_1C_1} \tag{7.5.5}
\]

当\(V_x\)为零时,\(t=T_1+T_2\),我们可以写出:

\[0=\frac{-V_{ref}T_2}{R_1C_1}+\frac{V_{in}T_1}{R_1C_1} \tag{7.5.6}
\]

求解该方程可以得到:

\[T_2=T_1(\frac{V_{in}}{V_{ref}}) \tag{7.5.7}
\]

结合\((7.5.7)\),\((7.5.1)\)和\((7.5.4)\),我们有:

\[B_{out}=b_12^{-1}+b_22^{-2}+...+b_{N-1}2^{-(N-1)}+b_N2^{-N}=\frac{V_{in}}{V_{ref}} \tag{7.5.8}
\]

从上式中,我们可以看到对于双斜转换,数字输出并不依赖于时间常数\(R_1C_1\),这个时间常数只需要能够在单次转换中保持稳定即可正常工作。当时\(R_1\)和\(C_1\)需要被合理的选取,从而可以使得\(V_x\)取得足够大的峰值,而不需要采取操作来减小噪声的影响。也可以通过单斜转换实现ADC,这样只需要一个转换阶段,但是积分时间就需要是时间常数\(R_1C_1\)的函数,非常可能出现增益误差。

尽管双斜积分型ADC不会受到增益误差的影响,但是它可能会收到放大器失调和其他因素导致的失调错误。这个失调错误可以通过使用四斜转换来进行矫正。在四斜转换中,双斜转换被执行两次:第一次时输入被连接到地(或者任何已知的直流量),然后输入被连接到待转换的信号\(V_{in}\)。两次输出码相减就可以将失调错误减少到零。

这类转换器的转换速度非常慢,例如,在双斜ADC中,最坏情况下的转换速率为\(V_{in}\)等于\(V_{ref}\),这种情况下需要\(2^{N+1}\)个时钟周期来完成转换。因此对于16 bit转换器来说,如果其时钟为\(1MHz\),那么最坏情况下的转换速率只有\(7.6Hz\)。

最后,需要注意的是,通过精心选择\(T_1\),叠加在输入信号上的某些频率分量可以得到显著的衰减。注意这个转换器实际上对输入信号做了“积分与存储”,如果我们放松之前对\(V_{in}\)是常数的假设,我们可以看到转换\(V_{in}\)的过程实际上相当于是在一个时间窗\(T_1\)内对\(V_{in}\)做积分:

\[\int_{0}^{T_1}\frac{V_{in}(\tau)}{R_1C_1}d\tau \tag{7.5.9}
\]

等效于和一个矩形时间窗口做卷积。由于矩形脉冲的傅里叶变换为\(sin(x)/x\),我们可以得到等效的输入滤波器的传输函数:

\[|H(f)|=|\frac{sin(\pi f T_1)}{\pi f T_1}| \tag{7.5.10}
\]

因此,积分转换器也有着低通响应,并且在\(f=1/T_1\)的整数倍上时为零。

事实上其他的频率也会被衰减,只是不会和\(1/T_1\)的谐波一样被完全抑制,如下图的频谱所示,越是高频收到的衰减越大:

模拟集成电路设计系列博客——7.5.1 积分型ADC的更多相关文章

  1. Flutter 即学即用系列博客——03 在旧有项目引入 Flutter

    前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ...

  2. Django 系列博客(七)

    Django 系列博客(七) 前言 本篇博客介绍 Django 中的视图层中的相关参数,HttpRequest 对象.HttpResponse 对象.JsonResponse,以及视图层的两种响应方式 ...

  3. Django 系列博客(一)

    Django 系列博客(一) 前言 学习了 python 这么久,终于到了Django 框架.这可以说是 python 名气最大的web 框架了,那么从今天开始会开始从 Django框架的安装到使用一 ...

  4. ARM的体系结构与编程系列博客——ARM处理器系列介绍

    ARM处理器系列介绍 现在到了3月,过年过得过于舒服了.系列博客也停更了近半月,我果然是个慢(lan)性(gui)子,那么趁着到校的第一天晚上,就写一篇博客来继续我的系列博客了!众所周知,ARM处理器 ...

  5. 窥探Swift系列博客说明及其Swift版本间更新

    Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...

  6. Flutter 即学即用系列博客——05 StatelessWidget vs StatefulWidget

    前言 上一篇我们对 Flutter UI 有了一个基本的了解. 这一篇我们通过自定义 Widget 来了解下如何写一个 Widget? 然而 Widget 有两个,StatelessWidget 和 ...

  7. Flutter 即学即用系列博客——04 Flutter UI 初窥

    前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...

  8. Flutter 即学即用系列博客——09 MethodChannel 实现原生与 Flutter 通信(二)

    前言 上一篇我们讲解了如何通过 EventChannel 实现 Android -> Flutter 的通信. 并且也看到了 Flutter 内部 EventChannel 源码也是对 Meth ...

  9. Flutter 即学即用系列博客——09 EventChannel 实现原生与 Flutter 通信(一)

    前言 紧接着上一篇,这一篇我们讲一下原生怎么给 Flutter 发信号,即原生-> Flutter 还是通过 Flutter 官网的 Example 来讲解. 案例 接着上一次,这一次我们让原生 ...

  10. Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信

    背景 前面我们讲了很多 Flutter 相关的知识点,但是我们并没有介绍怎样实现 Flutter 与原生的通信. 比如我在 Flutter UI 上面点击了一个按钮,我希望原生做一些处理,那么原生怎么 ...

随机推荐

  1. 739 每日温度 && 单调栈算法的思路

    简介 如果用暴力岂不是太不优雅了. 有些问题可以使用单调栈来进行计算. 简单思想 构建一个栈, 栈是一个有顺序的, 里面有一个while循环,然后 如果满足一定的条件, 将会一直弹出. code cl ...

  2. 对称加密 & 非对称加密

    简介 其实网上的人讲的很好了 最著名的非对称加密在HTTPS/HTTP中实现 参考链接 https://zhuanlan.zhihu.com/p/43789231 https://blog.csdn. ...

  3. opengl 学习 之 12 lesson

    opengl 学习 之 12 lesson 简介 扩展函数值DEBUG!!! link http://www.opengl-tutorial.org/uncategorized/2017/06/07/ ...

  4. Strawberry、Graphene还是Ariadne:谁才是FastAPI中GraphQL的最佳拍档?

    扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 基本概念与选型标准 GraphQ ...

  5. C++迭代器iterator详解

    https://blog.csdn.net/QIANGWEIYUAN/article/details/89184546?utm_medium=distribute.pc_relevant.none-t ...

  6. 修改mysql服务名

    1.首先,使用组合键"win+R"运行cmd,进入命令提示符界面: 2.进入命令提示符界面后,在命令行中使用sc delete命令删除mysql服务名: sc delete mys ...

  7. 万字带你深度了解MQ消息队列

    MQ 消息队列 **首先我们人的精力是有限的,从投入产出来说,深入学习一种消息队列就够了,因为消息队列的使用都是相通的,只要你掌握了其中一种消息队列,你就可以说你会消息队列了,这就如同你无论掌握Jav ...

  8. nginx带有Java(前后分离)和PHP环境的配置

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  9. C语言数据结构-数组栈

    1.什么是栈 先进后出的一种结构 2.实现栈 (1)结构体描述栈结构,抽象栈的属性 (2)栈的最初状态:初始化栈 (3)入栈操作 (4)出栈操作 (5)获取栈顶元素 (6)判断栈是否为空 3.测试

  10. Java流程控制——4.while循环

    目录 Java中的while循环 while循环的基本结构 执行流程解析 基础示例:累加计算 循环变量与边界条件 边界条件错误示例 避免死循环 实际应用案例 案例1:用户输入验证 while循环的适用 ...