手把手教你电机FOC控制【二】
文章作者: 范子琦
文章链接: https://www.robotsfan.com/posts/d99d1c1a.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 范子琦的博客!
SVPWM
根据BLDC的六步换向,可以将一圈分为六个扇区,前文FOC引入章节已经讲过,只需要控制每个状态通电的时间就可以控制转子到达任意角度。这就是SVPWM。
SVPWM的输入为 U α U_{\alpha} Uα 和 U β U_{\beta} Uβ ,输出为三向计数器的比较值。所以应该首先判断用哪两个相邻矢量,然后计算两个相邻矢量的作用时长,然后将作用时长转化成计数器的比较数值送入定时器。下面对这三个步骤进行讲解。
扇区判断
三相电压可以表示为(
U
m
U_{m}
Um 为电压幅值):
U
a
=
U
m
c
o
s
θ
U
b
=
U
m
c
o
s
(
θ
−
2
3
π
)
U
c
=
U
m
c
o
s
(
θ
+
2
3
π
)
\begin{array}{l} U_a = U_{m}cos\theta \\ U_b = U_{m}cos(\theta-\frac{2}{3}\pi) \\ U_c = U_{m}cos(\theta+\frac{2}{3}\pi) \end{array}
Ua=UmcosθUb=Umcos(θ−32π)Uc=Umcos(θ+32π)
将其转换为
α
−
β
\alpha-\beta
α−β 坐标系,可以算出
U
α
=
U
m
c
o
s
θ
U
β
=
U
m
s
i
n
θ
\begin{array}{l} U_{\alpha} = U_{m}cos\theta \\ U_{\beta} = U_{m}sin\theta \end{array}
Uα=UmcosθUβ=Umsinθ
从这个式子发现,可以从中算出角度信息从而可以判断在哪个扇区
θ
=
a
r
c
t
a
n
(
U
β
U
α
)
\theta = arctan(\frac{U_{\beta}}{U_{\alpha}})
θ=arctan(UαUβ)
由于除法和反三角函数对于MCU来说计算量比较大。我们来找一个简便算法。
U
α
U_{\alpha}
Uα 是关于cos的三角函数,
U
β
U_{\beta}
Uβ 是关于sin的三角函数,可以得到:
扇区
1
:
U
α
>
0
,
U
β
>
0
扇区
2
:
U
α
>
o
r
<
0
,
U
β
>
0
扇区
3
:
U
α
<
0
,
U
β
>
0
扇区
4
:
U
α
<
0
,
U
β
<
0
扇区
5
:
U
α
>
o
r
<
0
,
U
β
<
0
扇区
6
:
U
α
>
0
,
U
β
<
0
\begin{array}{l} 扇区1:& U_{\alpha} > 0&,& U_{\beta} > 0\\ 扇区2:& U_{\alpha} >or< 0&,& U_{\beta} > 0\\ 扇区3:& U_{\alpha} < 0&,& U_{\beta} > 0\\ 扇区4:& U_{\alpha} < 0&,& U_{\beta} < 0\\ 扇区5:& U_{\alpha} >or< 0&,& U_{\beta} < 0\\ 扇区6:& U_{\alpha} > 0&,& U_{\beta} < 0 \end{array}
扇区1:扇区2:扇区3:扇区4:扇区5:扇区6:Uα>0Uα>or<0Uα<0Uα<0Uα>or<0Uα>0,,,,,,Uβ>0Uβ>0Uβ>0Uβ<0Uβ<0Uβ<0
可以看到,通过
U
β
U_{\beta}
Uβ 的正负可以判断出是1/2/3扇区还是4/5/6扇区。
这个条件只将扇区分为两个部分,我们还需要几个条件来更细致地分。将每个扇区的反三角函数范围计算出来:
扇区
1
:
t
a
n
0
∘
>
U
β
U
α
>
t
a
n
6
0
∘
⇒
0
>
U
β
U
α
>
3
扇区
2
:
t
a
n
6
0
∘
>
U
β
U
α
>
t
a
n
12
0
∘
⇒
3
>
U
β
U
α
>
−
3
扇区
3
:
t
a
n
12
0
∘
>
U
β
U
α
>
t
a
n
18
0
∘
⇒
−
3
>
U
β
U
α
>
0
扇区
4
:
t
a
n
18
0
∘
>
U
β
U
α
>
t
a
n
24
0
∘
⇒
0
>
U
β
U
α
>
3
扇区
5
:
t
a
n
24
0
∘
>
U
β
U
α
>
t
a
n
30
0
∘
⇒
3
>
U
β
U
α
>
−
3
扇区
6
:
t
a
n
30
0
∘
>
U
β
U
α
>
t
a
n
36
0
∘
⇒
−
3
>
U
β
U
α
>
0
\begin{aligned} 扇区1:& tan0^{\circ} > \frac{U_{\beta}}{U_{\alpha}} > tan60^{\circ} &\Rightarrow& 0 &>& \frac{U_{\beta}}{U_{\alpha}} >& \sqrt{3} \\ 扇区2:& tan60^{\circ} > \frac{U_{\beta}}{U_{\alpha}} > tan120^{\circ} &\Rightarrow& \sqrt{3} &>& \frac{U_{\beta}}{U_{\alpha}} >& -\sqrt{3} \\ 扇区3:& tan120^{\circ} > \frac{U_{\beta}}{U_{\alpha}} > tan180^{\circ} &\Rightarrow& -\sqrt{3} &>& \frac{U_{\beta}}{U_{\alpha}} >& 0 \\ 扇区4:& tan180^{\circ} > \frac{U_{\beta}}{U_{\alpha}} > tan240^{\circ} &\Rightarrow& 0 &>& \frac{U_{\beta}}{U_{\alpha}} >& \sqrt{3} \\ 扇区5:& tan240^{\circ} > \frac{U_{\beta}}{U_{\alpha}} > tan300^{\circ} &\Rightarrow& \sqrt{3} &>& \frac{U_{\beta}}{U_{\alpha}} >& -\sqrt{3} \\ 扇区6:& tan300^{\circ} > \frac{U_{\beta}}{U_{\alpha}} > tan360^{\circ} &\Rightarrow& -\sqrt{3} &>& \frac{U_{\beta}}{U_{\alpha}} >& 0 \end{aligned}
扇区1:扇区2:扇区3:扇区4:扇区5:扇区6:tan0∘>UαUβ>tan60∘tan60∘>UαUβ>tan120∘tan120∘>UαUβ>tan180∘tan180∘>UαUβ>tan240∘tan240∘>UαUβ>tan300∘tan300∘>UαUβ>tan360∘⇒⇒⇒⇒⇒⇒03−303−3>>>>>>UαUβ>UαUβ>UαUβ>UαUβ>UαUβ>UαUβ>3−303−30
观察这个结论,
U
β
U_{\beta}
Uβ 和
3
U
α
\sqrt{3}U_{\alpha}
3Uα 似乎有关系,回顾反Clark变换,
U
b
U_{b}
Ub 和
U
c
U_{c}
Uc 的式子就是这种关系。所以可以把上面的结论往反Clark变换上凑。看一下反Clark变换的图像,注意我们需要的关系里的
3
\sqrt{3}
3 是乘在
U
α
U_{\alpha}
Uα 上的,所以我们把
U
β
U_{\beta}
Uβ 和
U
α
U_{\alpha}
Uα 反一下,对应的公式为:
{
U
a
=
U
β
U
b
=
−
1
2
U
β
+
3
2
U
α
U
c
=
−
1
2
U
β
−
3
2
U
α
\left\{\begin{array}{l} U_{a} = U_{\beta} \\ U_{b} = -\frac{1}{2}U_{\beta} + \frac{\sqrt3}{2}U_{\alpha}\\ U_{c} = -\frac{1}{2}U_{\beta} - \frac{\sqrt3}{2}U_{\alpha} \end{array}\right.
⎩
⎨
⎧Ua=UβUb=−21Uβ+23UαUc=−21Uβ−23Uα
生成上述公式的图像,其中黄色的线为 U a U_{a} Ua 为 U β U_{\beta} Uβ ,蓝色的线 U b U_{b} Ub 为 3 2 U α − 1 2 U β \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} 23Uα−21Uβ ,红色的线 U c U_{c} Uc 为 − 3 2 U α − 1 2 U β -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} −23Uα−21Uβ ,
可以看到在每个扇区内总有一向大于0,两向小于0,所以
U
b
U_{b}
Ub 和
U
c
U_{c}
Uc 的正负可以当做判断条件之一。我们顺便还又一次得到了
U
β
U_{\beta}
Uβ 这个判断条件。整理一下上面的式子
扇区
1
:
U
β
>
0
,
3
2
U
α
−
1
2
U
β
>
0
,
−
3
2
U
α
−
1
2
U
β
<
0
扇区
2
:
U
β
>
0
,
3
2
U
α
−
1
2
U
β
<
0
,
−
3
2
U
α
−
1
2
U
β
<
0
扇区
3
:
U
β
>
0
,
3
2
U
α
−
1
2
U
β
<
0
,
−
3
2
U
α
−
1
2
U
β
>
0
扇区
4
:
U
β
<
0
,
3
2
U
α
−
1
2
U
β
<
0
,
−
3
2
U
α
−
1
2
U
β
>
0
扇区
5
:
U
β
<
0
,
3
2
U
α
−
1
2
U
β
>
0
,
−
3
2
U
α
−
1
2
U
β
>
0
扇区
6
:
U
β
<
0
,
3
2
U
α
−
1
2
U
β
>
0
,
−
3
2
U
α
−
1
2
U
β
<
0
\begin{aligned} 扇区1:U_{\beta} > 0 , \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} >0 , -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} < 0\\ 扇区2:U_{\beta} > 0 , \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} <0 , -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} < 0\\ 扇区3:U_{\beta} > 0 , \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} <0 , -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} > 0\\ 扇区4:U_{\beta} < 0 , \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} <0 , -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} > 0\\ 扇区5:U_{\beta} < 0 , \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} >0 , -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} > 0\\ 扇区6:U_{\beta} < 0 , \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} >0 , -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} < 0 \end{aligned}
扇区1:Uβ>0,23Uα−21Uβ>0,−23Uα−21Uβ<0扇区2:Uβ>0,23Uα−21Uβ<0,−23Uα−21Uβ<0扇区3:Uβ>0,23Uα−21Uβ<0,−23Uα−21Uβ>0扇区4:Uβ<0,23Uα−21Uβ<0,−23Uα−21Uβ>0扇区5:Uβ<0,23Uα−21Uβ>0,−23Uα−21Uβ>0扇区6:Uβ<0,23Uα−21Uβ>0,−23Uα−21Uβ<0
所以通过计算
3
2
U
α
−
1
2
U
β
\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta}
23Uα−21Uβ 和
−
3
2
U
α
−
1
2
U
β
-\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta}
−23Uα−21Uβ 的正负可以判断出是1/6扇区,3/4扇区,2扇区,5扇区的哪一组。
综上,我们的判断条件有:
U
β
U_{\beta}
Uβ 、
3
2
U
α
−
1
2
U
β
\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta}
23Uα−21Uβ 和
−
3
2
U
α
−
1
2
U
β
-\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta}
−23Uα−21Uβ 。我们分别定义:
U
a
=
U
β
U
b
=
3
2
U
α
−
1
2
U
β
U
c
=
−
3
2
U
α
−
1
2
U
β
\begin{array}{l} U_a = U_{\beta} \\ U_b = \frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta}\\ U_c = -\frac{\sqrt3}{2}U_{\alpha} - \frac{1}{2}U_{\beta} \end{array}
Ua=UβUb=23Uα−21UβUc=−23Uα−21Uβ
综合这三个条件就可以判断是在哪个扇区 。那么有没有一种算法可以将这一堆判断数值化并转换成1~6的数字呢?可以用下面的公式:
N
=
A
+
2
B
+
4
C
N=A+2B+4C
N=A+2B+4C
式中A代表
U
a
U_a
Ua 的正负,B代表
U
b
U_b
Ub 的正负,C代表
U
c
U_c
Uc 的正负,大于0为1,小于0为0。最后转换出来的的N即为1~6的数字:
扇区
1
2
3
4
5
6
N
3
1
5
4
6
2
\begin{array}{c} 扇区 & 1 & 2 & 3 & 4 & 5 & 6 & \\ N & 3 & 1 & 5 & 4 & 6 & 2 & \end{array}
扇区N132135445662
至此,我们成功完成了扇区判断。
计算相邻矢量作用时长
控制相邻矢量作用时长就可以控制转子到达任意方向,下面进行分析。
六个矢量的大小
六个MOS管可以产生8种状态
设上开下合为0(电流从O往对应的向流),上合下开为1(电流从对应的向往O流),表示其中的六个矢量。
放在一张图中即为:
还有两个零矢量(000和111),无电流,不产生磁场。
对于100的状态,可以等效为下面的电路图:
可以计算出电机中三个相电压(每相相对于电机中间连接点的电压)
U
A
N
=
U
A
−
U
N
=
2
3
U
d
c
U
B
N
=
U
B
−
U
N
=
−
1
3
U
d
c
U
C
N
=
U
C
−
U
N
=
−
1
3
U
d
c
\begin{aligned} U_{AN} &=U_{A}-U_{N}=\frac{2}{3} U_{d c} \\ U_{BN} &=U_{B}-U_{N}=-\frac{1}{3} U_{d c} \\ U_{CN} &=U_{C}-U_{N}=-\frac{1}{3} U_{d c} \end{aligned}
UANUBNUCN=UA−UN=32Udc=UB−UN=−31Udc=UC−UN=−31Udc
同理可以计算其他所有方向矢量的相电压,可以看出,六个矢量的大小均为
2
3
U
d
c
\frac{2}{3} U_{d c}
32Udc ,即SVPWM相电压幅值为
2
3
U
d
c
\frac{2}{3} U_{d c}
32Udc
电压利用率
电压利用率等于合成矢量的电压除以母线电压。下面在复平面计算合成矢量的电压
U
o
u
t
U_{out}
Uout :
U
o
u
t
=
U
a
+
U
b
⋅
e
j
⋅
2
3
π
+
U
c
⋅
e
j
⋅
(
−
2
3
π
)
U_{out} = U_a +U_{b}\cdot e^{j\cdot \frac{2}{3}\pi}+U_{c}\cdot e^{j\cdot (-\frac{2}{3}\pi)}
Uout=Ua+Ub⋅ej⋅32π+Uc⋅ej⋅(−32π)
根据欧拉公式可以推导出:
e
j
x
=
c
o
s
x
+
j
s
i
n
x
e^{jx}=cosx+jsinx
ejx=cosx+jsinx
又因为三相电压与相电压幅值之间的关系:
U
a
=
U
m
c
o
s
θ
U
b
=
U
m
c
o
s
(
θ
−
2
3
π
)
U
c
=
U
m
c
o
s
(
θ
+
2
3
π
)
\begin{array}{l} U_a = U_{m}cos\theta \\ U_b = U_{m}cos(\theta-\frac{2}{3}\pi) \\ U_c = U_{m}cos(\theta+\frac{2}{3}\pi) \end{array}
Ua=UmcosθUb=Umcos(θ−32π)Uc=Umcos(θ+32π)
带入可以计算出
U
o
u
t
U_{out}
Uout :
U
o
u
t
=
3
2
U
m
⋅
e
j
θ
U_{out}=\frac{3}{2}U_m\cdot e^{j\theta}
Uout=23Um⋅ejθ
合成矢量的电压是相电压幅值的
3
2
\frac{3}{2}
23 倍,而SVPWM相电压幅值
U
m
U_m
Um 为
2
3
U
d
c
\frac{2}{3} U_{d c}
32Udc ,所以
U
o
u
t
=
U
d
c
U_{out}=U_{dc}
Uout=Udc
即合成矢量的电压等于母线电压。所以SVPWM的电压利用率是100%。
SVPWM输出电压是马鞍波
由于中间连接点N的点位 是浮动的,为三角波,而相电压是每相相对于电机中间连接点N的电压,所以相电压不是一个正弦波,而是一个正弦波与一个三角波叠加而成的,即为马鞍波。网图:
矢量作用时长
合成矢量的电压是所在扇区两个矢量与空矢量不同时长的组合,其中
T
N
T_N
TN 为空矢量作用时长:
U
o
u
t
=
U
x
T
x
T
s
+
U
y
T
y
T
s
+
U
N
T
N
T
s
U_{out}=U_x\frac{T_x}{T_s}+U_y\frac{T_y}{T_s}+U_N\frac{T_N}{T_s}
Uout=UxTsTx+UyTsTy+UNTsTN
由于SVPWM的输入是
U
α
U_{\alpha}
Uα 和
U
β
U_{\beta}
Uβ ,但是要控制
T
x
T_x
Tx 和
T
y
T_y
Ty ,所以要找到他们的对应关系。
对于第一个扇区,将
U
o
u
t
U_{out}
Uout 在
α
−
β
\alpha-\beta
α−β 坐标系中表示:
U
α
=
∣
U
x
∣
T
x
T
s
+
∣
U
y
∣
T
y
T
s
c
o
s
6
0
∘
U
β
=
∣
U
y
∣
T
y
T
s
s
i
n
6
0
∘
\begin{array}{l} U_\alpha=|U_x|\frac{T_x}{T_s}+|U_y|\frac{T_y}{T_s}cos60^{\circ}\\ U_\beta=|U_y|\frac{T_y}{T_s}sin60^{\circ} \end{array}
Uα=∣Ux∣TsTx+∣Uy∣TsTycos60∘Uβ=∣Uy∣TsTysin60∘
其中
∣
U
x
∣
|U_x|
∣Ux∣ 和
∣
U
y
∣
|U_y|
∣Uy∣ 根据前面的计算均为
2
3
U
d
c
\frac{2}{3} U_{d c}
32Udc ,可以解出:
T
x
=
3
T
S
U
d
c
(
3
2
U
α
−
1
2
U
β
)
T
y
=
3
T
S
U
d
c
U
β
\begin{array}{l} T_x=\frac{\sqrt{3}T_S}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)\\ T_y=\frac{\sqrt{3}T_S}{U_{dc}}U_\beta \end{array}
Tx=Udc3TS(23Uα−21Uβ)Ty=Udc3TSUβ
同理,可以计算出所有六个扇区:
第二扇区
T
x
=
3
T
S
U
d
c
(
−
3
2
U
α
+
1
2
U
β
)
T
y
=
3
T
S
U
d
c
(
3
2
U
α
+
1
2
U
β
)
\begin{array}{l} T_x=\frac{\sqrt{3}T_S}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta)\\ T_y=\frac{\sqrt{3}T_S}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta) \end{array}
Tx=Udc3TS(−23Uα+21Uβ)Ty=Udc3TS(23Uα+21Uβ)
第三扇区
T
x
=
3
T
S
U
d
c
U
β
T
y
=
3
T
S
U
d
c
(
−
3
2
U
α
−
1
2
U
β
)
\begin{array}{l} T_x=\frac{\sqrt{3}T_S}{U_{dc}}U_\beta\\ T_y=\frac{\sqrt{3}T_S}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta) \end{array}
Tx=Udc3TSUβTy=Udc3TS(−23Uα−21Uβ)
第四扇区
T
x
=
3
T
S
U
d
c
(
−
U
β
)
T
y
=
3
T
S
U
d
c
(
−
3
2
U
α
+
1
2
U
β
)
\begin{array}{l} T_x=\frac{\sqrt{3}T_S}{U_{dc}}(-U_\beta)\\ T_y=\frac{\sqrt{3}T_S}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta) \end{array}
Tx=Udc3TS(−Uβ)Ty=Udc3TS(−23Uα+21Uβ)
第五扇区
T
x
=
3
T
S
U
d
c
(
−
3
2
U
α
−
1
2
U
β
)
T
y
=
3
T
S
U
d
c
(
3
2
U
α
−
1
2
U
β
)
\begin{array}{l} T_x=\frac{\sqrt{3}T_S}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)\\ T_y=\frac{\sqrt{3}T_S}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta) \end{array}
Tx=Udc3TS(−23Uα−21Uβ)Ty=Udc3TS(23Uα−21Uβ)
第六扇区
T
x
=
3
T
S
U
d
c
(
3
2
U
α
+
1
2
U
β
)
T
y
=
3
T
S
U
d
c
(
−
U
β
)
\begin{array}{l} T_x=\frac{\sqrt{3}T_S}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta)\\ T_y=\frac{\sqrt{3}T_S}{U_{dc}}(-U_\beta) \end{array}
Tx=Udc3TS(23Uα+21Uβ)Ty=Udc3TS(−Uβ)
六个扇区中都有相同的项,其中包含前文判断扇区所用的
U
1
U_1
U1 、
U
2
U_2
U2 、
U
3
U_3
U3 。直接把前面已经计算过的变量拿过来使用,大大减少了计算量。式中的
3
T
S
U
d
c
\frac{\sqrt{3}T_S}{U_{dc}}
Udc3TS 为调制比,定义:
U
m
r
=
3
T
S
U
d
c
X
=
3
T
S
U
d
c
U
β
=
U
m
r
U
1
Y
=
3
T
S
U
d
c
(
3
2
U
α
−
1
2
U
β
)
=
U
m
r
U
2
Z
=
3
T
S
U
d
c
(
−
3
2
U
α
−
1
2
U
β
)
=
U
m
r
U
3
\begin{array}{l} U_{mr} = \frac{\sqrt{3}T_S}{U_{dc}} \\ X= \frac{\sqrt{3}T_S}{U_{dc}}U_\beta=U_{mr}U_1\\ Y= \frac{\sqrt{3}T_S}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)=U_{mr}U_2\\ Z= \frac{\sqrt{3}T_S}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)=U_{mr}U_3 \end{array}
Umr=Udc3TSX=Udc3TSUβ=UmrU1Y=Udc3TS(23Uα−21Uβ)=UmrU2Z=Udc3TS(−23Uα−21Uβ)=UmrU3
可以将六个扇区表示为:
T
x
T
y
扇区
1
Y
X
扇区
2
−
Y
−
Z
扇区
3
X
Z
扇区
4
−
X
−
Y
扇区
5
Z
Y
扇区
6
−
Z
−
X
\begin{array}{c} & T_x & T_y \\ 扇区1& Y & X \\ 扇区2& -Y & -Z \\ 扇区3& X & Z \\ 扇区4& -X & -Y \\ 扇区5& Z & Y \\ 扇区6& -Z & -X \\ \end{array}
扇区1扇区2扇区3扇区4扇区5扇区6TxY−YX−XZ−ZTyX−ZZ−YY−X
注意:当非零矢量作用时间
T
x
+
T
y
>
T
s
Tx+Ty>Ts
Tx+Ty>Ts ,需要进行过饱和处理:
{
T
x
=
T
x
T
x
+
T
y
T
s
T
y
=
T
y
T
x
+
T
y
T
s
\left\{\begin{array}{l} T_{x}=\frac{T_{x}}{T_{x}+T_{y}} T_{s} \\ T_{y}=\frac{T_{y}}{T_{x}+T_{y}} T_{s} \end{array}\right.
{Tx=Tx+TyTxTsTy=Tx+TyTyTs
定时器比较值计算
我们前文算出来的 T x T_x Tx 和 T y T_y Ty 以秒为单位,在单片机中使用定时器控制MOS管的通断需要配置比较值,所以需要把 T x T_x Tx 和 T y T_y Ty 转换为三个互补的定时器比较值 T 1 T_1 T1 、 T 2 T_2 T2 和 T 3 T_3 T3 。
定时器应设置为中心对齐模式,若为向上计数,计数器会从0开始计数到最大值,再反向从最大值计数到0;向下计数反之。故只需要控制前半个周期的比较值就可以产生相对中心对称的PWM波。
为了减少MOS管的开关损耗,提高其使用寿命,应尽量减少MOS管的开关次数。在一个扇区内切换状态的时候,合理使用零矢量可以保证每次切换只改变一个MOS管。
先来看第一扇区,以每次只改变一个MOS管为原则,则切换顺序为:
000
→
100
→
110
→
111
→
110
→
100
→
000
000 \to 100 \to 110 \to 111 \to 110 \to 100 \to 000
000→100→110→111→110→100→000
可以看到,切换顺序构成了一个环路。在一个周期内我们需要控制三段作用时长:
T
s
=
T
x
+
T
y
+
T
N
T_s=T_x+T_y+T_N
Ts=Tx+Ty+TN
六个MOS需要产生六路PWM来控制他们的状态。由于上下半桥是互补的,所以只需要生成三个PWM:
由于是中心对齐模式,所以只需要控制半个周期的时长 T x 2 \frac{T_x}{2} 2Tx 和 T y 2 \frac{T_y}{2} 2Ty 。在半个周期内 T N T_N TN 出现了两次,分别为000和111,在半个周期内将这两段时间平均分配。即为 T S − T x − T y 4 \frac{T_S-T_x-T_y}{4} 4TS−Tx−Ty 。
这样就可以计算三个定时器的比较值
T
1
T_1
T1 、
T
2
T_2
T2 和
T
3
T_3
T3 :
T
1
=
T
S
−
T
x
−
T
y
4
T
2
=
T
1
+
T
x
2
T
3
=
T
2
+
T
y
2
\begin{array}{l} T_1= \frac{T_S-T_x-T_y}{4}\\ T_2=T_1+\frac{T_x}{2}\\ T_3=T_2+\frac{T_y}{2} \end{array}
T1=4TS−Tx−TyT2=T1+2TxT3=T2+2Ty
同理,可以计算出全部六个扇区的切换顺序,这里计算过程不再赘述。由图像和计算结果可以分析出,无论在哪个扇区中,三个定时器切换的图像都是由上图中三个方波构成,三个图像排列组合也正好就是六个扇区的组合方式。故为了方便程序运行,将六个扇区的定时器比较值归纳如下:
设
T
a
=
T
S
−
T
x
−
T
y
4
T
b
=
T
a
+
T
x
2
T
c
=
T
b
+
T
y
2
\begin{array}{l} T_a= \frac{T_S-T_x-T_y}{4}\\ T_b=T_a+\frac{T_x}{2}\\ T_c=T_b+\frac{T_y}{2} \end{array}
Ta=4TS−Tx−TyTb=Ta+2TxTc=Tb+2Ty
此时六个扇区可以表示为:
扇区
1
扇区
2
扇区
3
扇区
4
扇区
5
扇区
6
T
1
T
a
T
b
T
c
T
c
T
b
T
a
T
2
T
b
T
a
T
a
T
b
T
c
T
c
T
3
T
c
T
c
T
b
T
a
T
a
T
b
\begin{array}{c} & 扇区1 & 扇区2 & 扇区3 & 扇区4 & 扇区5 & 扇区6 & \\ T1& T_a & T_b & T_c & T_c & T_b & T_a &\\ T2& T_b & T_a & T_a & T_b & T_c & T_c &\\ T3& T_c & T_c & T_b & T_a & T_a & T_b & \end{array}
T1T2T3扇区1TaTbTc扇区2TbTaTc扇区3TcTaTb扇区4TcTbTa扇区5TbTcTa扇区6TaTcTb
也就是说编程时只需要计算
T
a
T_a
Ta 、
T
b
T_b
Tb 和
T
c
T_c
Tc ,通过判断就可以得到对应扇区的比较值。
至此,SVPWM输出比较值 T 1 T_1 T1 、 T 2 T_2 T2 、 T 3 T_3 T3 ,互补得到六个比较值,输入到定时器,输出三路PWM。
MATLAB仿真
假设需要产生10Khz的PWM波,则一个周期为0.0001秒。若单片机主频为180Mhz,预分频系数为100-1,由下面计算公式:(其中
A
R
R
ARR
ARR 是计数值,
P
S
C
PSC
PSC 是预分频值)
F
p
w
m
(
H
z
)
=
主频
(
M
)
(
A
R
R
+
1
)
∗
(
P
S
C
+
1
)
Fpwm(Hz) = \frac{主频(M)}{(ARR+1)*(PSC+1)}
Fpwm(Hz)=(ARR+1)∗(PSC+1)主频(M)
180,000,000/(18,000*100)=10,000Hz,则定时器的计数值应设置为18000-1。
在模型中设定 U d c Udc Udc 为24, T p w m Tpwm Tpwm 为18000。
在foc子模块中,将park反变换的输出输入到SVPWM模块:
SVPWM模块代码为:
function [T1,T2,T3,sector] = fcn(Ualpha,Ubeta,Udc,Tpwm)
% 初始化
sector = single(0);
T1 = single(0);
T2 = single(0);
T3 = single(0);
% 第一步:扇区判断
% 计算三个临时变量
Ua = Ubeta;
Ub = (sqrt(3)*Ualpha - Ubeta)/2;
Uc = (-sqrt(3)*Ualpha - Ubeta)/2;
% 计算判断扇区所用的ABC的值
A=single(0);B=single(0);C=single(0);N=single(0);
if(Ua>0)
A = single(1);
elseif(Ua<0)
A = single(0);
end
if(Ub>0)
B = single(1);
elseif(Ub<0)
B = single(0);
end
if(Uc>0)
C = single(1);
elseif(Uc<0)
C = single(0);
end
% 计算判断扇区所用的N的值
N = A + 2*B + 4*C;
% 扇区判断
switch (N)
case 3
sector = single(1);
case 1
sector = single(2);
case 5
sector = single(3);
case 4
sector = single(4);
case 6
sector = single(5);
case 2
sector = single(6);
end
% 第二步:计算相邻矢量作用时长
% 计算调制比
Umr = sqrt(3)*Tpwm/Udc;
% 计算三个临时变量
X = Umr * Ua;
Y = Umr * Ub;
Z = Umr * Uc;
% 分扇区计算Tx和Ty的值
Tx=single(0);Ty=single(0);
switch (sector)
case 1
Tx = Y; Ty = X;
case 2
Tx = -Y; Ty = -Z;
case 3
Tx = X; Ty = Z;
case 4
Tx = -X; Ty = -Y;
case 5
Tx = Z; Ty = Y;
case 6
Tx = -Z; Ty = -X;
end
% 第三步:定时器比较值计算
% 干啥用的?
if Tx+Ty > Tpwm
Tx = Tx/(Tx+Ty);
Ty = Ty/(Tx+Ty);
else
Tx = Tx;
Ty = Ty;
end
% 计算三个临时变量
Ta = (Tpwm-Tx-Ty)/4.0;
Tb = Ta+Tx/2.0;
Tc = Tb+Ty/2.0;
% 分扇区计算定时器比较值T1、T2和T3的值
switch (sector)
case 1
T1 = Ta; T2 = Tb; T3 = Tc;
case 2
T1 = Tb; T2 = Ta; T3 = Tc;
case 3
T1 = Tc; T2 = Ta; T3 = Tb;
case 4
T1 = Tc; T2 = Tb; T3 = Ta;
case 5
T1 = Tb; T2 = Tc; T3 = Ta;
case 6
T1 = Ta; T2 = Tc; T3 = Tb;
end
end
可以看到,定时器比较值为马鞍波
扇区为从1到6的循环