跳转至

嵌入式系统

概述

嵌入式系统是机器人硬件的核心载体。从微控制器(MCU)到高性能单板计算机(SBC),不同的嵌入式平台承担着从底层电机控制到高层AI推理的各种任务。

MCU vs SBC vs SoC

概念区分

类型 全称 特点 代表
MCU Microcontroller Unit 集成CPU+Flash+RAM+外设的单芯片 STM32、ESP32
SBC Single Board Computer 完整的计算机系统(板级) Raspberry Pi、Jetson
SoC System on Chip 集成CPU+GPU+NPU+外设的芯片 Tegra Orin、BCM2712

详细对比

特性 MCU (STM32H7) SBC (RPi 5) SBC (Jetson Orin NX)
CPU Cortex-M7 @480MHz Cortex-A76 @2.4GHz x4 Cortex-A78AE @2.0GHz x8
RAM 1MB SRAM 4/8GB LPDDR4X 8/16GB LPDDR5
存储 2MB Flash microSD/NVMe eMMC/NVMe
GPU VideoCore VII Ampere 2048核
AI算力 无专用 100 TOPS (INT8)
操作系统 裸机/RTOS Linux Linux (JetPack)
功耗 <1W 5-12W 10-25W
实时性 确定性延迟 <1μs 非实时 ~ms级 非实时 ~ms级
启动时间 <100ms ~20s ~30s
价格 $5-15 $60-80 $400-600
典型任务 电机控制、传感器采集 轻量级视觉、教学 AI推理、自主导航

STM32(ARM Cortex-M)

STM32系列概览

系列 核心 频率 Flash RAM 特色 价格
STM32F1 Cortex-M3 72MHz 128KB 20KB 经典入门 $2
STM32F4 Cortex-M4 168MHz 1MB 192KB DSP+FPU $5
STM32H7 Cortex-M7 480MHz 2MB 1MB 最高性能MCU $10
STM32G4 Cortex-M4 170MHz 512KB 128KB 电机控制专用 $4
STM32L4 Cortex-M4 80MHz 1MB 320KB 超低功耗 $4

STM32H7关键外设

STM32H750VBT6 外设资源:
├── 通信接口
│   ├── UART x8 (含LPUART)
│   ├── SPI x6
│   ├── I2C x4
│   ├── CAN FD x2
│   ├── USB OTG HS x1
│   └── Ethernet 10/100 x1
├── 模拟外设
│   ├── ADC x3 (16位, 3.6MSPS)
│   ├── DAC x2 (12位)
│   └── COMP x2
├── 定时器
│   ├── 高级定时器 x2 (电机控制PWM)
│   ├── 通用定时器 x12
│   └── 基本定时器 x2
├── DMA
│   ├── DMA x2 (各8通道)
│   └── MDMA x1 (主DMA)
└── 其他
    ├── RNG (随机数生成)
    ├── CRC
    └── DCMI (数字相机接口)

HAL库编程示例

// STM32 HAL: 初始化PWM输出(电机控制)
void Motor_PWM_Init(void) {
    TIM_HandleTypeDef htim1;
    TIM_OC_InitTypeDef sConfigOC;

    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 167;        // 168MHz / 168 = 1MHz
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 999;           // 1MHz / 1000 = 1kHz PWM
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&htim1);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 500;             // 50% 占空比
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}

// 读取编码器(正交解码)
void Encoder_Init(void) {
    TIM_HandleTypeDef htim3;
    TIM_Encoder_InitTypeDef sConfig;

    htim3.Instance = TIM3;
    htim3.Init.Prescaler = 0;
    htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim3.Init.Period = 65535;

    sConfig.EncoderMode = TIM_ENCODERMODE_TI12;  // 4倍频
    sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
    sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
    HAL_TIM_Encoder_Init(&htim3, &sConfig);
    HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
}

int32_t get_encoder_count(void) {
    return (int16_t)__HAL_TIM_GET_COUNTER(&htim3);
}

开发工具链

工具 用途 说明
STM32CubeMX 图形化配置 引脚分配、时钟树、外设初始化
STM32CubeIDE IDE 基于Eclipse,集成编译调试
Keil MDK IDE 行业标准(收费)
PlatformIO 跨平台开发 VSCode插件,支持多种MCU
OpenOCD + GDB 调试 开源调试工具
ST-Link V3 调试器 SWD/JTAG接口

ESP32

ESP32系列对比

型号 CPU 频率 RAM WiFi BLE 特色
ESP32 Xtensa LX6 x2 240MHz 520KB 802.11 b/g/n 4.2 经典双核
ESP32-S3 Xtensa LX7 x2 240MHz 512KB 802.11 b/g/n 5.0 AI加速
ESP32-C3 RISC-V 160MHz 400KB 802.11 b/g/n 5.0 低成本RISC-V
ESP32-C6 RISC-V 160MHz 512KB WiFi 6 5.3 WiFi 6

ESP32在机器人中的应用

ESP32典型用途:
├── WiFi遥控器 (WebSocket/MQTT)
├── BLE传感器节点
├── 低成本运动控制器
├── IoT网关 (传感器数据上传)
└── 辅助处理器 (与Jetson通信)
# MicroPython on ESP32: 简单的WiFi遥控
import network
import socket
from machine import Pin, PWM

# 连接WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('RobotAP', 'password')

# PWM控制电机
motor_pwm = PWM(Pin(25), freq=1000, duty=0)

# 简单HTTP服务器接收控制命令
s = socket.socket()
s.bind(('', 80))
s.listen(1)

while True:
    conn, addr = s.accept()
    request = conn.recv(1024).decode()
    if '/forward' in request:
        motor_pwm.duty(512)  # 50%占空比
    elif '/stop' in request:
        motor_pwm.duty(0)
    conn.close()

Raspberry Pi 5

规格

特性 参数
SoC BCM2712
CPU Cortex-A76 x4 @2.4GHz
GPU VideoCore VII @800MHz
内存 4/8GB LPDDR4X-4267
存储 microSD / NVMe (via HAT)
视频输出 2x micro-HDMI (4Kp60)
相机 2x CSI-2 (4 lanes)
GPIO 40-pin Header
USB 2x USB 3.0 + 2x USB 2.0
网络 千兆以太网 + WiFi 5 + BLE 5.0
PCIe 1x PCIe 2.0 (via FPC)
功耗 5V/5A (27W max)
价格 $60 (4GB) / $80 (8GB)

适合的机器人场景

  • 教学和原型开发
  • 轻量级视觉处理(OpenCV)
  • ROS2学习平台
  • 不需要GPU加速AI的项目

Raspberry Pi的局限

  • 无专用AI加速器(纯CPU推理很慢)
  • 内存与GPU共享
  • 非实时系统(不适合精确电机控制)
  • 散热受限(需要主动散热)

NVIDIA Jetson Orin系列

产品线对比

特性 Orin Nano Orin NX 8GB Orin NX 16GB AGX Orin 32GB AGX Orin 64GB
CPU核心 6x A78AE 6x A78AE 8x A78AE 12x A78AE 12x A78AE
GPU核心 1024 CUDA 1024 CUDA 2048 CUDA 2048 CUDA 2048 CUDA
Tensor核心 32 32 64 64 64
DLA 1 1 2 2 2
AI算力(INT8) 40 TOPS 70 TOPS 100 TOPS 200 TOPS 275 TOPS
内存 8GB 8GB 16GB 32GB 64GB
内存带宽 68 GB/s 68 GB/s 102 GB/s 204 GB/s 204 GB/s
功耗 7-15W 10-20W 10-25W 15-40W 15-60W
价格 ~$200 ~$400 ~$600 ~$1000 ~$1600

JetPack软件栈

JetPack SDK:
├── Linux for Tegra (L4T)
│   ├── Ubuntu 22.04
│   ├── NVIDIA驱动
│   └── BSP (Board Support Package)
├── CUDA Toolkit 12.x
├── cuDNN 8.x
├── TensorRT 8.x
├── VPI (Vision Programming Interface)
├── Multimedia API
│   ├── libargus (CSI相机)
│   ├── GStreamer + nvvidconv
│   └── V4L2
├── DeepStream SDK
└── Isaac ROS

选型指南

graph TD
    A[机器人AI需求] --> B{目标检测精度要求?}
    B -->|YOLOv8n够用| C{预算?}
    B -->|需要大模型| D{需要多模型并行?}
    C -->|<$300| E[Orin Nano 8GB]
    C -->|<$600| F[Orin NX 8GB]
    D -->|否| G[Orin NX 16GB]
    D -->|是| H[AGX Orin 32GB]

    style E fill:#c8e6c9
    style F fill:#a5d6a7
    style G fill:#81c784
    style H fill:#66bb6a

RTOS vs Linux

RTOS(实时操作系统)

RTOS 特点 许可 典型平台
FreeRTOS 轻量、社区大 MIT STM32、ESP32
Zephyr 现代、模块化 Apache 2.0 nRF、STM32
RT-Thread 国产、组件丰富 Apache 2.0 STM32、RISC-V
ChibiOS 超小内核 GPL/商业 STM32

RTOS关键概念

// FreeRTOS: 创建任务
void motor_control_task(void *pvParameters) {
    TickType_t xLastWakeTime = xTaskGetTickCount();
    const TickType_t xPeriod = pdMS_TO_TICKS(1);  // 1ms周期

    while (1) {
        // 读取编码器
        int32_t position = get_encoder_count();

        // PID计算
        float output = pid_compute(target, position);

        // 设置PWM
        set_motor_pwm(output);

        // 精确延时到下一个周期
        vTaskDelayUntil(&xLastWakeTime, xPeriod);
    }
}

// 创建任务(最高优先级)
xTaskCreate(motor_control_task, "MotorCtrl", 
            256, NULL, configMAX_PRIORITIES-1, NULL);

RTOS vs Linux对比

特性 RTOS (FreeRTOS) Linux
调度延迟 <10μs(确定性) ~ms级(不确定)
内存占用 ~10KB ~200MB
启动时间 <100ms ~10-30s
文件系统 可选(FatFS) 完整(ext4等)
网络栈 可选(lwIP) 完整(TCP/IP)
驱动支持 有限 极丰富
包管理 apt/pip
GUI 无/LVGL 完整桌面
AI框架 PyTorch/TensorFlow

混合架构

机器人系统通常采用MCU + SBC混合架构

┌────────────────┐     UART/CAN     ┌────────────────┐
│  Jetson Orin   │◄──────────────►│   STM32H7      │
│  (Linux+ROS2)  │                  │  (FreeRTOS)    │
│                │                  │                │
│  - AI推理      │                  │  - 电机PID控制  │
│  - 路径规划    │                  │  - 编码器读取   │
│  - 视觉感知    │                  │  - IMU数据采集  │
│  - SLAM        │                  │  - PWM输出      │
│  - 通信        │                  │  - 急停处理     │
└────────────────┘                  └────────────────┘

参见:串口与I2C/SPI 了解MCU与SBC之间的通信接口。

开发流程

嵌入式开发标准流程

graph LR
    A[需求分析] --> B[平台选型]
    B --> C[原理图设计]
    C --> D[PCB布局]
    D --> E[固件开发]
    E --> F[硬件调试]
    F --> G[系统测试]
    G --> H[量产]

调试工具

工具 用途 接口
SWD/JTAG调试器 单步调试、断点 ST-Link / J-Link
逻辑分析仪 协议分析(SPI/I2C/UART) Saleae / DSLogic
示波器 信号波形观察 Rigol / Siglent
串口终端 打印调试信息 minicom / PuTTY
GDB 远程调试 OpenOCD + GDB

小结

  1. MCU用于实时控制,SBC用于AI和复杂计算
  2. STM32H7是机器人MCU的首选(高性能、丰富外设)
  3. ESP32适合WiFi/BLE通信和低成本应用
  4. Jetson Orin系列覆盖40-275 TOPS的AI算力需求
  5. RTOS保证确定性延迟,Linux提供丰富生态
  6. MCU + SBC混合架构是最佳实践

参考资料


评论 #