第二章 ADC时钟树与转换时间计算
各位工程师朋友,今天我们来聊聊ADC的时钟树。说实话,这个知识点在项目里特别容易被忽视。我见过不少同事,配置ADC时随便选个时钟源,结果采样精度上不去,还找不到原因。嗯,今天我们就把它彻底讲透。
2.1 ADC时钟源的选择
TC3xx的ADC模块,时钟源其实有好几个选项。我个人习惯先看系统时钟,再决定用哪个。
主要时钟源包括:
- fADC:ADC专用时钟,来自CCU6模块
- fSYS:系统时钟,通常200MHz或300MHz
- fBACK:备份时钟,来自备用振荡器
为什么要有这么多选择?说白了,不同场景对时钟的要求不一样。高精度采样时,我建议用fADC,因为它抖动小。高速采样时,用fSYS更合适,频率高。
重要提醒:ADC模块的输入时钟不能超过100MHz。这是硬性限制,超了就会出问题。我在一个项目中就吃过这个亏,当时没仔细看手册,直接用了200MHz的系统时钟,结果ADC转换结果全是乱的。
2.2 时钟分频配置
选好时钟源后,下一步就是分频。TC3xx的ADC有专门的分频寄存器,叫GxARBCFG。
分频系数可以设1、2、4、8。你想想看,如果输入时钟是100MHz,分频系数设4,那ADC实际工作时钟就是25MHz。
这里有个经验值:
| 采样精度 | 推荐ADC时钟 | 分频系数(100MHz输入) |
|---|---|---|
| 8位 | 50MHz | 2 |
| 10位 | 25MHz | 4 |
| 12位 | 12.5MHz | 8 |
为什么精度越高,时钟要越低?因为内部比较器需要时间稳定。时钟太快,比较结果还没稳定就被锁存了,精度自然上不去。
我的小技巧:如果你不确定用哪个分频,先设4。大部分场景下,25MHz的ADC时钟都能满足要求。等调试时再根据实际效果调整。
2.3 转换时间的精确计算
好,现在我们来算转换时间。这个公式其实不复杂:
T_conv = (采样阶段时间) + (转换阶段时间)
采样阶段时间 = 采样周期数 × ADC时钟周期
转换阶段时间 = (分辨率 + 1) × ADC时钟周期
举个例子:
- ADC时钟 = 25MHz(周期40ns)
- 采样周期数 = 4(默认值)
- 分辨率 = 12位
那么:
采样时间 = 4 × 40ns = 160ns
转换时间 = (12 + 1) × 40ns = 520ns
总时间 = 160ns + 520ns = 680ns
嗯,这里要注意。采样周期数不是固定的。你可以通过寄存器GxARBPR的SAMPLE位域来调整。范围是1到32个周期。
我曾经踩过的坑:采样周期数设得太小,信号还没稳定就开始转换,结果低几位全是噪声。后来我把采样周期从4改到8,问题就解决了。所以,如果你的信号源阻抗比较大,记得适当增加采样周期。
2.4 实际项目中的时钟配置
说了这么多理论,我们来看一个实际配置的例子。假设我们要做12位精度的温度采集:
// 1. 选择时钟源
SCU_CCUCON0.B.ADC0CLKSEL = 0; // 使用fADC
// 2. 设置分频
ADC0_G0ARBCFG.B.ANON = 0; // 不分频
ADC0_G0ARBCFG.B.DIVMODE = 0; // 正常分频模式
ADC0_G0ARBCFG.B.DIV = 3; // 分频系数 = 4
// 3. 设置采样周期
ADC0_G0ARBPR.B.SAMPLE = 7; // 8个采样周期
// 4. 启动转换
ADC0_G0ARBCFG.B.REQCHNR = 0; // 选择通道0
ADC0_G0ARBCFG.B.SREQ = 1; // 启动单次转换
这个配置下,ADC时钟 = 100MHz / 4 = 25MHz。采样时间 = 8 × 40ns = 320ns。转换时间 = 13 × 40ns = 520ns。总时间 = 840ns。
你可能会问,为什么采样周期设8而不是4?因为温度传感器的输出阻抗比较大,需要更长的采样时间让电容充满。这个经验是我在调试一个工业测温项目时总结出来的。
2.5 多通道转换的时间管理
实际项目中很少只采一个通道。多通道时,时间计算要更仔细。
TC3xx的ADC支持自动扫描模式。假设有4个通道,每个通道配置相同:
总时间 = 通道数 × 单通道转换时间
= 4 × 840ns
= 3.36μs
这意味着,你最快每3.36μs才能完成一轮采样。如果你的控制周期是10μs,那完全够用。但如果控制周期是1μs,那就得想办法了。
我的建议:如果时间不够,可以这样优化:
- 降低分辨率到10位(转换时间减少2个时钟周期)
- 减少采样周期数(前提是信号源阻抗允许)
- 使用多个ADC内核并行采样(TC3xx有多个ADC模块)
2.6 时钟抖动对精度的影响
最后聊一个容易被忽略的问题——时钟抖动。说白了,就是时钟周期不是绝对均匀的,会有微小的波动。
抖动对ADC的影响:
- 采样时刻不稳定,导致采样值偏差
- 高频信号时影响更明显
- 12位精度以上时不可忽视
怎么解决?我个人习惯:
- 优先使用fADC时钟,它来自CCU6,抖动最小
- 如果必须用fSYS,确保系统时钟稳定
- 在PCB布局时,ADC时钟线尽量短,远离开关电源
我记得有一次,客户反映ADC采样值跳动很大。我查了半天,最后发现是时钟线旁边走了一根PWM信号。把时钟线挪开后,问题就解决了。所以,硬件布局也很重要。
2.7 本章小结
时钟配置是ADC精度的基础。选对时钟源、设好分频、算准时间,你的ADC才能发挥出应有的性能。下次调试ADC时,不妨先检查一下时钟配置,说不定问题就出在这里。
下一章,我们会聊ADC的校准技术。到时候见。
公众号:蓝海资料掘金营,微信deep3321