英飞凌TC264无刷驱动方案simplefoc移植(3)-FOC控制原理矢量控制
无刷电机是矢量控制,是交流电机调速的核心,也是Foc控制的核心
以下内容学习自【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术
1 电流闭环控制方案
以电流闭环控制为例,也就是让电机始终产生一个恒定的力矩(也就是恒定的电流,因为力矩和电流成正比)
可以看到控制器的输入是最左边的 Iq_ref 和 Id_ref ,两个变量经过PID控制器进行反馈调节,其中还涉及到几个变换模块,有Park变换和Clark变换;最后通过前面提到的SVPWM模块作用到三相逆变器上进而控制电机;而PID控制器的反馈量,是对电机输出电流的采样值。
所以FOC的控制流程可以概括为:
①对电机三相电流进行采样得到 Ia,Ib,Ic
②将 Ia,Ib,Ic 经过Clark变换得到 Iα,Iβ 将 Iα,Iβ
③经过Park变换得到 Iq,Id
④计算 Iq,Id 和其设定值 Iq_ref,Id_ref 的误差将上述误差输入两个PID(只用到PI)控制器,
⑤得到输出的控制电压 Uq,Ud
⑥将 Uq,Ud 进行反Park变换得到 Uα,Uβ
⑦用 Uα,Uβ 合成电压空间矢量,输入SVPWM模块进行调制
⑧输出该时刻三个半桥的状态编码控制三相逆变器的MOS管开关,驱动电机
2 Clark变换与Park变换
前面分析了,如果要平稳地驱动三相电机转动,我们就需要生成三个相位相差120度的正弦波,但是我们最终的控制对象是MOS管的开通和关断,只有电压最大值和0值两个状态啊,怎么去生成连续变化的正弦波呢?
所谓SPWM就是这么干的,如下图:利用输出不同占空比的pwm信号,模拟正弦波
将上面坐标系中的正弦波和三角波的交点投影到下面的坐标轴,以此确定PWM的占空比变化规律,这样合成的PWM波,经过低通滤波器之后,其实就等效为了一个正弦波!所以SPWM就是在PWM的基础上用正弦波来调制合成的具有正弦波规律变化的方波。
不过SPWM调试方式在FOC实现中并不常用,原因是SPWM要比后面要说的SVPWM的母线电压利用率要低15%。
另一方面,从控制的角度来看,我们甚至根本就不想跟什么三个正弦波打交道!
因为要对于非线性的信号进行准确控制就要使用复杂的高阶控制器,这对于建模成本、处理器算力、控制实时性等都是不利的。简单地说就是,咱们控制器的反馈输入变量不是三个电流采样值嘛,你要我稳稳地跟踪三个正弦波太麻烦啦!能不能简单点跟踪一条直线(常量)啊?
2_1 Clark变换
我们回到上面FOC控制过程9个步骤的第1步,也就是对电机的三个相电流进行采样,这一步会使用串联的采样电阻(Shunt)进行电流采样。
由于电机工作的电流一般很大,所以采样电阻的阻值非常小,甚至和导线的电阻接近了,
因而实际的采样电路PCB设计的时候还有一些讲究,比如使用开尔文接法(Kelvin connections)。
但是我们实际电路设计时可以不使用三个采样器(实际有单采样电阻、双采样电阻和三采样电阻接法),只需要两个就够了。因为由基尔霍夫电流定律(KCL),在任一时刻,流入节点的电流之和等于流出节点的电流之和,也就是说
Ia + Ib + Ic = 0;
只需要知道其中两个就可以计算出第三个了。
这三个电流基本上就是三个相位相差120度的正弦波,在把这些信号输入控制器反馈控制之前,我们先来做点数学游戏:
我们知道三相坐标系 (Ia,Ib,Ic) 如下:
问题:这明明是一个二维平面内的坐标系,为啥要用3个坐标轴来表示呢?
而且很明显 (Ia,Ib,Ic) 这三个基向量是非正交的,学过线性代数的同学可能会想到,我们可以做一个很简单的基变换将其正交化为一个直角坐标系,我们把新的直角坐标系命名为 α−β 坐标系,变换公式如下:
I
α
=
I
a
−
c
o
s
(
2
π
/
3
)
I
b
−
c
o
s
(
2
π
/
3
)
I
c
I~\alpha~ = I~a~ - cos(2\pi/3)I~b~- cos(2\pi/3)I~c
I α =I a −cos(2π/3)I b −cos(2π/3)I c
I
β
=
s
i
n
(
2
π
/
3
)
I
b
−
s
i
n
(
2
π
/
3
)
I
c
I~\beta~ = sin(2\pi/3)I~b~- sin(2\pi/3)I~c
I β =sin(2π/3)I b −sin(2π/3)I c
其实就是个很简单的坐标轴投影计算,写成矩阵形式如下:
[ I α I β ] = [ 1 − 1 / 2 − 1 / 2 1 3 / 2 − 3 / 2 ] ∗ [ I a I b I c ] \begin{bmatrix} I~\alpha~ \\ I~\beta~ \end{bmatrix} = \begin{bmatrix} 1&-1/2&-1/2\\ 1& \sqrt{3}/2&- \sqrt{3}/2 \end{bmatrix} * \begin{bmatrix} I~a~ \\ I~b~ \\ I~c~ \end{bmatrix} [I α I β ]=[11−1/23/2−1/2−3/2]∗⎣ ⎡I a I b I c ⎦ ⎤
于是我们就回到直角坐标系啦,变换前后的波形如下:
可以看到变换后其实还是正弦波…只不过我们少了一个需要控制的变量了,现在只需要控制 Iα,Iβ 这两个变量,让其满足上图的下面的波形变化规律就可以控制电机旋转 了,频率还是不变的。
注意这里的 Iα,Iβ 是我们虚拟出来的变量,所以在计算出一组 Iα,Iβ 后,我们通过上述公式的反向变换公式变换回去再应用到电机的三相上。
当然不是,如果只是为了减小一个控制变量那这个变换/反变换操作显然有点多此一举。
有趣的是我们还可以接着变换:虽然 α−β 坐标系下少了一维变量,但是新的变量还是非线性的(正弦),有没有办法把它们线性化呢?有的**,Park变换就是做这个工作的。**
2_2 Park变换
这一步中我们接着Clark变换将 α−β 坐标系旋转 θ 度,其中 θ 是转子当前的角度,如下图:
变化的公式如下
{
I
d
=
I
α
c
o
s
(
θ
)
+
I
β
s
i
n
(
θ
)
I
q
=
−
I
α
s
i
n
(
θ
)
+
I
β
c
o
s
(
θ
)
\begin{cases} I~d~ = I~\alpha~cos(\theta) + I~\beta~sin(\theta)\\ I~q~ = -I~\alpha~sin(\theta) + I~\beta~cos(\theta) \end{cases}
{I d =I α cos(θ)+I β sin(θ)I q =−I α sin(θ)+I β cos(θ)
写成矩阵形势就是
[
I
d
I
q
]
=
[
c
o
s
(
θ
)
s
i
n
(
θ
)
−
s
i
n
(
θ
)
c
o
s
(
θ
]
∗
[
I
α
I
β
]
\begin{bmatrix} I~d~ \\ I~q~ \end{bmatrix} = \begin{bmatrix} cos(\theta)&sin(\theta) \\ -sin(\theta) & cos(\theta \end{bmatrix} * \begin{bmatrix} I~\alpha~ \\ I~\beta~ \end{bmatrix}
[I d I q ]=[cos(θ)−sin(θ)sin(θ)cos(θ]∗[I α I β ]
也就是说,这个 d−q 坐标系是始终跟着转子旋转的!
这个操作是可行的,因为我们会通过编码器输入转子的实时旋转角度,所以这个角度始终是一个已知数。经过这一步的变换,我们会发现,一个匀速旋转向量在这个坐标系下变成了一个定值!(显然的嘛,因为参考系相对于该向量静止了),这个坐标系下两个控制变量都被线性化了!!!!
接下来如果我们以 Iq,Id 这两个值作为反馈控制的对象,那么显然就可以使用一些线性控制器PID来进行控制
至此我们已经理解完上面FOC控制过程9个步骤的前3步了。
==①对电机三相电流进行采样得到 Ia,Ib,Ic
②将 Ia,Ib,Ic 经过Clark变换得到 Iα,Iβ 将 Iα,Iβ
③经过Park变换得到 Iq,Id ==
接下来就是计算 Iq,Id 和其设定值 Iq_ref,Id_ref 的误差将上述误差输入两个PID(只用到PI)控制器
3 PID控制
在FOC控制中主要用到三个PID环,从内环到外环依次是:电流环、速度环、位置环。
也就是说:我们通过电流反馈来控制电机电流(扭矩) -> 然后通过控制扭矩来控制电机的转速 -> 再通过控制电机的转速控制电机位置。
其中最内环的电流换控制框图如下:
可以看出来,这也就是前面提到的FOC控制9个步骤所描述的过程。实际只用到了PI控制,没有引入微分,
因为如果推导一下电压和电流的传递函数会发现这其实就是一个一阶惯性环节(而且实际上我们可以通过零极点对消来简化掉PI参数,只需要控制一个参数即电流带宽即可)。
上图中的Speed & Position模块可以是编码器,
或者霍尔传感器等能感应转子位置的传感器 。
特别说明一下其中的 Iq,Id,Iq_ref,Id_ref ,前两者大家知道是通过Clark变换和Park变换得到的,而后两者是我们预期希望前两者达到的值。
也就是说我们一通操作将转子磁链进行了解耦,分解为了转子旋转的径向和切向这两个方向的变量:
其中 Iq 是我们需要的,代表了期望的力矩输出而
Id 是我们不需要的,我们希望尽可能把它控制为0
通过PID控制器使用上述输入(电流采样值、编码器位置)和输出(MOS管开关状态)完成对电机电流的闭环控制。
然后进入到下一层的速度环:
在上图中, Speedref 是速度设定值, ω 是电机的转速反馈,可以通过电机编码器或者霍尔传感器等计算得到,依然是使用PI控制。
将计算得到的电机速度 ω 与速度设定值 Speedref 进行误差值计算,代入速度PI环,计算的结果作为电流环的输入,就实现了速度-电流的双闭环控制。
最外一层是位置环,也就是可以控制电机旋转到某个精确的角度并保持,控制框图如下:
同理应该很简单可以理解,上图中位置控制PID只用了P项(也可以使用PI)。
在实际使用中,由于编码器无法直接返回电机转速 ω ,因此可以通过计算一定时间内的编码值变化量来表示电机的转速(也即用平均速度代表瞬时速度)。当电机转速比较高的时候,这样的方式是可以的;但是在位置控制模式的时候,电机的转速会很慢(因为是要求转子固定在某个位置嘛),这时候用平均测速法会存在非常大的误差(转子不动或者动地很慢,编码器就没有输出或者只输出1、2个脉冲)。
所以为了避免速度环节带来的误差,在做位置控制的时候可以只使用位置和电流组成的双环进行控制,不过此时需要对位置环做一定的变化,控制框图如下:
由于去掉了速度环,这里的位置环我们使用完整的PID控制,即把微分项加上(因为位置的微分就是速度,这样可以减小位置控制的震荡加快收敛;积分项的作用是为了消除静态误差)。
在整个控制流程图里面有Park变换和对应的反Park变换 ,但是却没有Clark变换对应的反Clark变换 ,取而代之的是一个SVPWM模块
4 空间电压矢量
空间电压矢量是我们在控制电机过程中虚拟出来的一个矢量,既然是矢量,自然是有大小和方向的,那么它的大小和方向是什么呢?
以前面三相逆变驱动电路那幅图中的状态为例,输入100的状态:
此时等效电路如图:
因此电机中三个相电压(相电压是每相相对于电机中间连接点的电压)可以表示为:
{
U
a
=
U
A
−
U
N
=
2
/
3
U
d
c
U
b
=
U
B
−
U
N
=
−
1
/
3
U
d
c
U
c
=
U
C
−
U
N
=
−
1
/
3
U
d
c
\begin{cases} U~a~ = U~A~ - U~N~ = 2/3 U~dc~\\ U~b~ = U~B~ - U~N~= -1/3 U~dc~\\ U~c~ = U~C~ - U~N~= -1/3 U~dc~ \end{cases}
⎩
⎨
⎧U a =U A −U N =2/3U dc U b =U B −U N =−1/3U dc U c =U C −U N =−1/3U dc
这里Udc其实就是电源电压,线圈的本质是电感,二电感在阻容特性上是和电阻一样的,计算分压电压的时候,直接类似于电阻分压2/1然后得出中点电压
{ U N = 1 / 3 U d c U A = U d c U B = U B = 0 \begin{cases} U~N~ = 1/3U~dc~\\ U~A~ = U~dc~ \\ U~B~ = U~B~ = 0 \end{cases} ⎩ ⎨ ⎧U N =1/3U dc U A =U dc U B =U B =0
也就是说,这个状态下我们可以认为电机中存在一个矢量 U→ 表征的电压(电流);然后根据右手螺旋定则,可以判断出磁场的磁力线方向,也是和矢量 U→ 一致的。
再结合前面章节的分析,转子永磁体会努力旋转到内部磁力线和外部磁场方向一致,所以这个矢量其实就可以表征我们希望转子旋转到的方向,也即所需要生成的磁场方向了。而这个矢量是会不断在空间中旋转的,它的幅值不变,为相电压峰值 Udc ,且以角速度 ω=2πf 匀速旋转。
我们后面将会看到,SVPWM算法的目的,就是使用三相桥的开关状态把在空间中旋转的矢量表示出来,我们把这个矢量称为空间电压矢量。
用数学公式来表示的话就是:
{
U
A
=
U
d
c
c
o
s
(
2
π
f
t
)
U
B
=
U
d
c
c
o
s
(
2
π
f
t
−
2
/
3
π
)
U
C
=
U
d
c
c
o
s
(
2
π
f
t
+
2
/
3
π
)
\begin{cases} U~A~ = U~dc~cos(2\pi ft)\\ U~B~ = U~dc~cos(2\pi ft-2/3\pi) \\ U~C~ = U~dc~ cos(2\pi ft+2/3\pi) \end{cases}
⎩
⎨
⎧U A =U dc cos(2πft)U B =U dc cos(2πft−2/3π)U C =U dc cos(2πft+2/3π)
为了研究各相上下桥臂不同开关组合时逆变器输出的空间电压矢量,我们定义开关函数 Sx(x∈a,b,c) 为:
Sx = 1;上桥导通
Sx = 0;下桥导通
Sa和Sb和Sc一共有8 中可能性
000 001 010 011 100 101 110 111
和零矢量状态(000 111 )下电机三相间电压都为0不产生转矩(不考虑反电动势)。
下面以其中一种开关组合为例分析,假设 Sx=U4(100) ,也即这张图中的状态:
如前文分析,此时的电压矢量为AO方向,大小为 Udc ,我们把这个矢量画在坐标轴中如图:
注意上图中的(100)矢量方向和AO方向是相反的(变成OA方向)
这跟正方向的定义有关,这样的规定更直观一些。
同理,上图中还可以看出其余5个空间电压矢量,它们的端点组成了一个正六边形,同时把平面划分成了六个扇区(也就是图中的Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ)。
5 SVPWM技术
既然是“矢量控制”,当然是有办法的,答案就是:使用这6个空间电压矢量作为基向量来合成任意矢量。在每一个扇区,选择相邻两个电压矢量以及零矢量,按照伏秒平衡原则来合成每个扇区内的任意电压矢量,即:
Uref是我们期望得到的电压矢量,T是一个PWM周期;
Ux 和 Uy分别用于合成 Uref 的两个空间电压矢量,也就是上面说的6个基向量中的两个,至于是哪两个?这跟 Uref 所在的扇区有关,比如 Uref 在Ⅰ扇区,那么 Ux 和 Uy 就是 U4 和 U6 ; Tx 和 Ty 就是在一个周期T中 Ux 和 Uy 所占的时间。
U0∗ 指的是两个零矢量,可以是 U0 也可以是 U7 ,零矢量的选择比较灵活,通过合理地配置零矢量可以让空间电压矢量的切换更平顺,后面会做说明。
所以上面公式的含义就是:我们可以周期性地在不同空间电压矢量之间切换,只要合理地配置不同基向量在一个周期中的占空比,就可以合成出等效的任意空间电压矢量了。
是不是跟PWM的思想完全一样呢,这也是为什么这个方法被成为SVPWM(空间电压矢量脉宽调制)。
下面举一个栗子,假设我们要合成图中所示的 Uref ,在Ⅰ扇区:
显然我们可以通过 U4 和 U6 来合成 Uref ,那么如图将 Uref 投影分解到 U4 和 U6 的方向,由正弦定理有:
显然在电流环控制过程中m设置得越大代表了期望力矩越大。
而零矢量分配的时间为: T0 = T7 = 1/2(T - T4 - T 6)
为什么 T0=T7 ?这是我们将PWM波形设定为中央对齐模式对称配置零矢量的结果,后面会提到。
现在一个周期内所有状态的持续时间我们都得到了,还差一个顺序,也就是各个状态切换的顺序。
理论上任何切换顺序都是ok的,但是实际中我们需要考虑更多限制,比如因为MOS管存在开关损耗,我们希望能尽量减少MOS管的开关次数,那么以最大限度减少开关损耗为目的,我们就可以设计出下面的切换顺序:
上图中可以看出来,在每个状态切换的时候,都只有一个相发生了转变:000->100->110->111->110->100->000,这也是所谓的七段式SVPWM调制法。
同时我们通过在合理的位置插入两个零矢量,并且对零矢量在时间上进行了平均分配,以使产生的PWM对称,从而有效地降低了PWM的谐波分量。
同理,我们也可以列出在其他扇区时的切换顺序:
至此,SVPWM的工作完成了,我们得到了每一时刻所需要的空间电压矢量以及它们持续的时间,在处理器中赋值给对应通道的捕获比较寄存器产生相应的三个PWM波形,控制MOS管的开关,进而产生我们期望的电压、电流、力矩。
产生互补pwm波形在我之前的文章有写【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(2)-SVPWM波实现
总结
至此FOC的原理和整个控制链路都讲完了,回想一下整个过程,再尝试解答最开始提到的问题:为什么在FOC控制中要做这么多变换和反变换?
因为所谓的“矢量控制”其实就是在做解耦,把相互耦合的三相磁链解耦为容易控制的交轴 Iq 和直轴 Id 。 整个过程就好比我们在做信号处理的时候,通过FFT把信号变换到频域进行处理之后再IFFT反变换回时域是一个道理。文章来源:https://www.toymoban.com/news/detail-430792.html
另外值得一提的是,本文介绍的是有感的FOC控制方法,其实FOC可以做到无感控制(也就是不需要编码器等额外的传感器),当然控制算法也会更加复杂,需要引入前馈控制、观测器等概念,无感的好处就是结构安装更简单,可以避免位置传感器失效的风险等。文章来源地址https://www.toymoban.com/news/detail-430792.html
到了这里,关于【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(3)-FOC控制原理矢量控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!