第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芯片的坑与经验。