首页 > 其他分享 >m基于simulink的SPWM控制器性能仿真,并分析其谐波,包括park模块和Clark模块

m基于simulink的SPWM控制器性能仿真,并分析其谐波,包括park模块和Clark模块

时间:2023-05-30 21:46:42浏览次数:47  
标签:&& Clark 16 SHEPWM sizes SPWM 开关 模块 pi

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

2.算法涉及理论知识概要

       SHEPWM是特定谐波消除脉宽调制,即通过开关时刻的优化选择,产生PWM来消除选定的低次谐波。

 

        MATLAB仿真中的SHEPWM的发波采用S函数编写,S函数是一种用于描述Simulink仿真模块的计算机语言,它结合了m文件和Simulink仿真模块的优点,可以极大地增强和扩展Simulink仿真能力,用户可以通过编写S函数来构造用户自己的模块,以实现一些复杂的功能。

 

       为了方便开关角的动态切换,SHEPWM发波函数分为3个S函数,分别实现A、B、C单相发波,S函数的输入为1/4周期的开关角度值以及调制波频率,输入的1/4周期的SHEPWM开关角数最大为15个,最小为0个,当输入0个开关角时,S函数输出为方波。S函数的输入为16维,前15个为1/4周期内的SHEPWM开关角度值输入,开关角值按顺序输入,不足的补零;第16个输入为电压矢量角度输入,用于发波。

 

       S函数状态变量设置为离散型,状态变量数为SHEPWM一周期内的开关数,状态变量是通过输入的1/4周期的开关角来计算出全周期的SHEPWM的开关角,

 

       三相的S函数中的输入和开关角的计算方法都一样,只是在方波方式中采用移相的方法,当正转的时候,B相相位滞后120度,C相相位滞后240度,当反转的时候,B相相位滞后240度,C相相位滞后120度,其SHEPWM的高低电平根据开关角数和开关时刻段来判断,如图1和图2所示,当开关角数为奇数时,开关时间段为奇数时,输出低电平,开关时间段为偶数时,输出高电平;当开关角数为偶数时,开关时间段为奇数时,输出高电平,开关时间段为偶数时,输出低电平。

 

 

 

        因为S函数的电压矢量角度表示的是电压矢量相对静止坐标系A轴的角度,而一个完整的SHEPWM的基波部分都是正弦波,所以必须要对电压矢量角做一定处理,即

 

 

 

         shepwm技术的特定消谐方程组是非线性超越方程,在初值的选取上存在难度,方程求解难度复杂,收敛效果不佳,由于微处理器主频速度低,目前大部分shepwm多采用查表法生成pwm波形来进行电机控制,用(1)离线法将计算出的开关角度存储在程序中,同时对希望输出的电压进行分析,计算并找到角度结果相近似的开关角度,以此来进行igbt的开关状态,该方法输出的电压并不连续,同时随着精度的增高,程序的存储空间加大,算法的灵活性与实时性变差;(2)数值法是求解超越方程组最常见的的方法,该方法通过选择合适的初值以保证方程的迭代收敛性,当初值选择不同时,得到的开关角轨迹也不相同,计算速度快,数值精度高,因此该方法的重点是如何选取方程的初值,同时保证方程的迭代性。但是数值迭代法计算速度快,精度高,但是其收敛性较差,初值计算困难,必须选择合适的初值才能够得到shepwm方程组的解,无法做到全调至域m解得范围,当m等于0或者m>0,9后,易形成窄脉冲;(3)在现在控制算法中,遗传算法遵循进化论,按照自然选择和基因的生物学规律进行全局优化寻找,利用该方法的全局寻解功能对shepwm方程组进行求解,以求解全调至域下的逆变器的开关角度,计算速度慢,收敛性存在不稳定。

 

3.MATLAB核心程序

 

 

 

 

function [sys,x0,str,ts]=mdlInitializeSizes(Ts)
 
sizes = simsizes;
 
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 4*15+3;
sizes.NumOutputs     = 5;
sizes.NumInputs      =16;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   
 
sys = simsizes(sizes);
x0 = zeros(4*15+3,1);
str = [];
ts  = [Ts 0];  %在T特定值时采样
 
%=============================================================================
%更新状态变量
 
 
function sys=mdlUpdate(t,x,u,Ts)
%计算相应alpha角对应时间
m=find(u(1:15));
N=numel(m);
 
if N==0
    x(1)=pi;
else
    x(1)=0;
    x(2:N+1)=u(1:N);
    for k=1:N
        x(N+k+1)=pi-x(N-k+2);
        x(2*N+k+2)=pi+x(k+1);
        x(3*N+k+2)=2*pi-x(N-k+2);
    end
    x(2*N+2)=pi;
    x(4*N+3)=2*pi;
    
end
sys=x;
 
%=============================================================================
% 计算输出时间
function sys=mdlOutputs(t,x,u,Ts)
% PWM generation
 
global p1;
global p2;
global p3;
global p4;
 
 
u(16)=u(16)+pi/2;
 
while (u(16)>2*pi)
    u(16)=u(16)-2*pi;
end
if (u(16)>=pi/2)&&(u(16)<pi/2+pi/10)
%if (u(16)>=0)&&(u(16)<pi/10)
    starta=1;
else
    starta=0;
end
 
m=find(u(1:15));
N=numel(m);
 
 
 
if N==0
    if(u(16)>pi/2&&u(16)<3*pi/2)
        if u(16)<x(1)
            p1=1;p2=1;p3=0;p4=0;
        elseif (u(16)>=x(1))&&(u(16)<2*pi)
            p1=0;p2=1;p3=1;p4=0;
        end
    else
        if u(16)<x(1)
            p1=0;p2=0;p3=1;p4=1;
        elseif (u(16)>=x(1))&&(u(16)<2*pi)
            p1=0;p2=1;p3=1;p4=0;
        end   
    end
else
    for i=1:4*N+2
        if (u(16)>=x(i))&&(u(16)<x(i+1))
            flag1=mod(N,2);
            flag2=mod(i,2);
            if xor(flag1,flag2)==1
                if u(16)>pi/2&&u(16)<3*pi/2
                    p1=1;p2=1;p3=0;p4=0;
                else
                    p1=0;p2=0;p3=1;p4=1;
                end
            else
                p1=0;p2=1;p3=1;p4=0;
            end
        end
    end
end

  

标签:&&,Clark,16,SHEPWM,sizes,SPWM,开关,模块,pi
From: https://www.cnblogs.com/51matlab/p/17444547.html

相关文章

  • 什么是物联网模块?
    物体或产品接入互联网,有哪些方式? 01 有线方式 以太网接口,也就是我们常用的网线的方式。 But!这种方式在人力、物力等方面投入较大,并且在现实生活中很多场合不太适用。 比方说:我们的共享单车。毕竟,我们在骑行时还拉根网线到处跑过于沙雕。 为解决这样的问题呢,就出现了物联网模......
  • 什么是物联网模块?
    物体或产品接入互联网,有哪些方式? 01 有线方式 以太网接口,也就是我们常用的网线的方式。 But!这种方式在人力、物力等方面投入较大,并且在现实生活中很多场合不太适用。 比方说:我们的共享单车。毕竟,我们在骑行时还拉根网线到处跑过于沙雕。 为解决这样的问题呢,就出现了物联网模......
  • NGINX 加载动态模块
    NGINX1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。#./configure--help|grepdynamic--with-http_xslt_module=dynamicenabledynamicngx_http_xslt_modul......
  • 【python】os.path模块
     os.path模块os.path模块主要用于获取文件的属性。以下是os.path模块的几种常用方法:方法说明os.path.abspath(path)返回绝对路径os.path.basename(path)返回文件名os.path.commonprefix(list)返回list(多个路径)中,所有path共有的最长的路径os.path.dirn......
  • Ansible系统-模块-cron学习整理
    1、常规性用法ansibletest-xxxx-01-vm-mcron-a'minute=30hour=15name="ansiblecrontabdemo"job="bash/tmp/1.sh"'默认是写到 root 用户的crontab中去,可以通过如下两种方式查看写入结果1)登录到目标主机,切换到对应的用户执行如下命令crontab-l-uusername比如上面的......
  • 【Quectel】EC20CEFHLG-128-SNNS物联网 LTE Cat 4 无线通信模块
    产品介绍:EC20是移远通信推出的LTE模块,采用LTE3GPPRel.9技术,支持下行速率100Mbps和上行速率50Mbps,同时在封装上兼容移远通信UMTS/HSPA+UC20模块,实现了从3G网络向4G网络轻松平滑过渡。EC20系列模块包含EC20-A,EC20-C和EC20-E三个版本,使其能够向后兼容现存的EDGE和GSM/GPRS网络,以......
  • python:yaml模块
    python:yaml模块https://www.jianshu.com/p/eaa1bf01b3a6https://www.runoob.com/w3cnote/yaml-intro.html......
  • Node模块导入规则总结
    @目录node模块总结node模块引入的步骤:模块分类node支持的模块系统ESModuleCommonJS模块加载CommonJS模块引入路径分析文件定位带扩展名的文件定位不带扩展名的文件定位ESM模块引入路径分析文件定位带路径不带路径(裸说明符)模块加载器总结对比CommonJS模块加载器ECMAScript模块加......
  • Django用户认证组件 (auth模块)
    1、导入auth模块#认证模块fromdjango.contribimportauth#对应数据库用户表,可以继承扩展fromdjango.contrib.auth.modelsimportUser2、创建用户对象create():创建一个普通用户,密码是明文的。create_user():创建一个普通用户,密码是密文的。create_superu......
  • 注意力模块
    注意力模块空间注意力模块对特征图每个位置进行attention调整,(x,y)二维调整,使模型关注到值得更多关注的区域上。对于卷积神经网络,CNN每一层都会输出一个CxHxW的特征图,C就是通道,同时也代表卷积核的数量,亦为特征的数量,H和W就是原始图片经过压缩后的图的高度和宽度,而空间注意......