小猫爪:PMSM之FOC控制04-SVPWM

article/2025/10/18 18:36:03

小猫爪:PMSM之FOC控制04-SVPWM

  • 1 SVPWM的引出
  • 2 SVPWM的原理
  • 3 SVPWM的推导
  • 4 仿真
  • END

  

1 SVPWM的引出

  在Park变换那一节,说到了可以通过控制Eq(Iq)和Ed(Id)来控制电机。而电流我们并不能直接控制,只能简介通过控制输出电压来控制电流,这个时候就需要通过经典的反馈控制来实现了。当我们拿到转子的位置时,就可以根据转子位置对电机三相电流进行解耦,经过Clark和Park变换得到反馈信号Id_feedback和Iq_feedback,再通过PID控制器对Id_feedback和Iq_feedback进行分别控制来得到最佳的控制信号,即电压信号Ud和Uq。

  根据上面我们就可以列出下面的foc控制的框图:
在这里插入图片描述
  电流反馈信号经过Clark和Park变换变成Id_feedback和Iq_feedback后,再输入给PID控制器,再使用反Park变换把PID控制器输出的控制信号Ud和Uq变换成Uα和Uβ,然后再将Uα和Uβ送入SVMPWM中产生三相全桥逆变器控制信号控制逆变器产生控制电流。这就是FOC控制流程。

  那么Uα和Uβ怎么最终怎么变成逆变器的PWM控制信号呢,这就需要SVPWM来完成了。即SVPWM模块的输入是Uα和Uβ,输出则是PWM信号。

2 SVPWM的原理

  SVPWM 的理论基础是平均值等效原理, 即在一个开关周期内通过对基本电压矢量加以组合, 使其平均值与给定电压矢量相等。 下图为三相全桥逆变器拓扑:
在这里插入图片描述
  由于逆变器三相桥臂共有 6 个开关管, 为了研究各相上下桥臂不同开关组合时逆变器输出
的空间电压矢量, 特定义开关函数 Sx ( x = a、 b、 c) 为:
S ( x ) = { 1 , 上桥臂导通 0 , 下桥臂导通 S(x)= \begin{cases} 1, & \text {上桥臂导通} \\ 0, & \text{下桥臂导通} \end{cases} S(x)={1,0,上桥臂导通下桥臂导通

  (Sa、 Sb、 Sc)的全部可能组合共有八个, 包括 6 个非零矢量 Ul(001)、 U2(010)、 U3(011)、U4(100)、 U5(101)、 U6(110)、 和两个零矢量 U0(000)、U7(111),下面以其中一 种开关 组合为例分 析, 假设 Sx ( x= a、 b、 c)= (100),此时:
在这里插入图片描述
在这里插入图片描述
  求解上述方程可得: Uan=2Udc/3、 UbN=-Udc/3、 UcN=-Udc/3。 同理可计算出其它各种组合下的空间电压矢量, 列表如下:

SaSbSc矢量符号UabUbcUcaUaNUbNUcN
000U0000000
100U4Udc00 2 3 U d c { \frac{2}{3} }Udc 32Udc − 1 3 U d c {- \frac{1}{3} }Udc 31Udc − 1 3 U d c {- \frac{1}{3} }Udc 31Udc
110U6UdcUdc0 1 3 U d c { \frac{1}{3} }Udc 31Udc 1 3 U d c {\frac{1}{3} }Udc 31Udc − 2 3 U d c {- \frac{2}{3} }Udc 32Udc
010U20UdcUdc − 1 3 U d c { -\frac{1}{3} }Udc 31Udc 2 3 U d c {\frac{2}{3} }Udc 32Udc − 1 3 U d c {- \frac{1}{3} }Udc 31Udc
011U30UdcUdc − 2 3 U d c {- \frac{2}{3} }Udc 32Udc 1 3 U d c {\frac{1}{3} }Udc 31Udc 1 3 U d c {\frac{1}{3} }Udc 31Udc
001U100Udc − 1 3 U d c {- \frac{1}{3} }Udc 31Udc − 1 3 U d c {- \frac{1}{3} }Udc 31Udc 2 3 U d c { \frac{2}{3} }Udc 32Udc
101U5Udc00 1 3 U d c { \frac{1}{3} }Udc 31Udc − 2 3 U d c {- \frac{2}{3} }Udc 32Udc 1 3 U d c {\frac{1}{3} }Udc 31Udc
111U7000000
  然后根据这8个情况下分别计算电压合成矢量,则对应的基本电压矢量大小和方向:
在这里插入图片描述
  其中非零矢量的幅值相同(模长为 2Udc/3), 相邻的矢量间隔 60° , 而两个零矢量幅值为零, 位于中心。 在每一个扇区, 选择相邻的两个电压矢量以及零矢量, 按照伏秒平衡的原则来合成每个扇区内的任意电压矢量, 即:
在这里插入图片描述
  其中, Uref 为期望电压矢量; T 为采样周期; Tx,Ty,T0 分别为对应两个非零电压矢量 Ux、 Uy 和零电压矢量 U 0 在一个采样周期的作用时间,即T=Tx+Ty+T0; 其中 U0 包括了 U0 和 U7 两个零矢量。 矢量 Uref 在 T 时间内所产生的积分效果值和 Ux、 Uy、 U0分别在时间 Tx,Ty,T0 内产生的积分效果相加总和值相同。

  由于三相正弦波电压在电压空间向量中合成一个等效的旋转电压, 其旋转速度是输入电源角频率, 等效旋转电压的轨迹将是上面所示的圆形。 所以要产生三相正弦波电压,可以利用以上电压向量合成的技术, 在电压空间向量上, 将设定的电压向量由 U4(100)位置开始, 每一次增加一个小增量, 每一个小增量设定电压向量可以用该区中相邻的两个基本非零向量与零电压向量予以合成, 如此所得到的设定电压向量就等效于一个在电压空间向量平面上平滑旋转的电压空间向量, 从而达到电压空间向量脉宽调制的目的。

3 SVPWM的推导

  上面说到,只需要算出 Tx,Ty,T0 ,就可以使用相联的两个电压矢量合成任何一个想要的电压状态,换句话说也就是说任何一组Uα和Uβ都可以使用两个相联的电压矢量合成。下面最重要的就是怎么算出 Tx,Ty,T0。

  假设欲合成的电压向量 Uref 在第Ⅰ 区中第一个增量的位置, 如图 2-10 所示, 欲用 U4、U6、 U0 及 U7 合成, 用平均值等效可得: U refTz =U4T4 + U6*T6 :
在这里插入图片描述

如图可以列出等式:
在这里插入图片描述
再加上:
在这里插入图片描述
即可算出:
在这里插入图片描述
  既然Tx,Ty已经求出,则T0=Ts-Tx-Ty。同理即可得出其余六个扇区的值:

扇区TxTy
1 3 T S U d c ( 3 2 U α − 1 2 U β ) \frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ) 3 T S U d c U β \frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta} Udc3 TSUβ
2 − 3 T S U d c ( 3 2 U α − 1 2 U β ) -\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ) − 3 T S U d c ( − 3 2 U α − 1 2 U β ) -\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ)
3 3 T S U d c U β \frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta} Udc3 TSUβ 3 T S U d c ( − 3 2 U α − 1 2 U β ) \frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ)
4 − 3 T S U d c U β -\frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta} Udc3 TSUβ − 3 T S U d c ( 3 2 U α − 1 2 U β ) -\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ)
5 3 T S U d c ( − 3 2 U α − 1 2 U β ) \frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ) 3 T S U d c ( 3 2 U α − 1 2 U β ) \frac{\sqrt{{ 3 }}T_S }{U_{dc}}(\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ)
6 − 3 T S U d c ( − 3 2 U α − 1 2 U β ) -\frac{\sqrt{{ 3 }}T_S }{U_{dc}}(-\frac{\sqrt{{ 3 }} }{2}U_{\alpha}-\frac{{1} }{2}U_{\beta}) Udc3 TS(23 Uα21Uβ) − 3 T S U d c U β -\frac{\sqrt{{ 3 }}T_S }{U_{dc}}U_{\beta} Udc3 TSUβ

  计算到这里,有一点非常重要,当两个零电压矢量作用时间为 0 时,此时的合成空间电压矢量幅值最大, 其幅值最大不会超过图中所示的正六边形边界。 而当合成矢量落在该边界之外 时, 将发生过调制, 逆变器输出电压波形将发生失真。 在 SVPWM 调制模式下, 逆变器能够输出的最大不失真圆形旋转电压矢量为下图所示虚线正六边形的内切圆,如下图所示:
在这里插入图片描述
  如果发现了计算出的时间总和一旦大于单个周期,即Tx+Ty>Ts(六边形界限), Tx+Ty> 3 2 \frac{\sqrt{{ 3 }} }{2} 23 Ts(内切圆界限),这个时候就需要进行等比缩小。让最终的Tx+Ty不大于Ts或者 3 2 \frac{\sqrt{{ 3 }} }{2} 23 Ts。

  每个扇区的时间根据Uα和Uβ都已经计算出来了,但是还有一个需要注意的是怎样通过Uα和Uβ算出当前处在哪个扇区区间内?

  不妨再仔细看上表,发现了有三个元素出现频率非常高,分别是:
在这里插入图片描述
  因为时间肯定是正的,所以让Tx>0, Ty>0,即可列出在每个扇区中保证时间是正的充分必要条件U1,U2,U3是否大于0。若 U1>0 , 则 A=1, 否则 A=0; 若 U 2>0 , 则 B=1, 否则 B=0; 若 U3>0 ,则 C=1, 否则 C=0。 令 N=4C+2B+A,则可以得出如下结论:

扇区号123456
N值315462
  这样就通过Uα和Uβ计算出扇区,决定使用哪两个相连的电压矢量以及各自作用的时间,还有最后一个问题,怎么把时间变成我们想要的PWM波。

  最常用的SVPWM调制方式有两种,7段式和5段式,顾名思义就是在一个扇区中,开关状态一共有7种状态或者5种状态,下面我们就以最常见的7段式作说明:

  以减少开关次数为目标, 将基本矢量作用顺序的分配原则选定为: 在每次开关状态转换时, 只改变其中一相的 开关状态。 并且对零矢量在时间上进行了平均分配, 以使产生的 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)。 这样通过在不同区间内安排不同的开关切换顺序, 就可以获得对称的输出波形。

  以第一个扇区为例:开关状态切换和PWM波形,以及每个开关状态相应的作用时间如下图:
在这里插入图片描述
  可以看出在第一扇区中,一次经历了0-4-6-7-7-6-4-0这七种开关状态,两种开关状态之间的切换只改变了一组开关状态。依次类推,其他扇区也是这样的,这里就不多做什么,了解到7段式调制的原理,接下来就是怎样把算出的时间转换成MCU外设中的比较器值了,让MCU按照需求输出正确时间的PWM波形了。

  这一般跟MCU的PWM生成模块相关,就以最常见的center-align举例吧。在 I 扇区时如下图:
在这里插入图片描述
三个PWM高电平时间值为:
在这里插入图片描述
对应的计数器的比较值为:
在这里插入图片描述
  其中TNx和Tx的对应关系为:TNx = NTPWM*Tx/Ts。

  以此类推,得到其他扇区的比较器值如下表所示:
在这里插入图片描述
  :当然了,由于现在各家MCU厂商的SDK驱动库比较全面,一般都有直接设置占空比的函数,所以也可以让SVPWM输出三个占空比信号直接传参给驱动函数就好了,这样会更加简单。确定好PWM的周期之后,直接将三个信号的占空比算出即可,当然还是仅限center-align的这种对称工作模式。

  到这里为止,SVPWM就全部介绍完了。

4 仿真

  根据上面的推导直接整出仿真:
在这里插入图片描述
  仿真结果比较值输出:
在这里插入图片描述

  如果是这种马鞍形状,那么就代表成功了,接下来就是将其移植到MCU中,让其输出正确的PWM波了。将算法使用MATLAB生成并移植到MCU中,打印出比较器的值如下:
在这里插入图片描述
  在MCU中也验证正确了。

END


http://chatgpt.dhexx.cn/article/gNJ7i5Ew.shtml

相关文章

SVPWM matlab建模

此为SVPWM算法的SIMULINK建模过程,没有具体的公式推导(太多了,难打字) abc为matlab自带的三相正弦波发生器,需要调整参数。 首先进行坐标变换 第一个fcn里的代码 function y fcn(a,b,c) y (2/3)*( a-0.5*b-0.5*c);%…

SVPWM算法的推导

博文默认采用恒幅值变换,若是用到恒功率变换的时候,会特别说明。推导过程其实有很多种,云龙混杂,看着看着自己就晕了,所以最好找一种自己好理解的。有关坐标变换的理论,参考坐标变化这篇博客 1.三相空间电…

svpwm理解

svpwm主要用于逆变器件的开关与导通,使得在电机内部形成圆形磁场。与spwm相比有诸多优点,中小功率的逆变器基本都采用svpwm进行逆变控制。 svpwm目的是在电机内部形成圆形磁场,磁场与电机内部合成电压的关系为正交,即合成电压为磁…

SimpleFOC(八)—— 理论+实践 深度分析SVPWM

目录 说明一、有感FOC控制原理二、SVPWM原理三、SimpleFOC(不带电流采样)的控制原理:四、SimpleFOC核心代码五、代码实验5.1、实验目的5.2、硬件准备5.3、修改代码 第一阶段5.3.1 打开例程5.3.2 修改代码5.3.3 验证上传5.3.4 电机观测5.3.5 修…

matlab查表svpwm,SVPWM的查表生成方式代码

昨天研究了传统的SVPWM生成方法之后 偶然看到了这个东西: 也就是说 SVPWM的占空比-角度的关系可以用分段函数进行表示 这样就简单多了 基本上通过查cos表+判断能避免浮点数运算 下面素程序www 结果输出到3个txt文件中,修改p的值可以算占空比(相电压)或者线电压... /* * SVPW…

svpwm的matlab模型,SVPWM的matlab仿真实现

在仿真之前您必须安装MATLAB7.0或以上版本,必须确保simpowersysm工具箱已被安装,如果以上要求已经达到,那么就可以执行以下步骤了: 步骤1:打开matlab主界面,然后在command window界面中的“>>”旁边输…

SVPWM细节

SVPWM细节 # 原理 通过六个扇区的六个非零矢量进行矢量合成所需电压,但在合成过程中不可避免地会经过零矢量来合成,从而降低开关频率动作次数。 一般过调制的情况下非零矢量作用时间大于载波周期,所以在此过程中只取有效矢量的作用时间之和。…

SVPWM学习

作者寄语:在公众号(浅谈电机控制)中以小文章的形式记录自己学习SVPWM的过程。有时候自学未免出现理解错误的地方,所以烦请学友们批评指正。 如果需要SVPWM模型,关注微信公众号:浅谈电机控制。留下邮箱获取…

单相SVPWM

单相SVPWM逆变技术起源于三相电机调速系统中的三相SVPWM技术,在三相SVPWM调制中由旋转的电压矢量得到旋转的磁场,对电压矢量进行控制从而实现电机调速,其实电压矢量控制的实质是一种逆变过程,故单相SVPWM逐渐被研究并应用于逆变电…

SVPWM

接上一篇文章咱们接着讲讲SVPWM,如果对于PWM和SPWM不是很了解的同学可以看我上一篇文章。电机控制是一门很深得学问,由于时间和精力有限,本文章不会讲解特别深入,在此只是抛砖引玉。 SVPWM原理 SVPWM的全称是空间矢量脉宽调制(Sp…

SVPWM算法理解(一)——基本原理

SVPWM算法理解(一)——基本原理 说明1 SVPWM基本原理1.1 引言1.2 三相电量的空间矢量表示1.3 SPWM与SVPWM比较1.4 问题1:2Udc/3还是Udc? 2 SVPWM算法推导2.1 SVPWM的合成原理2.2 问题2:电压利用率1?2.3 SVP…

SVPWM理论部分

SVPWM理论部分 简述1、基本原理2、SVPWM控制2.1 扇区判断(根据$\alpha\beta$为方便判断扇区而采取的一种方法)2.2 电压空间矢量合成及作用时间2.3 电压空间矢量作用顺序2.3.1 五段式SVPWM2.3.2 七段式SVPWM 总结 简述 SVPWM,即空间矢量调制&…

SVPWM算法原理及详解

SVPWM算法原理及详解 1.概述 SVPWM是近年发展的一种比较新颖的控制方法,是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使输出电流波形尽可能接近于理想的正弦波形。空间电压矢量PWM与传统的正弦PWM不同,它是…

FOC电机控制之SVPWM原理与实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、SVPWM原理二、SVPWM实现方法1. 基本矢量电压:2.扇区判断:3. 计算相邻两个基本矢量电压的作用时间4 .三路PWM占空比计算 算法流程ste…

SVPWM分析、各个扇区详细计算以及Matlab仿真

SVPWM分析以及各个扇区详细计算以及Matlab仿真 说明目的两电平逆变器拓扑空间矢量扇区判断扇区内如何发波?矢量作用时间计算矢量切换时间的计算Simulink仿真/基于Matlab-R2014a版本 说明 第一次发文章,不太会用Markdown,word编辑的公式复制过…

概率统计Python计算:解古典概型问题

假定以 S S S为样本空间的随机试验是一个等概模型,事件 A ⊆ S A\subseteq S A⊆S。若能算得 ∣ S ∣ n |S|n ∣S∣n, ∣ A ∣ m |A|m ∣A∣m,我们知道 P ( A ) m / n P(A)m/n P(A)m/n。我们把这样的计算方法定义成下列的Python函数。 fr…

古典概型

【例1】一部四册的文集按任意次序放到书架上去,问各册自右向左或自左向右恰成 1,2,3,4 的顺序(用 表示)的概率是多少? 解 此随机试验的结果是四本书在书架上的一种放法,而每一…

概率论3——古典概型与二项分布

排列组合 排列组合高中应该就学过,包括两个原理(加法和乘法原理),以及排列和组合 两个原理 加法原理 比如完成某件事有3类途径,在1类中有4种方法,第2类中有2种方法,第3类中有3种方法&#xf…

概率论基础(1)古典和几何概型及事件运算

概率论对于学习 NLP 方向的人,重要性不言而喻。于是我打算从概率论基础篇开始复习,也顺便巩固巩固基础。 1.事件及运算 1.1 文森图及运算 1.2常用运算律 1.3相关练习 理解:要么A要么B要么C发生,所以是A ∪ B ∪ C&#xff…