惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Y
Y Combinator Blog
T
Tailwind CSS Blog
D
Docker
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
腾讯CDC
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
U
Unit 42
The Cloudflare Blog
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
爱范儿
爱范儿
Recent Announcements
Recent Announcements
博客园 - 聂微东
博客园 - 叶小钗
H
Help Net Security
MyScale Blog
MyScale Blog

程序员

V2EX 看到讨论"跨域"的帖子,那个她好像回来了 codex 今天真的是不稳定呀。 火山方舟 Coding Plan 慎买 刚问了大家 openclaw 和 hermes 在什么机器上面玩,求推荐一个机器 GPT-image-2 生成 AI 图片防伪有感 codex pro 5 小时限制已经严重缩水 逆天 Antigravity 动态 JSON 序列化对强类型语言很难吗? 自建了 GPT Coding Plan,遇到了定价问题,请教大家 大家都是在什么设备上玩 openclaw 以及 hermes 的呀? 软考还有一个月就考试了,你们学习了吗? 大伙用 AI 会考虑在 user scope 的 CLAUDE.md/AGENTS.md 里交代 AI 说中文吗 我发现程序员这个群体很大部分其实挺抠的 最近使用 cc 总会莫名其妙的返工, codex 不会 目前体验最好的远程 vibe 工具 想知道大佬们抓包遇到 ssl pinning 都是咋优雅的 解决的? 工业软件的大佬们是怎么 vibe coding 的 最近 chrome 是不是有 bug 啊,一搜索就卡住 分布式异步系统在 vibe coding 下的困境 PHP Native AOT 编译器,支持将 PHP 代码编译为可执行文件,运算性能提高 150 倍 没想到 2026 年,还要浪费大量时间在跨域问题上 DeepSeek V4 这周会出吗? 中转站正式试营 欢迎试用 不掺不假 小米 mimo 升级 v2.5,并且重置了额度 Jenkins, SCM 轮询完全不工作是啥问题啊 赛博斗蛐蛐, AI 模型的简单对比(白嫖版) 使用中转站要擦亮眼睛!不说别的,倍率计算 充值好乱。 买了火山的 Coding Plan 测试得出计费模式 给我的 AI 生成了简历和状态卡, 大家帮忙看下 Ta 能找到啥样的
每日一个小项目之步进电机 FOC
defaw · 2026-06-20 · via 程序员

昨晚突发奇想,想用 GLM-5.2 把手里积压已久、还能抢救一下的陈年老项目都往前推一推。结果翻到了这个 FOC 项目。

这个项目之前已经被我永久归档了,原因很简单:ESP32-C3 的外设能力实在太弱,根本撑不起我预设的指标。

我的目标是做 10kHz 电流环,也就是说每一轮控制计算必须在 100μs 内完成。但按照当时基于 ESP-IDF 标准 API 的实现,一次 SPI 编码器读取要 30μs ,一次相电流读取要 50μs (步进电机是两相,所以要读两次 ADC ),控制计算本身还要 80μs 。光这些加起来就已经远超预算,完全没法实现。于是这个项目就被我彻底搁置了。

这次我让 GLM-5.2 重新梳理外设部分。第一个目标是优化 SPI 读取时间。

它先自己写了一个打点测试程序,对 SPI 读取流程的每一步分别计时;随后把优化级别改成 O0 ,尽量降低指令重排对单步耗时统计的干扰。分析结果后,它判断主要耗时并不在 SPI 本身,而是在 ESP-IDF 的驱动层:多层封装、大量锁、层层参数校验,带来了很高的调用开销。

接着它自己翻了驱动实现,绕过 IDF 标准驱动,直接用 LL 层寄存器操作完成 SPI 读取。最终,单次读取耗时从 30μs 优化到了 9μs 。

ADC 读取部分也是类似流程:先打点、再定位瓶颈,最后重写成基于 LL 的直接操作。

然后是计算部分。GLM-5.2 把我原来基于 float 的控制计算重写成了定点数。ESP32-C3 没有 FPU ,软浮点开销非常大;改成定点数之后,计算部分的速度提升非常明显,量级上大约能拉开百倍差距。

中间还踩了很多工程上的坑,基本也都被 GLM-5.2 自己处理掉了。

我并不是专业嵌入式开发者,平时使用 ESP-IDF 也基本停留在标准驱动层,从来没有系统研究过 LL 层开发。上面这些优化,从晚上 10 点开始,到凌晨 3 点左右基本完成,期间大概跑掉了 Max 套餐周限的 20%。GLM-5.2 大约每 5 到 10 分钟会让我确认一次它的判断和下一步方案。我没有使用 /goal ,主要是担心项目优化方向跑偏。

最后贴一组电流环跟踪效果:

25976 kp=5.0000 ki=50.0000 theta=+2.1126 rpm=+0.0000 id=+0.0005 iq=+0.1021 us_total=162 lag=1 overrun=0
25977 kp=5.0000 ki=50.0000 theta=+2.1126 rpm=+0.0000 id=+0.0015 iq=+0.1015 us_total=142 lag=1 overrun=0
25978 kp=5.0000 ki=50.0000 theta=+2.1126 rpm=+0.0000 id=-0.0070 iq=+0.0885 us_total=142 lag=1 overrun=0
25979 kp=5.0000 ki=50.0000 theta=+2.1126 rpm=+0.0000 id=+0.0005 iq=+0.1021 us_total=142 lag=1 overrun=0
25980 kp=5.0000 ki=50.0000 theta=+2.1126 rpm=+0.0000 id=+0.0015 iq=+0.1015 us_total=153 lag=1 overrun=0

好像忘了说架构了,驱动芯片用的 DRV8411A ,在开始重写之前也和 GLM5.2 聊了很多 RL 常数,电流环带宽等等的事情,毕竟使用一个 3 欧 3mH 的电机,它的 RL 时间常数到了 ms 量级,要进行控制是很困难的。