模拟集成电路设计系列博客——7.5.1 积分型ADC
7.5.1 积分型ADC
积分型ADC是一种流行的对于慢速信号做高精度数据转换的方式。这类ADC有着非常低的失调与增益误差,且高度线性。更进一步的优势是积分型ADC在实现时仅仅需要很少的电路。积分型ADC的一个常用场景是用在测量仪器中,例如电压表或者电流表。
双斜积分型ADC的简化架构图如下图所示:

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

阶段Ⅰ:阶段Ⅰ时间间隔固定为\(T_1\),通过运行\(2^N\)个时钟周期得到,因此我们有:
\]
其中\(T_{clk}\)是一个时钟周期,在这个间隔中,开关\(S_1\)连接到\(-V_{in}\),从而\(V_x\)跟随\(V_{in}\)的幅度上升。假定\(V_x\)一开始等于零(通过\(S_2\)上的一个脉冲),\(V_{in}\)保持固定,我们会有如下的关系式:
\]
因此,在阶段Ⅰ结束时,\(V_x\)会等于\(V_{in}T_1/R_1C_1\)。
阶段Ⅱ:阶段Ⅱ的时间是变化的\(T_2\),上图中展示了对于三种不同的输入电压的情况。在阶段Ⅱ一开始,计数器复位,\(S_1\)被连接到\(V_{ref}\),使得\(V_x\)电压开始以固定的斜率下降。为了求得数字输出值,计数器持续计数,直到\(V_x\)小于零,此时计数器值会等于输入信号\(V_{in}\)的数字码。因此,假定数字输出值做了归一化,最大值为单位值,计数器输出\(B_{out}\)可以被定义为:
\]
从而我们有:
\]
为了直到为什么计数器会给出正确的值,我们求解\(V_x\)在第Ⅱ阶段时的方程:
\]
当\(V_x\)为零时,\(t=T_1+T_2\),我们可以写出:
\]
求解该方程可以得到:
\]
结合\((7.5.7)\),\((7.5.1)\)和\((7.5.4)\),我们有:
\]
从上式中,我们可以看到对于双斜转换,数字输出并不依赖于时间常数\(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}\)做积分:
\]
等效于和一个矩形时间窗口做卷积。由于矩形脉冲的傅里叶变换为\(sin(x)/x\),我们可以得到等效的输入滤波器的传输函数:
\]
因此,积分转换器也有着低通响应,并且在\(f=1/T_1\)的整数倍上时为零。
事实上其他的频率也会被衰减,只是不会和\(1/T_1\)的谐波一样被完全抑制,如下图的频谱所示,越是高频收到的衰减越大:

模拟集成电路设计系列博客——7.5.1 积分型ADC的更多相关文章
- Flutter 即学即用系列博客——03 在旧有项目引入 Flutter
前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ...
- Django 系列博客(七)
Django 系列博客(七) 前言 本篇博客介绍 Django 中的视图层中的相关参数,HttpRequest 对象.HttpResponse 对象.JsonResponse,以及视图层的两种响应方式 ...
- Django 系列博客(一)
Django 系列博客(一) 前言 学习了 python 这么久,终于到了Django 框架.这可以说是 python 名气最大的web 框架了,那么从今天开始会开始从 Django框架的安装到使用一 ...
- ARM的体系结构与编程系列博客——ARM处理器系列介绍
ARM处理器系列介绍 现在到了3月,过年过得过于舒服了.系列博客也停更了近半月,我果然是个慢(lan)性(gui)子,那么趁着到校的第一天晚上,就写一篇博客来继续我的系列博客了!众所周知,ARM处理器 ...
- 窥探Swift系列博客说明及其Swift版本间更新
Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...
- Flutter 即学即用系列博客——05 StatelessWidget vs StatefulWidget
前言 上一篇我们对 Flutter UI 有了一个基本的了解. 这一篇我们通过自定义 Widget 来了解下如何写一个 Widget? 然而 Widget 有两个,StatelessWidget 和 ...
- Flutter 即学即用系列博客——04 Flutter UI 初窥
前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...
- Flutter 即学即用系列博客——09 MethodChannel 实现原生与 Flutter 通信(二)
前言 上一篇我们讲解了如何通过 EventChannel 实现 Android -> Flutter 的通信. 并且也看到了 Flutter 内部 EventChannel 源码也是对 Meth ...
- Flutter 即学即用系列博客——09 EventChannel 实现原生与 Flutter 通信(一)
前言 紧接着上一篇,这一篇我们讲一下原生怎么给 Flutter 发信号,即原生-> Flutter 还是通过 Flutter 官网的 Example 来讲解. 案例 接着上一次,这一次我们让原生 ...
- Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信
背景 前面我们讲了很多 Flutter 相关的知识点,但是我们并没有介绍怎样实现 Flutter 与原生的通信. 比如我在 Flutter UI 上面点击了一个按钮,我希望原生做一些处理,那么原生怎么 ...
随机推荐
- 739 每日温度 && 单调栈算法的思路
简介 如果用暴力岂不是太不优雅了. 有些问题可以使用单调栈来进行计算. 简单思想 构建一个栈, 栈是一个有顺序的, 里面有一个while循环,然后 如果满足一定的条件, 将会一直弹出. code cl ...
- 对称加密 & 非对称加密
简介 其实网上的人讲的很好了 最著名的非对称加密在HTTPS/HTTP中实现 参考链接 https://zhuanlan.zhihu.com/p/43789231 https://blog.csdn. ...
- opengl 学习 之 12 lesson
opengl 学习 之 12 lesson 简介 扩展函数值DEBUG!!! link http://www.opengl-tutorial.org/uncategorized/2017/06/07/ ...
- Strawberry、Graphene还是Ariadne:谁才是FastAPI中GraphQL的最佳拍档?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 基本概念与选型标准 GraphQ ...
- C++迭代器iterator详解
https://blog.csdn.net/QIANGWEIYUAN/article/details/89184546?utm_medium=distribute.pc_relevant.none-t ...
- 修改mysql服务名
1.首先,使用组合键"win+R"运行cmd,进入命令提示符界面: 2.进入命令提示符界面后,在命令行中使用sc delete命令删除mysql服务名: sc delete mys ...
- 万字带你深度了解MQ消息队列
MQ 消息队列 **首先我们人的精力是有限的,从投入产出来说,深入学习一种消息队列就够了,因为消息队列的使用都是相通的,只要你掌握了其中一种消息队列,你就可以说你会消息队列了,这就如同你无论掌握Jav ...
- nginx带有Java(前后分离)和PHP环境的配置
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
- C语言数据结构-数组栈
1.什么是栈 先进后出的一种结构 2.实现栈 (1)结构体描述栈结构,抽象栈的属性 (2)栈的最初状态:初始化栈 (3)入栈操作 (4)出栈操作 (5)获取栈顶元素 (6)判断栈是否为空 3.测试
- Java流程控制——4.while循环
目录 Java中的while循环 while循环的基本结构 执行流程解析 基础示例:累加计算 循环变量与边界条件 边界条件错误示例 避免死循环 实际应用案例 案例1:用户输入验证 while循环的适用 ...