固定时间控制

This commit is contained in:
iHoney725
2021-01-04 10:39:11 +08:00
committed by GitHub
parent b0560f7962
commit 205b01e830
2 changed files with 136 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
function [sys,x0,str,ts] = ctrl1_zuo(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case {1,2,4,9}
sys=[];
case 3
sys=mdlOutputs(t,x,u);
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 2;
sizes.NumInputs = 5;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [];
function sys=mdlOutputs(t,x,u)
%
% dr = 0.5*pi*cos(0.5*pi*t);
% ddr = -0.25*pi*pi*sin(0.5*pi*t);
r = u(1);
dr = u(2);
ddr = u(3);
z1 = u(4);
z2 = u(5);
%
belta = 1;
q = 3;
p = 5;
d = sin(10*z1)+cos(z2); %
g = 9.8;
mc = 1;
m = 0.1;
l = 0.5;
lg = 2;
xite = 10;
M = mc + m;
% e = z1 - r;
% de = z2 - dr;
e = r - z1;
de = dr - z2;
v1 = g*sin(z1)- m*l*(z2)^2*cos(z1)*sin(z1)/M;
v2 = l*(4/3-(m*cos(z1)*cos(z1))/M);
f = v1/v2;
v3 = cos(z1)/M;
v4 = v2;
g = v3/v4;
%
s = -e + 1/belta*abs(-de)^(p/q)*sign(-de);
%
ut = -1/g*(belta*q/p* (abs(-de)^(2-p/q)*sign(-de)) + f+(lg+xite)*sign(s));
temp = (-de)^(p-q)^(1/q);
sys(1) = ut;
sys(2) = temp;
+65
View File
@@ -0,0 +1,65 @@
function [sys,x0,str,ts] = plant1_zuo(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 1
sys=mdlDerivatives(t,x,u);
case {2,4,9}
sys=[];
case 3
sys=mdlOutputs(t,x,u);
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 2;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 2;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 = [1 0.5];
str = [];
ts = [];
function sys=mdlDerivatives(t,x,u)
%
d = sin(10*x(1))+cos(x(2)); %
ut = u(1);
z1 = x(1);
z2 = x(2);
%
g = 9.8;
mc = 1;
m = 0.1;
l = 0.5;
M = mc + m;
v1 = g*sin(z1)- m*l*(z2)^2*cos(z1)*sin(z1)/M;
v2 = l*(4/3-(m*cos(z1)*cos(z1))/M);
f = v1/v2;
v3 = cos(z1)/M;
v4 = v2;
g = v3/v4;
sys(1) = x(2);
sys(2) = f + g*ut + d;
function sys=mdlOutputs(t,x,u)
sys(1) = x(1);
sys(2) = x(2);