第二章 硬件选型与架构设计:主控芯片选型、IO模块选型、电源模块设计、整体硬件架构图
好,咱们开始聊硬件选型。说实话,这一步是整个远程IO控制系统里最「烧脑」的环节。选错了芯片,后面所有代码都得重写;选错了电源模块,现场烧板子那是分分钟的事。我当年第一个项目就吃过这个亏,嗯,后面我会细说。
2.1 主控芯片选型:ESP32 vs STM32
先问个问题:你希望你的IO控制器连网吗?
如果答案是「必须连」,那ESP32几乎是首选。如果答案是「我要工业级稳定,网络可以外挂」,那STM32更合适。
我个人习惯把这两种芯片的定位想清楚:
- ESP32:自带Wi-Fi和蓝牙,双核240MHz,价格便宜(十几块钱)。适合做物联网节点、家庭自动化、中小型远程IO。
- STM32:没有无线功能,但外设丰富、定时器精准、ADC/DAC性能强。适合做工业现场总线的主站或从站。
核心对比表
| 对比项 | ESP32 | STM32F4系列 |
|---|---|---|
| 主频 | 240MHz(双核) | 168MHz(单核) |
| 无线 | Wi-Fi + BLE 4.2 | 无(需外挂模块) |
| GPIO数量 | 34个(部分复用) | 82个(F407) |
| ADC精度 | 12位(噪声较大) | 12位(更稳定) |
| 工作温度 | -40°C ~ 85°C | -40°C ~ 105°C |
| 价格(批量) | 约12元 | 约25元 |
我建议这样选:
- 如果你的IO点数在32路以内,且需要远程监控,选ESP32。开发快,生态好。
- 如果你的IO点数超过64路,或者需要跑EtherCAT、CANopen等工业协议,选STM32。外设更丰富,实时性更强。
我的经验: 曾经有个项目,客户要求32路数字量输入+16路继电器输出,还要通过4G上传数据。我一开始选了STM32F407,结果发现Wi-Fi模块调试了整整两周才稳定。后来换成ESP32,三天就搞定了。说白了,能用ESP32解决的问题,别硬上STM32。
2.2 IO模块选型:数字量 vs 模拟量
IO模块说白了就是「信号的翻译官」。数字量模块翻译开关信号(0或1),模拟量模块翻译连续信号(0-10V、4-20mA)。
选型时我主要看三个参数:
- 隔离方式:光耦隔离还是继电器隔离?工业现场强烈建议光耦隔离,抗干扰能力强。
- 驱动能力:输出模块能带多大负载?继电器输出一般能带10A/250VAC,晶体管输出只能带500mA。
- 响应速度:高速计数场景需要光电耦合器响应时间在微秒级。
常用IO模块推荐
| 类型 | 推荐型号 | 特点 |
|---|---|---|
| 8路数字量输入 | TLP185光耦 + 74HC165 | 低成本,隔离电压3750V |
| 8路数字量输出 | ULN2803 + 继电器 | 达林顿管驱动,可带感性负载 |
| 4路模拟量输入 | ADS1115(16位ADC) | I2C接口,精度高,适合0-10V |
| 2路模拟量输出 | MCP4725(12位DAC) | I2C接口,输出0-5V |
注意: 模拟量输入模块一定要选带差分输入的。我曾经在项目里用了单端输入的ADC,结果现场电机一启动,采集到的信号全是噪声。后来换成ADS1115的差分模式,问题才解决。
2.3 电源模块设计:稳定是第一要义
电源设计这块,我吃过不少亏。你想想看,一个IO控制器,如果电源纹波太大,ADC采集的数据能准吗?继电器吸合瞬间的电压跌落,会不会让MCU复位?
我的设计原则是「三级供电」:
- 第一级:24V转5V —— 用LM2596或TPS5430,效率高,纹波小。
- 第二级:5V转3.3V —— 用AMS1117-3.3,给MCU和传感器供电。
- 第三级:隔离电源 —— 用B0505S隔离模块,给IO侧供电,防止干扰串入主控。
电源模块选型表
| 功能 | 推荐芯片 | 输入电压 | 输出电压 | 最大电流 |
|---|---|---|---|---|
| 24V→5V | TPS5430 | 5.5V-36V | 5V | 3A |
| 5V→3.3V | AMS1117-3.3 | 4.75V-12V | 3.3V | 1A |
| 隔离5V | B0505S-1W | 5V | 5V(隔离) | 200mA |
避坑指南: 我曾经在项目里直接用AMS1117从24V降到3.3V,结果芯片瞬间冒烟。后来才明白,线性稳压器的压差不能太大,否则功耗全变成热量了。老老实实先用DC-DC降到5V,再转3.3V,这才是正道。
2.4 整体硬件架构图
好了,前面聊了芯片、IO模块、电源,现在把它们拼起来。我习惯用「分层架构」来画硬件框图:
┌─────────────────────────────────────────────┐
│ 电源层 │
│ 24V输入 → TPS5430(5V) → AMS1117(3.3V) │
│ → B0505S(隔离5V) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 主控层 │
│ ESP32 / STM32 │
│ (UART, SPI, I2C, GPIO) │
└─────────────────────────────────────────────┘
↓ ↓ ↓
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 数字量输入│ │ 数字量输出│ │ 模拟量输入│
│ 光耦隔离 │ │ 继电器驱动│ │ ADS1115 │
│ 74HC165 │ │ ULN2803 │ │ 差分输入 │
└──────────┘ └──────────┘ └──────────┘
↓ ↓ ↓
┌─────────────────────────────────────────────┐
│ 通信层 │
│ ESP32: Wi-Fi / BLE │
│ STM32: RS485 / CAN / Ethernet │
└─────────────────────────────────────────────┘
这个架构图看起来简单,但每个模块之间的「隔离」和「地线处理」才是关键。我建议:
- 主控层和IO层之间用光耦或磁耦隔离
- 电源层的地线要分「数字地」和「模拟地」,最后单点连接
- 通信层的接口要加TVS管和共模扼流圈,防雷击和浪涌
重要提醒: 别把24V电源和3.3V电源的地线直接连在一起。我见过有人这么干,结果24V侧的继电器一动作,3.3V侧的MCU就死机。老老实实用隔离电源模块,多花几块钱,省心好几年。
2.5 我的最终推荐方案
如果你现在要开始做第一个远程IO控制器,我建议这样配:
- 主控: ESP32-WROOM-32(带PCB天线,省去天线设计)
- 数字量输入: 8路光耦隔离 + 74HC165(SPI接口,节省GPIO)
- 数字量输出: 8路ULN2803驱动继电器(带续流二极管)
- 模拟量输入: 4路ADS1115(I2C接口,16位精度)
- 电源: TPS5430 + AMS1117 + B0505S
- 通信: ESP32自带Wi-Fi,外加一个MAX3485做RS485备用
这套方案成本控制在80元以内,性能足够覆盖80%的远程IO应用场景。下一章我会带你画原理图,咱们把每个模块的引脚连接讲清楚。
最后说一句: 硬件选型没有「最好」,只有「最合适」。别盲目追求高参数,够用、稳定、好买,这三点比什么都重要。嗯,今天就聊到这儿,下节课见。