前两天朋友跟我说,他们做了一套 FOC 电机驱动器,可以寄一套给我玩玩。我说那不行,要寄就寄两套。
因为我最近正打算给儿子做一个太阳能追光系统,原本想用两个舵机简单应付一下。结果这朋友在我“瞌睡的时候送枕头”,那就别怪我不客气了,有羊毛必须使劲薅。

上周五东西到了。其中一个电机和板子已经装配在一起,线也引出来了,看起来是调试过的。

另一个是贴好片的板子,还没焊接排针和供电线。

整块板子的丝印布局也比较清晰,端子定义、电源、串口和主要芯片位置都能直接看到。

我仔细看了一下,板子上用的主控是武汉芯源半导体推出的 CW32L012C8U6。说实话看到这个有点震撼,因为朋友说他们这套 FOC 驱动算法内置了速度环、电流环、位置环,对芯片资源要求不低。CW32L012C8U6 能把这一套复杂逻辑跑起来,性能确实不能小看。

栅极驱动部分用了一颗屹晶微的 EG3033,这是一颗三相栅极驱动器。16 个引脚里,一部分用来驱动三相 MOS 的栅极,另外还有 2 个电源输入、1 个地,以及一个 5V 输出。没错,这颗驱动器还内置了 5V 50mA 的 LDO 电源输出。

MOS 部分用的是三颗 DOZ4616B。这颗料在 DFN-8D(3x3)封装里集成了两个 30V/23A 的 NMOS,刚好每个桥臂用一颗就够。别看封装小,用来驱动配套的 2804 电机可以说是绰绰有余。

这是板子背面,放了三颗采样电阻,每路相线都有独立的采样电阻。但我没看到外置的电流采样电路,难道这个 MCU 内置了运放?带着这个疑问,我又翻了一下 CW32L012C8U6 的数据手册。

果然没猜错。数据手册里写着,CW32L012 内部集成了 2 个运算放大器(OPA),支持多路外部模拟输入和内部 DAC 转换结果,还能在低功耗和深度休眠模式下运行。省掉外置电流采样运放,这些成本都够再做两块这种 PCB 了。

板子背面最中间是一颗来自纳芯微的 MT6701CT-ACD-R。这是一个磁性旋转位置编码器,配合 2804 无刷电机的磁环,用来做转子位置检测和定位。
好了,开始干活。
其实朋友上周三说要寄 FOC 电机套件的时候,我就已经在想怎么用它做太阳能追光系统了。于是赶紧上网买了光敏检测板和太阳能板。至于系统主控,刚好前几天调试屏幕时用到朋友送我的一块 ESP32-S3 开发板,直接拿来用,连显示屏都有了。顺便还 3D 打印了底座、电机安装座、支杆和太阳能板安装支架。所以大概上周六,整套东西就搭起来了。这里不得不感叹一句:自从有了 AI 加持,我居然也体验了一把“天才程序员”的感觉。


3D 打印的底座上写着“太阳能光追系统”。

底部有一个电机,带着一根竖直的支杆旋转。太阳东升西落,这根杆就跟着太阳转。

支杆顶端又装了一个 2804 电机,它负责太阳能板的俯仰控制。夏天太阳高、冬天太阳斜射,有了俯仰控制,就能尽量保证一年四季太阳能板和太阳的夹角维持在 90 度左右。

2804 电机本体长这样,中空轴结构,配合磁环就能做位置检测。

伟大的硬件工程师从来不自己造轮子,这种四路光敏检测小板直接网上买就行。
把它接到 ESP32 之后,显示效果就是这样。光照较弱时,四路光照的 ADC 值也偏小。为了看着直观,我做了百分比显示,背景黄色的深浅也会随光强变化。

拿强光手电照光敏板时,屏幕 UI 上的光强百分比全部到了 90% 以上,色块黄色也明显变深。

为了方便调试电机,我还让 AI 花了 20 分钟做了一个串口调试上位机。它能接收电机的工作状态,也能给方位电机和俯仰电机发送位置指令,还支持回零、急停、演示这些操作。

这是整套系统的“脸面”——太阳能板,能输出 12V/2W 的功率。不过你先别问我为什么没把它装上去。

好吧我招了,因为电机还没调好。朋友寄来的出厂代码不太符合我的需求。我想要的状态是:上电后方位电机先不转,俯仰轴先抬起来一个角度;然后进行 90 度俯仰角自测和回零;最后才进入光敏控制两个电机的状态。而且因为线缆拉得比较多,方位电机只能在 180 度范围内转,俯仰电机只能在 90 度以内活动,这个限位也要加到姿态环里。
另外,我用 ESP32 的串口和这个电机控制板的串口来通信。基于上面这两点,我对朋友发的 Keil 工程做了大量修改。结果越改越复杂,周日折腾了一整天,还是没把电机驯服。
目前最明显的问题是:电机空载状态下,我用手拧一下,它会有比较大的回弹力。但这个项目里恰恰不需要这种回弹力,应该从 PID参数上做调整。刚好过几天朋友那边会组织一次关于这套电机控制板的集中讲解,我打算跟着学习完再继续调这套太阳能追光系统。
FOC 电机驱动这几年在嵌入式圈子里的热度一直在涨。要让电能高效地转换成机械能,让新能源车跑起来、机器人动起来、流水线转起来,背后都离不开 FOC 无刷电机。这个方向现在仍然算是蓝海,学 FOC 电机控制的性价比相当高。而且今天这块板子上跑的 FOC 算法也不简单,算是师出名门了。
我 2015 年自己做穿越机无刷电机驱动器时,买过李家庆老师写的《无刷直流电机控制应用——基于 STM8S 系列单片机》。那本书写得相当好,有完整原理图、原理讲解和详细代码。更厉害的是,那时候李老师就已经在用 STM8S 这种成本更低的 8 位单片机做电机控制了。
如果你也对 FOC 电机控制、嵌入式开发这类硬核 DIY 感兴趣,欢迎来云栈社区一起交流,分享你的翻车和填坑经历。