• FOC直流无刷电机控制算法 理论到实践 —— 理论(二)


    直流无刷电机FOC控制算法 理论到实践 —— 理论(二)

    上一章节:FOC直流无刷电机控制算法 理论到实践 —— 理论(一)

    下一章节:直流无刷电机FOC控制算法 理论到实践 —— 实践

    说明:部分图片素材来源于网络

    1. 概述

    续上一章: FOC直流无刷电机控制算法 理论到实践 —— 理论(一)(点击跳转)

    下一章: 直流无刷电机FOC控制算法 理论到实践 —— 实践

    在上一章节,我们对于FOC大体有了一个介绍,本博文将详细描述有关Clark变化、Park变化、反Park变化以及SVPWM的理论实现原理,也即相关数学运算实现。
    在这里插入图片描述

    2. Clark变化运算

    在①处进行Clark运算,将静止的a_b_c坐标系转换为α_β坐标系

    通过计算得到:

    • Iα = Ia
    • Iβ = (Ia + 2Ib) / sqrt(3)

    在这里插入图片描述

    3. Park变化运算

    在②处进行Park变化,将静止的α_β坐标系转化为旋转的d_q坐标系,同时通过Park变化,正弦运算转化为常数运算

    • Id = Iα · cosθ + Iβ · sinθ
    • Iq = Iα · sinθ + Iβ · cosθ
    • 注意此处的 θ 为电机此时的电角度
      在这里插入图片描述

    4. PID运算

    通过clark变化和park变化,原本呈正弦变化的电流已经转变为常数了,此时便方便我们进行其他计算了,因此在③处进行电流环PID运算;

    PID输入为 Iq_ref,Id_ref, Iq, Id,PID输出为Uq,Ud

    • Iq_ref:Q轴目标电流
    • Id_ref:D轴目标电流
    • Iq:Q轴反馈电流
    • Id:D轴反馈电流
    • Uq:Q轴目标电压
    • Ud:D轴目标电压

    根据我们在上一章节 FOC直流无刷电机控制算法 理论到实践 —— 理论(一) 的分析可知,只有Q轴分量才是真正用来驱动电机的,D轴分量主要用于电机发热,因此 Id_ref 应为0,甚至可以D轴直接不进行PID运算,直接将 Ud 设置为 0。

    • 此处的PID模块亦是一个隔离转换模块,输入为电流量,输出为电压量
    • 而在实际的FOC实现中,我们是通过程序控制实现的,在程序里最终控制的到电机的是定时器
    • 因此此输出量最终应该和定时器的参数(CCR)相互关联,这也是PID的第二大妙处了

    5. 反Park变化运算

    通过①和②将原来的 a_b_c轴 转化到了 d_q轴 进行运算完成之后,接下来需要做的便是将坐标系再变回去对电机进行控制了,首先进行④ 反Park变换,将 d_q轴 转化为 α_β坐标系

    • Uα = Ud · cosθ - Uq · sinθ
    • Uβ = Ud · sinθ + Uq · cosθ
      在这里插入图片描述

    6. SVPWM运算

    经过④反Park变换之后,坐标轴到了 α_β坐标系 ,首先大家想到的肯定是接下来是不是需要进行反Clark变换了,然而并不是,毕竟采用MCU程序实现,反Clark变化之后,并不方便实现对电机的控制,因此引入了SVPWM运算

    6.1 SVPWM 原理

    首先SVPWM是什么呢?

    SVPWM,即Space Vector Pulse Width Modulation空间矢量脉宽调制的简称,其原理类似于力的合成

    通过控制三相半桥的导通方式不同,我们可以生成6个不同方向的力矩,这也就是六步换相的原理,以三相半桥为例:

    • 将三个半桥分别命名为 A B C
    • 假定上半桥导通、下半桥关闭为 1
    • 假定上半桥关闭、下半桥导通为 0
      在这里插入图片描述
      我们一共能出现8中组合方式,如下表所示:
    • 其中第1种和第8种组合为特殊组合
      • 第1种组合上管全部关闭,下管全部打开
      • 第8种模式,上管全部打开,下管全部关闭
      • 此两种模式均无力矩输出
    序号ABC
    1 (V0)000
    2 (V1)001
    3 (V2)010
    4 (V3)011
    5 (V4)100
    6 (V5)101
    7 (V6)110
    8 (V7)111

    我们将以上几种组合所产生的力矩方向在下图中绘出,如下图:

    在这里插入图片描述
    现在我们将电机的转子简化,看成是一对磁极(红色:电机N机 蓝色:电机S极),由于 磁场同性相斥,异性相吸 的原理,为了实现驱动效率最大化,也即力做功最大化,我们期望产生的合成力矩与转子磁场成90°相切,即图中的绿色箭头所指方向,但是根据我们上面的分析可知,通过控制三相半桥的导通,仅仅只能实现在 V1 - V6 六个固定方向的力,那有如何产生图中绿色箭头所指的方向的力呢?

    在这里插入图片描述
    这个时候就需要使用到我们高中所学的力的合成了,根据力的合成:

    • 在一个作用周期 Ts内,产生Tx时间的V4方向的力F4,产生Ty时间的V6方向的力F6
    • 在周期T内,将一部分作用时间 Tz分配给 V0 和 V7 ,通过这种方式控制合成力F的幅值大小
    • 同时满足 Ts = Tx + Ty +Tz

    通过合理的控制 Tx 、 Ty 和 Tz 在一个周期内所占用的时间,根据伏秒平衡等效原理了。亦可看成产生了一个周期为 Ts 的合成力F

    这里我们为了调节合成磁力F的幅值,引入了两个零矢量 V0 和 V7,为什么需要引入两个0矢量呢?引入一个是否也可以呢?这里便涉及到FOC理论如何转化到实际控制的问题,也就是大家常说的七段式SVPWM五段式SVPWM


    首先讲下为什么引入零矢量呢?引入零矢量有两个目的:

    • 通过零矢量调节合成矢量的幅值
    • 通过插入零矢量,使得七段式/五段式SVPWM在每一段切换时,只需要动作一路开关,同时得到的是成中央堆成的PWM,大大减少谐波分量

    七段式SVPWM控制如下图所示:
    在这里插入图片描述在这里插入图片描述五段式SVPWM控制如下图所示:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述七段式和五段式的区别是:七段式谐波分量更小,但是每个周期会有六次开关切换,开关损耗比较大;五段式每个周期只需要四次开关切换,开关损耗相对较小,但是谐波分量更大

    综上,以 V0 ~ V7 为基础力矩,通过这六个方向的基础力矩便可合成任意方向的大小幅值可调的合成磁力F,从而实现以最大效率驱动电机运转,这便是SVPWM,空间矢量脉宽调制的原理了

    需要注意的是,合成力矩的调节范围为六边形的内,在实际控制过程中,为了获得良好的控制效果,我们期望给到电机的力是均匀的,因此在实际控制中,我们会将力矩控制在六边形的内切圆内,如下图所示:
    在这里插入图片描述
    以下是在网上找的一张动图辅助大家理解力矩的合成
    请添加图片描述
    α_β坐标系内的Uα和Uβ,通过SVPWM模块,可以输出三相相位相差120°的马鞍波,任意两相马鞍波相减,即可得到正弦波,这便是采用SVPWM实现直流无刷电机控制的原理。

    SVPWM运算具体实现大概可以分为两个步骤,接下来将逐步讲解SVPWM的实现。

    6.2 扇区判断

    根据上述分析,通过控制三个半桥的导通,我们可以获得 V0 ~ V7 八个方向的基础矢量力矩,我们根据这 V1 ~ V6 将360°拆分为六个扇区,扇区Ⅰ到扇区Ⅵ,同时根据 V1~V6 建立六边形坐标系
    在这里插入图片描述
    接下来我们先整理下我们的“目标”和“工具”:

    • V0 - V7是我们通过控制三个半桥可以得到的矢量,这是我们的工具
    • 经过反Park变化后的 Uα 和 Uβ 是我们需要去实现的目标

    那么接下来我们只需要思考如何采用我们已拥有的工具去实现我们需要实现的目标即可。

    此外在目标与工具之间还存在着一个桥梁,将两者相互连接起来,那便是 Vref ,亦可这么理解:其实只是实现 Vref 在α_β坐标系和V1~V6六边形坐标系之间的相互转化

    在六边形坐标系中,Vref的合成是需要区分其在哪一个扇区,需要采用哪两个基础矢量实现合成,因此首先需要做的便是判断扇区,而根据Uα和Uβ,我们可以知道 Vref 所在哪一个扇区

    由于markdown不方便编辑复杂公式,因此采用word编辑之后截图贴图说明

    在这里插入图片描述
    在这里插入图片描述

    同理其他情况亦可按此方法进行推导分析,最终得到下表:

    (A,B,C)000001010011100101110111
    扇区465231
    N = 4C + 2B +1A04261537
    N = 4A + 2B + 1C01234567

    在实际计算中,我们通过Park变化后的 Uα 和 Uβ 计算 U1 U2 U3的正负,可以得到N,N的计算方式可以选择 N = 4C + 2B +1AN = 4A + 2B + 1C 任意一种,之后通过查表的方式,得到实际的扇区

    此外,在上述扇区计算中,还有一点需要特别注意,那便是(A,B,C)(0,0,0)(1,1,1) 的时候,对应的扇区为无,这个的原因是:

    • (A,B,C)(0,0,0) 的时候,得到U1 = 0, U2 = 0, U3 = 0, Uα 和 Uβ均为0,不在扇区内;
    • (A,B,C)(1,1,1) 的时候,得到U1 = 1, U2 = 1, U3 = 1,不存在 Uα 和 Uβ 满足条件。

    6.3 计算矢量作用时间

    通过扇区判断,我们可以知道目标矢量 Vref 在哪一个扇区内,而 Vref 则可由其相邻的两个 V1 - V6 基本矢量合成,那么此两个相邻矢量以及为了调节 Vref 的幅度,在周期T内引入V0或者V7这个两个0矢量,这几个部分在一个周期内各自分配多长时间呢?

    我们以 Vref 在第Ⅰ扇区举例,那么 Vref 则由V4、V6、V0和V7合成,首先假定:

    • Vref 的作用时间为 Ts
    • V0 ~ V7 的作用时间分别为T0 ~ T7

    同样还是和力的分解一样,我们以扇区Ⅰ举例,假定此时我们需要得到的 Vref 在扇区Ⅰ内,则

    • 在α轴上有:Vref * cosθ * Ts = V4 * T4 + V6 * cos60° * T6
    • 在β轴上有:Vref * sinθ * Ts = V6 * cos30° * T6

    和力的分解与合成一样,我们可以将 Vref 以及 V4 V6分别分解到 α_β 坐标轴上
    在这里插入图片描述
    同理,其他扇区亦可按照此方法计算,得到下表:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    参考

    1. FOC电机控制之SVPWM原理与实现
    2. 【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术

    下一章节直流无刷电机FOC控制算法 理论到实践 —— 实践

  • 相关阅读:
    [N诺] 浙江大学历年机试题解
    matlab相机标定求得相机内参
    杭电oj 2032 杨辉三角 C语言
    13.TCP-bite
    R语言kaggle 游戏数据探索与可视化
    JavaWeb的基本概念
    基于FPGA的EMAC模块与FIFO模块:高速数据传输与存储
    20240701给NanoPi R6C开发板编译友善之臂的Android12系统
    flutter plugins插件【一】【FlutterJsonBeanFactory】
    大数据Flink(九十九):SQL 函数的解析顺序和系统内置函数
  • 原文地址:https://blog.csdn.net/qq_43332314/article/details/126452336