1 内容介绍

纹波推力扰动,负载扰动,摩擦力扰动和其他不确定性扰动严重影响永磁直线同步电机(PMLSM)控制系统的性能,对控制系统的抗干扰能力提出了更高的要求.本文采用自抗扰控制(ADRC)方法,利用扩张状态观测器估计所有未知扰动作用量并给予实时动态补偿,从而抑制未知扰动实现"自抗扰"控制,同时估计出速度及其微分;跟踪微分器给出了一种计算微分的有效方法,并根据PMLSM的承受能力安排速度指令过渡过程;采用更合适的非线性PD误差反馈率计算控制量.利用基于Matlab/Simulink的xPC Target构建控制系统实验平台,实验结果表明,采用ADRC的PMLSM控制系统具有很强的抗扰性和静动态特性.

2 部分代码

function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag)

%SFUNTMPL General MATLAB S-Function Template

%   With MATLAB S-functions, you can define you own ordinary differential

%   equations (ODEs), discrete system equations, and/or just about

%   any type of algorithm to be used within a Simulink block diagram.

%

%   The general form of an MATLAB S-function syntax is:

%       [SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)

%

%   What is returned by SFUNC at a given point in time, T, depends on the

%   value of the FLAG, the current state vector, X, and the current

%   input vector, U.

%

%   FLAG   RESULT             DESCRIPTION

%   -----  ------             --------------------------------------------

%   0      [SIZES,X0,STR,TS]  Initialization, return system sizes in SYS,

%                             initial state in X0, state ordering strings

%                             in STR, and sample times in TS.

%   1      DX                 Return continuous state derivatives in SYS.

%   2      DS                 Update discrete states SYS = X(n+1)

%   3      Y                  Return outputs in SYS.

%   4      TNEXT              Return next time hit for variable step sample

%                             time in SYS.

%   5                         Reserved for future (root finding).

%   9      []                 Termination, perform any cleanup SYS=[].

%

%

%   The state vectors, X and X0 consists of continuous states followed

%   by discrete states.

%

%   Optional parameters, P1,...,Pn can be provided to the S-function and

%   used during any FLAG operation.

%

%   When SFUNC is called with FLAG = 0, the following information

%   should be returned:

%

%      SYS(1) = Number of continuous states.

%      SYS(2) = Number of discrete states.

%      SYS(3) = Number of outputs.

%      SYS(4) = Number of inputs.

%               Any of the first four elements in SYS can be specified

%               as -1 indicating that they are dynamically sized. The

%               actual length for all other flags will be equal to the

%               length of the input, U.

%      SYS(5) = Reserved for root finding. Must be zero.

%      SYS(6) = Direct feedthrough flag (1=yes, 0=no). The s-function

%               has direct feedthrough if U is used during the FLAG=3

%               call. Setting this to 0 is akin to making a promise that

%               U will not be used during FLAG=3. If you break the promise

%               then unpredictable results will occur.

%      SYS(7) = Number of sample times. This is the number of rows in TS.

%

%

%      X0     = Initial state conditions or [] if no states.

%

%      STR    = State ordering strings which is generally specified as [].

%

%      TS     = An m-by-2 matrix containing the sample time

%               (period, offset) information. Where m = number of sample

%               times. The ordering of the sample times must be:

%

%               TS = [0      0,      : Continuous sample time.

%                     0      1,      : Continuous, but fixed in minor step

%                                      sample time.

%                     PERIOD OFFSET, : Discrete sample time where

%                                      PERIOD > 0 & OFFSET < PERIOD.

%                     -2     0];     : Variable step discrete sample time

%                                      where FLAG=4 is used to get time of

%                                      next hit.

%

%               There can be more than one sample time providing

%               they are ordered such that they are monotonically

%               increasing. Only the needed sample times should be

%               specified in TS. When specifying more than one

%               sample time, you must check for sample hits explicitly by

%               seeing if

%                  abs(round((T-OFFSET)/PERIOD) - (T-OFFSET)/PERIOD)

%               is within a specified tolerance, generally 1e-8. This

%               tolerance is dependent upon your model's sampling times

%               and simulation time.

%

%               You can also specify that the sample time of the S-function

%               is inherited from the driving block. For functions which

%               change during minor steps, this is done by

%               specifying SYS(7) = 1 and TS = [-1 0]. For functions which

%               are held during minor steps, this is done by specifying

%               SYS(7) = 1 and TS = [-1 1].

%

%      SIMSTATECOMPLIANCE = Specifices how to handle this block when saving and

%                           restoring the complete simulation state of the

%                           model. The allowed values are: 'DefaultSimState',

%                           'HasNoSimState' or 'DisallowSimState'. If this value

%                           is not speficified, then the block's compliance with

%                           simState feature is set to 'UknownSimState'.

%   Copyright 1990-2010 The MathWorks, Inc.

%

% The following outlines the general structure of an S-function.

%

switch flag,

%%%%%%%%%%%%%%%%%%

% Initialization %

%%%%%%%%%%%%%%%%%%

case 0,

[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;

%%%%%%%%%%%%%%%

% Derivatives %

%%%%%%%%%%%%%%%

case 1,

sys=mdlDerivatives(t,x,u);

%%%%%%%%%%

% Update %

%%%%%%%%%%

case 2,

sys=mdlUpdate(t,x,u);

%%%%%%%%%%%

% Outputs %

%%%%%%%%%%%

case 3,

sys=mdlOutputs(t,x,u);

%%%%%%%%%%%%%%%%%%%%%%%

% GetTimeOfNextVarHit %

%%%%%%%%%%%%%%%%%%%%%%%

case 4,

sys=mdlGetTimeOfNextVarHit(t,x,u);

%%%%%%%%%%%%%

% Terminate %

%%%%%%%%%%%%%

case 9,

sys=mdlTerminate(t,x,u);

%%%%%%%%%%%%%%%%%%%%

% Unexpected flags %

%%%%%%%%%%%%%%%%%%%%

otherwise

DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));

end

% end sfuntmpl

%

%=============================================================================

% mdlInitializeSizes

% Return the sizes, initial conditions, and sample times for the S-function.

%=============================================================================

%

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes

%

% call simsizes for a sizes structure, fill it in and convert it to a

% sizes array.

%

% Note that in this example, the values are hard coded.  This is not a

% recommended practice as the characteristics of the block are typically

% defined by the S-function parameters.

%

sizes = simsizes;

sizes.NumContStates  = 0;

sizes.NumDiscStates  = 2;

sizes.NumOutputs     = 1;

sizes.NumInputs      = 1;

sizes.DirFeedthrough = 0;

sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);

%

% initialize the initial conditions

%

x0  = [];

%

% str is always an empty matrix

%

str = [];

%

% initialize the array of sample times

%

ts  = [0 0];

% Specify the block simStateCompliance. The allowed values are:

%    'UnknownSimState', < The default setting; warn and assume DefaultSimState

%    'DefaultSimState', < Same sim state as a built-in block

%    'HasNoSimState',   < No sim state

%    'DisallowSimState' < Error out when saving or restoring the model sim state

simStateCompliance = 'UnknownSimState';

% end mdlInitializeSizes

%

%=============================================================================

% mdlDerivatives

% Return the derivatives for the continuous states.

%=============================================================================

%

function sys=mdlDerivatives(t,x,u)

sys = [];

% end mdlDerivatives

%

%=============================================================================

% mdlUpdate

% Handle discrete state updates, sample time hits, and major time step

% requirements.

%=============================================================================

%

function sys=mdlUpdate(t,x,u)

sys = [];

% end mdlUpdate

%

%=============================================================================

% mdlOutputs

% Return the block outputs.

%=============================================================================

%

function sys=mdlOutputs(t,x,u)

sys = [];

% end mdlOutputs

%

%=============================================================================

% mdlGetTimeOfNextVarHit

% Return the time of the next hit for this block.  Note that the result is

% absolute time.  Note that this function is only used when you specify a

% variable discrete-time sample time [-2 0] in the sample time array in

% mdlInitializeSizes.

%=============================================================================

%

function sys=mdlGetTimeOfNextVarHit(t,x,u)

sampleTime = 1;    %  Example, set the next hit to be one second later.

sys = t + sampleTime;

% end mdlGetTimeOfNextVarHit

%

%=============================================================================

% mdlTerminate

% Perform any end of simulation tasks.

%=============================================================================

%

function sys=mdlTerminate(t,x,u)

sys = [];

% end mdlTerminate

3 运行结果

4 参考文献

[1]龙晓军. 基于自抗扰技术的永磁同步电机调速方法研究[D]. 大连海事大学, 2011.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机、雷达通信、无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【电力】永磁同步电机-自抗扰控制PMSM ADRC附matlab代码相关推荐

  1. 卡尔曼转矩观测_基于卡尔曼观测器的永磁同步电机自抗扰控制

    基于卡尔曼观测器的永磁同步电机自抗扰控制 徐书凯, 胡勤丰, 王大伟 [摘 要] 摘 要 : 根据卡尔曼滤波理论建立观测器,对永磁同步伺服系统的负载 转矩进行实时观测,并利用负载转矩的观测值在系统中形 ...

  2. 2021-02-27 永磁同步电机 自抗扰控制 PI调节器 矢量控制 SVPWM

    永磁同步电机 自抗扰控制 PI调节器 矢量控制 SVPWM 算法介绍 算法架构如下所示,其中采用SVPWM矢量控制,id=0.主要包括三个部分:转速环PI调节器,电流环PI调节器,SVPWM算法等. ...

  3. ADRC(自抗扰控制器)技术附Matlab代码框架

    自抗扰控制器 ( Auto/Active Disturbances Rejec ion Controller, ADRC)是韩京清学者提出的,是一种继PID控制器后的一种新型的实用的控制技术. 它不是 ...

  4. 三相pmsm矢量控制仿真模型_学术简报|永磁同步电机无速度传感器控制离散化方法研究...

    北京交通大学电气工程学院.北京纵横机电科技有限公司的研究人员许中阳.郭希铮.邹方朔.游小杰.邱腾飞,在2019年<电工技术学报>增刊1上撰文指出,基于定子电流模型参考自适应的永磁同步电机无 ...

  5. 永磁同步电机自抗扰无位置传感器控制仿真,同时实现自抗扰和基于eso扩张状态观测器的无位置控制仿真

    永磁同步电机自抗扰无位置传感器控制仿真,同时实现自抗扰和基于eso扩张状态观测器的无位置控制仿真. ID:6950670038985136

  6. PMSM永磁同步电机滑模控制的直接转矩控制改进算法仿真模型,在传统算法上结合滑模控制算法加以改进

    PMSM永磁同步电机滑模控制的直接转矩控制改进算法仿真模型,在传统算法上结合滑模控制算法加以改进,基于matlab/simulink搭建,以供参考学习 ID:8150678002556068阳光彩虹小 ...

  7. 基于非线性观测器的表贴式永磁同步电机 无位置传感器控制

    基于非线性观测器的表贴式永磁同步电机 无位置传感器控制 基于非线性观测器的表贴式永磁同步电机 无位置传感器控制 摘要:非线性观测器观测通过sinθ.cosθ的估计值得到位置估计量.与龙格波观测器相比较 ...

  8. 基于 ESO-PLL 的永磁同步电机无位置传感器控制

    基于 ESO-PLL 的永磁同步电机无位置传感器控制 1.PMSM 的无位置传感器控制方法分为两类,一类是适用于零.低速范围的高频注入法,另一类是适用于中.高速范围的观测器法.在中.高速范围,最常见的 ...

  9. 三相永磁同步电机的矢量控制学习笔记一

    三相永磁同步电机的矢量控制学习笔记1 一 内容 三相永磁同步电机CPMSM)是一个强搞合.复杂的非线性系统,为了能够更好地 设计先进的 PMSM 矢量控制算法,建立合适的数学模型就显得尤为重要.本次学 ...

  10. 永磁同步电机无速度传感器控制(一)——滑模观测器(二)【滑模观测器设计过程】

    1.选择滑模观测器参照的数学模型 对于表贴式三相PMSM而言,扩展反电动势的表达式可以被简化为与仅与电机的转速有关.然后将表贴式PMSM的扩展反电动势表达式写下来,进行分析: 从上式可以看出,只要可以 ...

最新文章

  1. 算法的时间与空间复杂度详解
  2. php 数组美化_PHP格式化输出数组,一目了然
  3. 主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)
  4. NetSetMan IP地址切换工具
  5. WSGI、uwsgi和uWSGI
  6. linux C++怎么转java?从云计算切入容易么?
  7. linux嵌入式平台测试,protobuf-c 在arm linux 嵌入式平台的使用 测试
  8. Python bin 函数 - Python零基础入门教程
  9. 作者:李茹姣(1976-),女,博士,中国科学院北京基因组研究所生命与健康大数据中心高级工程师...
  10. linux配置php项目路径,linux下如何修改php.ini路径
  11. python 写入excel 日期_详解:Python实现大数据收集至excel的思路大牛分享(建议收藏)...
  12. Ubuntu 12.04安装及配置vsftp步骤
  13. Ubuntu引导文件丢失,grub修复(附加重装显卡驱动方法)
  14. Ubuntu 缩减磁盘空间
  15. Mac ERROR launching JD-GUI
  16. 用指针写出strcmp函数
  17. 宝塔部署uniapp和php后端的经历
  18. 第 7 篇、Linux C基础 | 变量和常量
  19. 风哥MySQL数据库视频培训教程大合集(网盘下载.共10套)
  20. window.requestAnimationFrame Web3D渲染帧率控制

热门文章

  1. 如何在虚拟机安装鸿蒙os,VirtualBox安装教程
  2. 安装软件时“应用程序无法启动,因为应用程序的并行配置不正确......”
  3. SDK接入学习(一):PlayerSetting详解(PC、Mac、Linux)
  4. 推荐使用金山WPS 2005 !
  5. Qt QComboBox详解
  6. linetv_LINE TV台湾版
  7. 【WiFi】WiFi 5G信道和频宽的对应关系
  8. 左程云算法课基础06图课程笔记
  9. 计算机屏幕显示不能全屏,电脑屏幕小软件显示不全
  10. 【181129】VC++ 屏幕截取(窗口截图、选区截图)、屏幕拾色器、放大镜源代码