3、信号预处理:光电信号放大、模拟滤波电路设计、ADC采样策略

信号预处理,说白了就是给光电传感器那微弱的信号「洗个澡、穿件衣服」,再送到 ADC 嘴里去。这一步要是没做好,后面算法再牛也白搭。我见过太多项目,PCB 画得漂漂亮亮,结果一上电噪声比信号还大,最后查来查去,问题就出在预处理环节。

3.1 光电信号放大:从 pA 到 V 的跨越

光电二极管出来的电流有多小?我跟你讲,典型值在 nA 到 μA 级别,有些弱光场景甚至低到 pA。这么小的信号,直接送 ADC 等于没送。所以第一件事就是 I/V 转换加放大。

核心电路:跨阻放大器(TIA)

运放 + 反馈电阻 Rf,把电流 I_in 变成电压 V_out = -I_in × Rf。

选型时我有个习惯:先看运放的输入偏置电流。你想想看,如果运放自己就吃掉几个 nA,那信号还怎么测?我个人偏好 OPA2376 或 AD8605,偏置电流都在 pA 级,够用。

参数 推荐值 我的经验
输入偏置电流 < 10 pA 低于信号电流的 1/10 才安全
增益带宽积 > 1 MHz 别贪快,够用就行,太快反而引入噪声
反馈电阻 Rf 1 MΩ ~ 10 MΩ 太大容易饱和,太小增益不够
反馈电容 Cf 1 pF ~ 10 pF 防振荡用的,我一般先留空,实测再焊

小技巧:Rf 两端并联一个小电容 Cf,可以抑制高频噪声和防止自激振荡。Cf 的值我通常用公式 Cf = 1/(2π × Rf × f_3dB) 估算,然后留个焊盘位置,调试时再调。

3.2 模拟滤波电路设计:把噪声挡在门外

放大之后呢?噪声也跟着放大了。这时候就需要滤波器上场。我遇到过最头疼的情况是:50Hz 工频干扰串进来,跟信号混在一起,怎么滤都滤不干净。后来发现是地线没处理好,这是后话。

光学触控系统里,我常用的滤波策略分两步:

  1. 一阶 RC 低通:放在 TIA 输出端,截止频率设在 10~100 kHz,先把高频毛刺干掉。
  2. 二阶有源低通:用 Sallen-Key 拓扑,截止频率根据扫描频率来定,一般 1~10 kHz。

注意:滤波器级联时,后级的输入阻抗要远大于前级的输出阻抗,否则会拉偏截止频率。我吃过这个亏,当时两个滤波器级联后,截止频率直接偏移了 30%。

为什么用有源滤波?因为无源 RC 在低频段需要很大的电容和电阻,体积大不说,还容易引入热噪声。有源滤波用运放隔离,设计更灵活。

3.3 ADC 采样策略:什么时候采、采多少、怎么采

ADC 采样不是简单地把模拟信号转成数字。你得考虑三个问题:什么时候采?采多少?怎么采?

3.3.1 采样时机

光学触控系统里,LED 是脉冲点亮的。我建议在 LED 稳定发光的中段采样,避开上升沿和下降沿。为什么?因为那段时间电流不稳定,噪声最大。

我的做法:用定时器同步 LED 驱动和 ADC 触发。LED 点亮后延迟 10~20 μs,等信号稳定了,再触发 ADC 采样。

3.3.2 采样位数与速率

12 位 ADC 够不够?说实话,大部分场景够用。但如果你要检测很微弱的手指遮挡变化,我建议上 16 位。采样速率呢?每个通道 100 kSPS 基本够用,毕竟光学触控的扫描频率一般也就几十到几百 Hz。

场景 推荐位数 采样率
普通触控 12 bit 100 kSPS
高精度触控 16 bit 200 kSPS
多通道扫描 12~16 bit 每通道 50 kSPS

3.3.3 过采样与平均

硬件搞不定的事,软件来凑。过采样+平均可以有效提升有效位数。我常用的套路是:对同一个点采 16 次,去掉最大最小值,剩下 14 个取平均。这样等效位数能提升 2~3 bit。

// 过采样平均示例
uint32_t sum = 0;
uint16_t max_val = 0, min_val = 0xFFFF;
for (int i = 0; i < 16; i++) {
    uint16_t val = adc_read(channel);
    sum += val;
    if (val > max_val) max_val = val;
    if (val < min_val) min_val = val;
}
sum -= (max_val + min_val);
uint16_t result = sum >> 2;  // 等效 14 次平均,右移 2 位

避坑指南:我曾经在过采样时忘了去掉异常值,结果有一次电源波动导致某个采样点跳变,平均后整个数据都偏了。从那以后,去极值就成了我的标配。

3.4 知识结构总览

下面这张图把信号预处理的三个环节串起来了。你看一眼就能明白整个链路是怎么走的。

信号预处理链路总览 光电二极管 电流信号 pA~μA 跨阻放大器 I/V 转换 + 放大 模拟低通滤波 一阶/二阶有源 ADC 12~16 bit 关键:信号链每一级的噪声都会累加,前级信噪比决定了系统天花板 设计要点 放大环节 • 运放偏置电流 < 信号 1/10 • Rf 选 1~10 MΩ • Cf 防振荡,留焊盘调试 • 增益带宽积够用就好 滤波环节 • 一阶 RC 先滤高频 • 二阶有源 Sallen-Key • 注意级联阻抗匹配 • 截止频率 1~10 kHz 采样环节 • LED 稳定后采样 • 12 bit 够用,16 bit 更稳 • 过采样 + 去极值平均 • 定时器同步触发

3.5 实战中的几个坑

  • 地线环路:模拟地和数字地没分开,噪声从地线串进来。我建议用 0Ω 电阻或磁珠单点连接。
  • 电源纹波:运放对电源噪声很敏感。LDO 输出端加 10μF+0.1μF 去耦电容,靠近运放引脚放。
  • PCB 布局:反馈电阻 Rf 和 Cf 要尽量靠近运放引脚,走线越短越好。我见过有人把 Rf 放得老远,结果寄生电容把带宽压到只有几十 kHz。
  • 采样抖动:ADC 触发信号抖动会导致采样值不稳定。用定时器硬件触发,别用软件延时。

再强调一次:信号预处理是光学触控系统的「地基」。地基没打好,上面盖再漂亮的算法楼也会塌。我每次评审设计,第一件事就是看信号链的噪声预算,这一关过不了,直接打回重做。