2、信号采集基础:ADC采样原理、采样率与分辨率、抗混叠滤波器设计要点
好,咱们进入实战前的第一道坎——信号采集。说白了,点钞机再聪明,也得先把纸币的物理信号变成数字信号,才能谈得上处理。这部分要是搞砸了,后面算法写得再漂亮也是白搭。我在好几个项目里都见过这种情况:滤波算法调了三天,最后发现是ADC前端没处理好。
2.1 ADC采样原理:从模拟到数字的那一步
ADC,模数转换器,它的任务就是把连续的模拟电压,变成离散的数字码。你想想看,一张纸币在传送带上移动,磁头感应到的信号是连续变化的,但我们的单片机只能认0和1。所以必须有个“翻译官”。
ADC的核心原理其实不复杂:采样、保持、量化、编码。采样就是每隔一段时间看一眼输入信号;保持是把这一瞬间的电压稳住;量化是把电压跟一个参考电压比较,分成若干等级;编码就是把等级变成二进制数。
我习惯把ADC比作一个“拍照”的过程。你不可能拍下整个电影,只能一帧一帧地拍。ADC也是一样,它只能“拍”下信号在某个时刻的电压值。这里有个关键点:采样时钟的抖动。我在一个项目中用过某款国产MCU,它的内部ADC时钟抖动比较大,导致采集到的信号波形有毛刺。后来我换成了外部晶振分频,问题就解决了。
核心公式:
数字码值 = (输入电压 / 参考电压) × (2^N - 1)
其中N是ADC的分辨率位数。
举个例子,一个10位的ADC,参考电压是3.3V。如果输入电压是1.65V,那么数字码值就是 (1.65 / 3.3) × (1023) ≈ 511。就这么简单。
2.2 采样率:到底该设多快?
采样率,就是ADC每秒采样的次数,单位是Hz。这个参数怎么定?我直接说结论:至少是信号最高频率的2倍。这就是奈奎斯特采样定理。
为什么会这样?因为采样率不够,就会发生混叠。混叠是什么?就是高频信号“伪装”成了低频信号,你根本分不清。我在调试点钞机磁头信号时遇到过这种情况:纸币上的磁性图案明明有高频成分,但采样率设低了,结果波形看起来像是一个低频的慢变信号,导致鉴伪算法完全失效。
点钞机里常见的信号频率范围是多少?我整理了一个表,你参考一下:
| 信号类型 | 典型频率范围 | 建议最低采样率 |
|---|---|---|
| 磁头信号(磁性油墨) | 1kHz ~ 20kHz | 40kHz ~ 100kHz |
| 红外透射信号 | DC ~ 5kHz | 10kHz ~ 20kHz |
| 紫外荧光信号 | DC ~ 1kHz | 2kHz ~ 5kHz |
| 厚度检测信号 | DC ~ 500Hz | 1kHz ~ 2kHz |
我个人习惯把采样率留出3~5倍的余量。比如磁头信号最高20kHz,我会设到80kHz甚至100kHz。为什么?因为实际信号不是理想的正弦波,它有很多谐波成分。留点余量,心里踏实。
小技巧: 如果你用的是MCU内置ADC,采样率往往受限于转换时间。比如12位ADC转换时间1us,那理论最高采样率就是1MHz。但别忘了,还要考虑DMA传输、中断处理的时间开销。实际能跑到的采样率,通常只有理论值的60%~80%。
2.3 分辨率:位数越多越好吗?
分辨率,就是ADC能分辨的最小电压变化。10位ADC能分辨2^10=1024个等级,12位是4096个等级,16位是65536个等级。分辨率越高,理论上能看到的信号细节就越多。
但我要泼一盆冷水:分辨率不是越高越好。为什么?因为噪声。你想想看,一个16位ADC的最小分辨率是3.3V / 65536 ≈ 50μV。但你的电路板上随便一个开关噪声、电源纹波,可能就有几毫伏甚至几十毫伏。这时候高分辨率反而成了累赘——你采到的全是噪声。
我在一个项目中用过24位的Σ-Δ ADC,理论上精度极高。但实际测下来,最后4位一直在跳,根本不能用。后来我老老实实降到了16位,配合硬件滤波,效果反而更好。
点钞机场景下,我建议:
- 磁头信号: 12位足够了。磁头信号动态范围不大,12位能提供约0.8mV的分辨率(3.3V参考),完全够用。
- 红外/紫外信号: 10位或12位。这些信号变化比较缓慢,对分辨率要求不高。
- 厚度检测: 10位就够了。厚度信号主要是看有无,不是看精确值。
注意: 分辨率高不等于精度高。精度还取决于参考电压的稳定性、ADC的线性度、温度漂移等因素。别被“24位”这种数字忽悠了。
2.4 抗混叠滤波器设计要点
好,终于到了重点。抗混叠滤波器,说白了就是一个低通滤波器,放在ADC之前。它的任务只有一个:把高于采样率一半的频率成分滤掉。
你可能会问:我采样率设高一点不就行了?嗯,理论上可以,但实际中不行。因为信号里总有一些高频噪声,比如电机换向产生的尖峰、电源开关噪声。这些噪声频率可能很高,你不可能把采样率设到无限高。所以,必须用硬件滤波器把它们干掉。
我设计抗混叠滤波器时,一般遵循这几个原则:
- 截止频率设为采样率的1/3 ~ 1/5。 比如采样率100kHz,截止频率设在20kHz ~ 33kHz。这样能保证在奈奎斯特频率(50kHz)处有足够的衰减。
- 使用二阶或三阶巴特沃斯滤波器。 巴特沃斯滤波器在通带内最平坦,不会对有用信号造成太大影响。切比雪夫滤波器虽然陡峭,但通带有纹波,我不太喜欢。
- 注意运放的选型。 滤波器的运放要有足够的带宽和压摆率。我用过LM358做滤波器,结果高频段增益异常,反而引入了噪声。后来换成了OPA340,问题解决。
下面是一个典型的二阶低通滤波器电路,截止频率约20kHz:
// 二阶巴特沃斯低通滤波器设计
// 截止频率: 20kHz
// 增益: 1 (单位增益)
// 使用Sallen-Key拓扑
// 元件值计算 (假设C1 = C2 = 1nF)
// R1 = R2 = 1 / (2 * PI * fc * C)
// = 1 / (2 * 3.14159 * 20000 * 1e-9)
// ≈ 7.96kΩ
// 实际选用: R1 = R2 = 8.2kΩ (标准值)
// C1 = C2 = 1nF (陶瓷电容)
// 注意: 电阻精度选1%, 电容选C0G/NP0材质
// 不要用X7R, 因为电压系数大, 会导致截止频率漂移
避坑指南: 我曾经在滤波器输出端直接接ADC输入,结果发现采样值有规律地跳动。查了半天,原来是ADC的采样电容在采样瞬间会从滤波器输出端抽取电荷,导致电压跌落。解决办法是在滤波器输出和ADC输入之间加一个缓冲器(电压跟随器),或者用一个大电容(比如100nF)做电荷存储。
还有一个容易被忽略的点:PCB布局。滤波器的电阻电容要尽量靠近ADC引脚,走线要短。模拟地和数字地要分开,最后单点连接。我见过一个工程师,滤波器设计得挺好,但走线绕了半个板子,结果耦合了一堆数字噪声,滤波器白做了。
最后,说一个实战经验:别迷信仿真。仿真软件里元件都是理想的,实际焊上去之后,电容的ESR、电阻的寄生电感、PCB的寄生电容,都会影响滤波器特性。我习惯在仿真之后,用信号发生器扫一遍实际电路的幅频特性,确认截止频率和衰减量符合要求。这一步,省不了。
嗯,信号采集基础就讲到这里。下一章咱们开始聊具体的滤波算法——从最简单的均值滤波,到卡尔曼滤波,一步步来。你先把ADC这部分吃透,后面才能走得稳。