第3章:微控制器选型指南——STM32、ESP32、Arduino、Teensy对比

做ROS2与微控制器集成,第一步就是选芯片。这事儿我见过太多人栽跟头了——项目做了一半发现Flash不够,或者外设接口对不上,最后只能推倒重来。今天咱们就把市面上最主流的四款MCU掰开揉碎聊一聊。

3.1 为什么选型这么重要?

说白了,微控制器就是机器人的"小脑"。它负责执行底层控制、读取传感器、驱动电机,然后通过串口或CAN总线跟主控(比如树莓派或Jetson)通信。选错了,后面全是坑。

我个人习惯,选型前先问自己三个问题:

  • 性能够不够?——控制频率、计算复杂度、实时性要求
  • 外设齐不齐?——需要多少路PWM?几个ADC?要不要CAN?
  • 生态熟不熟?——社区资源多不多?有没有现成的ROS2库?

嗯,成本当然也重要,但别为了省几块钱把项目搞砸了。

3.2 四款主流MCU横向对比

先上一张硬核对比表,后面咱们再逐个细聊。

参数 STM32 (F4/H7) ESP32 Arduino (Mega/Zero) Teensy 4.1
核心架构 Cortex-M4/M7 Xtensa LX6双核 AVR / Cortex-M0+ Cortex-M7 (600MHz)
主频 168~480MHz 240MHz 16~48MHz 600MHz
Flash 512KB~2MB 4~16MB 32~256KB 2MB + 8MB PSRAM
WiFi/蓝牙 ❌ 需外挂 ✅ 原生 ❌ 需外挂 ❌ 需外挂
CAN接口 ✅ 1~2路 ❌ 需外扩 ❌ 需外扩 ✅ 2路
PWM通道 16~30路 16路 6~14路 32路
ADC精度 12位 12位 10位 12位
开发环境 STM32CubeIDE Arduino IDE / ESP-IDF Arduino IDE Arduino IDE / PlatformIO
单价(参考) ¥15~60 ¥10~25 ¥30~80 ¥80~150

3.3 逐个拆解:谁适合什么场景?

3.3.1 STM32——工业级老大哥

STM32是我用得最多的系列,没有之一。为什么?因为稳定。我在一个AGV项目里用过STM32F407,连续跑了三个月没重启过一次。它的CAN接口和定时器资源特别丰富,做电机控制、底盘驱动简直是绝配。

优点:

  • 外设库(HAL/LL)成熟,文档齐全
  • 实时性好,中断响应快
  • 工业级温度范围,抗干扰能力强

缺点:

  • 没有WiFi/蓝牙,需要外挂模块
  • 开发环境相对复杂,新手容易卡在配置上
我的建议:如果你做的是轮式机器人、机械臂控制、或者任何需要高可靠性的场景,STM32是首选。特别是F4系列,性价比极高。

3.3.2 ESP32——无线小能手

ESP32这几年火得不行。为什么?因为它自带WiFi和蓝牙,而且便宜到离谱。我记得有一次做远程监控的小车,用ESP32直接连ROS2 over WiFi,省去了串口线的麻烦,调试起来特别爽。

优点:

  • 原生无线通信,适合IoT和远程控制
  • 双核处理器,可以一个核跑通信,一个核跑控制
  • 社区资源爆炸多,Arduino生态兼容

缺点:

  • 没有CAN接口,做工业总线需要外扩
  • ADC线性度一般,做高精度采集要小心
避坑指南:我曾经在ESP32上做电池电压采集,发现ADC读数跳得厉害。后来查资料才知道,ESP32的ADC在WiFi开启时会有干扰。解决办法是用外部ADC芯片,或者做软件滤波。

3.3.3 Arduino——入门神器

Arduino,说白了就是"玩具级"的MCU。但别小看它,很多原型验证阶段,Arduino是最快的选择。我刚开始学ROS2时,就是用Arduino Mega接了几个超声波传感器,配合rosserial跑通了第一个节点。

优点:

  • 上手极快,5分钟就能点亮LED
  • 扩展板(Shield)丰富,传感器即插即用
  • 社区教程最多,遇到问题基本都能搜到答案

缺点:

  • 性能弱,主频低,内存小
  • 没有原生CAN、WiFi,做复杂项目很吃力
我的建议:Arduino适合做教学、原型验证、或者控制逻辑非常简单的项目。但如果你要做量产产品,还是趁早换STM32或ESP32。

3.3.4 Teensy——性能怪兽

Teensy 4.1,600MHz的Cortex-M7,你敢信?这玩意儿跑起浮点运算来,比一些低端ARM Linux还快。我有个朋友用它做四轴飞行器的飞控,PID控制频率跑到8kHz,稳得一批。

优点:

  • 性能天花板,适合高频率控制
  • Arduino生态兼容,但性能碾压
  • PSRAM大,可以跑复杂算法

缺点:

  • 贵,一块板子能买三块ESP32
  • 没有无线功能,需要外挂
  • 社区相对小众,遇到问题可能得自己啃

3.4 选型决策树

你想想看,如果现在要你选,你会怎么挑?我一般按这个思路来:

  1. 需要无线通信吗? → 是 → ESP32
  2. 需要CAN总线吗? → 是 → STM32 或 Teensy
  3. 控制频率超过1kHz? → 是 → Teensy 或 STM32H7
  4. 预算紧张? → 是 → ESP32 或 STM32F103
  5. 纯学习/原型验证? → 是 → Arduino
核心结论:没有最好的MCU,只有最合适的。我的经验是——
· 工业控制 → STM32
· 无线IoT → ESP32
· 快速原型 → Arduino
· 极致性能 → Teensy

3.5 与ROS2集成的注意事项

最后聊几句跟ROS2相关的。不管你选哪款MCU,跟ROS2通信通常就两种方式:

  • 串口通信(rosserial / micro-ROS)——适合STM32、Arduino、Teensy
  • WiFi/UDP通信(micro-ROS over WiFi)——适合ESP32

我个人更推荐micro-ROS,因为它原生支持ROS2的消息类型和QoS,比rosserial更现代。但要注意,micro-ROS对MCU的RAM有一定要求,至少需要32KB以上。嗯,Arduino Mega的8KB RAM就别想了,老老实实用rosserial吧。

好了,这一章就聊到这儿。下一章咱们会手把手搭建micro-ROS开发环境,到时候拿STM32和ESP32各跑一遍,你就能感受到区别了。