第三章 系统架构设计:主控芯片选型、模块划分与通信协议

好,咱们进入第三章。这一章我打算聊聊系统架构设计。说白了,就是决定「用什么脑子、带什么器官、怎么说话」。

很多新手一上来就画原理图,结果做到一半发现芯片管脚不够用,或者蓝牙连不上。嗯,我当年也干过这种事。后来学乖了——先想清楚架构,再动手。

3.1 主控芯片选型:STM32 vs ESP32

理疗仪的主控芯片,我建议你在 STM32 和 ESP32 之间二选一。这两款我都用过,各有各的脾气。

核心结论:

  • STM32:适合对实时性要求高、需要多路 PWM 精确控制的场景。比如中频理疗仪、电刺激仪。
  • ESP32:适合需要 Wi-Fi/蓝牙联网、OTA 升级、数据上云的场景。比如智能理疗仪、远程康复设备。

我个人习惯这样选:如果产品需要「本地闭环控制」,选 STM32;如果需要「云端交互」,选 ESP32。当然,也有两者结合的做法——STM32 做控制,ESP32 做通信,但成本会高一些。

来,看个对比表,更直观:

对比项 STM32F103(主流款) ESP32(经典款)
主频 72 MHz 240 MHz(双核)
PWM 定时器 4 个通用定时器,支持多通道 2 个 MCPWM,精度略低
ADC 精度 12 位,1μs 转换时间 12 位,但噪声稍大
无线通信 需外挂模块 内置 Wi-Fi + BLE
开发难度 中等,HAL 库成熟 较低,Arduino 生态丰富
成本(批量) 约 8-15 元 约 12-20 元

我的经验:如果你做的是低频理疗仪(比如 TENS),STM32F103 完全够用。我做过一个项目,用 STM32 同时控制 4 路独立 PWM,每路频率 1-250Hz 可调,占空比 10%-90%,跑起来稳得很。

避坑指南:我曾经在一个项目中选了 ESP32 做纯控制,结果发现它的 PWM 分辨率在低频段不够细腻。后来加了外部 PWM 驱动芯片才解决。所以,如果你对 PWM 精度要求很高,优先考虑 STM32。

3.2 模块划分:理疗仪的「五脏六腑」

理疗仪的系统,我习惯分成 5 个模块。你想想看,就像一个人——有大脑、有心脏、有手脚、有嘴巴耳朵、还有皮肤。

  1. 主控模块:就是芯片本身,负责逻辑运算、时序控制、通信管理。
  2. 电源模块:把电池或 USB 的电压,转换成各模块需要的电压。理疗仪常用 3.3V(主控)、5V(驱动)、12V(升压输出)。
  3. 驱动模块:把主控的 PWM 信号放大,变成能刺激人体的电流或电压。这里常用 H 桥电路或专用驱动芯片。
  4. 人机交互模块:按键、旋钮、OLED 屏幕、蜂鸣器。用户怎么调参数、怎么看状态,全靠它。
  5. 通信模块:蓝牙或 Wi-Fi,用于连接手机 App 或云端。ESP32 自带,STM32 需要外挂。

我画过一张模块关系图,大概是这样:

电源模块
   │
   ▼
主控模块 ←→ 人机交互模块(按键/屏幕)
   │
   ├──→ 驱动模块 → 电极输出
   │
   └──→ 通信模块 → 手机 App

每个模块之间,用明确的接口连接。比如主控和驱动之间,就是几根 GPIO 线——PWM、使能、方向。这样设计的好处是:哪个模块出问题,单独换掉就行,不用动整个板子。

我的习惯:先画模块框图,再画原理图。模块框图用 Visio 或 Draw.io 都行,关键是理清信号流向。我一般会标出每个模块的供电电压、最大电流、通信速率,这样后面选型时心里有数。

3.3 通信协议选择:让模块「说同一种语言」

模块之间怎么通信?说白了,就是选协议。理疗仪里常用的就三种:I2C、SPI、UART。另外,如果涉及无线,还有 BLE 和 Wi-Fi。

我直接说结论:

  • I2C:适合接传感器、OLED 屏幕、EEPROM。两根线(SCL、SDA),速度 100-400kHz。优点是管脚少,缺点是速度慢、不适合大数据量。
  • SPI:适合接高速 ADC、DAC、Flash 存储。四根线(MOSI、MISO、SCK、CS),速度可达几十 MHz。我一般用它来传输波形数据。
  • UART:适合接蓝牙模块、GPS 模块、调试串口。两根线(TX、RX),异步通信。简单可靠,但只能点对点。
  • BLE(蓝牙低功耗):适合手机 App 控制。ESP32 内置,STM32 需外挂模块(如 HC-08、CC2541)。
  • Wi-Fi:适合数据上云、OTA 升级。ESP32 的强项。

来,看个实际案例。我做过一个理疗仪,内部通信是这样分配的:

主控(STM32F103)
  ├── I2C1 → OLED 屏幕(0.96寸,128x64)
  ├── I2C2 → 温度传感器(LM75)
  ├── SPI1 → DAC 芯片(MCP4921,输出波形)
  ├── UART1 → 蓝牙模块(HC-08,连接手机)
  └── GPIO  → 按键、LED、蜂鸣器

你看,每个外设都用最合适的协议。OLED 和传感器用 I2C,因为数据量小、管脚省;DAC 用 SPI,因为需要高速更新波形数据;蓝牙用 UART,因为模块本身只支持串口。

避坑指南:我曾经在一个项目里,把所有外设都挂到 I2C 总线上。结果屏幕刷新时,传感器数据就丢了。为什么?I2C 是半双工,多个设备抢总线。后来我把屏幕改到 SPI,问题解决。所以,记住:I2C 适合低速、少量设备;SPI 适合高速、大数据量。

3.4 实战建议:从选型到落地的三步走

好,理论讲完了。我直接给你一个可执行的步骤:

  1. 第一步:列需求清单。把理疗仪的功能全部写下来。比如:几路输出?频率范围?要不要蓝牙?电池供电还是插电?屏幕多大?
  2. 第二步:选主控。根据需求,在 STM32 和 ESP32 之间选。如果拿不准,我建议先选 STM32F103,资料多、坑少。
  3. 第三步:画模块框图。把每个模块的接口、供电、通信协议标清楚。这一步花 1 小时,后面省 10 小时。

我的经验:选型时,多留 20% 的余量。比如你需要 4 路 PWM,选一个有 6 路定时器的芯片。为什么?因为后期加功能时,你不会被管脚限制住。我吃过这个亏——一个项目做到一半,发现 PWM 不够用,只能换芯片,重新画板子,浪费了两周。

嗯,这一章就到这里。下一章我们开始讲硬件电路设计,从电源模块入手。到时候我会分享一些「让电池多用半小时」的小技巧。