第二章 硬件选型与架构设计:主控芯片选型、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)。

选型时我主要看三个参数:

  1. 隔离方式:光耦隔离还是继电器隔离?工业现场强烈建议光耦隔离,抗干扰能力强。
  2. 驱动能力:输出模块能带多大负载?继电器输出一般能带10A/250VAC,晶体管输出只能带500mA。
  3. 响应速度:高速计数场景需要光电耦合器响应时间在微秒级。

常用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应用场景。下一章我会带你画原理图,咱们把每个模块的引脚连接讲清楚。

最后说一句: 硬件选型没有「最好」,只有「最合适」。别盲目追求高参数,够用、稳定、好买,这三点比什么都重要。嗯,今天就聊到这儿,下节课见。