3、数据采集终端硬件设计:主控芯片选型(ESP32/STM32)、电源管理电路、信号调理电路、PCB设计注意事项

好,咱们进入第三章。这一章是硬件的核心,说白了就是「选什么脑子、怎么喂电、怎么把传感器信号洗干净、最后怎么画板子」。我做了这么多年物联网终端,发现很多项目死在硬件设计的第一关——不是芯片选型拍脑袋,就是电源纹波把ADC淹没了。今天咱们把这四个坑一个一个填平。

3.1 主控芯片选型:ESP32 vs STM32

选主控,我个人的习惯是先看通信需求,再看功耗,最后看算力。别一上来就堆料,你想想看,一个温湿度传感器,你非得上个Cortex-A7,那不是杀鸡用牛刀吗?

核心结论:需要Wi-Fi/BLE直接上云,选ESP32;需要工业级稳定性、多路模拟采集、低功耗休眠,选STM32。

3.1.1 ESP32:适合「无线+快速原型」

ESP32我用了好几年,最大的感受就是「省心」。内置Wi-Fi和蓝牙,你不需要额外挂通信模块,一个芯片搞定。我记得2019年做农业大棚项目,客户要求一周出Demo,我直接用ESP32+温湿度传感器,三天就把数据传到云平台了。

它的优势很明显:

  • 双核Xtensa LX6:主频240MHz,跑FreeRTOS绰绰有余
  • 内置Wi-Fi/BLE:省掉外挂模块的成本和PCB面积
  • 12位SAR ADC:2个通道,采样率最高200ksps
  • 生态丰富:Arduino、ESP-IDF、MicroPython随便选

但要注意,它的ADC线性度一般。我在项目中遇到过,用ESP32的ADC采集0-3.3V信号,实际测量误差能达到±2%。如果你要做高精度采集,比如0.1%的电压测量,建议外挂独立ADC芯片。

避坑指南:我曾经在工业现场用过ESP32,结果发现Wi-Fi信号被金属机箱屏蔽,通信断断续续。后来加了外置天线才解决。如果你做金属外壳产品,务必预留天线接口。

3.1.2 STM32:适合「工业级+多通道采集」

STM32是我做工业项目的首选。它的ADC是真的稳——12位、16位甚至32位都有,而且有多达16个通道。我去年做的一个水质监测项目,需要同时采集pH、溶解氧、浊度、温度四个信号,STM32F4的3个独立ADC刚好够用。

选型建议:

需求场景 推荐型号 理由
低功耗电池供电 STM32L0/L4 休眠功耗低至0.4μA
多路模拟采集 STM32F3/F4 内置多通道ADC+可编程增益放大器
需要外扩通信 STM32F1/F4 SPI/I2C/UART接口丰富

嗯,这里要注意:STM32本身不带Wi-Fi,你需要外挂ESP8266或4G模块。但好处是,它的实时性和确定性远强于ESP32。你想想看,ESP32跑Wi-Fi协议栈时,中断响应可能会被延迟,而STM32在裸机或RTOS下,中断响应时间可以控制在几十个时钟周期内。

3.2 电源管理电路设计

电源是硬件的命脉。我见过太多项目,传感器选得挺好,主控也够用,结果电源纹波太大,ADC读数跳得像心电图。电源管理,说白了就是「把不干净的电源变成干净的,把高的电压变成合适的电压」。

3.2.1 电源拓扑选择

对于环境监测终端,常见的供电方式有两种:

  • 电池供电(3.7V锂电池):需要升压或降压稳压
  • USB供电(5V):需要降压到3.3V

我个人习惯用两级电源架构:

第一级:LDO(低压差线性稳压器)
  - 输入:4.2V(锂电池满电)或5V(USB)
  - 输出:3.3V
  - 推荐型号:AMS1117-3.3、XC6206P332MR

第二级:精密参考电压(给ADC用)
  - 输出:2.5V或3.0V
  - 推荐型号:REF3025、TL431

为什么不用DC-DC?DC-DC效率高,但纹波大。我做过对比测试,同样的12位ADC,用DC-DC供电时,噪声底噪比LDO高了约15dB。对于环境监测这种微弱信号采集,LDO的干净电源更重要。

小技巧:如果必须用DC-DC(比如电池供电需要升压),可以在DC-DC输出后加一级LC滤波,再进LDO。我常用的参数是:10μH电感+22μF电容,能有效抑制开关噪声。

3.2.2 电源保护电路

别忘了加保护!我早期一个项目,客户在现场把电源接反了,直接烧了一片STM32。从那以后,我的每个设计都必加以下电路:

  • 防反接二极管:串联一个肖特基二极管(如SS34),压降只有0.3V
  • TVS管:在电源入口并联一个双向TVS,防止浪涌
  • 保险丝:自恢复保险丝(PTC),短路时自动断开

3.3 信号调理电路设计

传感器输出的信号,很少是「干净、标准、可直接采集」的。你想想看,一个热电偶输出只有几毫伏,一个pH传感器输出阻抗高达几百兆欧。信号调理电路,就是把这些「不听话」的信号变成ADC能吃的「标准餐」。

3.3.1 放大电路

对于微弱信号(如热电偶、应变片),需要先放大。我常用的方案是:

  • 仪表放大器:如AD620、INA128,共模抑制比高,适合差分信号
  • 运算放大器:如LM358、OP07,适合单端信号

举个例子,一个K型热电偶,输出约40μV/°C。如果你要测量0-100°C,信号范围是0-4mV。直接用ADC采集?不行,ADC的LSB可能都比这个值大。你需要先放大100倍,变成0-400mV,再送入ADC。

放大电路设计要点:
1. 增益电阻用0.1%精度,温度系数25ppm/°C以下
2. 反馈电容加10pF,防止自激振荡
3. 电源去耦电容靠近运放引脚,每个运放至少一个0.1μF

避坑指南:我曾经在放大电路上踩过坑——用了普通电阻做增益,结果温度一变,增益跟着漂,采集数据全废了。后来全部换成金属膜电阻,问题解决。记住,模拟电路的精度,往往取决于电阻的精度。

3.3.2 滤波电路

环境监测现场,工频干扰(50Hz)是最大的敌人。我常用的滤波方案:

  • 一阶RC低通滤波:截止频率设为10Hz,能有效滤除50Hz工频
  • 二阶有源滤波:用运放搭建Sallen-Key结构,滚降更陡

参数计算很简单:

一阶RC低通:
  截止频率 f_c = 1 / (2πRC)
  取 R=10kΩ,C=1.6μF,则 f_c ≈ 10Hz

嗯,这里要注意:滤波电容最好用C0G或NP0材质,温度稳定性好。X7R的电容在直流偏压下容值会下降,导致截止频率偏移。

3.4 PCB设计注意事项

PCB设计,说白了就是「把原理图变成能用的板子」。我见过很多原理图画得漂亮,但PCB一塌糊涂的案例。下面这几个点,是我这些年踩坑踩出来的经验。

3.4.1 布局原则

  • 模拟区和数字区隔离:ADC、运放等模拟器件放一边,MCU、通信模块放另一边
  • 电源走线加粗:至少40mil,大电流走线用铺铜
  • 去耦电容就近放置:每个IC的电源引脚旁边放一个0.1μF电容,距离不超过5mm

3.4.2 接地策略

接地是PCB设计中最容易出问题的地方。我的做法是:

  • 单点接地:模拟地和数字地在电源入口处单点连接
  • 地平面完整:不要在地平面上走信号线,尤其是高频信号
  • ADC下方挖空:ADC芯片正下方的地层挖空,减少寄生电容

核心原则:模拟信号走线越短越好,数字信号走线远离模拟信号。如果必须交叉,用90度垂直交叉,不要平行走线。

3.4.3 关键走线注意事项

  • 差分信号:如I2C的SCL/SDA,走线等长、靠近
  • 模拟输入:从传感器到ADC的走线,两侧用地线包围(guard trace)
  • 晶振:靠近MCU,走线短,周围不要走其他信号

我记得有一次,一个客户说他的ADC读数总是跳,我远程看了PCB文件,发现他把晶振放在了ADC输入走线旁边。晶振的谐波直接耦合进模拟信号,不跳才怪。后来改了一版,把晶振挪到板边,问题解决。

3.4.4 散热与机械设计

  • 大功率器件:如LDO、MOSFET,加散热焊盘和过孔
  • 接插件:传感器接口用带锁扣的端子,防止振动脱落
  • 测试点:关键信号(电源、ADC输入、参考电压)预留测试点,方便调试

小技巧:PCB打样前,先做一次「设计规则检查(DRC)」,再跑一次「信号完整性仿真」。免费的工具有KiCad的DRC、LTspice的仿真。别省这一步,我吃过亏——有一版板子回来,发现差分走线阻抗不匹配,通信距离直接减半。

好了,这一章的内容就这些。硬件设计没有捷径,就是「选型→设计→打样→测试→改版」的循环。我做了十几年,每次打样回来还是会有惊喜(或惊吓)。但只要你把上面这些基础打牢,至少能保证板子「能跑、不烧、数据准」。下一章咱们聊软件,怎么把硬件采集到的数据变成有用的信息。