数据采集硬件平台搭建:微控制器选型与外围电路设计
做数据采集这么多年,我最大的体会是:选对微控制器,项目就成功了一半。另一半,靠的是外围电路设计得够不够扎实。今天咱们就聊聊硬件平台搭建这件事。
说白了,微控制器就是数据采集系统的大脑。它负责读取传感器数据、做初步处理、然后通过通信接口把数据送出去。选型不对,后面全白搭。
2.1 三大主流微控制器对比
目前市面上最常用的三款,我挨个说说我的看法。
| 特性 | ESP32 | STM32 | Arduino (Uno/Nano) |
|---|---|---|---|
| 核心架构 | Xtensa LX6 双核 | ARM Cortex-M 系列 | ATmega328P (AVR) |
| 主频 | 240 MHz | 72~480 MHz | 16 MHz |
| WiFi/蓝牙 | 内置 | 需外挂模块 | 需外挂模块 |
| ADC 精度 | 12位 | 12位/16位 | 10位 |
| 开发难度 | 中等 | 较高 | 低 |
| 典型价格 | ¥15~30 | ¥10~80 | ¥20~40 |
| 适用场景 | 物联网、无线传感 | 工业控制、高精度采集 | 教学、快速原型 |
我个人习惯是:原型验证用 Arduino,无线项目用 ESP32,工业级产品用 STM32。这个组合我用了好几年,基本没翻过车。
2.2 外围电路设计——别让细节毁了你的数据
很多新手把微控制器买回来,接上传感器就开始读数据。结果读出来的数值跳来跳去,还以为是传感器坏了。其实,问题往往出在外围电路上。
2.2.1 电源设计
电源是数据采集系统的命脉。我见过太多项目因为电源纹波太大,导致 ADC 读数不准。
- 去耦电容: 每个 IC 的 VCC 和 GND 之间放一个 0.1μF 陶瓷电容,离引脚越近越好。
- 稳压选择: 传感器供电尽量用 LDO,别用 DC-DC。DC-DC 的开关噪声会直接耦合到模拟信号里。
- 模拟/数字分离: 如果板子上既有模拟电路又有数字电路,电源走线要分开走,最后在电源入口处单点汇合。
2.2.2 滤波电路
传感器信号进 ADC 之前,一定要做滤波。这不是可选项,是必选项。
最简单的做法是加一个 RC 低通滤波器。截止频率按传感器输出频率的 10 倍来算:
// 低通滤波器截止频率计算
// f_c = 1 / (2 * π * R * C)
// 假设传感器输出 100Hz,取 R=10kΩ
// f_c = 1 / (2 * 3.14 * 10000 * C) = 1000Hz
// 解得 C ≈ 0.016μF,取标称值 0.022μF
// 实际项目中我常用:
// R = 1kΩ, C = 0.1μF → f_c ≈ 1.6kHz
// 这个组合对大多数慢变传感器都够用
你想想看,如果信号里有 50Hz 的工频干扰,不滤掉它,ADC 读出来的数据就会一直抖动。
2.2.3 信号调理
很多传感器的输出信号不是 0~3.3V 的。比如热电偶输出只有几毫伏,电流型传感器输出 4~20mA。这时候就需要信号调理电路。
- 放大: 小信号用仪表放大器(如 AD620),别用普通运放。普通运放的温漂会让你怀疑人生。
- 电平移位: 如果传感器输出有负电压,需要加偏置电路把信号抬到 ADC 的输入范围内。
- 阻抗匹配: 高阻抗传感器(如 pH 电极)后面必须接高输入阻抗的缓冲器,否则信号会被 ADC 的采样电容拉垮。
2.3 通信接口详解
微控制器和传感器之间怎么说话?靠的就是 I2C、SPI、UART 这三个接口。我分别说说它们的特点和适用场景。
2.3.1 I2C(两线式串行总线)
I2C 只有两根线:SCL(时钟)和 SDA(数据)。它最大的优点是节省引脚,一条总线上可以挂多个设备。
- 速度: 标准模式 100kHz,快速模式 400kHz,高速模式 3.4MHz。
- 地址: 每个设备有 7 位或 10 位地址,同一总线上不能有重复地址。
- 上拉电阻: SCL 和 SDA 都需要上拉到 VCC,阻值通常选 4.7kΩ。
我建议:传感器数量多、传输距离短(<30cm)、速度要求不高时,优先用 I2C。比如温湿度传感器、气压计、加速度计,基本都是 I2C 接口。
2.3.2 SPI(串行外设接口)
SPI 是四线制:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。它比 I2C 快得多,而且全双工。
- 速度: 轻松跑到几十 MHz,适合高速数据采集。
- 片选: 每个从设备需要一个独立的 CS 引脚,设备多了引脚不够用。
- 无地址: 靠片选信号选择设备,不需要地址仲裁。
我在项目中遇到过这样的情况:用 SPI 接口的 ADC 做高速数据采集,采样率能到 1Msps 以上。但要注意,SPI 的走线不能太长,否则信号会反射。我一般控制在 10cm 以内。
2.3.3 UART(通用异步收发器)
UART 是最简单的串行通信,只需要 TX 和 RX 两根线。它不需要时钟线,靠双方约定好的波特率来同步。
- 波特率: 常用 9600、115200、921600。
- 电平: 微控制器通常是 3.3V TTL 电平,接 RS232 设备需要电平转换芯片(如 MAX3232)。
- 特点: 点对点通信,不能多设备挂在同一总线上(除非用 RS485)。
说白了,UART 最适合用来做调试输出,或者和 GPS 模块、蓝牙模块这类设备通信。它的优点是简单可靠,缺点是速度慢、只能一对一。
2.4 知识体系总览
下面这张图把本章的核心内容串起来了。你可以把它当作硬件平台搭建的检查清单。
2.5 选型决策流程
最后,我分享一个自己用了多年的选型决策流程。每次做新项目,我都按这个顺序走一遍:
- 先看通信需求: 需要无线传输吗?需要 → ESP32;不需要 → 继续往下看。
- 再看采集精度: ADC 需要 16 位以上?需要 → STM32;10~12 位够用 → 继续。
- 然后看开发周期: 两周内要出原型?是 → Arduino;有三个月以上开发时间 → STM32。
- 最后看成本: BOM 成本敏感?是 → 国产 STM32 替代品或 ESP32;不敏感 → 按性能选。