第二章 主控芯片选型与最小系统设计
做喷洒系统,选主控芯片是第一步。这一步走对了,后面省心不少。走错了?嗯,我见过不少项目因为芯片选型失误,最后不得不推倒重来。
今天咱们聊聊 STM32 和 ESP32 这两款主流芯片。我个人习惯是:先看需求,再选芯片,而不是反过来。
2.1 STM32 vs ESP32:选型对比
先放一张对比表,大家心里有个底:
| 对比项 | STM32F103(经典款) | ESP32(WiFi款) |
|---|---|---|
| 主频 | 72MHz | 240MHz(双核) |
| RAM | 20KB~64KB | 520KB |
| Flash | 64KB~512KB | 4MB~16MB |
| 无线功能 | 无(需外挂) | WiFi + BLE 内置 |
| ADC精度 | 12位 | 12位 |
| 定时器 | 高级定时器(适合PWM) | 通用定时器 |
| 功耗 | 低(几十mA) | 较高(80mA+) |
| 价格 | 5~15元 | 10~20元 |
| 开发难度 | 中等 | 较低(Arduino生态) |
看到这张表,你可能会问:那到底选哪个?
我的建议是:看你的喷洒系统要不要联网。
- 纯本地控制(比如遥控器+飞控):STM32 更稳。它的定时器精度高,做 PWM 控制无刷电机很顺手。我在项目中遇到过用 STM32 驱动 8 路独立喷洒阀门的场景,定时器资源刚好够用。
- 需要远程监控(比如手机 APP 调参数):ESP32 更省事。WiFi 和蓝牙都集成好了,不用额外加模块。我记得有个客户要求实时查看药箱液位,用 ESP32 直接连 MQTT 服务器,两天就搞定了。
核心结论:
- STM32:适合对实时性、稳定性要求高的场景
- ESP32:适合需要无线通信、快速原型验证的场景
2.2 最小系统电路设计
选好芯片,接下来就是搭最小系统。说白了,就是让芯片能跑起来的最简电路。我把它拆成四个部分来讲:电源、时钟、复位、调试接口。
2.2.1 电源电路
芯片要吃饭,电源就是它的饭。STM32 和 ESP32 的工作电压都是 3.3V,但供电方式有讲究。
我个人习惯用 AMS1117-3.3 这个 LDO。便宜、稳定、好买。电路很简单:
// 电源电路示意(STM32为例)
// 输入:5V(来自电池或USB)
// 输出:3.3V
AMS1117-3.3 引脚连接:
Vin → 5V(加10uF+0.1uF滤波电容)
Vout → 3.3V(加10uF+0.1uF滤波电容)
GND → 地
避坑指南:
我曾经在 ESP32 上直接用了 3.3V 供电,结果 WiFi 一开就重启。后来发现是瞬间电流不够。ESP32 的峰值电流能到 500mA,LDO 选型时一定要留余量。我现在习惯用 AMS1117-3.3 输出 800mA 的版本,稳得很。
2.2.2 时钟电路
时钟是芯片的心跳。没有它,芯片就是个死物。
STM32 和 ESP32 都支持内部 RC 振荡器和外部晶振。我的建议是:能用外部晶振就别用内部的。
- STM32:常用 8MHz 外部晶振,内部 PLL 倍频到 72MHz。我习惯在晶振两端各加一个 22pF 的负载电容,别问为什么,这是经验值。
- ESP32:常用 40MHz 外部晶振。注意!ESP32 对晶振精度要求高,别用便宜的晶振,否则 WiFi 连不上。我踩过这个坑,后来换了 ±10ppm 的晶振才解决。
// 晶振电路(STM32为例)
// 8MHz 晶振 + 两个 22pF 电容
OSC_IN ──┬── 晶振(8MHz) ──┬── OSC_OUT
│ │
22pF 22pF
│ │
GND GND
2.2.3 复位电路
复位电路,说白了就是给芯片一个「重新来过」的机会。
最简单的复位电路:一个 10kΩ 上拉电阻 + 一个按键 + 一个 0.1μF 电容。按下按键,复位引脚拉低,芯片复位。
注意:
ESP32 的 EN 引脚(使能引脚)不能直接接 3.3V!我见过有人直接短接,结果芯片上电后无法正常启动。正确的做法是:EN 引脚通过 10kΩ 电阻上拉到 3.3V,同时加一个 0.1μF 电容到地。这样上电时有个延迟,芯片才能稳定启动。
2.2.4 调试接口
调试接口是工程师的「眼睛」。没有它,你只能靠猜。
- STM32:用 SWD 接口(SWDIO + SWCLK),只需要两根线。我习惯把 SWO 也引出来,方便调试时看 printf 输出。
- ESP32:用 UART 接口(TX + RX),配合自动下载电路。注意!ESP32 的 GPIO0 在下载时要拉低,否则进不了下载模式。
// STM32 SWD 调试接口
// 只需要 4 个引脚:
// 1. SWDIO(PA13)
// 2. SWCLK(PA14)
// 3. 3.3V
// 4. GND
// ESP32 下载电路(自动下载)
// 用 CH340G 串口芯片 + DTR/RTS 控制
// 原理:DTR 控制 EN,RTS 控制 GPIO0
我的习惯:
不管用哪个芯片,我都会在 PCB 上预留一个 4 针的调试接口。哪怕量产时不用,开发阶段也省不了。我曾经因为没留调试接口,板子焊好后发现程序烧不进去,只能飞线,那叫一个痛苦。
2.3 完整的最小系统电路图
把上面四个部分拼起来,就是一个完整的最小系统。我画个简图示意:
// STM32 最小系统(简化版)
// ┌─────────────────────────────────────┐
// │ 电源:5V → AMS1117 → 3.3V │
// │ 时钟:8MHz 晶振 + 22pF*2 │
// │ 复位:10kΩ上拉 + 按键 + 0.1μF │
// │ 调试:SWDIO + SWCLK + 3.3V + GND │
// └─────────────────────────────────────┘
嗯,这里要注意:去耦电容不能省。每个电源引脚旁边都要放一个 0.1μF 的电容,离引脚越近越好。我见过有人为了省成本,一个电容都不放,结果芯片工作不稳定,时好时坏。
2.4 选型决策树
最后,我给大家一个简单的决策树,帮你快速选型:
- 需要无线通信吗?
- 是 → 选 ESP32
- 否 → 看第 2 步
- 需要高精度 PWM 吗?
- 是 → 选 STM32
- 否 → 看第 3 步
- 成本敏感吗?
- 是 → 选 STM32(便宜)
- 否 → 选 ESP32(功能多)
说白了,没有最好的芯片,只有最合适的。我见过有人用 STM32 做 WiFi 网关,结果外挂 ESP8266 模块,绕了一大圈。也见过有人用 ESP32 做飞控,结果实时性不够,炸机了。
选型时多想想你的应用场景,别盲目跟风。
好了,这一章就到这里。下一章我们聊聊 传感器接口与数据采集,包括流量计、液位传感器、压力传感器的选型与电路设计。到时候我会分享一些我在实际项目中踩过的坑,保证让你少走弯路。