3. 数据采集系统架构:前端电子学(FEE)设计、模拟信号链路径、数字信号处理流程
好,咱们进入正题。这一章讲的是CT探测器数据采集系统的核心骨架。说白了,就是信号从探测器出来,到变成数字量,再到被计算机读走,这中间到底经历了什么。
我做了这么多年CT硬件,最深的体会就是:前端电子学(FEE)决定了系统的天花板。你后端算法再牛,如果前端信号链被噪声淹没了,那一切都是白搭。咱们一步步拆开看。
3.1 前端电子学(FEE)设计:第一道防线
FEE紧贴着探测器模块。它的任务很明确:把探测器输出的微弱电流信号,变成电压信号,并且放大到ADC能处理的幅度。
嗯,这里要注意一个关键点——阻抗匹配。探测器输出阻抗很高,而后续电路输入阻抗要足够大,否则信号就衰减了。我习惯用JFET输入的运放做第一级缓冲,输入阻抗能做到10^12Ω以上。
核心设计原则:
- 低噪声:第一级运放的噪声系数要小于1dB
- 高输入阻抗:避免信号源负载效应
- 宽带宽:至少覆盖探测器输出信号的3倍频程
- 低功耗:每个通道功耗控制在mW级别,64排探测器就是几千个通道
我曾经在一个项目中,为了省成本选了普通运放,结果系统噪声大了3倍。后来换成了专用的低噪声运放(比如ADA4897),信噪比一下就上去了。这个坑,我替你们踩过了。
3.2 模拟信号链路径:从pA到V的蜕变
模拟信号链,说白了就是一条处理流水线。每个环节都有它的使命。
| 环节 | 功能 | 典型器件 | 我踩过的坑 |
|---|---|---|---|
| 电荷灵敏前置放大器 | 将探测器电荷转换为电压 | CR-110, A250 | 反馈电容选太大,带宽不够 |
| 成形放大器 | 整形脉冲、滤除高频噪声 | 半高斯成形电路 | 成形时间常数选错,堆积严重 |
| 基线恢复器 | 消除直流偏移 | CDS相关双采样 | 恢复时间常数要匹配帧率 |
| 可编程增益放大器 | 动态范围匹配 | PGA281, AD8250 | 增益切换时毛刺处理 |
| 抗混叠滤波器 | 防止ADC采样混叠 | 贝塞尔低通滤波器 | 截止频率要留余量 |
你想想看,探测器出来的电流信号只有pA级别。经过这五级处理,最终变成几伏的电压信号。这个动态范围,差不多是10^12倍。我刚开始做的时候,总觉得这太夸张了,直到用示波器看到真实的信号波形——嗯,确实需要这么干。
个人经验:成形时间常数是个关键参数。选短了,噪声大;选长了,脉冲堆积。我一般根据探测器输出脉冲宽度来定,取半高宽的1.5到2倍。比如探测器输出半高宽是100ns,成形时间常数就设在150-200ns之间。
3.3 数字信号处理流程:从ADC到DMA
模拟信号调理好了,接下来就是数字化。这个环节,我建议重点关注三个部分:ADC采样、数字滤波、数据打包。
3.3.1 ADC采样:精度与速度的博弈
CT探测器对ADC的要求很苛刻。分辨率至少16位,采样率要覆盖探测器输出脉冲的带宽。我常用的ADC型号是AD7760或者ADS1675,都是24位Σ-Δ型。
// ADC配置示例(伪代码)
void ADC_Init(void) {
// 设置采样率:2.5 MSPS
ADC_SetSampleRate(2500000);
// 设置数字滤波器:SINC3,抽取因子32
ADC_SetFilter(SINC3, 32);
// 启动连续转换模式
ADC_SetMode(CONTINUOUS);
// 使能数据就绪中断
ADC_EnableInterrupt(DRDY);
}
这里有个细节:Σ-Δ型ADC内部有数字滤波器,会引入群延迟。我遇到过工程师没注意这个,结果系统时序对不上。解决办法是在FPGA里做延迟补偿,或者用同步采样保持器。
3.3.2 数字信号处理:FPGA里的流水线
ADC出来的数据,直接进FPGA。FPGA里跑的是真正的实时处理流水线。我一般这么设计:
- 数据对齐:多通道ADC的数据要时间对齐,偏差不能超过1个采样周期
- 偏移校正:每个通道减去暗电流偏移,我习惯用滑动平均法
- 增益校正:乘以校正系数,补偿通道间增益差异
- 坏像素标记:检测异常通道,用相邻通道插值替代
- 数据打包:按帧格式组织数据,添加时间戳和状态字
警告:偏移校正和增益校正的系数,必须在系统上电后实时更新。因为温度变化会导致探测器特性漂移。我曾经见过一个项目,校正系数写死在Flash里,结果机器预热半小时后图像就出现条纹。后来改成每帧更新校正系数,问题才解决。
3.3.3 数据传输:告别PCIe,拥抱高速串行
处理完的数据要传给上位机。早期CT用PCIe,但线缆多、距离短。现在主流是用万兆以太网或者光纤。我最近一个项目用的是JESD204B接口,直接连接ADC和FPGA,省了很多PCB走线。
数据量有多大?算一下:64排探测器,每排1024个通道,16位分辨率,每秒采集10000帧。总数据量是:64 × 1024 × 2 × 10000 = 1.31 Gbps。嗯,万兆网刚好够用。
3.4 实战避坑指南
最后,分享几个我这些年总结的教训:
- 电源噪声:模拟电路和数字电路一定要分开供电。我习惯用LDO给模拟部分供电,开关电源给数字部分。两者之间用磁珠隔离。
- 地平面分割:模拟地和数字地单点连接。不要跨分割区走线,否则EMI会让你头疼。
- 时钟抖动:ADC的采样时钟抖动要小于1ps。我一般用专用的时钟芯片,比如LMK04828。
- 热管理:FEE靠近探测器,温度可能到50°C以上。运放的温漂要选小于1μV/°C的型号。
我曾经在一个项目中,因为没处理好地平面分割,导致系统在某个频率点出现共振噪声。排查了整整两周,最后发现是模拟地和数字地之间的回路面积太大。改成星形接地后,噪声下降了20dB。这个教训,让我养成了画PCB前先画电源/地拓扑图的习惯。
好了,这一章的内容就这些。下一章咱们聊探测器模块的选型与测试,到时候我会带几个实际案例来分析。