FOC学习路线

发布于:2025-09-06 ⋅ 阅读:(17) ⋅ 点赞:(0)

FOC学习路线

1.了解理论基础

个人感觉全网讲得最好的是稚慧君的这篇文章

2.补充一些关于FOC的认知

2.1 输出路线

stm32输出pwm -> 预驱 -> 6个MOS管组成的三相半桥电路

2.1.1 pwm信号

stm32输出的pwm可能是3路或者6路(取决于你的预驱)

  • 6路实际上是在3路的基础上加上对应互补的pwm
  • 如果是6路,一般意味着你要自己控制死区,输出6路pwm一般要高级定时器才能做到

死区:指在两个通道切换时的延迟,用于确保一个通道完全关闭后另一个通道才开始导通,为了避免功率开关器件(如MOSFET或IGBT)同时导通而导致短路

2.1.2 预驱相关
  • 功能是根据逻辑信号(pwm的高低电平)控制MOS管开关,因为一般驱动MOS管所需要的电压是stm32无法提供的
  • 预驱其实还有一些功能,比如:
    • 常见的故障检测保护:过流、过温、过压、欠压等
    • 死区插入、防直通
    • 运放(用于电流采样)
    • 三相半桥电路(即可以省去6个MOS管,在制作小电机驱动板时可以节省大量空间)
2.2 输入参数

一般来说有两个输入:

  • 转子位置,Park算法需要
  • 电流大小及方向,Clarke算法需要
2.2.1 转子位置

其中转子位置可以采样传感器(编码器)获取,也可以基于反电动势估算出来,所以foc也可以根据此被划分为

  • 有感foc:适合低转速,需要精准控制旋转角度。比如:关节电机、云台
  • 无感foc:适合高转速,要求低成本。比如:电动工具、吹风筒等

之所以分别有这样的特性,是因为一般无感的采用的位置估算器要在高转速、有规律的速度下才可准确估算位置。同时无感由于不需要传感器,成本可以进一步压缩。

编码器有很多种类,以下要常见的三种:

编码器类型 精度 分辨率 输出信号 优点 缺点 典型应用
霍尔传感器(Hall Sensors) 低(每转 3~6 个状态) 数字(6步换向) 成本低、耐用、抗干扰强 分辨率低、无法精确定位 通用BLDC、风机、电动工具
增量式编码器(Incremental Encoder) 中~高(CPR: 100~5000) A/B/Z 相差分或单端 成本适中、高分辨率、易用 掉电丢失位置、需回零 CNC、机器人
磁编码器(Magnetic Encoder) 中~高 中(12~18位) 模拟或数字输出 抗震、防尘、非接触 易受强磁场干扰 电动车辆、工业电机、伺服系统

对应我们来说,大多数情况都是需要精准控制旋转角度,因此采用磁编码器合适。

2.2.2 电流采样

电流采样的原理其实就是欧姆定律:I = U / R

串联一个采样电阻到需要测量电流的线路中,测量电阻两端的电压,然后用这个电压除以采样电阻大小就能得到电流大小。

采样电阻: 高精度低阻值的电阻,一般为0.1~100毫欧,1%精度

但实际上因为两端的电压差较小,需要使用运算放大器实现差分放大,并且添加偏置电压后才将通过ADC转换。

不过原理虽然是这样,但还是有问题需要解决。

2.2.2.1.采样电阻所在的位置

根据采样电阻的位置可以分为:高端采样、低端采样和直接采样

  • 高端采样:采样电阻处于母线与上桥臂之间
    • 优点:不干扰负载的地电压
    • 缺点:要承受较高的电压,有较强的共模噪声,一般需要专用的高边电流检测IC或隔离方案,成本高
  • 低端采样:采样电阻处于下桥壁和功率地之间
    • 优点:接近0v的共模电压,较低的共模噪声
    • 缺点:抬高了负载的地电压
  • 直接采样:采样电阻处于半桥和电机相线之间
    • 不知道为什么网上鲜有此类型的讨论,也没看见有使用的

根据易用性和成本考虑,基本上都是选择低端采样。

2.2.2.2.采样电阻的数量

根据采样电阻的数量,可以分为单电阻、双电阻、三电阻方案。

在理论上,使用基尔霍夫电流定律(KCL),我们需要知道无刷电机流过三相线中任意两条的电流大小及方向,就能得到算出第三条,进而实现电流重构,因此我们需要采样得到两条相线的电流及方向。

  • 单电阻:只需要一个采样电阻和运放,采样电阻处于三个半桥整体和功率地之间,采样的电流实际上是母线电流,而不是单独的相电流。
    • 优点:硬件成本低
    • 缺点:对采样时机要求较高,需要在一个PWM周期内采样两次(分时采样)
  • 双电阻:使用两个采样电阻和运放,分别处于三个下桥臂中的任意两个 和功率地之间,采样的是相电流
    • 优点:对采样时机的要求不高,但也有要求
    • 缺点:成本比单电阻的高
  • 三电阻:使用两个采样电阻和运放,分别处于三个下桥臂中的和功率地之间
    • 优点:任何时候都能采样(实际上是根据SVPWM扇区取其中两个采样然后算出一个)
    • 缺点:成本高
2.2.2.3.阻值应该选择

采样电阻不能太大,如果大了,那采样电阻的功耗高,发热严重,而且抬高了地电压;也不能太小,如果太小导致两边的压差过小,噪声占比会提高,而差分放大后,噪声也一样会被放大。

采样电阻要根据驱动板设计的最大电流选择,首先看公式:

ADC测量电压 = (电流 x 采样电阻) x 放大倍数 + 偏置电压

偏置电压一般为ADC测量范围的二分之一,stm32的主控电压为3.3V,若VREF也为3.3V,则ADC测量范围为0~3.3V,则偏置电压为1.65V。

放大倍数一般考虑5~10倍,然后按照最大电流的1.3倍(留有余量)带入公式计算采样电阻。

2.2.2.4.为什么要加上偏置电压

因为电流方向有正有反,而ADC只能测量正电压。

3.算法实现

3.1 进度划分

关于foc算法学习的进度,个人觉得可以分为:

  • 实现开环拖动
    • 目标:让电机转起来,验证硬件、stm32外设配置、基础的算法(Clarke、Park、SVPWM)是否正常
    • 方法:
      • 给定一个旋转的电压矢量(如 Vd=0, Vq=固定值),通过 SVPWM 输出;
      • 不依赖电流反馈,也不依赖精确转子位置(可用假设角度线性增加)
  • 基于开环电流实现速度或位置闭环
    • 目标:实现最基础的可用,检验编码器及编码器驱动是否正常
  • 基于电流采样实现电流(力矩)闭环
    • 目标:FOC核心,验证电流采样电路是否正常、ADC采样时机是否正确
  • 实现力矩-(速度/位置)闭环
    • 完整实现FOC功能

3.2 学习方向

  1. 看灯哥开源的,但由于用的是Arduino,所以只能学学原理,然后可以自己尝试移植到stm32

  2. 如果会使用MATLAB,可以考虑基于仿真实现一遍算法

  3. 参考开源项目

    • dgm:单路foc,基于GD32,代码写得很好
    • ODrive:国内外最热门的foc开源项目之一,基于stm32f405驱动双路foc,但是开发环境非Keil,且基于freetrtos多任务与c++,代码架构复杂,学习难度较大。感兴趣的可以阅读loop222大佬的文章,但帮助有限。
    • AxDrive-L:板子优雅,但复刻成本较高。作者提供的资料很详细,可以借鉴学习
      • [1. AxDrive-L 用户手册](https://github.com/disnox/disnox_blog/blob/main/docs/project_group/motor_ctrl/AxDrive-L/1. AxDrive-L 用户手册.md)
      • [2. AxDrive-L 硬件设计报告](https://github.com/disnox/disnox_blog/blob/main/docs/project_group/motor_ctrl/AxDrive-L/2. AxDrive-L 硬件设计报告.md)
      • [3. AxDrive-L 软件设计报告](https://github.com/disnox/disnox_blog/blob/main/docs/project_group/motor_ctrl/AxDrive-L/3. AxDrive-L 软件设计报告.md)(没更)
      • [永磁同步电机](https://github.com/disnox/disnox_blog/blob/main/docs/skill/motor/pmsm/1. 永磁同步电机.md)(后半部分建议阅读)
    • 浩盛FOC&步进二合一驱动板
      • 软件开源、硬件原理图开源、实物在闲鱼有售
      • 代码写得很好,支持有感/无感

4.硬件实现

从容易到难为:

  • 主控 + 内置三相半桥的预驱(如DRV8313、MP6536) + 不要电流采样
    • 省略了MOS管部分电路,降低了极大难度
  • 主控 + 内置三相半桥的预驱(如DRV8313、MP6536) + 电流采样
    • 能实现电流闭环
  • 主控 + 预驱(如FD6288、EG2133、DRV8301) + 三相半桥(6个MOS+外围电路) + 电流采样
    • 能实现大功率的驱动

根据情况可以选择外接磁编码器,或者是直接加在驱动板背面。

常见编码器:AS5600、MT6501、MT6701、MA732、AS5047、SC60224

参考资料


网站公告

今日签到

点亮在社区的每一天
去签到