硬件选型与架构设计:主控芯片、ADC与信号链的抉择
各位同学,咱们接着聊。上一章我们把系统需求理清楚了,这一章就要真刀真枪地选硬件了。说实话,硬件选型是整个项目里最让我头疼的一环,也是最有意思的一环。选对了,后面写代码顺风顺水;选错了,调试起来能让你怀疑人生。
我个人习惯,做多通道万用表这种数据采集系统,先定主控,再定ADC,最后搭信号调理电路。这个顺序不能乱,因为主控决定了你能跑多快的采样率、能挂多少外设,而ADC决定了你的测量精度天花板。
主控芯片选型:STM32、ESP32还是树莓派?
这三个选项,说白了代表了三种不同的设计哲学。我一个个说。
STM32:工业级的可靠选择
如果你问我做仪器仪表用什么主控最稳,我会毫不犹豫地说STM32。我在项目中用过STM32F4和H7系列,最大的感受就是——稳。它的ADC外设虽然比不上独立ADC芯片,但胜在集成度高,而且有硬件SPI、I2C、DMA这些接口,跟外部ADC通信非常方便。
举个例子,我之前的项目用STM32F407驱动ADS1256,SPI时钟跑到10MHz,配合DMA双缓冲,连续采样一点问题没有。嗯,这里要注意,STM32的SPI从模式有时候会丢第一个字节,我踩过这个坑,后来在初始化时加了个虚拟读操作才解决。
ESP32:无线通信的利器
ESP32的优势很明显——自带WiFi和蓝牙。如果你要做远程数据采集,或者想把数据传到云端,ESP32是首选。但它的ADC精度嘛...说实话,有点拉胯。我测过ESP32内置ADC的有效位数,大概只有9-10位,而且线性度不太好。
所以我建议,用ESP32做主控时,千万别用它的内置ADC。外挂一个独立ADC芯片,比如ADS1256,这样既能享受无线通信的便利,又不牺牲精度。我在一个环境监测项目里就是这么干的,效果还不错。
树莓派:适合原型验证
树莓派嘛,说白了就是个微型Linux电脑。它的优势是开发快,Python库多,适合快速验证想法。但做产品的话,我不太推荐。为什么?功耗高、实时性差、成本也高。我见过有人用树莓派做数据采集,结果因为Linux的调度延迟,采样时间戳乱得一塌糊涂。
我个人觉得,树莓派更适合做上位机或者网关,而不是直接做数据采集的主控。
| 主控型号 | 优势 | 劣势 | 推荐场景 |
|---|---|---|---|
| STM32F4/H7 | 实时性好、外设丰富、稳定 | 无无线通信、开发稍复杂 | 工业仪表、高精度采集 |
| ESP32 | 自带WiFi/BLE、成本低 | 内置ADC精度差、实时性一般 | 远程监测、物联网数据采集 |
| 树莓派 | 生态好、Python开发快 | 功耗高、实时性差、成本高 | 原型验证、上位机 |
ADC选型:ADS1256、AD7190还是MAX11612?
ADC是数据采集系统的核心。你想想看,前面信号调理做得再好,ADC一拉胯,全白搭。我选ADC主要看三个指标:分辨率、采样率、噪声性能。
ADS1256:24位精度的性价比之王
ADS1256是我用得最多的ADC芯片,没有之一。24位分辨率,30kSPS采样率,自带PGA和数字滤波器。最关键的是,它便宜啊!一片才几十块钱,性能却能达到工业级水平。
我在一个8通道数据采集项目里用了两片ADS1256,通过SPI菊花链连接,实现了16通道同步采样。嗯,这里有个技巧,ADS1256的DRDY引脚一定要接中断,用轮询的话会浪费CPU资源。
关键参数对比:
- ADS1256:24位,30kSPS,PGA增益1-64,价格约¥30
- AD7190:24位,4.8kSPS,PGA增益1-128,价格约¥80
- MAX11612:12位,94.4kSPS,无PGA,价格约¥15
AD7190:低噪声的王者
如果你对噪声要求极高,比如做微伏级别的测量,那AD7190是更好的选择。它的RMS噪声比ADS1256低一个数量级,而且内置了温度传感器和诊断功能。不过价格也贵了一倍多。
我记得有一次做精密电阻测量项目,用ADS1256测出来的数据总是有±2uV的跳动,换成AD7190后,跳动降到了±0.5uV。当然,代价是采样率从30kSPS降到了4.8kSPS。鱼和熊掌不可兼得啊。
MAX11612:高速低精度的选择
MAX11612是12位ADC,采样率高达94.4kSPS。说实话,做万用表很少用这种芯片,因为精度不够。但如果你要做高速数据采集,比如捕捉瞬态信号,那它就有用武之地了。
我一般只在做示波器功能时才会考虑这种高速ADC。对于万用表来说,24位ADC才是正道。
前端信号调理电路:分压、滤波、保护
信号调理电路,说白了就是给ADC"喂"合适的信号。ADC的输入范围一般是±2.5V或±5V,但你要测的可能是220V交流电,也可能是毫伏级的热电偶信号。所以,分压、滤波、保护这三样一个都不能少。
分压电路
分压电路的设计要点是:高输入阻抗、低温度漂移。我一般用精密电阻分压网络,配合电压跟随器做缓冲。举个例子,要测0-100V的直流电压,可以用1MΩ和10kΩ电阻分压,把100V降到1V左右。
这里有个坑,我曾经直接用普通电阻分压,结果温度一变化,分压比就飘了。后来换成0.1%精度的金属膜电阻,才解决了问题。
滤波电路
滤波主要是为了抑制工频干扰和噪声。我习惯在ADC输入端加一个二阶低通滤波器,截止频率设在采样率的1/10左右。比如采样率是1kSPS,那滤波器截止频率就设在100Hz。
嗯,这里要注意,滤波器的电容要用C0G或NP0材质的,不能用X7R,因为X7R的电容值会随电压变化,导致滤波器特性改变。我吃过这个亏,后来再也不敢用X7R做滤波器了。
保护电路
保护电路是最后一道防线。万一用户把220V接到输入端,保护电路要能扛得住。我一般用TVS管加自恢复保险丝的组合。TVS管把电压钳位在安全范围内,保险丝在电流过大时断开。
我曾经见过一个项目,没加保护电路,结果一个浪涌就把ADC芯片烧了,整块板子报废。从那以后,我设计任何输入接口都会加保护,哪怕多花几块钱,也比返修强。
通信接口:USB、RS232、以太网还是WiFi?
通信接口的选择,取决于你的应用场景。我简单说说我的经验。
- USB:最常用,速度快,即插即用。适合台式万用表,通过USB虚拟串口或HID协议通信。我一般用USB虚拟串口,开发简单,兼容性好。
- RS232:老古董了,但工业现场还在用。优点是抗干扰能力强,传输距离远。缺点是速度慢,而且现在电脑都不带串口了,得用USB转串口线。
- 以太网:适合分布式采集系统,多个设备通过交换机连接,上位机统一管理。我用过W5500芯片做以太网接口,稳定可靠,就是代码量有点大。
- WiFi:适合无线监测场景,比如远程看数据。ESP32自带WiFi,用起来很方便。但要注意,WiFi的延迟和丢包率比有线高,不适合实时控制。
我的建议:如果做产品,优先考虑USB+以太网双接口。USB用于本地调试,以太网用于远程监控。WiFi可以作为可选功能,但不要作为唯一通信方式。
整体硬件框图设计
好了,前面把各个模块都聊了一遍,现在把它们拼起来。一个典型的多通道万用表数据采集系统,硬件框图大致是这样的:
信号输入 → 分压/衰减 → 滤波 → 保护 → 多路复用器 → PGA → ADC → 主控 → 通信接口
↓
显示/存储
具体来说:
- 信号从输入端子进来,先经过分压网络(量程切换)
- 然后经过低通滤波器(抗混叠)
- 再经过保护电路(TVS+保险丝)
- 进入多路复用器(比如ADG708,8通道)
- 经过PGA放大(ADS1256自带PGA)
- ADC采样转换
- 主控通过SPI读取数据
- 数据通过USB/以太网/WiFi上传
我画框图有个习惯,先画电源树。所有芯片的供电电压、电流需求列清楚,然后设计电源方案。数字部分和模拟部分要分开供电,中间用磁珠隔离。不然的话,数字噪声会串到模拟电路里,ADC的精度就废了。
重要提醒:模拟地和数字地要单点连接,不要大面积铺铜连在一起。我见过有人把模拟地和数字地直接短接,结果ADC的噪声大了好几倍。
好了,这一章的内容就到这里。硬件选型没有绝对的对错,关键是要匹配你的需求。下一章我们开始画原理图,到时候我会把每个模块的详细电路设计讲清楚。