高速SAR ADC 关键技术研究和实现(三):DAC阵列的优化

目前,由于SAR逻辑越来越像数字化发展,比较器和开关电容阵列的功耗成为了SAR ADC功耗优化的核心问题。

前言

低功耗 SAR ADC 主要应用于中低精度(一般不超过10bit)、低速(采样率一般不超过1MS/s)的应用场合中。在这种精度和采样速度条件下,SAR ADC 内部的DAC的匹配精度在现今的制造工艺下一般可以比较容易地达到,所以不需要对ADC 进行额外的校准或者修调。SAR ADC 也不需要额外的模拟电路单元,其功耗便主要在开关状态的切换过程中由电容阵列所消耗。基于上述原因,对SAR ADC 的功耗的优化主要就通过改进电容阵列开关时序来实现。


单调开关时序

1.monotonic 开关时序

2010 年,台湾成功大学的C.C.Liu 等人提出了著名的monotonic 开关时序,并在0.13-μm CMOS 工艺下设计出一款10bit 50MS/s 的低功耗SAR ADC,Monotonic 开关时序的逐次逼近如图所示:

下面是我推导的原理:

该时序采样上极板采样技术,在采样阶段,所有电容的下级板全部接至参考源Vref。然后进入AD 转换阶段,由于采用了上极板采样,SAR ADC 能够在保持所有电容的开关状态不变的情况下直接进行比较,从而确定MSB。然后根据MSB 的结果,更新电容阵列的开关状态。例如,如果MSB=“1”,则将接至比较器同相端的电容阵列的MSB 电容从Vref 接至GND,而其他电容的连接状态保持不变。这样,将比较器同相端的电压降低1/2Vref,而比较器反相端的电压保持不变,为下一次比较作准备。反之,如果MSB=“0”,则将接至比较器反相端的电容阵列的MSB电容从Vref 接至GND, 而其他电容的连接状态保持不变。从而将比较器反相端的电压降低1/2Vref。以此类推,直至数字输出码从MSB到LSB 全部确定后,ADC 完成了一次转换。

2.monotonic 开关时序电容值确定

如果考虑电容存在失配的情况下,并且假设电容阵列中单位电容服从C0、方差为δ0 的正态分布,则电容阵列中各权重的电容可以表示为:

C_{n}=2^{n-1}C_{0}+\delta _{n}

其中,δn 为Cn 的电容失配值。如果n 个单位电容并联连接组成电容nC0,则并联总电容的失配的概率分布可以视作n 个失配满足同一正态分布的变量的相加后的概率分布。于是,可以得出:

\delta _{n}=\sqrt{2^{n-1}}\delta _{0}

以 3bit SAR ADC 为例,从monotonic 开关时序图可以看出,当数字输出码在“100”和“011”之间跳变时,将产生最大的DNL,对采用monotonic开关时序的N-bit 的SAR ADC 而言,在最大DNL 发生的时候,共有(2^N-2)个单位电容的端电压改变了Vref,可以得出最大DNL 的分布满足:

\sigma \left ( DNL-MAX \right )=\frac{\sqrt{2^{N}}\delta _{0}}{2^{N-1}C_{0}}

将LSB代入,得:

\sigma \left ( DNL-MAX \right )=\frac{\sqrt{2^{N}}\delta _{0}}{C_{0}}LSB

这样,根据需要的DNL分布和单位电容的失配可以确定电容值。

2.Vcm-based 开关时序

2010 年,澳门大学的Y. Zhu 等人提出了Vcm-based 开关时序,并应用该时序在90nm CMOS 工艺下设计出一款10bit 100MS/s 的低功耗SAR ADC。其结构如图所示:

 

为了抑制共模噪声的影响,SAR ADC 一般采取差分输入的结构。如果采用上极板采样,在采样阶段,所有电容的下级板全部接至Vcm(Vcm=½Vref),上极板对输入信号进行采样。然后在转换阶段,由于采用了上极板采样,SAR ADC 能够在保持所有电容的开关状态不变的情况下直接进行比较,从而确定MSB。然后根据MSB 的结果,更新电容阵列的开关状态。例如,如果MSB=“1”,则将接至比较器同相端的电容阵列的MSB 电容从Vcm 接至GND,同时将接至比较器反相端的电容阵列的MSB 电容从Vcm 接至Vref,为下一次比较作准备。反之,如果MSB=“0”,则将接至比较器反相端的电容阵列的MSB 电容从Vcm 接至GND,同时将接至比较器同相端的电容阵列的MSB 电容从Vcm 接至Vref。以此类推,直至数字输出码从MSB 到LSB 全部确定后,ADC 完成了一次转换。

### 关于VCM驱动调试的技术方法 在处理VCM(Voice Coil Motor)驱动芯片的调试过程中,通常需要关注几个核心方面来确保其正常工作并解决可能遇到的问题。以下是详细的分析技术解决方案: #### 1. **硬件连接验证** 验证硬件电路设计是否正确是解决问题的第一步。这包括确认电源电压、信号输入/输出以及接地回路的设计是否满足规格书的要求[^1]。 - 使用万用表测量供电线路中的实际电压值,确保它们与数据手册中规定的范围一致。 - 检查PCB布局是否存在干扰源或者过长的地平面分割区域可能导致噪声耦合到敏感模拟信号路径上。 #### 2. **固件初始化配置** 对于不同的摄像头模块,即使外形相似也可能采用不同型号的VCM驱动器IC。因此,在开发阶段尝试复用旧项目代码可能会失败,正如提到LC898214无法通过LC898212驱动测试的情况所示[^2]。 解决方案涉及重新编写针对目标设备的具体寄存器设置序列: ```c void initialize_vcm_driver(void){ // Example initialization sequence based on datasheet recommendations. write_register(0x01, 0xA5); // Enable basic functionality delay_ms(10); set_gain_control(0x7F); // Set gain control level as per application needs configure_auto_focus_mode(); // Configure auto focus mode parameters enable_output_stage(); // Turn ON output stage after all settings are done } ``` #### 3. **自动对焦算法优化** 自动聚焦性能的好坏直接影响用户体验质量。如果发现AF速度慢或精度差,则需审查当前使用的扫描策略及其参数调整逻辑是否有改进空间。 建议引入更先进的搜索模式比如二分查找法代替传统的全行程遍历方式以加快收敛时间;同时动态调节步长大小使得接近最佳位置时更加精细微调而不是粗暴跳跃前进造成振荡现象发生。 #### 4. **实时监控与日志记录** 实施有效的诊断工具可以帮助快速定位潜在缺陷所在之处。例如利用串口打印重要变量状态变化轨迹图便于后续离线分析判断根本原因何在。 --- ### 提供一段示例程序用于捕获错误事件期间的关键信息片段如下: ```python def log_error_details(error_code, timestamp): """ Function logs detailed error information into file system when an issue occurs during operation. Args: error_code (int): Unique identifier representing type of fault encountered. timestamp (str): Current date-time string indicating moment at which anomaly was detected. Returns: None """ try: with open("/path/to/logs/vcmdriver_errors.log", 'a') as f: message = "[{}] Error Code:{}\n".format(timestamp, hex(error_code)) f.write(message) except Exception as e: print("Failed writing to log:", str(e)) # Call this function whenever exception arises within main routine flow... log_error_details(0xDEADBEEF, "YYYY-MM-DD HH:mm:ss") ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值