MIT License

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度技术分析:SguanFOC_Library

项目背景与痛点

无刷直流电机(PMSM电机)因为其高效能与高可靠性而在诸多领域中广泛应用。然而,电机控制系统的设计往往是一大挑战,尤其是在需要同时支持有传感器和无传感器控制的情况下。磁场定向控制(FOC)是一种高效的控制方法,能够在各种条件下实现精准控制,但其复杂的实现和调优过程使得许多开发者望而却步。

SguanFOC_Library正是为了解决这些问题而诞生的。它集成了多种控制模式,特别针对有/无传感器PMSM电机提供了强大的磁场定向控制解决方案,使开发者能够专注于业务逻辑实现,而非底层控制算法的调优。

核心技术揭秘

SguanFOC_Library的核心在于其对磁场定向控制(FOC)算法的实现,尤其是结合了高级空间矢量脉宽调制(SVPWM)技术。该库提供了一系列参数配置选项,使得即使是复杂的控制需求也能够轻松满足。

技术架构与数据流

为了进一步理解SguanFOC_Library的内部结构,我们可以用一个简化架构图来展示其运作机制:

graph TD A[电机当前状态] --> B("获取状态数据") B --> C{"选择控制模式?"} C -->|"有传感器"| D[传感器方式处理] C -->|"无传感器"| E[无传感器方式处理] D --> F[生成指令信号] E --> F F --> G[执行控制指令] G --> H[更新状态反馈] H --> I[调优控制器] I --> A

该库中设计了多种控制模式,包括位置环、速度环及电流环的单环/串级控制。其核心算法设计解决了磁链观测、控制策略选择等关键问题。这种设计不仅提高了系统的灵活性,也简化了用户在嵌入式环境中进行调优的复杂度。

功能亮点与差异

SguanFOC_Library在很大程度上依托于其强大且灵活的API,提供了多样化的控制模式和高度可配置的PID/LADRC(线性自抗扰控制器)选项。这使得它在保证高性能的同时,也能很好地适应不同的应用场景,从而成为市场上同类竞品中的佼佼者。

与普通电机控制库相比,SguanFOC_Library的切实提升在于其免费的开源性以及强大的技术文档支持。这不仅有助于降低用户的开发成本,还能提高学习和调试的效率。

应用场景与落地建议

SguanFOC_Library适用于广泛的工业自动化领域,包括机器人、精密机械臂、工业机床等场景。开发者在实际生产环境中使用时,需要注意以下几点:

  1. 硬件兼容性验证:确保所使用的硬件平台与SguanFOC_Library支持的平台相匹配,并进行适当的硬件优化。
  2. 参数调试:根据具体应用场景,调整PID/LADRC等控制器参数,以达到最优控制效果。
  3. 性能监控:定期检查库的实际性能,根据生产需求进行必要的调整和维护。

综合评价

SguanFOC_Library在电机控制领域展现出了非凡的技术实力,它解决了许多用户在开发过程中的痛点。其灵活的架构与丰富的控制策略选项使得其实用性和适用范围大幅增加。同时,开放的社区支持也为开发者提供了有力的技术保证。

不过,作为一个开源项目,它在使用过程中可能需要重视硬件兼容性和参数调试等问题,用户需要有扎实的电机控制理论基础,方能充分利用其提供的强大功能。总的来说,SguanFOC_Library是一个在高质量、高性能电机控制需求方面值得考虑的强大解决方案。

README

SguanFOC - 高性能磁场定向控制库 无刷电机

「纯 C 语言。几行配置。你的电机丝滑运转。」 “Pure C. A few lines of config. Your motor spins like silk.”

Version License Language Platform 完整FOC English | 中文


在你的 MCU 里跑一套完整 FOC,从坐标变换到 SVPWM,从有感到无感。


5分钟初始化,你能让一台无刷电机转起来——有感、无感、霍尔,任你选。从 有感三环FOC 到 HFI高频注入 + 高速域无感观测,全速域覆盖。不是「能转就行」的那种水平——是伺服级响应、工业级稳定。

你看到的每一个控制算法,都在真实硬件上跑通过。 不是论文仿真,不是概念验证,就是 C语言 + MCU !

SguanFOC 系统架构图

▲ 【代码框架图例->SguanFOC库文件包含关系】 👉 观看SguanFOC最新移植视频(哔哩哔哩)

📣 MIT 协议开源。 个人和商用都免费,无需授权。跨平台通用…ARM、DSP、任何支持C语言的 MCU𒁈 都能用!

1.简单开始 Start 🚀

「引入头文件。填好接口。你的电机闭环转动。」 “Include the header. Implement the hooks. Motor closes loop.”

#include "SguanFOC.h"

int main(void) {
    MCU_Init();                      // 你的MCU平台 + 外设初始化
    while(1) {
        SguanFOC_main_Loop();        // ①初始化 + 串口数据收发
    }
}

void TIM1_IRQHandler(void) {
    SguanFOC_High_Loop();            // ②高频任务:电流环、角度计算、PWM 生成
    // 你的其他高优先级中断任务
}

void TIM2_IRQHandler(void) {
    SguanFOC_Low_Loop();             // ③低频任务:状态机切换、故障保护
    // 你的其他低优先级中断任务
}

void USART1_IRQHandler(void) {
    SguanFOC_Printf_Loop(Sguan_PrintfBuff, Size); // ④串口调试:接收解析
    // 你的其他串口中断任务
}

// ⑤用户自定义:在UserData_*.h文件中依次填写好电机控制模式和运行参数

2.Star 趋势(^^)

「点个 Star。收藏项目。你的同行都在用。」 “Hit the star. Bookmark it. Your peers are already using it.”

Star History Chart

3.📋版本路线图(库代码功能展示)

SguanFOC Library Evolution
═══════════════════════════════════════════════════════════════

SguanFOC库v3.0.0 ->
定位:有感FOC电机控制算法库  浮点运算
电机状态机  优化的数学运算  Justfloat串口协议
PLL锁相环速度跟踪  PID闭环控制  IMC内模思想
LADRC线自抗扰控制  MTPA最大转矩比控制  前馈解耦
巴特沃斯滤波器  printf重定向  用户接口提供

SguanFOC库v3.0.1 ->
定位:有感FOC电机控制算法库  Q31定点运算
电机状态机  优化的数学运算  Justfloat串口协议
PLL锁相环速度跟踪  PID闭环控制  IMC内模思想
STA二阶滑膜控制  MTPA最大转矩比控制  前馈解耦
巴特沃斯滤波器  printf重定向  用户接口提供

SguanFOC库v3.1.0 ->
定位:无感FOC电机控制算法库  浮点运算
电机状态机  优化的数学运算  Justfloat串口协议
HFI高频正弦波注入与转子位置估算 谐波抑制
SMO静止坐标系滑膜观测器算法 SVPWM与三次谐波注入的SPWM
NLFO非线性磁链观测器  霍尔模式  前馈解耦
DOB超螺旋滑模扰动观测器 弱磁控制 
抗齿槽算法 角度相位延迟补偿 死区补偿
NSD转子极性辨识  电机参数辨识 SMC滑模控制
PLL锁相环速度跟踪  PID闭环控制  STA超螺旋滑模控制
LADRC线自抗扰控制  MTPA最大转矩比控制 FW弱磁控制
三种典型二阶滤波器  printf重定向  用户接口提供
═══════════════════════════════════════════════════════════════

4.无感算法实物验证图示

HFI 切换至 NLFO 示意图

* 上面内容是HFI高频正弦波注入切SMO滑模观测器
* 上面内容是HFI高频正弦波注入切NLFO非线性磁链观测器
* (图例为简单调参验证,深度调试后效果更好)
* (SguanFOC其余功能正常,参数辨识和极性辨识有缺陷,后面项目会得到修复)

HFI 切换至 SMO 示意图


5.控制模式一览

「一个宏定义。切换模式。你的电机适配任意场景。」 “One macro. Switch modes. Motor adapts to any scenario.”

  • 🎯 19 种控制模式:开环 → 有感 → 无感 → 全速域融合
  • 🎛️ 4 种控制算法:PID / LADRC / SMC / STA
  • 🔬 3 种无感观测器:HFI / SMO / NLFO
  • ⚡ 10+ 高级功能:MTPA / 弱磁 / 谐波抑制 / 参数辨识 / 死区补偿…
编号 模式 说明 定位方式 适用场景
0 MODE_VF_OPENLOOP VF 压频比开环 无传感器 开环强拖,电机初步测试
1 MODE_IF_OPENLOOP IF 流频比开环 无传感器 开环强拖,电流限幅保护
2 MODE_Voltag_OPEN 电压开环 编码器 电压模式调试
3 MODE_Current_SINGLE 电流单闭环 编码器 力矩控制模式
4 MODE_VelCur_DOUBLE 速度-电流串级闭环 编码器 通用速度控制
5 MODE_PosVelCur_THREE 位置-速度-电流三环 编码器 伺服定位、精密控制
6 MODE_Sensor_Hall 有感霍尔_转速环 霍尔传感器 低成本速度控制
7 MODE_Sensorless_HFI 高频注入_转速环 无感 (HFI) 零低速运行
8 MODE_Sensorless_SMO 滑模观测_转速环 无感 (SMO) 中高速运行
9 MODE_Sensorless_NLFO 非线性磁链_转速环 无感 (NLFO) 中高速运行
10 MODE_Sensorless_HS 高频滑模结合_转速环 无感 (HFI+SMO) 全速域平滑切换
11 MODE_Sensorless_HN 高频磁链结合_转速环 无感 (HFI+NLFO) 全速域平滑切换
12 MODE_Sensorless_AS 霍尔滑模结合_转速环 霍尔 + SMO 全速域融合控制
13 MODE_Sensorless_AN 霍尔磁链结合_转速环 霍尔 + NLFO 全速域融合控制
14 MODE_Debug_HFI HFI 测试_转速环 编码器(外载观测) HFI 算法调试
15 MODE_Debug_SMO SMO 测试_转速环 编码器(外载观测) SMO 算法调试
16 MODE_Debug_NLFO NLFO 测试_转速环 编码器(外载观测) NLFO 算法调试
17 MODE_Debug_HS HFI 切 SMO_转速环 编码器(融合测试) 观测器切换调试
18 MODE_Debug_HN HFI 切 NLFO_转速环 编码器(融合测试) 观测器切换调试

在 UserData_Config.h 中修改宏定义:

// 选择你需要的模式(0-18)
#define Define_Run_Mode 11   // 例如:全速域 HFI+NLFO 无感控制
你的需求 推荐模式
刚拿到电机,想快速转起来 0 或 1 (开环强拖)
做绕线机力矩控制 3 (电流单闭环)
做平衡车、轮毂电机 4 (速度-电流双闭环)
做云台、机械臂、CNC、3D打印机 5 (位置-速度-电流三闭环)
低成本项目(用霍尔传感器) 6 (有感霍尔)
无人机、高速风机(无传感器) 11 (全速域 HFI+NLFO)
算法研究、观测器调参 14 - 18 (Debug 模式)

6.上官硬件开源

「原理图。PCB。你的硬件一步到位。」 “Schematic. PCB. Your hardware runs out of the box.”

PCB 板示意图


7.📁仓库结构

SguanFOC_Library/
├── SguanFOC.c/h                # 核心框架
├── Sguan_math.c/h              # 数学运算 + 坐标变换
├── Sguan_IQmath.c/h            # 定点库
├── Sguan_PID.c/h               # PID 控制器
├── Sguan_Ladrc.c/h             # LADRC 自抗扰
├── Sguan_SMC.c/h               # 滑模控制
├── Sguan_STA.c/h               # 超螺旋滑模
├── Sguan_PLL.c/h               # 锁相环
├── Sguan_Filter.c/h            # 巴特沃斯/切比雪夫/贝塞尔
├── Sguan_SVPWM.c/h             # SVPWM 调制
├── Sguan_SPWM.c/h              # SPWM + 三次谐波注入
├── Sguan_HFI.c/h               # 高频注入
├── Sguan_SMO.c/h               # 滑模观测器
├── Sguan_NLFO.c/h              # 非线性磁链观测器
├── Sguan_NSD.c/h               # 极性辨识
├── Sguan_DOB.c/h               # 扰动观测器
├── Sguan_Optimize.c/h          # MTPA/弱磁/死区/角度补偿
├── Sguan_Cogging.c/h           # 抗齿槽标定
├── Sguan_Identify.c/h          # 参数辨识
├── Sguan_printf.c/h            # JustFloat 通信
├── Sguan_MotorStatus.c/h       # 状态机
├── Sguan_Feedforward.c/h       # 前馈环节
├── Sguan_Hall.c/h              # 三霍尔信号处理
├── UserData_Config.h           # (用户)配置开关
├── UserData_Function.h         # (用户)硬件接口
├── UserData_Motor.h            # (用户)电机参数
├── UserData_Parameter.h        # (用户)控制器参数
├── UserData_Status.h           # (用户)状态机回调
└── UserData_UserControl.h      # (用户)指令处理

👉 完整 API 操作文档


8.License

本项目采用 MIT 协议开源。

你可以自由使用、修改、分发本代码库,包括商业用途——公司内部使用、客户项目交付、做成付费产品售卖,均无限制。无需事先授权,无需支付任何费用。

MIT 协议仅要求保留版权声明,不强制注明出处,但欢迎告知我们你的使用场景。

📄 详见 LICENSE 文件


9.Connect 源代码作者

星必尘Sguan 是一名嵌入式算法工程师、开源硬件爱好者、独立开发者。代表作:SguanFOC 开源项目(GitHub FOC 算法库)。全平台分享电机控制、嵌入式开发与开源硬件技术。

平台 账号 链接
GitHub Sguan-ZhouQing https://github.com/Sguan-ZhouQing
B 站 星必尘Sguan https://space.bilibili.com/564956515
抖音 星必尘Sguan 抖音号:dy9q15ail4xc
粉丝群 【Sguan(^^)】水友快乐屋 群号:716279199
邮箱 技术交流 [email protected]

技术咨询、项目合作 → 通过以上平台或邮箱联系即可。

SguanFOC - 让电机控制更简单 🚀

评论

暂无评论