第三章 系统架构设计:主控芯片选型、模块划分与通信协议
好,咱们进入第三章。这一章我打算聊聊系统架构设计。说白了,就是决定「用什么脑子、带什么器官、怎么说话」。
很多新手一上来就画原理图,结果做到一半发现芯片管脚不够用,或者蓝牙连不上。嗯,我当年也干过这种事。后来学乖了——先想清楚架构,再动手。
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 个模块。你想想看,就像一个人——有大脑、有心脏、有手脚、有嘴巴耳朵、还有皮肤。
- 主控模块:就是芯片本身,负责逻辑运算、时序控制、通信管理。
- 电源模块:把电池或 USB 的电压,转换成各模块需要的电压。理疗仪常用 3.3V(主控)、5V(驱动)、12V(升压输出)。
- 驱动模块:把主控的 PWM 信号放大,变成能刺激人体的电流或电压。这里常用 H 桥电路或专用驱动芯片。
- 人机交互模块:按键、旋钮、OLED 屏幕、蜂鸣器。用户怎么调参数、怎么看状态,全靠它。
- 通信模块:蓝牙或 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 实战建议:从选型到落地的三步走
好,理论讲完了。我直接给你一个可执行的步骤:
- 第一步:列需求清单。把理疗仪的功能全部写下来。比如:几路输出?频率范围?要不要蓝牙?电池供电还是插电?屏幕多大?
- 第二步:选主控。根据需求,在 STM32 和 ESP32 之间选。如果拿不准,我建议先选 STM32F103,资料多、坑少。
- 第三步:画模块框图。把每个模块的接口、供电、通信协议标清楚。这一步花 1 小时,后面省 10 小时。
我的经验:选型时,多留 20% 的余量。比如你需要 4 路 PWM,选一个有 6 路定时器的芯片。为什么?因为后期加功能时,你不会被管脚限制住。我吃过这个亏——一个项目做到一半,发现 PWM 不够用,只能换芯片,重新画板子,浪费了两周。
嗯,这一章就到这里。下一章我们开始讲硬件电路设计,从电源模块入手。到时候我会分享一些「让电池多用半小时」的小技巧。