ADC 接口技术总结:原理、寄存器配置与工程考量

张开发
2026/4/12 2:53:51 15 分钟阅读

分享文章

ADC 接口技术总结:原理、寄存器配置与工程考量
一、ADC的本质与信号链模拟-数字转换器ADC完成从连续时间连续幅值的模拟电压信号到离散时间量化编码的数字信号的映射。嵌入式系统中这一转换是传感器数据进入数字处理单元的唯一途径。ADC本身不直接感知温度、压力或光照其输入端始终为电压信号。传感器将物理量转换为电压或电流电流型输出通常经采样电阻转为电压而后送入ADC。此处的“模拟信号”是狭义的电平信号。物理世界中的温度、应变、光强等连续变化量经过换能器变为电压再经ADC量化数字系统才能执行滤波、补偿、控制算法。信号链中任一环节的非理想特性——传感器非线性、参考源温漂、ADC量化误差、电源噪声——都会叠加到最终测量结果中。二、SAR ADC的逐次逼近原理笔记中给出的代码片段精确描述了逐次逼近型SARADC的核心算法。该结构在中等分辨率8~16位和中等采样率几kSPS~几MSPS范围内占据主导地位。逐次逼近的本质是二分搜索参考电压V0V0​被分割为2n2n个阶梯。比较器一端接输入电压V1V1​另一端接内部DAC输出的逼近电压。从最高有效位MSB开始设当前逼近电压NN初始为0。首先比较NV0/2NV0​/2与V1V1​。若小于V1V1​则该位置1NN更新为NV0/2NV0​/2否则该位置0NN保持不变。移至下一位位权值为V0/4V0​/4重复比较NV0/4NV0​/4与V1V1​。依次进行至最低有效位LSB。循环结束后寄存器data中的二进制数即为量化结果。该算法每一比较周期仅改变一位内部DAC需建立时间。因此采样保持电路与比较器的速度、DAC的线性度直接决定整体转换精度。笔记中循环变量Nb代表总位数V0/2随循环右移这一实现方式在硬件中由逐次逼近寄存器SAR控制逻辑完成。三、IMX6ULL ADC模块硬件连接核心板原理图中ADC模块集成于SoC内部参考电压高电平引脚为ADC_VREFH。该引脚必须外接稳定的电压源其值直接决定输入量程。若VREFH接3.3V则ADC输入范围0~3.3V若接5V范围0~5V。底板原理图显示GPIO1_IO07可作为模拟输入对应ADC1_IN7通道。使用时需将该引脚复用功能设置为模拟模式关闭上拉/下拉电阻及数字输出驱动。SoC提供ADC1_IN0~ADC1_IN9共10个单端输入通道。各通道共享同一个采样保持器和SAR核心通过模拟多路选择器切换。切换通道后需等待足够的采样时间使内部采样电容充电至输入电压值。采样时间不足会导致转换结果偏低误差依赖于信号源阻抗。四、寄存器详细解析ADC模块的控制与状态寄存器映射于外设地址空间。以下逐一分析笔记中列出的寄存器及位域的实际作用。4.1 控制寄存器ADCx_HC0AIEN(bit7)转换完成中断使能。置1时每次转换结束触发中断请求置0时需轮询COCO0标志。ADCH(bit0~4)通道选择码。共5位可编码32个通道但实际芯片仅支持10个模拟输入及若干内部通道如温度传感器、VREF输出。写入新通道值立即启动一次转换若触发模式配置为软件触发。4.2 状态寄存器ADCx_HSCOCO0(bit0)转换完成标志。每次转换结束硬件置1读该寄存器后自动清零或通过写1清零具体取决于设计IMX6ULL为读后自动清除。软件轮询时需注意清除行为。4.3 数据结果寄存器ADCx_R0CDATA(bit0~11)12位转换结果。右对齐存储。若配置为10位或8位模式有效位分别占用bit0~9或bit0~7高位补零。4.4 配置寄存器ADCx_CFGOVWREN(bit16)数据覆盖使能。允许新转换结果覆盖尚未读取的旧数据。禁用时若上次数据未被读取而新转换完成则COCO0不置位且结果丢失。AVGS(bit15~14)硬件平均次数选择。00为4次平均01为8次10为16次11为32次。使能硬件平均可节省CPU开销但会降低有效采样率。ADTRG(bit13)转换触发源。0为软件触发写HC0即启动1为外部硬件触发如PWM定时器。REFSEL(bit12~11)参考电压源选择。00为VREFH/VREFL外部引脚其他选项对应内部1.2V带隙基准或备用参考。ADHSC(bit10)高速配置。置1时提高ADC时钟频率上限但可能降低线性度。ADSTS(bit9~8)采样时间选择。决定采样阶段持续多少个ADC时钟周期。高阻抗信号源需要更长采样时间。ADLPC(bit7)低功耗配置。置1降低功耗但限制最高转换速度。ADIV(bit6~5)时钟分频。00为1分频01为2分频10为4分频11为8分频。ADLSMP(bit4)长采样时间。置1时采样时间扩展为正常值的数倍。MODE(bit3~2)分辨率。00为8位01为10位10为12位11保留。ADICLK(bit1~0)时钟源选择。00为IPG时钟01为IPG/211为异步时钟ADACK。ADACK由内部振荡器产生与总线时钟去耦可降低数字开关噪声耦合。4.5 通用控制寄存器ADCx_GCCAL(bit7)校准启动。写1触发校准序列校准完成后硬件自动清零。校准期间不能启动转换。ADCO(bit6)连续转换使能。置1时完成一次转换后自动启动下一次无需重新写HC0。AVGE(bit5)硬件平均使能。需与AVGS配合。ACFE(bit4)比较功能使能。可将转换结果与预设阈值比较结果匹配时触发中断或置标志。ACFGT(bit3)比较模式选择。0为小于阈值时触发1为大于阈值时触发。ACREN(bit2)范围比较使能。将结果与上下限比较。DMAEN(bit1)DMA请求使能。转换结果可直接通过DMA传输至内存。ADACKEN(bit0)异步时钟输出使能。使ADACK时钟从专用引脚输出供外部电路使用。4.6 通用状态寄存器ADCx_GSCALF(bit1)校准失败标志。若校准序列未正确完成该位置1。需软件写1清除。五、校准原理与流程ADC内部的电容DAC存在失配和偏移。IMX6ULL ADC提供自动校准机制将输入切换到内部零电平VREFL和内部满量程VREFH测量偏移误差和增益误差计算修正系数并存入专用寄存器。校准流程如下确保ADC处于空闲状态无正在进行的转换。写ADCx_GC寄存器的CAL位为1。轮询CAL位等待其硬件清零。检查ADCx_GS的CALF位。若为0校准成功若为1校准失败需写1清除CALF后重新校准。校准应在系统初始化阶段执行一次。若参考电压或温度发生显著变化需重新校准。在校准完成之前启动的任何转换结果不可靠。六、采样与滤波策略6.1 单次采样代码结构// 配置ADC_CFG, ADC_GC等一次初始化 // 选择通道 ADCx_HC0 (0 7) | (channel 0x1F); // 等待转换完成 while (!(ADCx_HS (1 0))); // 读取结果 uint16_t result ADCx_R0 0xFFF;6.2 均值滤波对同一通道连续采样N次N一般取4、8、16、32求和后除以N。该法抑制零均值随机噪声信噪比改善与√N成正比。IMX6ULL硬件平均模式可自动完成无需软件循环。软件实现的优点是可以剔除野点如去除最大最小值后再平均但消耗更多CPU时间。6.3 采样时间考量输入等效电路包含采样开关电阻约数kΩ和采样电容约数pF。采样时间常数τ R_source × C_sample R_switch × C_sample。为使电容充电至1/2 LSB误差内需等待至少ln(2^(n1))个时间常数。对于12位ADC至少需要约9个τ。若信号源阻抗为10kΩC_sample5pFτ50ns则最小采样时间450ns。实际配置时应留有裕量选择ADSTS和ADLSMP提供足够长的采样窗口。七、电压换算与分辨率对于n位ADC量化阶梯数为2^n。设参考电压为V_refVREFL通常为0V转换结果D十进制0≤D≤2^n-1对应的输入电压为VinD2n×VrefVin​2nD​×Vref​笔记中示例8位ADCV_ref5VD194得194/256×53.7890625V。12位ADCV_ref3.3VD194得194/4096×3.3≈0.1563V。分辨率一词存在两种含义一是位数如12位二是最小可分辨电压LSB大小即V_ref/2^n。注意分辨率不等同于精度。精度指标包括偏移误差零输入时输出非零。增益误差满量程转换值与理论值的斜率偏差。微分非线性DNL相邻码元之间实际步长与1 LSB的偏差。积分非线性INL传递曲线与理想直线之间的最大偏差。高分辨率如16位ADC若DNL较大有效位数ENOB可能远低于标称值。八、光敏电阻分压电路分析光敏电阻LDR阻值随光照强度指数级下降。常用电路为LDR与固定电阻R_fixed串联分压点接ADC输入。设LDR阻值为R_ldr输入电压V_in V_ref × R_fixed / (R_ldr R_fixed)。光照增强时R_ldr减小V_in升高若R_fixed接V_refLDR接地或V_in降低若LDR接V_refR_fixed接地。该分压电路输出电压与照度呈非线性关系实际应用中需分段线性化或查表映射。同时注意LDR响应速度较慢毫秒至秒级不适用于快速变化的光信号。环境温度变化也会引起LDR暗电阻漂移校准或差分测量可减轻此影响。九、工程选型与配置原则量程匹配输入信号最大幅值应略低于V_ref最小幅值略高于VREFL通常为0V。信号过小则使用同相放大电路信号过大则电阻分压或使用高V_ref。注意分压电阻引入的噪声和分压比温漂。分辨率选择根据所需最小可检测电压变化决定位数。测量0~5V信号要求分辨1mV需log2(5/0.001)≈12.3位选12位或以上。测量锂电池电压3.0~4.2V变化范围1.2V1mV分辨率对应log2(1200)≈10.2位12位足够。但若需检测微伏级变化则需16~24位Σ-Δ ADC。精度验证查阅数据手册中的总未调整误差TUE、INL、DNL、失调和增益误差的温度系数。对精密仪器需定期校准或选用自校准ADC。高精度ADC价格指数上升需在成本与指标间权衡。抗混叠滤波采样定理要求输入信号带宽小于采样率的一半。ADC前的低通滤波器RC或运放有源滤波器用于衰减高于奈奎斯特频率的噪声分量避免混叠。电源与去耦ADC的V_ref和模拟电源应使用独立LDO供电与数字电源隔离。V_ref引脚附近放置1μF~10μF钽电容并联0.1μF陶瓷电容。PCB布局时模拟地与数字地单点连接。十、总结ADC驱动开发涉及信号特性分析、寄存器配置、时序控制及后处理滤波。SAR型ADC的分辨率和速度由内部DAC建立时间和比较器响应决定。IMX6ULL的ADC模块提供灵活的时钟选择、硬件平均、自动校准和多种触发模式适应传感器采集、电池监测等常见场景。实际工程中应首先明确输入信号范围与阻抗选择参考电压和分辨率配置采样时间执行校准并视情况加入软件滤波。理解寄存器每一位的功能而非机械复制代码才能在调试中快速定位问题。本文梳理的概念和寄存器细节可作为基于该平台ADC开发的参考。

更多文章