4. MCX ADC模块原理与配置

MCX系列MCU内部集成的逐次逼近型ADC(SAR ADC)是混合信号测量链路的第一站。理解它的工作机制,不只是知道“逐次逼近”四个字,而是要能回答三个工程问题:一次转换到底经历了哪些阶段、采样率与分辨率如何互相牵制、以及多通道扫描时结果如何被正确取走。本节围绕这三点展开,并给出可直接参考的配置思路。

逐次逼近的工作机制

SAR ADC的核心是一个电容式DAC阵列、一个比较器和一套逐次逼近寄存器逻辑。一次完整转换分为采样与转换两个阶段。采样阶段,采样开关闭合,输入信号对采样电容充电,电容上的电压跟随输入;采样开关断开瞬间,输入电压被“冻结”在电容阵列上,这个时刻的电压就是本次转换的输入值。转换阶段,SAR逻辑从最高有效位(MSB)开始,逐位把电容阵列切换到参考电压或地,产生一个试探性的DAC输出电压,与保持的输入电压比较:若DAC输出小于输入,该位保留为1;否则清零。如此从MSB到LSB重复N次,N位结果就确定了。

这个过程决定了两个关键特性。第一,转换需要N个时钟周期(对N位分辨率),因此分辨率越高,单次转换越慢。第二,采样阶段需要足够的建立时间,让采样电容充电到目标精度,这由外部源阻抗和采样开关电阻共同决定。若源阻抗过大,采样电容来不及充满,就会出现增益误差或非线性,表现为高阻抗信号源下读数偏低且随通道变化。

采样时间 tsample 必须满足:tsample ≥ (Rsource + Rswitch) × Csample × ln(2N+1)。例如 N=12、Csample=4 pF、Rswitch=1 kΩ,若 Rsource=10 kΩ,则所需采样时间约为 11 kΩ × 4 pF × ln(8192) ≈ 44 ns × 9.01 ≈ 400 ns。配置时若采样窗口小于该值,12位精度无法保证。

采样率与分辨率的权衡

MCX ADC支持多种分辨率(常见为8/10/12/16位,具体依型号)。分辨率与采样率是一对矛盾:总转换时间 = 采样时间 + N个转换时钟。以12位、转换时钟20 MHz为例,转换阶段约12×50 ns = 600 ns;若采样时间设为400 ns,则单次转换约1 μs,对应约1 MS/s。若切到16位,转换阶段变为16×50 ns = 800 ns,单次约1.2 μs,采样率降到约830 kS/s。若同时还要扫描多个通道,每通道都要重复采样与转换,总吞吐率进一步被通道数除。

工程上应先确定“精度需求”再反推采样率。测量缓慢变化的温度、电池电压,12位甚至16位、几十kS/s足够;测量音频或电机电流波形,可能需要12位、数百kS/s以上,此时应缩短采样时间并降低源阻抗,或使用外部运放缓冲。不要盲目追求最高分辨率,因为高分辨率下LSB很小,噪声和参考电压稳定性会成为瓶颈。

通道扫描模式

MCX ADC通常支持单通道单次、单通道连续、多通道扫描等模式。扫描模式下,ADC按预定义的通道序列依次采样转换,序列可配置为A、B两组或一个通道队列。每个通道可以独立设置采样时间,这对混合不同源阻抗的信号很有用:低阻抗通道用短采样,高阻抗通道用长采样。

扫描模式的关键是“结果与通道的对应关系”。每次转换完成后,结果被写入结果FIFO或按通道号存入结果寄存器。若使用FIFO,必须记录转换顺序,否则读出的数据无法对应物理通道。建议在扫描序列中固定通道顺序,并在软件中维护一个与序列一致的索引,读取时按索引还原通道号。

MCX SAR ADC 转换与扫描数据流 模拟输入通道 AN0 / AN1 / AN2 … 采样开关 t_sample 控制 采样电容阵列 C_sample 保持 比较器 Vin vs VDAC SAR 逻辑 MSB→LSB DAC 反馈:逐位试探与比较 结果寄存器 / FIFO RES0…RESn,按扫描顺序写入 N位结果 硬件触发源 定时器 / PWM / 比较器 / 引脚 触发启动转换 通道扫描序列示例(AN2 → AN0 → AN5 → AN1) AN2 t_sample = 400 ns AN0 t_sample = 200 ns AN5 t_sample = 800 ns AN1 t_sample = 200 ns FIFO 读出顺序与扫描顺序一致:RES[0]=AN2,RES[1]=AN0,RES[2]=AN5,RES[3]=AN1

硬件触发与转换结果读取

在实时控制场景中,软件轮询启动转换会引入不确定的延迟。MCX ADC支持硬件触发,触发源可来自定时器溢出、PWM重载或比较器输出。配置时需选择触发源、触发边沿(上升沿/下降沿)以及是否使能触发。硬件触发的好处是采样时刻与PWM或定时器严格同步,适合电机电流采样、电源环路等对时序敏感的应用。

结果读取有两种典型方式。第一种是查询方式:启动转换后轮询转换完成标志(如COCO),然后读结果寄存器。这种方式简单,但会占用CPU。第二种是中断或DMA方式:转换完成产生中断,在中断服务程序中读取;或配置DMA在每次转换完成后自动搬运结果到内存缓冲区。多通道扫描时,DMA方式尤其高效,可以连续采集一批数据后再统一处理。

读取结果时要注意数据对齐。MCX ADC结果通常支持左对齐或右对齐,12位结果放在16位寄存器的低12位或高12位。若使用DMA搬运,需保证目标缓冲区元素宽度与对齐方式匹配,否则会出现数值错位。此外,若参考电压不是VDDA,结果换算公式为:Vin = (RESULT / 2N) × VREF。例如12位、VREF=3.3 V,读数0x800对应1.65 V。

配置顺序建议:先使能ADC时钟并校准(若支持),再设置分辨率、采样时间、参考电压,然后配置通道扫描序列和触发源,最后使能ADC并启动转换。校准可消除内部失调,建议在每次上电或温度变化较大时执行。
常见问题:扫描模式下若未及时读取结果,FIFO溢出会导致旧数据被覆盖,表现为通道数据错位或跳变。应在FIFO达到阈值时及时读取,或使用DMA自动搬运。另外,高阻抗信号源直接接入ADC会导致采样不足,应增加外部缓冲或延长采样时间。

综合来看,MCX ADC的配置本质是在精度、速度、通道数和CPU开销之间做平衡。先明确信号带宽与精度要求,再选择分辨率与采样时间,最后用硬件触发和DMA把CPU解放出来。掌握这套逻辑,后续的滤波、校准和测量算法才有可靠的数据基础。