编者:沉尸 (5912129@qq.com)

本文字描述电机FOC的原理性内容,大部分取材于网络,但是我对于某些细节进行了比较详细的描述。因为很多最初的出处链接没有记录下来,所以没有标明,忘谅解!本文字不会用于任何商业行为!

第一章 电流分析

 设计目标:

电流流经三个绕组会产生磁场,我们希望这个磁场的“合力”拉着转子做连续的圆圈运动,且大小可控。显然这个合成的磁场方向和转子的南北极方向垂直时产生的力矩最大。

根据数学理论,如果在三相中分别产生互差120度的相电流正弦波(也可以用相电压来描述),可以获得上述结果。因为电流和磁场的强度成正比,且磁场的南北极和电流方向相同,所以考虑电流就是考虑磁场。

标准三相电流Ia 、Ib 、Ic 在空间上互差120 ̊ ,假设Im 为相电流峰值,

Ia  = Im *cos(θ)                                                     (1-1)

Ib  = Im *cos(θ-2π /3)                                           (1-2)

Ic  = Im *cos(θ-4π /3) = Im *cos(θ+2π /3)            (1-3)

注意:上面三个式子公式不能把相位搞错,要很严谨!必须和下面图3中的波形对应起来,否则最后推导出来的矢量和的旋转方向会成问题,某些资料不严谨,将Ib  Ic  相互写反了(和图3相违背),但是在计算矢量和的时候却又按照图3来计算,写成Ib 逆时针转2π /3,将Ic 逆时针转4π /3,这样算出来的合力的方向会有错!

验证互差120° 相位的三相电流是否符合设想:

1)首先这种三相交错正弦波需要符合“基尔霍夫”定律:

Ia  + Ib  + Ic  = 0

证明:

Ia  + Ib  + Ic

=  Im *cos(θ) + Im *cos(θ-2π /3) + Im *cos(θ+2π /3)

=  Im *cos(θ) + Im *[cos(θ)*cos(2π /3) + sin(θ)*sin(2π /3)]

+ Im *[cos(θ)*cos(2π /3) - sin(θ)*sin(2π /3)]

=  Im *cos(θ) + 2* Im * cos(θ)*cos(2π /3)

=  Im *cos(θ) + 2* Im * cos(θ)*(-1/2)

=  0

2 ) 我们希望“合力”是一个绕着原点运动的向量,且大小恒定

图3                                                图4

第二章 Clarke变换之等幅值转换推导

(推导过程参考了:Clark变换及比例系数2/3推导过程_w_乐天的博客-CSDN博客_clark变换)

第2~4章都是描述公式推导,至于为什么要这样转换,看到后面的控制部分自然就会明白,这里提前知道有这样一个数学工具!

图5

如上图所示,将a,b,c三轴电流矢量投影到α,β轴上可得

转换成矩阵如下式,其中系数Ka 为三相变两相比例系数,

为了保证变换前后的幅值不变,即合成矢量的大小和方向相等。

由式1-4可知当Ka =2/3 时,转换前后幅值相等。

解释:上图5中,红色的圆可以认为是式子(1-4)形成的圆,半径是黑色的圆的1.5倍,黑色的圆半径可以认为是本文开始推导中Im 的大小

这里的等幅显然是和Im 进行等幅,所以需要缩小成2/3

Ka =2/3 及 Ic  = -(Ia+ Ib)代入式2-2中可得:

为了让式子2-2中矩阵可逆,引入0 轴(零轴)坐标

于是1-7式子可以转换为:

备注:ST电机库5.4.4源代码对应的数学模型为:

所以它对应的Clarke公式为:

注意上面式子中有一个“负号”。在看st电机源代码的时候以免疑惑!

第三章Clarke变换之等功率转换推导

(推导过程参考了:克拉克 (Clark) 变换中等幅值 (2/3) 和等功率 (sqrt(2/3)) 变换的公式推导 - 知乎)

在应用中我们一般采取等幅值变换,所以本节仅仅作为数学推导学习用,可以跳过!

首先接着上述的等幅值变换我们用Λ表示转换矩阵,也就是说无论在等幅值变换还是等功率变换下恒存在:

而三相电压和电流的转换矩阵实际上是相同的,也就是说:

等功率转换矩阵即为:

第四章 Park变换和逆变换

Clarke变换是将三相系统(在 abc 坐标系中)的时域分量转换为正交静止坐标系(αβ)中的两个分量

图4-1

附录:ST电机库5.4.4源代码对应的数学模型如下:

 

所以它对应的Park转换公式为:

Q和D分别对应电机的Q轴(交轴)和D轴(直轴),θ就是转子转动的角度,也就是d-q坐标系是始终随着转子进行转动的。

这个操作是可行的,因为我们会通过编码器输入转子的实时旋转角度,所以这个角度始终是一个已知数。经过这一步的变换,我们会发现,一个匀速旋转向量在这个坐标系下变成了一个定值!(因为参考系相对于该向量静止了,Id和Iq相对于D-Q坐标系),这个坐标系下两个控制变量都被线性化了!

在系统中我们就以Iq和Id这两个值作为反馈控制的对象,那么显然就可以使用一些线性控制器来进行控制了,比如PID

第五章 SVPWM描述

本节主要参考:

SVPWM算法原理及详解_【ql君】qlexcel的博客-CSDN博客_svpwm

FOC控制原理

5.1概述

SVPWM是近年发展的一种比较新颖的控制方法,是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使输出电流波形尽可能接近于理想的正弦波形。空间电压矢量PWM与传统的正弦PWM不同,它是从三相输出电压的整体效果出发,着眼于如何使电机获得理想圆形磁链轨迹。SVPWM技术与SPWM相比较,绕组电流波形的谐波成分小,使得电机转矩脉动降低,旋转磁场更逼近圆形,而且使直流母线电压的利用率有了很大提高,且更易于实现数字化。

通俗化理解:把PMSM想象成两块同心的磁铁,两块磁铁是相吸的,因此当用手拨动外面的磁铁绕组圆心转动时,里面的磁铁也会跟着转动,这其实就是PMSM的本质了。PMSM的转子是永磁铁,定子是绕组,我们用电路控制定子绕组产生旋转的磁场,里面的转子磁铁就会跟着转动,这个磁场的大小最好恒定,不然一会儿大一会儿小,转子受到的牵引力也就一会儿大一会儿小,影响运动性能。好了,现在我们知道电机的本质是什么了。接下来,我们需要一个算法来控制定子绕组的输出,使其产生一个恒定的旋转磁场,这个算法就是SVPWM。

5.2   SVPWM基本原理

要得到一个恒定大小的旋转磁场,可以先来得到一个恒定大小的旋转电压矢量。如下图:

从上图可知,我们可以通过互差120度,大小随着时间按正弦规律变化的3个分矢量来合成一个大小不变旋转的总矢量。于是问题又变成了:如何得到大小随着时间按正弦规律变化的3个分矢量呢?我们先回到电机上,其实这3个分矢量就对应了电机的3个绕组,3个绕组就是互差120度的,只要再控制绕组上的电压大小按照正弦规律变化,是不是就可以得到大小不变旋转的总矢量呢?看下面电机定子的坐标系图:

         

图5-2                                                     图5-3

如果让绕组上的电压大小按照正弦规律变化呢?直接通交流电,就是正弦的呀,可不可以呢?驱动器的控制电路如上右

我们只能控制6个管子的开关而已,看来直接通交流电是不行了。于是我们只能控制PWM的占空比来等效正弦:

上面图是SPWM的示意图(不是SVPWM,SPWM又有很大不同,变频器中基本上运用的是SPWM技术),这里描述原理而已。其实就是占空比越大,电压越大;占空比越小,电压越小。让占空比呈正弦变化,电压值自然也就呈正弦变化了。

我们用公式来表示一下:定义这三个电压空间矢量为UA(t)、UB(t)、UC(t),他们方向始终在各自的轴线上,而大小随时间按正弦规律变化,时间相位上互差120度。假设Um 为相电压的最大值(相电压呈正弦变化),f为电源频率,则有:

(图5-6)

根据Clarke变化,添加一个参数K

根据不同的需求选择不同的变换,K可以取不同的值。不同的需求如:要求功率不变、要求电压电流幅值不变等。我们这里为了使合成的空间矢量在静止的三相坐标轴上的投影和分矢量相等,取K值为2/3,这也是Clarke变换所采用的系数。

由于逆变器三相桥臂共有6个开关管,为了研究各相上下桥臂不同开关组合时逆变器输出的空间电压矢量,特定义开关函数Sx(x=a、b、c) 为:

(Sa、Sb、Sc)的全部可能组合共有八个,包括 6个非零矢量U1(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110)、和两个零矢量 U0(000)、U7(111)。

下面以其中一种开关组合为例分析,假设Sx(x=a、b、c)=(100),此时等效电路如图:

图5-6

因此相电压可以表示为:(相电压是每相相对于电机中间连接点的电压)

同理可得,其他开关状态三相的相电压。另外线电压是两相之间的电压差,如:

前面章节中已经推导,三相相电压矢量与合成矢量的关系如下:

 [下面阴影部分的内容,也是摘录网文,感觉和我们控制的实际情况差异很大,所以略过本理论,但还是节选下来]

表5-1

把上面的8个电压空间矢量按照Uout的相位关系放在扇区图中:

图5-7

上图中,6个非零矢量幅值相同,相邻的矢量间隔60度。两个零矢量幅值为零,位于中心。

我们真正想获得的合成矢量是一个绕着圆心旋转,半径保持固定

如果我们的硬件配置很强悍,可以直接输出三相UVW的正弦波形(比如采用DAC的方式等等),那么就直接根据余弦函数计算出幅值,进行DAC控制即可,可惜我们的硬件无法做到,我们能控制的仅仅只有6个mos管而已,也就是桥电路中的上下臂的控制,那么如何控制呢?

我们需要的合成矢量是一个围绕圆心旋转、幅值(半径)固定的向量,于是转换思路,可以采取两个向量合成的方式,比如上图5-7中,对于第Ⅰ扇区,我们就可以用U4和U6进行合成,因为U4和U6的方向是固定的,但是大小我们却可以通过占空比的方式进行控制,于是就可以进行合成了。

图5-8

如5-8中所圈出的两个点对应的向量,就是U4和U6

下面开始分析如何控制pwm进行合成:

三相电压给定所合成的电压向量旋转角速度为ω=2πf(即磁场旋转角速度),则旋转一周所需的时间为T=1/ f;若开关管载波频率是 fs ,则频率比为 R=fs / f。这样将电压旋转平面等切割成R个小增量,亦即设定电压向量每次增量的角度是:γ=2π/ R。(注:这里就是把电压向量旋转一周,均分为R份,用来R边形来拟合圆形,同时这也代表了磁场旋转一圈,进行R次运算。因此载波频率越大,转速越小,电压旋转平面越接近圆形,反之,越接近多边形。当然载波频率太高的话,管子的开关损耗就比较大,一般取5K-10K)

这里补充详细描述一下,比如载波频率为10KHz,也就是我们控制uvw的pwm波形时的频率,周期为100us,假设向量旋转的频率为100Hz,也就是说马达转速为100圈/秒(6000rpm),转一圈时间为10ms,计算R=10KHz/100Hz=100,也就是相当于10ms/100us=100次,也就是转一圈会计算100次。

实际上,软件中我们会固定在每个载波周期都进行一次FOC计算与控制,至于向量旋转1圈计算了多少次,就看向量转圈的周期了。

现在假设需要输出一个空间矢量Uref ,假设它在第Ⅰ扇区,我们先把第Ⅰ扇区单独取出来,然后用和它相邻的两个电压空间矢量来表示它:

得到以U4U6U7U0 合成的Uref 的时间后,接下来就是如何产生实际的脉宽调制波形。在SVPWM 调制方案中,零矢量的选择是最具灵活性的,适当选择零矢量,可最大限度地减少开关次数,尽可能避免在负载电流较大的时刻的开关动作,最大限度地减少开关损耗。因此,我们以减少开关次数为目标,将基本矢量作用顺序的分配原则选定为:在每次开关状态转换时,只改变其中一相的开关状态。并且对零矢量在时间上进行了平均分配,以使产生的 PWM 对称,从而有效地降低 PWM 的谐波分量。可以发现当U4 (100)切换至U0 (000)时,只需改变 A 相上下一对切换开关,若由U4 (100)切换至U7 (111)则需改变 B、C 相上下两对切换开关,增加了一倍的切换损失。因此要改变电压向量U4 (100)、U2 (010)、U1 (001)的大小,需配合零电压向量U0 (000),而要改变U6 (110)、U3  (011)、U5 (101), 需配合零电压向量U7 (111)。这样通过在不同区间内安排不同的开关切换顺序, 就可以获得对称的输出波形,其它各扇区的开关切换顺序如下表所示。

因此就可以利用U4U6U7  及U0  的顺序和时间长短的搭配来表示出Uref 了。

以第Ⅰ扇区为例,其所产生的三相波调制波形在一个载波周期时间Ts 内如下图所示,图中电压向量出现的先后顺序为U0U4U6U7U6U4U0 ,各电压向量的三相波形则与上表中的开关表示符号相对应。在下一个载波周期TsUref 的角度增加一个γ,利用式(5-11)可以重新计算新的T0T4T6  及T7  值,得到新的类似下图的合成三相波形;这样每一个载波周期Ts 就会合成一个新的矢量,随着θ的逐渐增大,Uref 将依序进入第Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ区。在电压向量旋转一周期后,就会产生R个合成矢量。

图5-9

因此SVPWM会在每个载波周期进行一次计算。

通过以上 SVPWM 的法则推导分析可知要实现 SVPWM 信号的实时调制, 首先需要知道参考电压矢量 Uref 所在的区间位置,然后利用所在扇区的相邻两电压矢量和适当的零矢量来合成参考电压矢量。

控制系统需要输出的矢量电压信号 Uref ,它以某一角频率ω在空间逆时针旋转,当旋转到矢量图的某个60°扇区中时,系统计算该区间所需的基本电压空间矢量,并以此矢量所对应的状态去驱动功率开关元件动作。当控制矢量在空间旋转360°后,逆变器就能输出一个周期的正弦波电压。

Uref 所在的位置

开关切换顺序

波形输出

(0° ≤ θ <60° )

...0-4-6-7-7-6-4-0...

​​​​​

II (60° ≤ θ <120° )

...0-2-6-7-7-6-2-0...

III (120° ≤ θ <180° )

...0-2-3-7-7-3-2-0...

IV (180° ≤ θ <240° )

...0-1-3-7-7-3-1-0...

V (240° ≤ θ <300° )

...0-1-5-7-7-5-1-0...

VI (300° ≤ θ <360° )

...0-4-5-7-7-5-4-0...

表5-3

第六章 SVPWM怎么和FOC算法对接

说完了SVPWM算法,我们来对接FOC算法,框图如下:

图6-1 矢量控制方框图

理解前后关系:FOC的输出是SVPWM的输入,SVPWM输出是三相电压的占空比,也就是最终设置到计时器中的比较寄存器的值。那么FOC输出的是什么呢?这里直接给出结论是VαVβ ,这个也与直轴和交轴方向相同的两个电压矢量。

直轴:转子N到S的方向

交轴:与直轴垂直,维持转子转动的方向,在电机转动的过程中,交轴方向的力是维持转子转动的,而直轴上的力对转动无效果,因此我们应该尽力让其为0。

上图中的第7部分就是SVPWM,其作为FOC最终的执行部分,接收FOC传来的 ,然后通过上面的过程转换成开关管的控制信号,控制定子绕组产生旋转磁场。

6.1合成矢量Uref 所处扇区N 的判断

空间矢量调制的第一步是判断由 所决定的空间电压矢量所处的扇区。

假定合成的电压矢量落在第 I 扇区,可知其等价条件如下:

【备注:上面是原理,对于ST电机库源代码中的判断,又有一些变形,我们后面有专门的的章节详细解读源码】

6.2 基本矢量作用时间计算与三相 PWM 波形的合成

在传统 SVPWM 算法如式(5-11)中用到了空间角度及三角函数,使得直接计算基本电压矢量作用时间变得十分困难。实际上,只要充分利用  就可以使计算大为简化。

我们来分析一下FOC整个控制过程:

  1. 采集ABC三相中的二相(有2相即可,第3相可以推导出)。
  2. clarke变换生成αβ
  3. park变换为d-q坐标系
  4. 进行PI等控制+磁链圆
  5. 反park重新获得αβ

这里到第(5)步后就不要进行什么反克拉克变换之类的了,这里直接可以从αβ 相获得pwm波形驱动的数据

下面的理论开始来解决这个问题:

Uref 处在第Ⅰ扇区时进行分析,根据下图有:

图6-2 电压空间向量在第Ⅰ区的合成与分解

Ud 就是Udc ,即母线电压。下式的最后把Ⅰ扇区两边的电压矢量U4 (100)和U6 (110)的Uout 式子带进来了,分别是2/3Ud 和2/3Ud *cos(π /3):

 

不同扇区比较器的值之分配如下:

TaTbTc 分别对应三相比较器的值,将这三个值写入相应的比较寄存器,就完成了整个svpwm算法。

taontbontcon 的波形呈马鞍形,如下:

图6-5

这个计算出来的时间函数为什么会成马鞍波形?下面章节中会有,虽然是按照相电压进行说明。

第七章  SVPWM 物理含义

SVPWM 实质是一种对在三相正弦波中注入了零序分量的调制波进行规则采样的一种变形 SPWM。但 SVPWM 的调制过程是在空间中实现的,而 SPWM 是在ABC 坐标系下分相实现的; SPWM 的相电压调制波是正弦波,而 SVPWM 没有明确的相电压调制波,是隐含的。为了揭示 SVPWM 与 SPWM 的内在联系,需求出SVPWM 在 ABC 坐标系上的等效调制波方程,也就是将 SVPWM 的隐含调制波显化。

为此,下面开始对其调制波函数进行了详细的推导。 由表格 5-3 我们知道了各扇区的矢量发送顺序:

奇数区依次为:

ST电机库v5.4.4源代码分析(1): FOC原理(结合ST电机库)相关推荐

  1. ST电机库v5.4.4源代码分析(4): 电角度和力矩方向分析(Hall传感器)

    编者:沉尸 (5912129@qq.com) 一)ST马达库中角度的定义 引言: 在Clerke以及park等变换中,我们都涉及到了角度,本文中我们结合ST的源代码探讨一下角度的取得以及它和力矩的关系 ...

  2. ST电机库v5.4.4源代码分析(8): 旋编怎么对齐

    编者:沉尸 (5912129@qq.com) 问题: 带旋编的电机(不是绝对位置旋编),ST电机库是怎么对齐的呢?也就是说如何确定初始电角度的问题. 我们基于"D:\motorCtr\cod ...

  3. ST电机库v5.4.4源代码分析(2): 磁链圆限制之计算以及一个小bug

    编者:沉尸 (5912129@qq.com) FOC流程图 Circle_Limitation所在位置 图1 图2 现在计算出了和,需要限制: 如果 显然需要一个缩小的系数i (i < 1)进行 ...

  4. ST电机库v5.4.4源代码分析(3): α、β方向的电流值与三相PWM 波形的联系

    编者:沉尸 (5912129@qq.com) 引言: 我们通过一系列的运算最后通过反park计算出了α.β方向的电流,那么如何将这两个电流值换算成pwm控制duty的实际参数呢? 本文结合ST电机库中 ...

  5. ST电机库v5.4.4源代码分析(6): PID以及相关参数

    编者:沉尸 (5912129@qq.com) 前言: 本文章探索st电机库自动生成的PID参数的由来,采用的控制板为野火407电机板+BLDC带Hall的电机. 在"Mcboot()&quo ...

  6. ST电机库v5.4.4源代码分析(7): SpeednPosFdbk_Handle_t在几个结构体中的关系

    编者:沉尸 (5912129@qq.com) 前言: SpeednPosFdbk_Handle_t在几个结构体中绕来绕去,我这里将其脉络梳理一下,方便读者理解代码. 先看下面的代码: 最终的结果是: ...

  7. ST电机库v5.4.4源代码分析(10): MCWB应用中的一个小技巧

    编者:沉尸 (5912129@qq.com) 前言: 如图中箭头,我们新建一个项目,BKIN缺省是有效的,而我们项目中又没用上BKIN脚,那么怎么让它变灰无效呢? 先设置好所有内容,然后生成项目 然后 ...

  8. 毕业设计之 - 大数据分析:电商产品评论数据情感分析

    文章目录 1 简介 数据分析目的 数据预处理 评论去重 数据清洗 分词.词性标注.去除停用词 提取含名词的评论 绘制词云¶ 词典匹配 评论数据情感倾向分析 修正情感倾向 LinearSVC模型预测情感 ...

  9. Media Player Classic - HC 源代码分析 7:详细信息选项卡(CPPageFileInfoDetails)

    ===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...

最新文章

  1. Linux属于下面哪一种软件,【单选题】下面软件中属于自由软件开放源码的是( )。 A. Unix B. Linux C. Mi...
  2. java stringbu,Java String和StringBuilder常用方法,
  3. Python写爬虫只需三步
  4. 【Flask】创建一个蓝图
  5. css3 设置多列布局
  6. C++插入中文到mysql乱码
  7. 90% 程序员都吃亏在这门技术上了,你呢!
  8. Java并发编程之Lock
  9. js系列教程9-表单元素全解
  10. SetWindowLong代码设置窗体borderStyle风格 TOOLWINDOW
  11. mysql x锁 u锁_讲解更新锁(U)与排它锁(X)的相关知识
  12. keil4 c语言标准,求助!关于KEIL4和C语言
  13. pytest--之测试报告allure配置
  14. 智能音箱 功放与喇叭选型 参考
  15. 人工神经网络与神经网络,消息传递神经网络
  16. [Luogu4182][USACO18JAN]Lifeguards P[单调队列]
  17. vue--百度地图之离线地图
  18. pdf如何压缩?pdf太大怎么压缩大小?如何在线压缩pdf文件大小?
  19. 主板电容损坏导致台式机开机风扇转无显示信号输出
  20. shell数组目录遍寻循环输出

热门文章

  1. 大数据之路读书笔记-09阿里巴巴数据整合及管理体系
  2. STM32G4xx_DFP.1.2.0.pack,Keil.STM32F4xx_DFP.2.15.0.pack等
  3. 基础爬虫记~豆瓣+东方财富网爬虫
  4. C/C++使用Windows的API实现共享内存以及同步
  5. 一个简单实用的程序员鸡汤
  6. eclipse不编译的原因
  7. 于丹 论语 心得和感悟
  8. mysql geo_MySQL GEO 字段类型说明及案例
  9. Wireshark抓包——TCP协议分析
  10. 90后的互联网社交病:面对面交流也要发微信