说明:部分图片素材来源于网络
续上一章: FOC直流无刷电机控制算法 理论到实践 —— 理论(一)(点击跳转)
下一章: 直流无刷电机FOC控制算法 理论到实践 —— 实践
在上一章节,我们对于FOC大体有了一个介绍,本博文将详细描述有关Clark变化、Park变化、反Park变化以及SVPWM的理论实现原理,也即相关数学运算实现。
在①处进行Clark运算,将静止的a_b_c坐标系转换为α_β坐标系
通过计算得到:
在②处进行Park变化,将静止的α_β坐标系转化为旋转的d_q坐标系,同时通过Park变化,正弦运算转化为常数运算
通过clark变化和park变化,原本呈正弦变化的电流已经转变为常数了,此时便方便我们进行其他计算了,因此在③处进行电流环PID运算;
PID输入为 Iq_ref,Id_ref, Iq, Id,PID输出为Uq,Ud
根据我们在上一章节 FOC直流无刷电机控制算法 理论到实践 —— 理论(一) 的分析可知,只有Q轴分量才是真正用来驱动电机的,D轴分量主要用于电机发热,因此 Id_ref 应为0,甚至可以D轴直接不进行PID运算,直接将 Ud 设置为 0。
通过①和②将原来的 a_b_c轴 转化到了 d_q轴 进行运算完成之后,接下来需要做的便是将坐标系再变回去对电机进行控制了,首先进行④ 反Park变换,将 d_q轴 转化为 α_β坐标系
经过④反Park变换之后,坐标轴到了 α_β坐标系 ,首先大家想到的肯定是接下来是不是需要进行反Clark变换了,然而并不是,毕竟采用MCU程序实现,反Clark变化之后,并不方便实现对电机的控制,因此引入了SVPWM运算
首先SVPWM是什么呢?
SVPWM,即Space Vector Pulse Width Modulation空间矢量脉宽调制的简称,其原理类似于力的合成
通过控制三相半桥的导通方式不同,我们可以生成6个不同方向的力矩,这也就是六步换相的原理,以三相半桥为例:
序号 | A | B | C |
---|---|---|---|
1 (V0) | 0 | 0 | 0 |
2 (V1) | 0 | 0 | 1 |
3 (V2) | 0 | 1 | 0 |
4 (V3) | 0 | 1 | 1 |
5 (V4) | 1 | 0 | 0 |
6 (V5) | 1 | 0 | 1 |
7 (V6) | 1 | 1 | 0 |
8 (V7) | 1 | 1 | 1 |
我们将以上几种组合所产生的力矩方向在下图中绘出,如下图:
现在我们将电机的转子简化,看成是一对磁极(红色:电机N机 蓝色:电机S极),由于 磁场同性相斥,异性相吸 的原理,为了实现驱动效率最大化,也即力做功最大化,我们期望产生的合成力矩与转子磁场成90°相切,即图中的绿色箭头所指方向,但是根据我们上面的分析可知,通过控制三相半桥的导通,仅仅只能实现在 V1 - V6 六个固定方向的力,那有如何产生图中绿色箭头所指的方向的力呢?
这个时候就需要使用到我们高中所学的力的合成了,根据力的合成:
通过合理的控制 Tx 、 Ty 和 Tz 在一个周期内所占用的时间,根据伏秒平衡等效原理了。亦可看成产生了一个周期为 Ts 的合成力F
这里我们为了调节合成磁力F的幅值,引入了两个零矢量 V0 和 V7,为什么需要引入两个0矢量呢?引入一个是否也可以呢?这里便涉及到FOC理论如何转化到实际控制的问题,也就是大家常说的七段式SVPWM 和 五段式SVPWM
首先讲下为什么引入零矢量呢?引入零矢量有两个目的:
七段式SVPWM控制如下图所示:
五段式SVPWM控制如下图所示:
七段式和五段式的区别是:七段式谐波分量更小,但是每个周期会有六次开关切换,开关损耗比较大;五段式每个周期只需要四次开关切换,开关损耗相对较小,但是谐波分量更大
综上,以 V0 ~ V7 为基础力矩,通过这六个方向的基础力矩便可合成任意方向的大小幅值可调的合成磁力F,从而实现以最大效率驱动电机运转,这便是SVPWM,空间矢量脉宽调制的原理了
需要注意的是,合成力矩的调节范围为六边形的内,在实际控制过程中,为了获得良好的控制效果,我们期望给到电机的力是均匀的,因此在实际控制中,我们会将力矩控制在六边形的内切圆内,如下图所示:
以下是在网上找的一张动图辅助大家理解力矩的合成
α_β坐标系内的Uα和Uβ,通过SVPWM模块,可以输出三相相位相差120°的马鞍波,任意两相马鞍波相减,即可得到正弦波,这便是采用SVPWM实现直流无刷电机控制的原理。
SVPWM运算具体实现大概可以分为两个步骤,接下来将逐步讲解SVPWM的实现。
根据上述分析,通过控制三个半桥的导通,我们可以获得 V0 ~ V7 八个方向的基础矢量力矩,我们根据这 V1 ~ V6 将360°拆分为六个扇区,扇区Ⅰ到扇区Ⅵ,同时根据 V1~V6 建立六边形坐标系
接下来我们先整理下我们的“目标”和“工具”:
那么接下来我们只需要思考如何采用我们已拥有的工具去实现我们需要实现的目标即可。
此外在目标与工具之间还存在着一个桥梁,将两者相互连接起来,那便是 Vref ,亦可这么理解:其实只是实现 Vref 在α_β坐标系和V1~V6六边形坐标系之间的相互转化
在六边形坐标系中,Vref的合成是需要区分其在哪一个扇区,需要采用哪两个基础矢量实现合成,因此首先需要做的便是判断扇区,而根据Uα和Uβ,我们可以知道 Vref 所在哪一个扇区
由于markdown不方便编辑复杂公式,因此采用word编辑之后截图贴图说明
同理其他情况亦可按此方法进行推导分析,最终得到下表:
(A,B,C) | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
---|---|---|---|---|---|---|---|---|
扇区 | 无 | 4 | 6 | 5 | 2 | 3 | 1 | 无 |
N = 4C + 2B +1A | 0 | 4 | 2 | 6 | 1 | 5 | 3 | 7 |
N = 4A + 2B + 1C | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
在实际计算中,我们通过Park变化后的 Uα 和 Uβ 计算 U1 U2 U3的正负,可以得到N,N的计算方式可以选择 N = 4C + 2B +1A
或 N = 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β 满足条件。通过扇区判断,我们可以知道目标矢量 Vref 在哪一个扇区内,而 Vref 则可由其相邻的两个 V1 - V6 基本矢量合成,那么此两个相邻矢量以及为了调节 Vref 的幅度,在周期T内引入V0或者V7这个两个0矢量,这几个部分在一个周期内各自分配多长时间呢?
我们以 Vref 在第Ⅰ扇区举例,那么 Vref 则由V4、V6、V0和V7合成,首先假定:
Vref
的作用时间为 Ts
V0 ~ V7
的作用时间分别为T0 ~ T7
同样还是和力的分解一样,我们以扇区Ⅰ举例,假定此时我们需要得到的 Vref 在扇区Ⅰ内,则
和力的分解与合成一样,我们可以将 Vref 以及 V4 V6分别分解到 α_β 坐标轴上
同理,其他扇区亦可按照此方法计算,得到下表: