03-电子与通信-微控制器选型

作者:姚博文 · 2026-09-15

微控制器选型(MCU/SoC 选型与车端计算架构)

定位:为智能小车选"大脑"——MCU 与 SoC 怎么选、怎么分工、怎么通信 | 适用:智能小车/移动机器人开发

1\. 概述

1.1 这篇解决什么问题

智能小车至少需要一个计算单元来跑代码,但"一个"往往不够:

· 电机控制、编码器读数、IMU 采集、急停监测这些任务**必须硬实时**(几十到几百微秒级抖动都不能忍),适合跑在 MCU(微控制器,Microcontroller Unit)上;

· SLAM、路径规划、视觉感知、大模型推理这些任务**算力需求高、允许几十毫秒抖动**,适合跑在 SoC(片上系统,System on Chip,通常指带 Linux 的嵌入式计算机)上。

本文回答四个问题:

1. 常见平台(STM32 系列 / ESP32 系列 / 树莓派 / Jetson)参数与价格对比,怎么选;

2. 车端计算的三种典型架构(MCU 单板 / MCU+SoC / 双 MCU)各自适用什么场景;

3. MCU 与上位机的分工原则(哪些任务放哪边、频率各多少);

4. 两者之间的通信方式(UART/CAN/Ethernet)与一套可直接落地的帧协议(完整字节定义 + Python/C 示例代码)。

1.2 在自主导航链路中的位置

本文聚焦 **MCU 与 SoC 的选型和接口**,控制算法本身见 `05-控制系统/`。

2\. 基本原理

2.1 MCU 与 SoC 的本质区别

| 维度 | MCU | SoC(Linux 嵌入式) |

| --- | --- | --- |

| 典型代表 | STM32、ESP32 | 树莓派、Jetson、x86 工控机 |

| 启动时间 | 毫秒级 | 几秒到几十秒 |

| 内存 | 几十 KB ~ 几 MB SRAM | 2 GB ~ 16 GB DDR |

| 实时性 | 裸机/RTOS,任务抖动 < 10 µs | Linux 非实时内核,抖动可达数 ms |

| 生态 | HAL/CubeMX,C 语言为主 | Python/C++、ROS2、CUDA |

| 单核主频 | 72 MHz ~ 480 MHz(专用核) | 1.5 ~ 2.4 GHz(通用核,多核) |

| 断电后 | 上电即跑,无需文件系统 | 依赖 Flash 中的 rootfs |

💡 判断任务放哪边的第一原则:**这个任务挂了车会不会立刻撞/翻?** 会 → MCU;不会 → SoC。
第二原则:**这个任务需要 Linux/Python/深度学习生态吗?** 需要 → SoC;不需要 → MCU。

2.2 控制环频率与实时性

车端典型任务的频率需求(典型参考值):

| 任务 | 频率 | 归属 | 说明 |

| --- | --- | --- | --- |

| 电机电流环 | 10 kHz+ | 驱动芯片内部 | 不在 MCU 上 |

| 电机速度环 | 100 ~ 1000 Hz | MCU | 最硬的实时任务 |

| 编码器读数/里程计 | 50 ~ 100 Hz | MCU | 定时器中断/编码器外设 |

| IMU 采样 | 100 ~ 400 Hz | MCU | SPI/I2C 连续读 |

| 状态监测(倾角/电压/急停) | 100 Hz+ | MCU | 独立于控制环 |

| cmd_vel 插值 | 100 Hz | MCU | 上位机 10~20 Hz 下发,MCU 内插 |

| 里程计/IMU 话题发布 | 50 ~ 100 Hz | SoC | 经协议从 MCU 收 |

| 导航/规划 | 1 ~ 10 Hz | SoC | 软实时 |

| SLAM | 10 ~ 30 Hz | SoC | 激光 SLAM |

| 感知/视觉 | 5 ~