
想看电机控制开源固件的源码,大多数人的路线是错的:打开 GitHub 搜 FOC,按 star 排序,从最高的开始读。读不到三百行就放弃了——不是你读不懂,是选错了阅读对象和阅读顺序。
选学习源码,我只看三个指标,历史 star 数不在其中。第一,最近提交日期,三个月没动静的项目新内容流就断了。第二,开放 issue 数,没人管 issue 的项目事实上已经停维。第三,许可证,GPL、Apache、MIT 的约束完全不同,“源码私有化”的项目旧代码能挖,新东西已经看不到了——Tinymovr 从 v3.0 起就是这个路线,源码开发已转私有仓,公共仓只留文档和固件二进制,README 有官方公告,当反面教材看正合适。
按这三个指标筛完,值得读的就这几个,每个的打开方式不一样。
VESC(vedderb/bldc),别从 main.c 开始读。
先读仓库根目录的 CHANGELOG.md。作者手写的版本演进史,十年修过什么坑、加过什么功能、为什么这么改,这是读任何教材都拿不到的工程交付视角。之后再顺着中断入口往下走:上电初始化 → PWM/中断配置 → FOC 电流环计算 → 状态机和保护逻辑。想看量产问题的,issue 区里温升、EMC、批次离散的帖子比任何专栏都直接。许可证 GPLv3,商用集成前想清楚。
moteus(mjbots/moteus),仓库本体只是一半。
三件套缺一不可:仓库、官方文档站(校准/调参全流程)、作者博客(控制环整定、热设计、编码器校准的深度长文)。硬件和机械结构也在仓库里(PCB 是 KiCad 画的),想看 15–30kHz 控制率怎么排进中断的,从这里能看到底。它是我见过的结构最彻底的开源样本,Apache-2.0,固件加 PCB 加机械全开。
ODrive(odriverobotics/ODrive),读旧版,别等新版。
仓库 2026 年 1 月后停更,新品固件转了 NDA 闭源,但 v0.5x / v3.6 的代码和文档仍然是最适合学三环级联的样本:电流环 125µs(8kHz),位置环纯 P——被控对象已经是积分型,再加 I 反而引入滞后,这个设计决策文档里讲得很清楚。正确读法是对照文档站的 tuning 章节读代码,每个参数为什么存在都写了。
bldc_foc(MiloszAdamek/bldc_foc),手敲 FOC 时的对照样本。
STM32G474,电流环 10kHz / 速度环 1kHz / PWM 20kHz,代码量小、结构干净,论文级精简实现。自己手敲 Clarke/Park 和 SVPWM 卡住的时候,拿它对,比翻 VESC 十万行快得多。
SimpleFOC(simplefoc/Arduino-FOC),脚手架,不是终点。
拿它跑通、看见电机转,然后关掉库手敲一遍。它文档站带中文,JOSS 论文(2022, 7(74):4232)可以快速了解设计取舍。论坛里带完整参数的翻车帖是宝藏——搜 48V 轮毂电机振动帖,极对数 23、23A 电流的"风镐式剧烈振动",排查到最后是低边电流采样对齐和死区的问题,这种一手案例全网难找第二个。
读码路径按层走:L3 阶段从 SimpleFOC 跑通、bldc_foc 对照手敲开始;L4 读 ODrive 的三环嵌套;L5 读 Microchip AN1078 的滑模实现;L6 直接去 VESC 和 moteus 的 issue 区。每个项目的对比表、活跃度数据(截至 2026-09)、详细的读码顺序,整理在 GitHub 仓库 awesome-FOC-motor-control 的资源索引里:
跟踪仓库更新不用天天刷:仓库 URL 后面加 /commits.atom,丢进任何 RSS 阅读器都能订阅。