开篇:为什么要深度剖析 AM32 电调?
作为多旋翼无人机的 “动力心脏”,电调(电子调速器)的性能直接决定了无人机的飞行稳定性、响应速度和续航能力。而 AM32 系列电调凭借开源性、高性价比、适配性强三大优势,成为了开源无人机社区的热门选择 —— 从入门级的 2204 电机到专业级的 2306 电机,从 3S 锂电池到 6S 高压电池,AM32 都能稳定驱动。
但很多开发者和爱好者在接触 AM32 源码时,常会陷入 “看得懂代码,看不懂逻辑” 的困境:为什么 FOC 算法要做坐标变换?DShot 协议的脉冲怎么解析?保护机制是如何实时触发的?
这篇博客将从硬件基础→源码架构→模块解析→工作原理→实践操作五个维度,逐行拆解 AM32 电调固件源码,帮你彻底搞懂 “电调如何把飞控指令变成电机转速”。
第一章 基础铺垫:先搞懂电调和 AM32 的 “底层逻辑”
在啃源码前,我们需要先明确两个核心问题:电调的本质是什么?AM32 电调的硬件架构如何?
1.1 无人机电调:从 “指令到动力” 的转换器
简单来说,电调的作用是 “翻译 + 驱动”:
- 翻译:把飞控发送的数字指令(如 DShot 油门值)转换成电机能理解的 “电流信号”;
- 驱动:通过功率电路(MOS 管)将电池电压放大,为电机提供足够的动力;
- 保护:实时监测电流、电压、温度,防止电调或电机损坏。
AM32 电调的核心优势在于开源 FOC 算法(磁场定向控制)—— 相比传统的方波控制,FOC 能让电机转动更平顺、噪音更小、效率更高,尤其适合多旋翼无人机的高频姿态调整需求。
1.2 AM32 电调硬件架构:源码的 “物理载体”
源码的逻辑设计完全依赖硬件,先看懂硬件,才能理解源码中 “为什么要这么配置”。AM32 电调的硬件核心分为 4 部分,具体如下表:
| 硬件模块 | 核心组件 | 功能作用 | 与源码的关联 |
|---|---|---|---|
| 主控 MCU | STM32F051/STM32G474/GD32 | 执行固件逻辑(FOC、通信、保护) | 源码的编译目标,外设初始化(时钟、定时器) |
| 功率驱动电路 | 6 颗 N-MOS 管(如 IRF7509) | 放大电流,驱动无刷电机三相绕组 | 源码中 PWM 输出控制 MOS 管开关时序 |
| 采样电路 | 分流电阻、ADC、NTC | 采集电流、电压、温度数据 | 源码中 ADC 采样与数据换算逻辑 |
| 通信接口 | 杜邦线 / 焊盘 | 与飞控通信(DShot/PWM)、调试(SWD/UART) | 源码中 DShot 协议解析、UART 日志输出 |
以最常见的AM32 F051 版本为例,其 MCU 为 STM32F051C8T6(32 位 ARM Cortex-M0 内核,72MHz 主频,64KB Flash,8KB RAM),刚好满足 FOC 算法的实时性需求,同时成本较低。
第二章 AM32 固件源码整体架构:像 “看地图” 一样理清模块
AM32 源码采用模块化设计,每个模块负责一个核心功能,模块间通过函数调用协作。整体架构清晰,文件目录规整,即使是新手也能快速定位到需要的代码。
2.1 源码目录结构:文件 “存放规则”
从 GitLab 仓库(https://gitlab.com/am32-firmware/am32-multirotor-esc-firmware)克隆源码后,其目录结构如下表所示:
| 目录名称 | 包含文件 / 子目录 | 核心功能 | 新手重点关注 |
|---|---|---|---|
| /src | main.c、system_init.c、foc.c 等 | 固件核心逻辑代码 | main.c(主函数)、foc.c(FOC 算法) |
| /src/drivers | adc.c、tim.c、uart.c、gpio.c | 硬件外设驱动(ADC、定时器、UART、GPIO) | adc.c(采样)、tim.c(PWM 生成) |
| /src/protocols | dshot.c、dshot_telemetry.c | 通信协议实现(DShot、遥测) | dshot.c(DShot 指令接收) |
| /src/control | pid.c、svpwm.c、angle.c | 控制算法(PID、SVPWM、角度估算) | svpwm.c(PWM 合成)、angle.c(角度检测) |
| /src/protection | overcurrent.c、overtemp.c | 保护机制(过流、过温、过压 / 欠压) | overcurrent.c(过流保护) |
| /src/param | param.c、param_def.h | 参数管理(存储 / 读取电机、控制参数) | param.c(参数保存 / 加载) |
| /src/calib | throttle_calib.c、phase_calib.c | 校准流程(油门、相位) | throttle_calib.c(油门校准) |
| /lib | stm32f0xx_hal.c、math.c | 依赖库(STM32 HAL 库、数学工具) | math.c(坐标变换、PID 计算) |
| /build | 编译生成的.hex/.bin 固件文件 | 最终烧录的固件 | 无需修改,仅用于烧录 |
| /tools | 配置工具、烧录脚本 | 辅助工具(如 AM32 Configurator) | 烧录脚本(flash.sh) |
2.2 核心模块划分:功能 “责任分工”
源码的核心逻辑可拆分为 7 个模块,每个模块对应特定功能,模块间的调用关系清晰。具体模块信息如下表:
| 核心模块 | 核心文件 | 依赖外设 | 核心函数 | 功能描述 |
|---|---|---|---|---|

最低0.47元/天 解锁文章
835

被折叠的 条评论
为什么被折叠?



