最近在 GitHub 上翻到一个叫 cdfoc 的小项目,MIT 协议开源,核心是一个小巧精致的 FOC 电机控制器,整体完成度相当不错。
项目地址: https://github.com/dukelec/cdfoc/tree/master
打开仓库,目录结构一目了然:hardware(原理图 + PCB)、mdrv_bl(引导)+ mdrv_fw(固件)、tools(工具)、doc(文档)。MIT License,商用可以直接拿来用。

01 这是个啥
基于 MDRV 系列 MCU 的小型 FOC 电机控制器,板子只有 73 × 47 mm,比巴掌还小一圈。
24V 直流供电,三相 BLDC(Brushless DC Motor,无刷直流电机)直出,编码器接口、Type-C 调试口、电源插口一应俱全。
02 几个亮点
硬件紧凑,PCB 走线整洁。

真物料实拍,与 BOM 对得上。
拿到板子后拆开一看,封装、走线、电容、Type-C 口完全对得上仓库里的 BOM;MCU 居中,PMIC(电源管理芯片)与驱动 IC 围在四周。

板子 + 电机即接即用。
通过 PH2.0 排线连编码器 + 三相 BLDC,电机用的是 GM 系列云台电机(带减速箱),JST 4P 接口免焊接;板子 + 电机 + 5 根线就能跑起来。

自带 GUI 调参,浏览器就够。
打开 CDBUS Tools 后,Read per 200 ms 就能把所有 PID、轨迹规划参数拉回来。
tp_speed、pid_speed_kp(默认 50.0)、pid_speed_ki(16.0)、pid_iq_out_min(-16384)这些都按地址读,改完点 W 写回。

通讯用 CDBUS,简单粗暴。
这是项目作者自研的轻量协议,跑在 UART(通用异步收发器)物理层,默认 baud_rate_l = 1000000(1 Mbps);板子与上位机 USB 转串口直插即可,不用外挂 CAN 收发器。
03 踩坑过程
第一次上电别急着接电机,先 Read Info 看 magic_code 是不是 0xdcd,baud_rate_l / baud_rate_h 要对得上 GUI 默认的 1000000 / 10000000,否则直接 Bus off。
调试没给全电压、编码器零点对错,结果烧掉 1 只 MOSFET。
改用 enc_cali,让 VD 把转子拖到 a0 采样的方式重做零点,这才稳下来。先校零、再闭环,切记。
04 使用建议
- 快速上手:Clone 之后按 doc 装配线,USB 调试口插上、打开 GUI 就能跑;
- 二次开发:
hardware/ 看原理图与 PCB,固件基于轻量实时系统,C 写得明明白白;
- 可以商用:MIT 协议,保留原作者 License 文件即可。
写在最后
目前项目走到 v4.1,从硬件、驱动、算法一路打磨过来。如果只想要一套能稳转、PID 还能改的 FOC 控制器,cdfoc 还是非常不错的。
开源这东西之所以迷人,就是因为不用从零开始造轮子。在 云栈社区 这样的开发者社区,站在前人的轮子上改装,永远比平地造车快得多。
|