何易位|HYW FOC
🚧 项目正在缓慢开发中(?)
当前正聚焦于上位机开发,因此该项目只会以极其缓慢的速度推进
诸位点个Star好不好,求求你了~求求你了~帮帮可莉吧
何意味?(这个项目是什么)
何易位FOC,意为"电机转子如何改变自己的位置"
HYW FOC 是一个可裁剪、结构清晰、可移植、扩展性强、支持有感+无感的单电机 FOC 可复用库。
- 集成有感/无感FOC算法无刷电机驱动
- 集成指令控制系统和多种保护机制
- 纯C语言实现,不依赖任何实时系统/运行环境
- 采用OOP相关思想,模块化分层解耦架构
- 部分功能可使用宏裁剪
- 高频注入/RTTTL格式音乐播放
使用 AI 辅助开发(非 VibeCoding)🤖
- 开发过程中尝试使用了多种AI插件开发,copilot、cline、claudecode等等,目前还是用的cline
- 梁圣的恩!情!还不完
B站演示视频:何易位FOC:我开发了一个全开源无刷电机FOC库
硬件开源地址:何易位FOC|HYW FOC:低成本无刷电机FOC驱动
何以为?(这个项目可以用来做什么)
探索关于 FOC 的一切!🔍
- 作为可移植 FOC 核心库,集成到你自己的嵌入式工程。
- 直接使用示例代码 + 硬件参考实例,进行板级验证与二次开发。
- 探索FOC算法实现方式,优化相关算法
- 学习"平台适配接口 + 控制核心分层解耦"的开发方式(不属于任何标准,作者自己摸索出来的,内部还是有点乱,不想再重构了,只是借鉴了相关思想,请勿将其作为某种标准化的开发方式)。
- 探索 AI 辅助嵌入式开发的新工作流。
支持:
- 高度可配置的大量宏定义代码裁剪和参数配置
- 外部角度传感器采样(慢速/快速)
- SMO无感FOC
- 同步电流采样,支持两相/三相电流采样及相应滤波/漂移抑制措施
- 数学变换链(Clarke / Park / 反变换)
- SVPWM 调制输出
- 外环控制(速度 / 角度)与内环电流控制
- 电流环开环/闭环软切换抑制小电流下噪声
- 齿槽转矩补偿(在线标定 + 运行时补偿)
- 完整的控制和监控协议,支持多种命令和自定义格式化输出/反馈回报
- 错误检测及安全机制
- 高频注入和RTTTL格式音乐播放
当前能力一览
| 项目 |
当前状态 |
| 单电机有感 FOC |
✅ 可用 |
| 指令化查询/控制 |
✅ 可用 |
| 无感 FOC |
✅ 可用 |
| 多电机驱动 |
❌ 不支持,以后可能也不会支持(似乎后有支持的可能性?) |
何易位?(究竟是怎么控制电机的)
当然是 FOC 算法啦 ⚙️
- 本库采用中断+状态机的方式完成相关控制任务
- 其中,控制链路完全存在于中断中,确保控制的实时性和可靠性
- 其他协议解析,指令轮询,命令触发等按照对ISR阻塞程度分别编排在中断和主循环中
- 具体去问AI或是看架构文档
现阶段:有感/无感 FOC框架,持续进行控制效果优化、代码优化、BUG修复。
目前已进入稳定版本
后续计划:高频注入参数辨识、优化的无感 FOC
何依偎?(库的架构和依赖关系是怎样的)
具体代码架构描述见 docs 目录
FOC_VSCODE/
├── foc_core/ # 核心可复用库(LS + L1-L3)
│ ├── include/
│ │ ├── LS_Config/ # 配置宏、类型定义、数据表
│ │ ├── L1_Orchestration/ # 编排层头文件
│ │ ├── L2_Core/ # 控制/协议/运行时子模块头文件
│ │ └── L3_Hal/ # 数学/平台抽象/传感器/SVPWM/协议编解码头文件
│ ├── src/
│ │ ├── L1_Orchestration/ # 启动流程、主循环编排
│ │ ├── L2_Core/ # Control/Protocol/Runtime 子目录
│ │ ├── L3_Hal/ # 数学变换、传感器、SVPWM、协议编解码
│ │ └── foc_platform_api_empty.c # 新平台适配模板
│ └── ...
├── examples/ # 平台/板级参考实例
├── docs/ # 库级文档
└── .github/ # 工作流与协作规则
项目采用"核心库 + 示例工程"分层组织:
- 核心库保持与平台完全无关,聚焦控制逻辑与接口契约。
- 通过平台 API(L3_Hal/foc_platform_api.h)连接具体的外设相关驱动和实现。
- 示例工程演示了具体硬件平台的驱动适配方式和构建流程。
项目代码可裁剪,裁剪对象包括:
何易为?(如何简单开始使用该项目)
- 根据前面的链接,去嘉立创开源平台找板子,或是直接看丢在项目文件夹里面的原理图/PCB工程
- 使用我画好的板子:打板
美美白嫖嘉立创,焊接,烧录程序;或是根据我的原理图和代码参考,将核心库移植到你自己的板子上(不保证能用)
- 用你的各种上位机给它发命令,开转!
何移位?(如何移植这个库)
当然是直接让 AI 来做啦 🚀
由于具体的硬件读取相关逻辑,如采样/发送/协议解析完全依赖api接口实现,故库的核心内容并不包含例如:串口DMA、PWM同步电流采样、I2C协议、传感器读取等硬件层相关内容
- 也就是说,你不能指望把这个库拿来就用
- 你需要手动实现相关的硬件和芯片外设驱动
- 同时,你实现这些外设的方式决定了这个库的效果,如:电流采样是否与PWM同步?使用什么传感器和算法获取机械角度?使用DMA进行通信还是直接CPU硬通信?电流采样噪声如何?
故如果想把它移植到新芯片/新板子,核心流程如下:
- 在你的工程中引入
foc_core/ 核心库。
- 参考示例在主流程中完成初始化、调度与控制循环调用。
- 实现平台 API,比如相关时钟、中断、PWM、采样、通信、指示灯等(这是最麻烦的一步),在空API实现中给出了实现的提示和注意事项
- 对照协议文档完成参数通道联调。
建议研究一下这几个文件:
还是太麻烦了怎么办?
全~都~交给AI吧!从外设初始化到 API 实现,只需验证硬件行为即可!(而且效果应该还不错,我自己写GD32标准库的初始化就是AI干的,但是一定要让他做好计划并审查,不然干出来是一坨)
何异谓?(如果有不同意见该怎么做)
直接提 Issue 就好啦,欢迎:
- Bug 报告
- 文档纠错/重写
- 新平台移植经验
- 控制效果与算法优化建议
狠狠的辱骂这个库,写的什么垃圾玩意!
何以谓?(作者想说什么)
欢迎各位大佬来提建议,或是直接为本项目添砖加瓦 🙌
这个项目是一边学一边做的,目的是学习以及积累项目经验,同时摸索AI在嵌入式项目中的使用。
作者本身理论知识不是很扎实,可能很多地方存在问题。
很多AI开发的完全不能细看,看起来还行细看一坨,目前结构已经完全重构,应该很清晰了
项目没人看没人开发也没关系,我会在角落里默默开发的…
其他开发相关
开发计划
优先开发计划,未完成时调试算法极其麻烦:
后期开发目标:
- 高频注入参数辨识
- 无感观测器优化、PID调参、自适应PID
- 有感/无感控制进一步打磨
- 高频注入FOC,磁链观测器
极长期目标:
把这个库开发成世界上最牛逼的FOC库(做梦中)
详细里程碑见 NEXT_MISSION.md。
文档导航
库级文档(驱动库通用文档)
实例级文档(以具体项目为准的具体工程实例文档)
工作区使用说明
开源协作说明
许可证
MIT License,详见 LICENSE。
第三方组件许可证声明见 THIRD_PARTY_NOTICES.md。
评论