第1章:数据采集系统架构
大家好,欢迎来到《传感器数据采集与滤波算法精讲》。我是你们的老朋友,一个在嵌入式领域摸爬滚打了十几年的工程师。今天咱们开篇,聊聊数据采集系统的整体架构。说白了,就是搞清楚信号从传感器出来,到变成我们能用的数字,中间都经历了什么。
1.1 模拟前端设计:信号调理的艺术
传感器出来的信号,通常很脆弱。可能是微伏级的电压,也可能是纳安级的电流。直接送给ADC?那基本是找死。所以,我们需要一个“模拟前端”(AFE),它负责把信号调理到ADC喜欢的“口味”。
我个人习惯把AFE分成三个核心任务:放大、滤波、偏置。
- 放大:把微弱的信号放大到ADC的满量程范围附近。比如一个0-10mV的信号,ADC参考电压是3.3V,那你就得放大330倍。我常用仪表放大器INA128,共模抑制比高,适合差分信号。
- 滤波:抗混叠滤波是必须的。ADC采样前,必须滤掉高于奈奎斯特频率的信号,否则会发生混叠。我一般用二阶有源低通滤波器,截止频率设在采样率的1/3左右。
- 偏置:有些传感器输出是双极性的(比如±5V),但ADC只能接受单极性(0-3.3V)。这时候就需要加一个直流偏置,把信号整体抬升。
关键点:模拟前端的噪声设计,决定了整个系统的底噪。你想想看,ADC再牛,前端噪声比量化噪声还大,那ADC的精度就全浪费了。
1.2 ADC选型与配置:别只看位数
很多新手选ADC,上来就问“这是多少位的?”其实,位数只是其中一个参数。我在项目中遇到过,一个16位的ADC,实际有效位数(ENOB)可能只有12位。为什么?因为噪声和失真。
选型时,我建议重点关注这几个参数:
| 参数 | 说明 | 我的经验 |
|---|---|---|
| 有效位数(ENOB) | 实际能达到的精度 | 比标称位数低2-3位很正常 |
| 采样率 | 每秒能采多少个点 | 至少是信号最高频率的2.5倍 |
| 输入阻抗 | 对前端驱动能力的要求 | 低阻抗ADC需要运放驱动 |
| 信噪比(SNR) | 信号与噪声的比值 | 每增加6dB,相当于多1位分辨率 |
配置ADC时,有几个坑要避开。我曾经在做一个振动监测项目时,ADC的采样时钟抖动太大,导致高频信号的信噪比急剧下降。后来换了低抖动的晶振,问题才解决。嗯,这里要注意:时钟质量直接影响ADC的动态性能。
1.3 SPI/I2C接口时序:通信的节奏感
ADC和MCU之间怎么通信?最常用的就是SPI和I2C。两者各有千秋,我简单说说。
SPI:全双工,速度快,但需要4根线(CS、SCLK、MOSI、MISO)。我习惯用SPI来连接高速ADC,比如采样率1Msps以上的。时序上要注意:
- 时钟极性(CPOL)和相位(CPHA)必须和ADC匹配。搞反了,读出来的数据全是乱的。
- CS片选信号必须在传输前后保持稳定,不能有毛刺。
I2C:半双工,只需要2根线(SDA、SCL),适合连接多个从设备。但速度慢,一般400kHz。我常用I2C连接温湿度传感器、加速度计这类低速设备。
小技巧:调试SPI/I2C时序时,我建议先用逻辑分析仪抓波形。眼睛看示波器?太累了。逻辑分析仪能直接解码出数据,省时省力。
1.4 DMA传输机制:解放CPU
ADC采集的数据怎么搬到内存?最笨的方法是CPU一个一个读。但这样CPU就被占死了,啥也干不了。所以,我们需要DMA(直接存储器访问)。
DMA说白了,就是一个硬件搬运工。你告诉它:从ADC的数据寄存器搬1000个字节到内存的buffer里。然后它自己就干了,搬完了再通知你。CPU可以在这期间处理其他任务,比如显示、通信、控制算法。
配置DMA时,我建议注意这几点:
- 传输方向:外设到内存(ADC采集常用)。
- 循环模式:开启后,DMA会自动从头开始,适合连续采集。
- 中断触发:当DMA传输完成一半或全部完成时,触发中断。这样CPU可以及时处理数据。
警告:DMA虽然好用,但要注意缓存一致性问题。特别是使用带Cache的MCU时,DMA直接写内存,CPU读的可能还是Cache里的旧数据。我曾经在这个坑里摔过,后来加了内存屏障指令才解决。
好了,第一章的内容就到这里。数据采集系统架构,说白了就是“信号调理→ADC转换→数字通信→数据搬运”这条链。每个环节都有讲究,但别怕,后面我们会一个一个拆解。
下一章,咱们聊聊传感器接口与信号调理电路设计,包括运放选型、滤波器设计这些实战内容。到时候见!
课后思考:如果你现在要设计一个采集心电信号的系统,采样率设为500Hz,ADC位数选12位,你觉得够用吗?为什么?