第2章 嵌入式基础:ARM Cortex-M架构、STM32系列选型、最小系统电路设计

做飞控这么多年,我始终觉得嵌入式基础是决定项目成败的根基。你想想看,飞控系统在天上飞,一个复位或者死机,代价可能就是整个任务失败。所以这一章,咱们把ARM Cortex-M架构、STM32选型、最小系统电路设计这几个硬骨头啃下来。

2.1 ARM Cortex-M架构:飞控的大脑

ARM Cortex-M系列是专门为微控制器设计的处理器核。说白了,它就是个低功耗、高性能的“小脑”。飞控系统里,它负责实时采集传感器数据、运行控制算法、输出PWM信号。

Cortex-M家族主要成员:

型号 特点 飞控适用场景
Cortex-M0/M0+ 超低功耗、低成本 简单遥控器、传感器预处理
Cortex-M3 平衡性能与功耗 入门级飞控(如F3、F4)
Cortex-M4 带FPU(浮点运算单元) 主流飞控(如F405、F427)
Cortex-M7 高性能、双精度FPU 高端飞控(如H7系列)

我个人习惯,做飞控至少选M4起步。为什么?因为飞控算法里大量涉及浮点运算——姿态解算、卡尔曼滤波、PID控制。M4自带的FPU能让这些运算快一个数量级。我在项目中遇到过用M3跑扩展卡尔曼滤波,CPU占用率直接飙到85%,换成M4后降到30%不到。

核心要点:飞控的实时性要求极高。Cortex-M4的FPU不是锦上添花,是刚需。如果你做的是四轴、固定翼这类需要高频姿态更新的系统,别在M3上省钱。

2.2 STM32系列选型:怎么挑合适的芯片?

STM32是意法半导体基于Cortex-M内核的MCU系列。市面上飞控板用的最多的就是STM32。选型时,我一般看这几个维度:

  • 性能需求:主频、RAM、Flash大小
  • 外设需求:定时器数量、ADC通道、DMA、SPI/I2C/UART
  • 封装与成本:LQFP还是QFN?批量价格能否接受?
  • 供货与生态:别选冷门型号,否则买不到货或者开发工具支持差

飞控常用STM32型号对比:

型号 内核 主频 Flash RAM 典型飞控
STM32F405 M4 168MHz 1MB 192KB Pixhawk 1
STM32F427 M4 180MHz 2MB 256KB Pixhawk 2/3
STM32H743 M7 480MHz 2MB 1MB CUAV V5+
STM32G474 M4 170MHz 512KB 128KB 新设计推荐

嗯,这里要注意。选型不是越贵越好。我见过有人用H7做简单的四轴飞控,结果大部分外设都闲置,功耗还高。其实F405完全够用。我的建议是:

  • 入门/教学:STM32F103C8T6(M3,便宜,但别用于量产飞控)
  • 主流飞控:STM32F405RGT6 或 STM32F427VIT6
  • 高端/工业级:STM32H743 或 STM32G474(带HRTIM,适合高精度PWM)

个人经验:我曾经在一个项目中选了STM32F446,结果发现它的定时器数量不够,无法同时驱动8个电机和4个舵机。后来硬着头皮用软件模拟PWM,导致抖动很大。所以选型时,一定要把外设资源清单列出来,逐个核对。

2.3 最小系统电路设计:让芯片跑起来

最小系统,就是让MCU能正常工作的最低电路要求。说白了,就是供电、时钟、复位、调试接口这四样。缺一样,芯片就罢工。

2.3.1 供电电路

STM32通常需要3.3V供电。飞控系统里,电池一般是2S-6S锂电池(7.4V-22.2V),所以需要稳压。我常用的方案:

  • 先用一个DC-DC降压到5V(比如MP2359、TPS5430)
  • 再用LDO稳压到3.3V(比如AMS1117-3.3、RT9013)

注意:飞控对电源纹波敏感。LDO的输出端一定要加10μF+0.1μF的滤波电容。我遇到过因为电容漏焊导致飞控在空中随机复位的情况,排查了三天才找到原因。

2.3.2 时钟电路

STM32需要两个时钟源:

  • 主时钟:8MHz或25MHz晶振,用于系统时钟
  • RTC时钟:32.768kHz晶振,用于实时时钟(非必须,但推荐)

晶振旁边要加两个20pF左右的负载电容。走线要短,远离大电流走线。我曾经在画板时把晶振放在了DC-DC电感旁边,结果时钟抖动严重,串口通信频繁出错。

避坑指南:我曾经用内部RC振荡器做飞控,结果温度一变化,时钟频率漂了5%,导致PWM输出周期不准,电机转速忽高忽低。从那以后,我所有飞控设计都强制使用外部晶振。

2.3.3 复位电路

STM32的NRST引脚需要上拉到3.3V,同时接一个0.1μF电容到地。这样能保证上电时芯片可靠复位。有些设计还会加一个按键,方便手动复位调试。

2.3.4 调试接口

飞控开发离不开调试。STM32支持SWD(串行线调试)接口,只需要4根线:

  • SWDIO(数据线)
  • SWCLK(时钟线)
  • GND
  • 3.3V(可选,用于给调试器供电)

我建议在板上预留一个4针或5针的SWD插座。别省这个,否则程序烧录一次就得焊线,效率极低。

2.3.5 完整最小系统电路清单

模块 元件 数量 备注
供电 AMS1117-3.3 1 输入5V,输出3.3V
滤波 10μF+0.1μF电容 各2 输入输出各一组
主时钟 8MHz晶振+20pF电容 1+2 精度20ppm以上
RTC时钟 32.768kHz晶振+12pF电容 1+2 可选,推荐加上
复位 10kΩ电阻+0.1μF电容 1+1 上拉到3.3V
调试 4针排针 1 SWD接口

总结一下:最小系统是飞控硬件的基石。供电要稳、时钟要准、复位要可靠、调试要方便。这四个点,任何一个出问题,飞控都飞不起来。我建议你在画第一版PCB时,先把最小系统单独焊出来测试,确认无误后再加其他外设。这样能避免“一锅端”的排查痛苦。

好了,这一章的内容就到这里。下一章咱们会深入飞控的核心——传感器选型与接口设计。到时候我会聊聊MPU6000、ICM20602这些IMU芯片的坑与经验。