天上不会掉馅饼,努力奋斗才梦想成真

  电机控制算法中,SVPWM是跑不掉的一关,必须将其怼的明明白白,才能实际让电机转起来,这里就作为SVPWM学习的记录。
  强烈推荐大家去看qlexcel大佬写的SVPWM算法原理及详解,写的真的很好。地址:https://blog.csdn.net/qlexcel/article/details/74787619 ,原理分析部分大部分都是参照这位大佬的,这里表示感谢。

  目标:SVPWM原理分析及仿真分析。

1 原理分析

  SVPWM算法实际上是对应于交流电机中的三相电压源逆变器功率器件的一种特殊的开关触发顺序和脉宽大小的组合,这种开关触发顺序和组合将在定子线圈中产生三相互差120电角度、失真较小的正弦波电流波形,也就使电机获得圆形磁链轨迹轨迹。
  我们可以通过互差120度,大小随着时间按正弦规律变化的3个分矢量来合成一个大小不变旋转的总矢量。于是只需要控制PWM的占空比按等效正弦:

  由于逆变器有6个MOS控制,所以通过上下桥臂不同的开关组合可以定义开关函数Sx(x=a、b、c), 1:上桥臂导通、0:桥臂打开(上下桥臂为互补PWM)。(Sa、Sb、Sc)的全部可能组合共有八个,包括 6个非零矢量Ul(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110)、和两个零矢量 U0(000)、U7(111)。以U4(100)为例,此时等效电路为:

  此时相电压可以表示为:
  Ua = 2/3 Udc
  Ub = -1/3 Udc
  Ua = -1/3 Udc
  那么最终可以计算出一个合成矢量的关系式:

  通过将8中开关状带入公式可以得到一个开关组合和电压的关系,将这8钟组合的基本空间矢量映射到平面上后,可以得到电压空间矢量图。他们将平面分成6个区,称之为扇区。

2 算法合成原理

  SVPWM算法的理论基础是平均等效原理,即在一个开关周期Ts内通过对基本电压矢量加以组合,使其平均值与给定电压矢量相等。如下图,在某个时刻,电压空间矢量Uout旋转到某个区域内,可以由组成该区域的两个相邻的非零矢量和零矢量在时间上的不同组合得到。以扇区I为例,可得下式:

  此时就得到了U4、U6、U7、U0对应的时间。因此就可以利用 U4、U6、U7 及 U0 的顺序和时间长短的搭配来表示出Uref了

  那么按照不同的开关顺序,就可以得到对称的输出波形,开关顺序如下:

  无论在仿真中还是实际单片机定时器,其产生的三相波调制波形在一个载波周期(三角波)Ts内。通过电角度的循环变化,各项电压的三相波形与表2-2开关顺序对应。每个载波周期Ts就会合成一个新的矢量,随着电角度的逐步增大,Uref 将依序进入第Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ区。

3 算法实现

3.1 输入输出参数

  无论是基于控制板还是Simulink仿真,算法的实现都要有明确的逻辑。首先需要知道SVPWM模块或函数的输入输出参数。

  由FOC控制流程图可知SVPWM输入为Valpha跟Vbeta,输出为三相电压。在simulink仿真中,我们需要输入Valpha跟Vbet,输出UVW对应的有效电平时间即可。在MCU中,以ST32f103为例,需要输入Valpha跟Vbet,输出UVW对应的定时器比较值即可。

3.2 扇区确定

  用Valpha跟Vbeta表示参考电压Uout在alpha、beta轴上的分量,那么定义Uref1、Uref2、Uref3三个变量,令

  扇区计算可以看作比较大小的过程,判断β是否大于0,确定扇区在V3,V4矢量连成的直线的上方还是下方,sqrt(3)/2α 与β/2比较大小,确定扇区在V1,V6所连成直线的左边还是右边,-sqrt(3)/2α 与β/2比较大小,确定扇区在V2,V5连成直线的左边还是右边。
  再定义,若Uref1 > 0 ,则 A=1,否则 A=0;
       若Uref2 > 0 ,则B=1,否则 B=0;
       若Uref3 > 0 ,则 C=1,否则 C=0。
  因此可以由A、B、C的组合判断当前Uout所在的扇区, N=4C+2B+A,则可以通过下表计算参考电压矢量Uout所在的扇区。

3.3 输出时间确定

  根据电压矢量在Valpha跟Vbeta的分量,可以计算出Uout在各个扇区中各矢量的作用时间,如下表所示,其中两个非零矢量作用时间的比例系数为K = √3Ts/Udc 。

  当两个零电压矢量作用时间为0时,一个Ts周期内,非零矢量的作用时间最长。此时合成的空间电压矢量幅值最大,最大不会超过正六边形边界。若超过边界,将会发生过调制,逆变器输出电压波形将发生失真,因此需要将输出电压矢量在正六边形的内切圆里。,其幅值为1/√3 Udc。

  因此需要保证非零矢量时间和小于周期Ts。所以关系为:

  至此,SVPWM的算法流程为
   ① 根据Ualpah和Ubeta计算扇区
   ② 计算非零矢量以及零矢量作用时间

4 Simulink仿真

  在确定原理之后,我们开始进行simulin搭建。

4.1 创建Ud和Uq的输入。


  这是可能会有一个疑问,为什么要Ud = 0,Uq为一个定值呢?
  因为根据Ud、Uq的电压公式,Ud = 0,及Id = 0;在Uq的范围内,Iq随电气角速度的变大而减小。此时Ualpha与Ubeta 的波形如下:

  然后使用MATLAB Function模块设计SVPWM的代码,这样简单一些,也可以直接将代码稍微修改带电机控制算法中。

4.2 根据Ualpha跟Ubeta确定电压矢量扇区

%
% 参考电压矢量的扇区判断
%  若Uref1 > 0,则A = 1,否则A = 0;
%  若Uref2 > 0,则B = 1,否则B = 0;
%  若Uref3 > 0,则C = 1,否则C = 0;
%  Sector = 4C + 2B + A
%  N与扇区的对应位:
%  Sector : 3  1   5    4   6  2
%  扇区号 : I  II  III  IV  V  VI
%
Uref1 = Ubeta;
Uref2 = (sqrt(3) * Ualpha - Ubeta) / 2;
Uref3 = (-sqrt(3) * Ualpha - Ubeta) / 2;if Uref1 > 0Sector = 1;
end
if Uref2 > 0Sector = Sector + 2;
end
if Uref3 > 0Sector = Sector + 4;
end

4.3 计算各扇区输出时间

4.4 计算各扇区输出时间

X = sqrt(3) * Ubeta * Tpwm / Udc ;
Y = Tpwm / Udc * ( 3/2 * Ualpha + sqrt(3)/2 * Ubeta);
Z = Tpwm / Udc * (-3/2 * Ualpha + sqrt(3)/2 * Ubeta);  switch (Sector)   case 1T1 = Z; T2 = Y; case 2T1 = Y; T2 = -X; case 3T1 = -Z; T2 = X; case 4T1 = -X; T2 = Z;case 5T1 = X; T2 = -Y;otherwiseT1 = -Y; T2 = -Z;
end

4.5 过调整处理

 if T1 + T2 > TpwmT1 = T1 / (T1 + T2);T2 = T2 / (T1 + T2);
elseT1 = T1;T2 = T2;
end

  这个时候要注意了,在simulink中调制周期Ts是由三角波生成的,那么每个输出时间应以Ts/2为参考,若使用锯齿波为周期,那么计算的三相电压时间就不用除2。为了兼容各个MCU对PWM的设计,这里选择使用锯齿波方式,三相时间不除2,如下图:

三角波:

ta = (Tpwm- T1 - T2) / 4.0;
tb = ta + T1 / 2;
tc = tb + T2 / 2;

锯齿波:

ta = (Tpwm- T1 - T2) / 2.0;
tb = ta + T1 ;
tc = tb + T2 ;

4.6 三相电压有效值时间输出

 switch Sectorcase 0        % (Ualpha,Ubeta) = (0,0) Tu = 0.5;Tv = 0.5;Tw = 0.5;case 1       % II 扇区   0->2->6->7->7->6->2->0Tu = tb;Tv = ta;Tw = tc;   case 2       % VI 扇区   0->4->5->7->7->5->4->0Tu = ta;Tv = tc;Tw = tb;  case 3       % I 扇区   0->4->6->7->7->6->4->0  Tu = ta;Tv = tb;Tw = tc;  case 4       % IV 扇区   0->1->3->7->7->3->1->0 Tu = tc;Tv = tb;Tw = ta;case 5       % III扇区   0->2->3->7->7->3->2->0 Tu = tc;Tv = ta;Tw = tb; case 6       % V  扇区   0->1->5->7->7->5->1->0Tu = tb;Tv = tc;Tw = ta;
end

5 波形分析

  当设置Uq = 0.1,Ts=1时,Ualpha与Ubeta幅值为0.1,最终算出的SVPWM的作用时间应已0.5为中心,上下波动,由于选择的是内切圆。这是需要明确一个概念(自己意淫的,但给自己说通了),相电压与线电压。
  由于α-β轴与d-q轴都可以理解为由“相”角度变换而来,所以都是“相”的概念,而电源电压作用到的是三相,要形成回路,所以可以理解为“线”的概念,因此Uq输入的值要除以sqrt(3)。这也是电压Q值标幺化时,最大电压为Udc / sqrt(3)。
  当Uq设置为1/sqrt(3)时,SVPWM输出为:

可以看到三相调制波均为漂亮的马鞍波,波峰接近1,波谷接近0,已经接近逆变器不失真输出的极限。
  扇区变化如下:

基于控制板SVPWM设计

  使用ST32F103C8T6设计SVPWM输出,整个算法层使用Q24定标的Q值格式。如下图Uq的变化与SVPWM输出波形。可以看到Uq为0.1时,SVPWM与仿真的基本一样。

下个学习任务是:
搭建完整的基于PI调制的PMSM矢量控制

simulink电机仿真学习 - SVPWM原理分析及仿真分析相关推荐

  1. simulink电机仿真学习 -根据转矩方程搭建速度环矢量模型

    爱自己是一生浪漫的开始.   电机控制中,无论什么观测器,最终都是为了得到电机的电角度跟角速度,这里就通过转矩方程来进行简单的速度环矢量控制模型.   目标:搭建简单的由转矩方程计算角度速度的矢量控制 ...

  2. simulink电机仿真笔记一

    simulink电机仿真笔记一 开场白 电机模型 开场白 最近有点闲,于是尝试用simulink自带的电气库做一个电机控制仿真模型,将现有的工程代码用S-function嵌入到模型中.由于自己对这些库 ...

  3. 后门BROOTKIT代码学习和原理分析

    周末闲来无事,想找点东西学习一下,随手翻到了之前看到的一篇关于brootkit的文章,知道它是用Bash写的一个后门程序.刚好最近在做Bash相关的工作,就想着学习一下这方面的知识,稍作整理之后就有了 ...

  4. Simulink移动机器人仿真学习--Trick记录

    1.前记: 记录的目的是学习,也期望阅读者有所收获便足矣.这次的记录算是Simscape Mutibody Modeling学习--移动多体模型中的物体(2)中的一次续写.不过重点不是关于多体建模的, ...

  5. 基于matlab的RS编译码仿真,从底层原理分析RS编译码的实现过程

    欢迎订阅<FPGA学习入门100例教程>.<MATLAB学习入门100例教程> 目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础

  6. 深度学习损失函数原理分析(二)

    上一章节主要介绍了均方误差(MSELoss)与交叉熵损失(CrossEntropyLoss)两个损失函数原理及应用,本章将介绍 L1范数损失. 2.4 L1范数损失(L1_loss) L1_loss表 ...

  7. 【电机控制算法】SVPWM算法的应用(基于Simulink与STM32外设场景的仿真)

    文章目录 前言 一.扇区判断 二.各扇区基础矢量作用时间的计算 1.若处于扇区I 2.若处于扇区II 3.若处于扇区III 4.若处于扇区IV 5.若处于扇区V 6.若处于扇区VI 7.In a wo ...

  8. MATLAB/Simulink 通信原理及仿真学习(二)

    文章目录 MATLAB/Simulink 通信原理及仿真学习(二) simulink仿真 常用的Simulink库 1. 信号源模块库 2. 数序运算模块 3. 信号输出模块库 4.仿真搭建 5.搭建 ...

  9. 外设芯片学习之路_CD4051原理分析和仿真实验

    CD4051原理分析和仿真实验 1.芯片概述 2.芯片引脚分析 3.Proteus仿真实验 1.芯片概述 CD4051是单端8通道多路开关,它有3个通道选择输入端C.B.A 和一个禁止输入端INH.C ...

最新文章

  1. java中数据池有哪些_什么是数据库的 “缓存池” ?(万字干货)
  2. mysql 5.6.14 64位_如何在64位WIN7下安装64位的解压版MySQLmysql-5.6.14
  3. Kali Linux 初上手记录 初始版本1.0.9
  4. 1.模型 16个相机参数(内参、外参、畸变参数)
  5. 【Windows工具】BBDown.exe B站视频下载工具详细使用说明(https://github.com/nilaoda/BBDown)
  6. Winform DataGridView数据绑定问题
  7. mingw linux socket,MingW上编译WinSocket程序undefined reference to `WSAStartup@8'报错的解决办法...
  8. 关于ARM指令中位置无关和位置相关代码的认识【转】
  9. 自然语言处理简明教程——序言、第一章
  10. FFmpeg 内存H264流发布rtmp
  11. 大数据趣味学习探讨(三):怎么确定学习目标
  12. 【翻译服务(1)】有道智云使用入门及文本、图片和语音翻译服务
  13. 第三方app实现微信登录功能
  14. 销售额高达2.8亿的 “像素猫头鹰”项目Moonbirds,何以令NFT收藏家趋之若鹜?
  15. linux 查看文件命令
  16. response响应对象参数和方法是啥?怎么发送带请求头的请求(headers参数)怎么发送带参数的请求?cookieJar的转换方法是什么?
  17. Navicat查看表的sql语句
  18. (19)一篇掌握MySQL数据库基础下 基本操作(外键约束、建表原则、多表查询、子查询)
  19. 武汉大学和华科计算机系录取分数线,武汉大学各省份录取分数线,逐渐被华中科大拉开,分数却连年升高...
  20. 华为OBS通过ObjectKey生成临时的url地址

热门文章

  1. smalltalk五个特性
  2. iOS:多效果的CategoryView
  3. c++代码使用堆空间实现数据结构栈
  4. 产品管理包括什么和什么_什么是产品管理?
  5. Android反模拟器的总结
  6. Educational Codeforces Round 140 (Rated for Div. 2)题解
  7. echart图表(自定义提示框) 鼠标移动到数据展示区自定义展示提示框 天/时/分/秒
  8. cat 链接并显示文件
  9. java课外兴趣小组管理系统_课外兴趣小组计划
  10. IOS成长之路-Nsstring中搜索方法rangeOfString