本文主要是介绍【电机控制】PMSM无感FOC控制(三)SVPWM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0. 前言
本章节会详细介绍SVPWM,计划在下一章讲解过调制。学完这一章你就会理解第一章里面PID控制器输出的dq轴电压经过变换后得到的αβ轴电压的真正含义,为什么会会输出αβ轴电压,αβ轴电压是怎么被SVPWM利用的。
之前我们讲过FOC是磁场定向控制,在进入SVPWM之前我们要清楚,这个定向的磁场是由什么产生的?怎么被控制的?
定向的磁场是由什么产生的?
上图是电机的刨面图,可以看到电机的定子是由一圈圈的线圈组成的,当线圈中有电流流过时就产生了磁场。那么要产生定向的磁场就需要产生定向的电流,要产生定向的电流就需要定向的电压。空间矢量脉宽调制(SVPWM)产生电压矢量的激发出电流流过线圈的绕组,从而产生磁场矢量;生成的磁场矢量不断旋转就带动了电机转动。到这里我们已经知道了,磁场是怎么被产生的,它是由电压矢量激发出的电流流过线圈所产生的。
最后一个问题这个磁场是怎么被控制的?
在描述这个问题以及进入后续的内容之前我们需要了解一些名词,端电压、线电压、相电压。
端电压:端电压就是电机三相线端相对于GND的电压,A相端电压记作UA,B相端电压记作UB,B相端电压记作UC;
线电压:线电压就是相相之间的电压Uab = UA - UB,Ubc = ...;
相电压:相电压就是电机三相线端相对于连接点N的电压,UAN = UA - UN,UBN = ...;
首先先大家要理解Uα和Uβ代表的是αβ坐标系下的一个电压矢量。其次要理解FOC是磁场定向控制。线圈中有电流流过时就会产生磁场,所以我们要产生一个定向的磁场时就需要控制电机的三相上的相电流,通过控制三相静止坐标系中的三相电流我们就可以产生出在这个平面内的任意方向的磁场,这样就可以完成磁场的定向控制。那怎么控制三相的电流呢?那就是通过控制三相的相电压,不同大小的相电压可以激励出不同大小的相电流。
第一章节我们说了为什么foc的控制流程的最后是SVPWM,而不是反Clark变换,因为通过PID控制以及反Park变换后得来的Uα和Uβ刚好又可以反Clark变换成我们想要的三相电压UAN、UBN、UCN。但是我们通过逆变电路能直接控制三相电压吗?很显然是不能的,逆变电路控制的是三相的端电压,那我们怎么通过三相的端电压来控制三相的相电压呢?
SVPWM刚好可以胜任这份任务,空间矢量脉宽调制(SVPWM)中的空间矢量指的就是磁场矢量,这个磁场矢量是由电压矢量产生的。Uα和Uβ代表的是αβ坐标系下的一个电压矢量,SVPWM通过控制逆变器的开关状态(也就是控制端电压),合成所需电压矢量,从而产生转动电机转子所需的磁场矢量。
1. 什么是SVPWM
1.1 SVPWM的概念
SVPWM(Space Vector Pulse Width Modulation)是一种空间矢量脉宽调制技术,也称为电压空间矢量脉宽调制技术。它是电力电子技术中一种非常重要的调制方法,广泛应用于交流电机控制、电力电子变换等领域。
SVPWM的基本思想是以三相对称正弦波电压供电时三相对称电动机定子理想磁链圆为参考标准,用逆变器不同的开关模式所产生的实际磁链矢量来追踪基准圆磁链矢量。具体实现方法是通过控制逆变器的开关状态,合成所需的电压矢量,使得电机的定子绕组中产生相应的电流矢量,从而产生所需的磁场矢量。
相比于传统的SPWM方法,SVPWM具有更高的直流电压利用率和更好的动态性能,因此在电力电子领域中得到了广泛应用。
2. SVPWM(空间矢量脉宽调制)如何产生所需的空间矢量
2.1 合成空间矢量需要的八个基础矢量
前面我们说过SVPWM通过控制逆变器的开关状态(也就是控制三相的端电压),合成所需电压矢量,从而产生转动电机转子所需的磁场矢量。在了解具体的合成过程之前我们首先要了解合成空间矢量所需要的8个基本矢量、8个基本矢量对应的驱动电路的6个开关管的状态、以及8个基本矢量对应的相电压。
首先我们知道电机驱动器的逆变电路有六个开关管,每两个开关管对应控制电机的一相的端电压,M1、M2控制A相的端电压UA,M3、M4控制B相的端电压UB,M5、M6控制C相的端电压UC。
我们可以定义一个开关函数Sx (x = a, b, c),当Sx等于1时代表x相的上管导通,下管断开(x相的端电压等于Vdc);当Sx等于0时代表x相的上管断开,下管导通(x相的端电压等于GND)。
Sa = 1代表M1导通,M2断开,Sa = 0代表代表M1断开,M2导通;
Sb = 1代表M3导通,M4断开,Sb = 0代表代表M3断开,M4导通;
Sc = 1代表M5导通,M6断开,Sc = 0代表代表M5断开,M6导通。
上下管是不能同时导通的,上管导通时下管就只能关断,下官导通时上管就只能关断,因为如果上下管同事导通了,那么Vdc就和GND直接接到了一起,电源就短路了,会烧坏电路以及电源。
那么通过对这三对开关管的状态进行组合我们就能得出8种不同的状态,这8种不同的状态代表了8个基础矢量Vx(x = 0,1,2,3,4,5,6,7),x的值与开关管的状态相关,我们可以把开关管的状态看成一个三位二进制数,Sa代表最高位,Sc代表最低位,当Sa = 1,Sb = 0,Sc = 0时x = 100(二进制表示),换算成十进制表示就是x = 4;
接下来我们要去计算这8种状态下的三相的相电压(计算这八个基础矢量的相电压是为了在三相静止坐标系(A-B-C)内画出这八个基础矢量),首先来分析V4(100)矢量的相电压情况,V4矢量代表着A相的上管导通,下管断开(A相端电压等于Vdc);B相的上管断开,下管导通(B相端电压等于GND),C相的上管断开,下管导通(C相端电压等于GND)。
因为三相星型电机一般都是对称绕组,相电阻一样,所以我们可以化简上图,用R代表三相绕组的阻抗如下图:
根据分压的原理可得出以下结论:
UAN = 2/3Vdc;
UBN = -1/3Vdc;
UCN = -1/3Vdc;
另外七种矢量的相电压推导过程同上,最后我们能得出如下表格:
2.2 SVPWM的六个扇区
在第一章我们学了三个坐标系,其中有一个坐标系叫做三相静止坐标系(A-B-C),现在我们知道每个基础矢量对应的相电压,就可以在这个坐标系以三相的相电压为坐标轴中画出这8个基础矢量。
根据三相系统向两相系统变换保持幅值不变的 原则定子电压的空间矢量可表示为:
式中
我们首先根据上面的表格在坐标系(正半轴用实线表示,负半轴用虚线表示)里画出V4矢量的各个相电压:
根据矢量合成的平行四边形法则,我们最终得到了一个在A轴正方向上,大小为Vdc的矢量,由于等幅值变换需要乘以一个2/3的系数,最终得到的矢量大小为2/3Vdc,如下:
我们按照上述的方法画出另外七个矢量,最终得到了如下的图形(其中V0和V7是坐标系零点上的两个点):
然而光只有这八个矢量还是不行的,SVPWM的目的是要在这个平面空间里面产生更多的矢量轨迹,从而使得电机平滑转动。
为了讲解后面的如何在这个平面内合成任意矢量,我们需要回顾一下PWM来做个过渡,我们知道如果电源电压为10V我们想得到1v的电压需要使用PWM脉宽调制,调整一个载波周期内高电平占空比为10%,如果想要得到10v的电压就要调整一个载波周期内高电平的占空比为100%。
SVPWM也是类似的思想,如果想在平面内得到方向与V4的矢量相同,大小为2/3Vdc大小的矢量,那我们必须控制开关管处于Sa = 1,Sb = 0,Sc = 0的状态持续一整个载波周期;如果想得到方向与V4的矢量相同,大小为1/3Vdc大小的矢量,就需要控制一个载波周期内的V4矢量的作用时间占整个载波周期的50%(也就是开关管一半时间为100状态),零矢量(V0和V7矢量称为零矢量)的作用时间占到50%(一半时间为111和000的状态)。
回到上面的图,这六个矢量将这个平面空间划分成了六份,这个平面内我们想合成的任意一个矢量都会落在这六个扇区的其中一个扇区,并且任意一个扇区的矢量我都可以通过这个扇区的两个矢量来合成,比如扇区1内的矢量我们可以通过调整V4、V6以及零矢量(V0、V7)的作用时间来合成。
2.3 SVPWM空间矢量的合成
2.3.1 矢量的合成
接下来我们定义载波周期为时间T,按照我们之前讲的,我们控制开关管处于100状态持续一整个载波周期T就能得到与V4矢量方向相同,大小为2/3Vdc的矢量。如果我们想在扇区一与α轴夹角30°的地方生成下图的黑色矢量(矢量长度为√3/3Vdc)。就需要先控制开关管处于100状态(V4矢量)作用1/2T,然后再控制开关管处于110状态(V6矢量)作用1/2T的时间,这样我们就能生成一个与黑色箭头方向一致的磁场。
如果我们是想在扇区一与α轴夹角30°的地方合成长度为√3/6Vdc矢量,那是不是先控制开关管处于100状态(V4矢量)作用1/4T,然后再控制开关管处于110状态(V6矢量)作用1/4T的时间,最后留下的1/2T的时间控制开关管处于000和111的状态(零矢量)。
第一个矢量(V4)的作用时间是t1 = 1/4T;
第二个矢量(V6)的作用时间是t2 = 1/4T;
零矢量(V0、V7)的作用时间是t0 = 1/2T;
现在大家理解SVPWM是怎么合成矢量了吧,其实就是在控制开关管不同的状态持续时间,从而合成出平面内的矢量。
2.3.2 矢量的合成的范围
上面一节我们知道了SVPWM调制怎么合成不同的电压矢量,那通过上述的方法我们可以合成这个平面内的任意一个矢量吗?
解答上个问题之前,我们先达成一个共识,SVPWM调制是为了产生不同的电压矢量合成,产生的一个在空间中旋转的电压矢量的轨迹,从而产生一个旋转的磁场带动电机转子转动。这个轨迹是个圆形,我们把它叫做矢量圆,它的半径反映了在标准的SVPWM调制下,能够达到的最大电压矢量幅值。
我个人理解这个矢量圆的半径反应了能够产生的磁场的大小,因为产生磁场是因为电流流过了线圈,电压矢量不会无限大,产生的电流也就不会无限大,因此生成的磁场也不会无限大。
那么SVPWM调制的矢量圆的半径最大是多大呢?答案就是我们上一节里面合成的第一个矢量,它的长度为√3/3Vdc。
那这是为什么呢?
我们看下面的图,当三角形OAB的B点落在由边长为Vdc的六边形上时,我们OA + AB刚好等于Vdc,也就是说:
矢量OA的作用时间t1 + 矢量AB的作用时间t2 = 载波周期T;
这也就表明了,我们不能合成超过这个六边形范围外的矢量,那我们矢量圆的半径是不是就确定了就是这个六边形的内切圆,半径为√3/3Vdc。
当然通过某些手段我们可以把矢量圆的半径拓宽到Vdc,这个方法就是过调制,这个我们后面再讲。
2.4 如何求解SVPWM基础矢量的作用时间
假设我们要合成如图所示的扇区1中的矢量OB,我们怎么求出矢量V4的作用时间t1和矢量V6的作用时间t2?
首先我们知道三角形的每条边与它对角的正弦值的比值相等即:
我们可以知道∠CAB = π / 3,那么∠OAB = 2π / 3,∠ABO = π / 3 - θ;代入上式得:
先分析 ,把代入得:
接下来方法分析,把代入得:
上面t1、t2得等式中T、Vdc是已知的,那么我们只要知道|OB|以及θ的值就能求出t1、t2的值了。
大家回想一下第一章我们讲的FOC框图里面SVPWM模块的输入是什么?
是不是Uα和Uβ?那么通过Uα和Uβ我们能不能算出t1、t2?
答案是可以的,因为|Uα| = |OB| * cosθ,|Uβ| = |OB| * sinθ,那么上面t1、t2的式子就可以化简为:
同理我们能计算出另外五个扇区的t1、t2矢量的作用时间如下表:
(把公式前面的系数用X表示)
既然我们知道了每个扇区的矢量都是有两个基础矢量和零矢量合成出来的,在知道两个基本矢量的作用时间后,就可以求出零矢量的作用时间t0 = T - t1 - t2。
3. 七段式SVPWM
以上图为例,我们要合成该黑色的矢量,矢量V4和矢量V6的作用时间是0.25T,矢量V4的作用时间为t1,矢量V6的作用时间为t2,零矢量的作用时间为t0。
根据t0 + t1 + t2 = T,可得t0 = 0.5T,通过之前的知识我们可以得知零矢量分为两种分别是V0(000)和V7(111),在这0.5T的时间内V0和V7各自作用力0.25T的时间。
什么式七段式SVPWM?就是我们把一个周期T划分成7段,每一段对应着一个矢量状态,通过七次矢量合成最终得到目标矢量。
既然通过七段式合成上面需要4个矢量(V4、V6、V0、V7),这4个矢量对应着六个管子不同的动作,功率管要开关那肯定会开关损耗,因此我们需要找出一种开关损耗最小的开关方式。
为了保证这七个状态切换时,开关损耗最好,我们每次要尽可能让开关的动作次数最少。
如下下图(下图的波形我们可以看成Sa、Sb、Sc的状态,也可以看成三个上桥臂的PWM波的波形):
我们要合成扇区1里面的黑色矢量,分7段(其实图中的时间段分为了八段,但是中间的111连续视为一段,这样的话就只有七段了):
第1段:合成矢量V0(000)作用时间1/8T(t0/4);
第2段:合成矢量V4(100)作用时间1/8T(t1/2);
第3段:合成矢量V6(110)作用时间1/8T(t2/2);
第4段:合成矢量V7(111)作用时间1/4T(t0/2);
第5段:合成矢量V6(110)作用时间1/8T(t2/2);
第6段:合成矢量V4(100)作用时间1/8T(t1/2);
第7段:合成矢量V0(000)作用时间1/8T(t0/4);
每一段切换时我们都只改变了Sa、Sb、Sc其中的一个状态,也就是只改变了一个半桥上的两个开关管,如果我们把第3段和第2段对调,那么开关的次数是不是就增多了,开关损耗就增加了。
总结一下六个扇区内各自矢量的合成方式如下(可以看成三相上的PWM每个载波周期内的占空比中心对称):
那么有人可能会疑惑了,既然都是零矢量,那作用效果都是一样的为什么不只用其中一个矢量?这就是七段式和五段式SVPWM的区别了,七段式的零矢量多一个,开关管的切换次数会比五段式多,开关损耗会比五段式大,但是七段式的谐波会比五段式小。在这里我们只讲七段式,对五段式感兴趣的小伙伴自己下去可以了解一下。
4. 总结
本章主要讲了SVPWM的原理、各个矢量作用时间的推导、七段式调制方式;没有讲解如何讲SVPWM如何和MCU的PWM模块结合,感兴趣的可以自己去看看科学出版社出版 上官致远 张健编著的《深入理解无刷直流电机矢量控制技术》,里面有结合stm32的PWM模块做详细的讲解。
这篇关于【电机控制】PMSM无感FOC控制(三)SVPWM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!