永磁同步电动机,永磁同步电机电动和发电
【电力】永磁同步电机-自抗扰控制PMSMADRC附矩阵实验室代码_MATLAB仿真博客的技术博客_博客
一内容介绍纹波推力扰动,负载扰动,摩擦力扰动和其他不确定性扰动严重影响永磁直线同步电机(PMLSM)控制系统的性能,对控制系统的抗干扰能力提出了更高的要求。本文采用自抗扰控制(ADRC)方法,利用扩张状态观测器估计所有未知扰动作用量并给予实时动态补偿,从而抑制未知扰动实现自抗扰控制,同时估计出速度及其微分;跟踪微分器给出了一种计算微分的有效方法,并根据永磁直线同步电机的承受能力安排速度指令过渡过程;采用更合适的非线性警察局误差反馈率计算控制量。利用基于Matlab/Simulink的准系统目标构建控制系统实验平台,实验结果表明,采用自抗扰控制器的永磁直线同步电机控制系统具有很强的抗扰性和静动态特性。
2部分代码function [sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)
%SFUNTMPL通用MATLAB S函数模板
%用矩阵实验室的S函数,你可以定义你自己的常微分
%方程(颂歌)离散系统方程和/或大约
%在仿真框图中使用任何类型的算法。
%
% MATLAB S函数语法的一般形式是:
% [SYS,X0,STR,TS,SIMSTATECOMPLIANCE]=SFUNC(T,X,U,FLAG,P1,Pn)
%
% s函数在给定时间点T返回的内容取决于
标志的%值、当前状态向量、X和当前
%输入向量。
%
%标志结果描述
% - - -
% 0[大小,X0,字符串,TS]初始化,以SYS,
% X0中的初始状态,状态排序字符串
%用力量值表示,采样时间用分时(同timesharing)表示。
% 1 DX返回[计]系统复制命令(system的简写)中的连续状态导数。
% 2 DS更新离散状态sys=x(^北部1)
% 3 Y返回[计]系统复制命令(system的简写)中的输出。
% 4t返回可变步长示例的下一次命中
系统中的时间百分比。
% 5为将来保留(根查找)。
% 9 []终止,执行任何清理SYS=[].
%
%
%的状态向量,X和X0由连续的状态组成
按离散状态划分的百分比。
%
%可选参数、P1、Pn可以被提供给S函数,并且
在任何标志操作中使用了%。
%
%当用标志=0调用SFUNC时,以下信息
%应该返回:
%
% SYS(1)=1连续状态的数量。
% SYS(2)=1离散状态的数量。
% SYS(3)=1输出数量。
% SYS(4)=1输入的数量。
%可以指定[计]系统复制命令(system的简写)中前四个元素中的任何一个
% as -1表示它们是动态调整大小的。这
所有其他标志的%实际长度将等于
输入长度的百分比。
% SYS(5)=1保留用于根查找。必须为零。
% SYS(6)=1直接馈通标志(1=是,0=否)。s函数
如果在标志=3期间使用u,则%具有直接馈通
%通话。将此值设置为0类似于承诺
在标志=3期间不会使用% U .如果你违背诺言
%那么将会出现不可预测的结果。
% SYS(7)=1采样次数。这是分时(同timesharing)中的行数。
%
%
% X0=初始状态条件,如果没有状态,则为[]。
%
% STR=状态排序字符串,通常指定为[]。
%
% TS=包含采样时间的m乘2矩阵
%(周期,偏移量)信息。其中m=样本数量
%次。采样时间的顺序必须是:
%
% TS=[0 0,连续采样时间。
% 0 1,连续,但固定在小步长中
%采样时间。
%周期偏移,离散采样时间,其中
%期间0偏移期间。
% -2 0];可变步长离散采样时间
%其中标志=4用于获取时间
%下一次点击。
%
%可以有多个采样时间,前提是
%它们是有序的,因此它们是单调的
%增加。只有所需的采样时间应该
分时(同timesharing)中指定的百分比。当指定多个时
%采样时间,您必须通过以下方式显式检查采样命中
%查看是否
% abs(round((T偏移)/句号)- (T偏移)/句号)
%在指定的公差范围内,通常为1e-8 .这
%容差取决于模型的采样时间
%和模拟时间。
%
%你也可以指定S函数的采样时间
%是从驱动块继承的。对于以下功能
%在次要步骤中更改,这是通过
%指定SYS(7)=1,TS=[-1 0].对于以下功能
%在次要步骤中保持不变,这是通过指定
% SYS(7)=1,TS=[-1 1].
%
% SIMSTATECOMPLIANCE=指定在保存和时如何处理此块
%恢复的完整模拟状态
%模型。允许的值为:" DefaultSimState ",
% HasNoSimState 或不允许SimState .如果这个值
%未指定,则块符合
% simState功能设置为“UknownSimState”.
%版权所有1990-2010 MathWorks公司。
%
%以下概述了S函数的一般结构。
%
切换标志,
%%%%%%%%%%%%%%%%%%
%初始化%
%%%%%%%%%%%%%%%%%%
案例0,
[sys,x0,str,ts,simstate compliance]=mdlInitializeSizes;
%%%%%%%%%%%%%%%
%衍生物%
%%%%%%%%%%%%%%%
案例一,
sys=mdlDerivatives(t,x,u);
%%%%%%%%%%
%更新%
%%%%%%%%%%
案例二,
sys=mdlUpdate(t,x,u);
%%%%%%%%%%%
%产出%
%%%%%%%%%%%
案例三,
sys=mdlOutputs(t,x,u);
%%%%%%%%%%%%%%%%%%%%%%%
% GetTimeOfNextVarHit %
%%%%%%%%%%%%%%%%%%%%%%%
案例四,
sys=mdlGetTimeOfNextVarHit(t,x,u);
%%%%%%%%%%%%%
%终止%
%%%%%%%%%%%%%
案例9,
sys=mdlTerminate(t,x,u);
%%%%%%%%%%%%%%%%%%%%
%意外标志%
%%%%%%%%%%%%%%%%%%%%
否则
这是工作室。错误( Simulink:blocks:unhandled flag ,num 2 str(flag));
目标
% end sfuntmpl
%
%=============================================================================
% mdlInitializeSizes
%返回S函数的大小、初始条件和采样时间。
%=============================================================================
%
function [sys,x0,str,ts,simstate compliance]=mdlInitializeSizes
%
%调用模拟尺寸获取大小结构,填充它并将其转换为
%大小数组。
%
%请注意,在本例中,值是硬编码的。这不是一个
%推荐做法,因为砌块的特征通常是
%由S函数参数定义。
%
尺寸=模拟尺寸
尺寸NumContStates=0;
尺寸NumDiscStates=2;
尺寸NumOutputs=1;
尺寸NumInputs=1;
尺寸dir . dir馈通=0;
尺寸NumSampleTimes=1;%至少需要一个采样时间
sys=simsizes(大小);
%
%初始化初始条件
%
x0=[];
%
% str总是空矩阵
%
str=[];
%
%初始化采样时间数组
%
ts=[0 0];
%指定simStateCompliance块。允许的值有:
% 未知SimState ,默认设置。警告并假定默认值SimState
% DefaultSimState ,与内置块相同的模拟游戏状态
% HasNoSimState ,没有模拟游戏状态
% DisallowSimState 错误在保存或恢复模型模拟游戏状态时出现
simstate compliance=“未知的simstate”;
% end mdlInitializeSizes
%
%=============================================================================
%衍生物
%返回连续状态的导数。
%=============================================================================
%
函数sys=导数(t,x,u)
sys=[];
% end mdlDerivatives
%
%=============================================================================
% mdlUpdate
%处理离散状态更新、采样时间命中和主要时间步长
%要求。
%=============================================================================
%
函数sys=mdlUpdate(t,x,u)
sys=[];
% end mdlUpdate
%
%=============================================================================
% mdlOutputs
%返回块输出。
%=============================================================================
%
函数sys=mdlOutputs(t,x,u)
sys=[];
% end mdlOutputs
%
%=============================================================================
% mdlGetTimeOfNextVarHit
%返回该块的下一次命中时间。请注意,结果是
%绝对时间。请注意,该函数仅在指定
中采样时间数组中的%变量离散时间采样时间[-2 0]
% mdlInitializeSizes .
%=============================================================================
%
函数sys=mdlGetTimeOfNextVarHit(t,x,u)
样本时间=1;%例如,将下一次点击设置为一秒钟后。
sys=t采样时间
% end mdlGetTimeOfNextVarHit
%
%=============================================================================
%终止
%执行任何模拟任务结束。
%=============================================================================
%
函数sys=mdlTerminate(t,x,u)
sys=[];
% end mdlTerminate
3运行结果
四参考文献[1]龙晓军。基于自抗扰技术的永磁同步电机调速方法研究d .大连海事大学, 2011.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。