基于灵动微 SPIN360C 无感弦波(双电阻)方案介绍

一、概述

        在前面的博文中,介绍了如何利用 MM32SPIN360C 电机开发板驱动带霍尔传感器的 PMSM 电机的方法,这次我继续用这块开发板驱动无传感器正弦波的方案。因为缺少了传感器,所以此方案采用双电阻的电流采样来做闭环反馈。关于 MM32SPIN360C 电机开发板的介绍可点击如下链接:

              https://www.wpgdadatong.com/blog/detail?BID=B4496

        灵动微的无感 FOC 控制框图如下图所示:


图 1 .无感 FOC 控制框图

        从框图中可以看出,与有感 FOC 相比,无感 FOC 也有 SVPWM 、反 Park 变换、以及 PI 控制部分。与有感 FOC 理论不同的是反馈的部分。无感 FOC 是通过滑膜观测器(SMO)和 锁相环(PLL)计算出转子的位置和速度。

        在之前的博文中已经介绍了 SVPWM 、Clark 变换、Park 变换、SMO 以及 PLL,下面简单介绍一下无感 FOC 的双电阻电流采样。

        电流采样的方式一般分为三电阻、双电阻、单电阻,这三种采样方式都有其优点和缺点,方案的不同,对应的电流处理方式也就不同,系统最终运行的效果可能也会有差异,所以这三种方案也有其适用的场合。如下图 2 所示为三种电流采样方式的示意图。

 


图 2. 三种采样方式

        ① 三电阻采样

        从图 2 的三电阻示意图中可以看出,三电阻采样方式直接使用三个检流电阻采样三组逆变桥的下桥臂的续流电流,这样得到的结果比较直接。根据基尔霍夫定律:Iu + Iv + Iw = 0,需要把采样窗口小的那一相相电流重新计算出来,这样得到的结果准确度比较高。这种采样方式的优点就是算法简单,但是因为要使用三个检流电阻和三个运放,所以在硬件成本上会相对其他两种更高一些。

        ② 双电阻采样

        从图 2 的双电阻示意图中可以看出,双电阻采样方式是在三组逆变桥中选取两组做续流电流的检测。然后根据基尔霍夫定律:Iu + Iv + Iw = 0 计算出第三相的电流值。为了保证采样电流足够准确,考虑到检测时间与延迟问题,这种检测方式需要保证采样窗口足够大。要让采样窗口足够大的话,就需要对 PWM 波形进行变形处理。这样的结果会导致 PWM 的最大占空比有限制。

        ③ 单电阻采样

        从图 2 的单电阻示意图中可以看出,检流电阻检测的是母线电流,需要再根据算法算出三相电流值。其硬件只需要一个检流电阻和一个运放,所以硬件成本相对其他两种是最低的,但是相对软件算法处理上是最复杂的。这种采样方式将在下一篇博文中详述。

        对于 SPIN360C 电机开发板的 FOC 电阻采样的电路如图 3 和 4 所示。

        如果用双电阻采样方式,R10 和 R9 的压差通过 MCU 内置的运算放大器放大之后,ADC 采样即可计算出U 相和 V 相的相电流。最后再利用基尔霍夫定律计算出 W 相的电流。

        如果用单电阻采样方式,首先要把 JP2、JP3 短路,旁路掉 R9、R10。然后采样 R7 的母线电压,计算出母线电流。


图 3. MM32SPIN360C 原理图


图 4. FOC 电阻采样放大电路

 

二、 软件实现

  1. 软件的架构

        本软件是 FOC 双电阻采样的例程。软件采用灵动微的 FOC 软件库架构,整个软件结构清晰易懂。软件采用双环控制(电流环+速度环)。


图 5. 软件结构

        软件具有如下特点:

              (1) 时序清晰 —— 仅使用一个常用中断,减少可能的时序冲突和 BUG。

              (2) 便于移植 —— 算法层、驱动层、数学库完全独立,软硬件配置完全剥离,互不干扰。

              (3) 定标统一 —— 统一 Q15 小数定标。

              (4) 函数模块化 —— 逻辑清晰的状态机,简洁明了的状态切换。

              (5) 配置方便 —— 主要参数配置意义明确,可视化。

 

  1. 状态机

        软件中设置了 FAST 和 SLOW 两组状态机,用于处理不同的响应速度要求。FAST 状态机在中断处理函数中处理。SLOW 状态机每 1ms 执行一次。两组状态机的状态一致。状态机的流程图如下图 6 所示:


图 6. 状态机

 

        系统上电之后,软件首先进入初始化状态,对 PWM 和系统参数进行初始化。初始化之后进入 STOP 状态。当速度命令达到设置的启动条件之后,进入 RUN 状态。在 RUN 状态中,有几个子状态,包括:calibration(初始化)、ready(准备)、align(预定位)、startup(开环启动)、spin(闭环运行)、freewheel(自由停机)。如果发现错误,就进入 FAULT 状态。

        (1) INIT 状态

              INIT 状态的函数是:M1_Init_Fast 和 M1_Init_Slow,作用是对各个参数进行初始化。

        (2) STOP 状态

              STOP 状态的函数是:M1_Stop_Fast 和 M1_Stop_Slow,作用有 3 个:

                    ① 等待速度命令达到设定的启动条件后切换到 RUN 状态;

                    ② 检查相电压是否超过阈值;

                    ③ 检查是否出现错误状态,若有错误状态,则切换到 FAULT 状态。

        (3) FAULT 状态

              FAULT 状态的函数是:M1_Fault_Fast 和 M1_Fault_Slow,其作用有 2 个:

                    ① 在 FAULT 状态期间继续检测母线电压的状态;

                    ② 在错误状态清除之后,延时一段时间,再切换到 STOP 状态。

        (4) RUN 状态

              RUN 状态下有 6 个子状态,当状态机进入 RUN 状态之后,RUN 子状态机就会被调用。

              1)Calibration 子状态

                    Calibration 子状态的函数是:M1_RunCalibFast 和 M1_RunCalibSlow,其作用有 2 个:

                    ① 在 Calib 状态期间继续检测母线电压的状态;

                    ② 切换到 Ready 子状态。

              2)Ready 子状态

                    Ready 子状态的函数是:M1_RunReadyFast 和 M1_RunReadySlow,其作用有:

                    ① 开启 PWM 输出,此时 PWM 的占空比为 50%;

                    ② 在 Ready 状态期间继续检测母线电压的状态;

                    ③ 当PWM 开启时间超过自举电容的充电时间,切换到Align 子状态。

              3)Align 子状态

                    Align 子状态是电机转子预定位的过程。Align 子状态的函数是:M1_RunAlignFast 和 M1_RunAlignSlow,其作用有:

                    ① 继续检测母线电压的状态;

                    ② 电流采样,调用转子定位算法,更新 PWM;

                    ③ 如果给定的转速未达到开环启动条件,则切换到 Ready 子状态;

                    ④ 如果预定位的时间到达设定的时间,则切换到 Startup 子状态。

              4)Startup 子状态

                    Startup 子状态是电机转子开环运行的过程。Startup 子状态的函数是:M1_RunStartupFast 和 M1_RunStartupSlow,其作用有:

                    ① 继续检测母线电压的状态;

                    ② 电流采样,实时跟踪转子位置,计算速度;

                    ③ 调用 FOC 算法,更新 PWM;

                    ④ 如果给定的转速低于 Freewheel 的速度,则切换到 Freewheel 子状态;

                    ⑤ 如果转子的速度达到闭环的开始速度,则切换到 Spin 子状态。

              5)Spin 子状态

                    Spin 子状态是电机转子闭环运行的过程。Spin 子状态的函数是:M1_RunSpinFast 和 M1_RunSpinSlow,其作用有:

                    ① 继续检测母线电压的状态;

                    ② 电流采样,实时跟踪转子位置,计算速度;

                    ③ 调用 FOC 算法,更新 PWM,使转子的速度达到给定的速度;

                    ④ 如果给定的速度低于 Freewheel 的速度,则切换到 Freewheel 子状态。

              6)Freewheel 子状态

                    Freewheel 子状态是停止电机运转的过程。Freewheel 子状态的函数是:M1_RunFreewheelFast 和 M1_RunFreewheelSlow,其作用有:

                    ① 关闭 PWM 输出;

                    ② 继续检测母线电压的状态;

                    ③ 电流采样,实时跟踪转子位置,计算速度;

                    ④ 当时间达到设定值,则切换到 Ready 状态。

  1. 参数说明

        Parameter.h 中包含所有电机控制中需要设置的变量。对参数的说明请参见附件。

 

三、总结

        本文档介绍了如何使用 MM32SPIN360C 电机应用开发板驱动低压无感弦波的方法。对于无刷电机弦波的控制理论,难点在于反馈环节中转子速度和位置角度的计算和控制算法。在实际操作中,针对不同的电机,还需要注意电机参数对电机的控制的影响。

本软件采用了灵动微的软件框架,整个软件架构清晰,方便客户的二次开发。也方便在灵动微的不同 MCU 型号上移植。大大提高了用户的效率。

 

四、参考资料

  1. DS_MM32SPIN360C_p_V1.07_SC.pdf
  2. UM_MM32SPIN2x_p_V1.19_SC.pdf
  3. 灵动微.SPIN0280 软硬件平台介绍.2022
  4. 世平基于灵动微 MM32SPIN360C 的低压无刷电机应用方案 - 大大通 (wpgdadatong.com)

技术文档

类型标题档案
操作手册User Manual

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论