- 嵌入式
- 硬件开发
- 机器人
【免费下载链接】SguanFOC_Library
SguanFOC为有/无传感器的PMSM电机提供强大的磁场定向控制解决方案。库内集成了基于SVPWM的多种控制模式,支持位置环、速度环、电流环的单环/串级控制...同时针对嵌入式平台优化了数学运算,并提供高度可配置的PID和LADRC等控制器,满足从简单调速到高性能伺服的各类应用需求。
SguanFOC 为有/无传感器 PMSM 电机提供磁场定向控制(FOC)方案,其配套 QT 上位机基于自研的 JustFloat 串口协议,可以实时监测转速、电流、电压、占空比等 16 路电机数据,并支持一键下发速度、位置等控制指令。本教程面向新手,手把手教你完成上位机连接、协议解析与实时曲线调试。
一、JustFloat 串口协议是什么?
JustFloat 是 SguanFOC 库内置的轻量通信协议,核心思路只有一条:单片机直接把float数组的原始内存通过串口发出,上位机按同样的 float 结构解析,省去了传统协议里"浮点数转字符串再转回来"的开销。
上图是 SguanFOC 库文件包含关系,
Sguan_printf就是负责 JustFloat 通信的模块,源码位于 Sguan_printf.c/Sguan_printf.c)。
协议有两个方向:
- 发送方向(下位机 → 上位机):每周期打包一个结构体
PRINTF_STRUCT,包含float fdata[16]共 16 路数据(v3.0.x 版本默认 12 路),外加 4 字节帧尾0x00 0x00 0x80 0x7F,方便上位机对齐解析。 - 接收方向(上位机 → 下位机):采用
Key=Value?文本指令,以?作为帧尾触发解析;下位机内部用 DJB2 哈希字典做指令映射,速度极快,并带 40 字节熔断保护,防止粘包导致系统死机。
二、连接上位机:硬件与串口配置 🖥️
以官方开源的 CH32V3 机器人关节板为例,板载 USB 串口(最高 2M 波特率),直接插上电脑即可通信:
上位机程序的下载方式:仓库中 Sguan电控上位机.txt 内附有下载链接(解压密码见文件内容),完整接口说明可查阅 Sguan使用说明书.pdf。
连接步骤只需 3 步:
- 下载并打开Sguan 电控上位机,选择对应 COM 口;
- 设置波特率,与单片机端串口初始化配置保持一致(参考工程中
User_CorrespondSet对应的 UART 配置,见 UserData_Function.h/UserData_Function.h)); - 点击打开串口,打开"图表 Display"页签,即可看到实时曲线跳动。
💡 提示:如果你的板卡没有 USB 转串口,用任意 CH340/CP2102 转 USB 模块,接 TXD/RXD/GND 三根线同样可行。
三、实时监测:16 路电机数据怎么看 📊
上位机收到的 16 路数据由下位机的User_UserTX()函数填充(源码见 UserData_UserControl.h/UserData_UserControl.h)),默认映射关系如下:
| 通道 | 数据含义 | 单位/范围 |
|---|---|---|
| fdata[0] | 状态机当前状态码 | - |
| fdata[1] | 目标机械转速 | rad/s |
| fdata[2] | 目标 Q 轴电流 | A |
| fdata[3] | 目标 D 轴电流 | A |
| fdata[4] | 实际机械转速 | rad/s |
| fdata[5] | 实际 Q 轴电流 | A |
| fdata[6] | 实际 D 轴电流 | A |
| fdata[7] | 实际机械角度 | rad |
| fdata[8] | Q 轴电压指令 | V |
| fdata[9] | D 轴电压指令 | V |
| fdata[10] | 母线电压实际值 | V |
| fdata[11] | U 相占空比 | 0~1 |
| fdata[12] | V 相占空比 | 0~1 |
| fdata[13] | W 相占空比 | 0~1 |
| fdata[14] | A 相瞬时电流 | A |
| fdata[15] | 当前控制模式 | 0~18 |
调试时最常用的是fdata[1] 目标转速 vs fdata[4] 实际转速两条曲线——两者跟随越紧,说明速度环调得越好。想监测其他变量(如无感观测速度、编码器角度),直接在User_UserTX()里替换对应通道即可。
四、一键下发控制指令:上位机怎么控制电机 🎛️
上位机向单片机发送的指令格式统一为指令名=数值?,内置指令字典如下(源码见 Sguan_printf.c/Sguan_printf.c) 中的Cmd_Dict):
| 指令 | 作用 | 示例 |
|---|---|---|
MOTOR | 电机启停(≥0.5 启动,否则停止) | MOTOR=1? |
Speed | 设定目标机械转速 (rad/s) | Speed=50.0? |
Position | 设定目标机械角度 (rad) | Position=50.0? |
Id/Iq | 设定 D/Q 轴电流给定 | Iq=2.0? |
Ud/Uq | 设定 D/Q 轴电压给定 | Uq=5.0? |
User0~User2 | 用户自定义指令,可任意扩展 | User0=3.14? |
使用流程非常简单:先MOTOR=1?启动,再Speed=xx?调速。User0~User2三条自定义通道回调函数Handle_User0_Adjust等同样位于 UserData_UserControl.h/UserData_UserControl.h),可用来在线修改 PID 参数、切换控制模式等。
五、实际调试效果:无感观测 vs 编码器对比 📈
下图是上位机记录的真实调试数据:黄色为无感观测的机械速度,紫色为高精度编码器测得的机械速度,两条曲线几乎完全重合,说明 HFI 高频注入切换到 NLFO 非线性磁链观测器过程平滑:
下面这张图则展示了 HFI 切换到 SMO 滑模观测器时的速度与角度波形,可以清楚看到观测器切换点(角度为锯齿波是因为已放大 10 倍便于观察):
这类曲线记录是验证控制算法最有效的工具——速度环是否跟随、观测器切换是否平滑、电流是否异常,一图便知。
六、常见问题快速排查 ⚡
- 上位机显示全是乱码/异常大数:波特率与单片机端不一致,或 TX 线接反(单片机 TXD 接电脑 RXD)。
- 曲线不动:检查
SguanFOC_main_Loop()是否在主循环中调用、高频中断里的发送链路(Printf_TX_Loop)是否被执行。 - 下发指令无效:确认指令以
?结尾(帧尾),且SguanFOC_Printf_Loop()已在串口接收中断中调用。 - 想发更多通道:修改 Sguan_printf.h/Sguan_printf.h) 中的
CH_COUNT即可扩容。
总结
SguanFOC 配套 QT 上位机 + JustFloat 串口协议,让 FOC 调试从"黑盒"变成"透明":16 路数据实时可视化,指令一键下发。新手只需"连线、选串口、看曲线"三步,就能开始观察转速跟随、电流波形与观测器表现;进阶用户则可以通过User_UserTX()和User0~User2通道,把它打造成自己的参数整定与数据采集平台。
更多模块说明可参考仓库根目录 README.md 与 Sguan使用说明书.pdf。
- 嵌入式
- 硬件开发
- 机器人
【免费下载链接】SguanFOC_Library
SguanFOC为有/无传感器的PMSM电机提供强大的磁场定向控制解决方案。库内集成了基于SVPWM的多种控制模式,支持位置环、速度环、电流环的单环/串级控制...同时针对嵌入式平台优化了数学运算,并提供高度可配置的PID和LADRC等控制器,满足从简单调速到高性能伺服的各类应用需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考