MATLAB滑膜控制器原理,基于等效控制法的滑模控制器问题,多谢帮忙解答!

2023-05-16

本帖最后由 志辉Ben 于 2018-10-5 06:52 编辑

一个IPT系统被调制电压和生成的脉冲宽带调制波控制,波的相位角alpha范围在0~pi。波形生成器产生两个正弦波u11和u12,频率是20KHz,相差alpha/2的相位差。两个sin波幅度阈值是-Vpdc/2~+Vpdc/2,最后输入到系统的控制usys=u11-u12. alpha相位差是通过两个正弦波的差值控制占空比。电路图如下:

c5cc2cd32ef0f729da7b91c640d2c294.png

WechatIMG70.jpeg (90.14 KB, 下载次数: 19)

2018-10-5 06:50 上传

我的问题是,我想试着用等效控制法计算出Ueq,但是最后不管设置参考值是多少都不能控制输出结果,我不知道程序在哪里写的有问题,以下是我的思路:

eb607d2272f350e5c74adb06e3b76ed7.png

WechatIMG71.jpeg (82.43 KB, 下载次数: 17)

2018-10-5 06:51 上传

我的程序如下:因为求导的部分比较大,可以不用关注这部分。

function [dx]=IPT_SMC_function(t,x,u)

%Define the parameters

L1=20*10^-6;

Li=20*10^-6;

L2=50*10^-6;

c1=3.16*10^-6;

c2=1.26*10^-6;

M=10*10^-6;

Ri=0.1000;

R1=0.1000;

R2=0.1000;

Rl=50;

Rac=((pi^2)*Rl)/8;

Rac=(pi^2/8)*Rl;

beta=M/(L1*L2);

gamma=1/(1-M*beta);

% Define the state equations

dx(1,1)=(u-x(2)-Ri*x(1))/Li;

dx(2,1)=(x(1)-x(3))/c1;

dx(3,1)=gamma*((x(2)/L1)-(R1*x(3)/L1)-beta*R2*x(4)-beta*x(5));

dx(4,1)=gamma*(beta*x(2)-beta*R1*x(3)-(R2*x(4)/L2)-x(5)/L2);

dx(5,1)=(x(4)-x(5)/Rac)/c2;

% a11 = -Ri/Li; a12 = -1/Li;

% a21 = 1/C1; a23=-1/C1;

% a32 = gamma/L1; a33 = -R1*gamma/L1; a34 = -gamma*beta*R2; a35 = -beta*gamma;

% a42 = beta*gamma; a43 = -beta*gamma*R1; a44 = -R2*gamma/L2; a45 = -gamma/L2;

% a54 = 1/C2; a55 = -1/(Rac*C2);

%

%

% b11=1/Li;

% c15=1;

%

% % sets up the state space matrixes

% A=zeros(5,5); B=zeros(5,1);

%

% % C=zeros(1,5); D=0;

%

% A(1,1) = a11; A(1,2) = a12;

% A(2,1) = a21; A(2,3) = a23;

% A(3,2) = a32; A(3,3) = a33; A(3,4)=a34; A(3,5)=a35;

% A(4,2) = a42; A(4,3) = a43; A(4,4) = a44; A(4,5) = a45;

% A(5,4) = a54; A(5,5) = a55;

%

% B(1,1)=b11;

% C(1,5)=c15;

%

% % sys=ss(A,B,C,D);

%

% dx=A*x+B*u;

%dx=dx';

--------------

主程序:

clc

clear; close;

% Setting parameters' vlaue

L1=20*10^-6;

Li=20*10^-6;

L2=50*10^-6;

c1=3.16*10^-6;

c2=1.26*10^-6;

M=10*10^-6;

Ri=0.1000;

R1=0.1000;

R2=0.1000;

Rl=50;

Rac=(pi^2/8)*Rl;

beta=M/(L1*L2);

gamma=1/(1-M*beta);

fs=4e06;          % Sanpling frequency

h=1/fs;           % Sampling Time

% Integration steps

t0=0;

tfinal=0.007;

iterations=ceil((tfinal-t0)*fs);

t=t0:h:tfinal;

t=t';

f=20000;        % System frequency 20 kHz

w=2*pi*f;

Vdc=100;       % Input voltage to the Inverter

%______________________________

% Initial conditions

x0=[0,0,0,0,0];

x1(1,1)=x0(1,1);

x2(1,1)=x0(1,2);

x3(1,1)=x0(1,3);

x4(1,1)=x0(1,4);

x5(1,1)=x0(1,5);

Pout(1,1)=x5(1,1)^2/Rac;

Pout_avg(1,1)=Pout(1,1);

alpha(1,1)=2*pi/3;

%____________________________

k=10;

j=10;

% Design Pref as reference

u=ones(iterations,1);

Pref=0*ones(length(t),1);

tfinal=0.0;

% Setting the tracking error

e(1,1)=Pref(1,1)-Pout_avg(1,1);

%de(1,1)=-2*x5(1,1)*(x4(1,1)/c2-x5(1,1)/(Rac*c2))/Rac;

% Setting the sliding surface function 's' and the control law 'u'

s=j*x1(1,1)+x2(1,1)+x3(1,1)+x4(1,1)+x5(1,1);

ds=j*(u(1,1)/Li-x2(1,1)/Li-Ri*x1(1,1)/Li)+(x1(1,1)+x3(1,1))/c1+(-gamma*beta*R2*x4(1,1)-gamma*beta*x5(1,1)+gamma*x2(1,1)/L1-gamma*R1*x3(1,1)/L1)+(gamma*beta*x2(1,1)-gamma*beta*R1*x3(1,1)-gamma*R2*x4(1,1)/L2-gamma*x5(1,1)/L2)+(x4(1,1)/c2-x5(1,1)/(Rac*c2));

u(1,1)=(Li/j)*(((j*x2(1,1)-j*Ri*x1(1,1))/Li)-((x1(1,1)-x3(1,1))/c1)-(-gamma*beta*R2*x4(1,1)-gamma*beta*x5(1,1)+gamma*x2(1,1)/L1-gamma*R1*x3(1,1)/L1)-(gamma*beta*x2(1,1)-gamma*beta*R1*x3(1,1)-gamma*R2*x4(1,1)/L2-gamma*x5(1,1)/L2)-(x4(1,1)/c2-x5(1,1)/(Rac*c2)));

u=u(1,1)-k*sign(s);

for i=2:length(t)

uc=u(i-1);

% Solving the differential equation;

[dum,allx]=ode45(@IPT_SMC_function,[t(i-1) t(i)],x0,[],uc);

xx=flipud(allx);

[m1 n1]=size(xx);

x0=xx(1,1:n1);

% Save the state variables and output variables;

x1(i,1)=xx(1,1);

x2(i,1)=xx(1,2);

x3(i,1)=xx(1,3);

x4(i,1)=xx(1,4);

x5(i,1)=xx(1,5);

Pout(i,1)=x5(i,1)^2/Rac;

Pout_avg(i,1)=((i-1)/i)*Pout_avg(i-1,1)+(1/i)*Pout(i,1);

%calculating the tracking error

e(i)=Pref(i)-Pout_avg(i);

s=j*x1(i,1)+x2(i,1)+x3(i,1)+x4(i,1)+x5(i,1);

% Limiting the alpha value between -pi tp +pi

alpha(i)=(e(i)-e(i-1))+alpha(i-1);

if alpha(i)>pi

alpha(i)=pi;

elseif alpha(i)

alpha(i)=-pi;

end

% Generating output; Input voltage to the inverter

u1_1(i,1)=sin((w*t(i))+alpha(i)/2);

u1_2(i,1)=sin((w*t(i))-alpha(i)/2);

if u1_1(i,1)>0

u1_1(i,1)=+Vdc/2;

elseif u1_1(i,1)<0

u1_1(i,1)=-Vdc/2;

end

if u1_2(i,1)>0

u1_2(i,1)=+Vdc/2;

elseif u1_2(i,1)<0

u1_2(i,1)=-Vdc/2;

end

u(i,1)=u1_1(i,1)-u1_2(i,1);

% Saving the variables into 's'

%s=j*x1(i,1)+x2(i,1)+x3(i,1)+x4(i,1)+x5(i,1);

%ds=j*(u(i,1)/Li-x2(i,1)/Li-Ri*x1(i,1)/Li)+(x1(i,1)+x3(i,1))/c1+(-gamma*beta*R2*x4(i,1)-gamma*beta*x5(i,1)+gamma*x2(i,1)/L1-gamma*R1*x3(i,1)/L1)+(gamma*beta*x2(i,1)-gamma*beta*R1*x3(i,1)-gamma*R2*x4(i,1)/L2-gamma*x5(i,1)/L2)+(x4(i,1)/c2-x5(i,1)/(Rac*c2));

%u(i,1)=(Li/j)*(((j*x2(i,1)-j*Ri*x1(i,1))/Li)-((x1(i,1)-x3(i,1))/c1)-(-gamma*beta*R2*x4(i,1)-gamma*beta*x5(i,1)+gamma*x2(i,1)/L1-gamma*R1*x3(i,1)/L1)-(gamma*beta*x2(i,1)-gamma*beta*R1*x3(i,1)-gamma*R2*x4(i,1)/L2-gamma*x5(i,1)/L2)-(x4(i,1)/c2-x5(i,1)/(Rac*c2)))-k*sign(s);

end

figure;

plot(t,Pout_avg,'r',t,Pref,'k','linewidth',1);

xlabel('time(s)');ylabel('Step response');

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB滑膜控制器原理,基于等效控制法的滑模控制器问题,多谢帮忙解答! 的相关文章

随机推荐