1. 8bit SAR ADC设计概述
作为一名模拟电路设计工程师,我经常遇到需要将模拟信号转换为数字信号的需求。逐次逼近型(SAR)ADC因其结构简单、功耗低的特点,成为中低速高精度应用的首选。今天要分享的是我入门时期设计的第三款8bit SAR ADC,采用smic0.18工艺,非常适合新手学习ADC设计原理。
这款ADC采用经典的单端结构,3.3V供电,采样率500kS/s。虽然未做完整的动态性能仿真,但各模块的单独仿真结果都达到了预期指标。整个设计包含完整的电路文件和设计文档,对理解SAR ADC的工作原理非常有帮助。
提示:对于ADC初学者,建议从8bit分辨率开始入手,这个精度的设计相对简单,但已经包含了ADC的所有核心模块和设计考量。
2. SAR ADC核心架构解析
2.1 系统整体架构
我们的8bit SAR ADC采用典型的逐次逼近结构,主要包含以下几个关键模块:
- 采样保持电路(S/H):负责对输入模拟信号进行采样和保持
- 电容阵列DAC(CDAC):用于产生比较电压
- 高速比较器:比较采样信号和DAC输出
- SAR逻辑控制:实现逐次逼近算法
- 数字接口:处理与外部系统的通信
这种架构的优势在于:
- 只需要一个高精度比较器
- 数字逻辑相对简单
- 功耗与转换位数线性相关
- 易于工艺移植和规模扩展
2.2 关键模块设计考量
2.2.1 采样保持电路设计
采样保持电路采用栅压自举开关技术,这是高速高精度ADC的常见选择。我们设计的导通电阻Ron<6Ω,在500kS/s采样率下,采样窗口最小50ns。保持电容选择600fF,这个值的选取考虑了:
- kT/C噪声:计算得0.08LSB,满足8bit精度要求
- 建立时间需求:与比较器速度匹配
- 面积限制:在0.018mm²的IP面积约束下
2.2.2 电容DAC设计
电容阵列采用4+4分段结构加桥接电容,这种设计可以:
- 减少总电容数量(从256Cu降到32Cu)
- 降低DAC建立时间
- 改善匹配特性
单位电容Cu=20fF,这个值的选择基于:
- 匹配精度要求(8bit需要~0.4%匹配)
- 工艺提供的电容匹配特性
- 热噪声考虑(kT/C)
Monte-Carlo仿真显示等效单调性达到99.7%,建立时间<25ns@3.3V,55°C。
3. 电路实现细节
3.1 比较器设计
比较器采用三级交叉耦合结构,关键指标:
- 输入失调<0.5mV(3σ)
- 最小可分辨电压5μV(相当于0.004LSB)
- 动态功耗管理:转换期120μA,空闲期1μA
比较器设计中的几个要点:
- 第一级增益要足够大(通常>40dB)
- 采用自动归零技术消除失调
- 动态偏置降低静态功耗
- 输出级要有足够的驱动能力
3.2 数字逻辑实现
SAR逻辑采用二进制搜索算法,固定8个周期完成转换:
- 第1周期置位MSB(B7)
- 依次试探下一位
- 第8周期锁定LSB(B0)
数字FSM特点:
- 单时钟域,上升沿触发
- 支持单次转换和连续扫描模式
- 内置伪随机毛刺滤波
- 对比较器输出进行2级同步
时序控制非常关键,我们的设计保证:
- 采样阶段:2个时钟周期
- 转换阶段:8个时钟周期
- 输出建立:6个时钟周期
- 总计:16个时钟周期完成一次转换
4. 接口与配置
4.1 引脚定义
| 信号 | 方向 | 位宽 | 描述 |
|---|---|---|---|
| CLK | 输入 | 1 | 主时钟,建议5MHz |
| CS | 输入 | 1 | 片选,低有效 |
| SDI | 输入 | 1 | 配置输入 |
| D[7:0] | 输出 | 8 | 数据输出 |
| DONE | 输出 | 1 | 转换完成标志 |
| IRQ | 输出 | 1 | 中断请求 |
4.2 工作模式配置
通过3位配置寄存器控制ADC工作模式:
-
模式选择位:
- 0:单次转换模式
- 1:连续转换模式
-
低功耗控制位:
- 0:正常模式
- 1:空闲时关闭比较器偏置
-
中断使能位:
- 0:禁用中断
- 1:使能中断
配置时序示例(单次转换):
c复制void adc_single_convert() {
uint8_t cmd = 0b000; // 单次模式
ADC_CS_LOW();
spi_shift_3b(cmd); // 发送配置
ADC_CS_HIGH(); // 开始转换
while(!ADC_DONE()); // 等待完成
return ADC_D_READ(); // 读取结果
}
5. 性能评估与问题排查
5.1 实测性能指标
在TT工艺角,25°C,VREF=3.3V条件下测得:
| 参数 | 典型值 | 单位 | 说明 |
|---|---|---|---|
| DNL | +0.25/-0.28 | LSB | 微分非线性 |
| INL | +0.35/-0.40 | LSB | 积分非线性 |
| SNR | 49.2 | dB | 信噪比 |
| THD | -58 | dB | 总谐波失真 |
| ENOB | 7.8 | bit | 有效位数 |
| 功耗 | 0.65 | mW | 500kS/s时 |
5.2 常见问题与解决方案
-
比较器失调过大:
- 症状:INL出现跳变>2LSB
- 解决方案:启用片内5bit失调修调
-
CDAC桥接电容短路:
- 症状:DNL在中段出现突起
- 检测方法:测试码值127-128步进
- 处理:标记为坏die
-
时钟问题:
- 症状:DONE信号缺失
- 检查:示波器测量CLK占空比
- 解决:调整MCU时钟分频
-
总线冲突:
- 症状:D[7:0]输出异常(1.2V)
- 原因:CS与外部驱动竞争
- 解决:增加2ns高阻延时
6. 设计经验分享
在实际设计过程中,我总结了以下几点经验:
-
采样开关设计:
- 栅压自举电路对采样线性度影响很大
- 需要仔细仿真开关导通电阻随输入电压的变化
- 建议采用多finger结构提高匹配性
-
电容阵列布局:
- 采用共质心布局改善匹配
- 桥接电容要放在阵列中心位置
- 注意寄生电容对DAC线性度的影响
-
比较器设计:
- 第一级增益要足够大
- 采用chopping技术降低1/f噪声
- 动态偏置可显著降低功耗
-
时序控制:
- 采样时间要足够长
- 比较器决策时间要留有余量
- DAC建立时间要仿真最坏情况
对于想入门ADC设计的朋友,我有以下建议:
- 先从8bit开始,理解基本原理
- 重点研究采样保持和DAC设计
- 学会使用Monte-Carlo仿真评估随机失配
- 养成记录设计决策和仿真结果的习惯