Beruflich Dokumente
Kultur Dokumente
ki=0; n=1;
Si
Aplicar entada pseudo-aleatoria
u(k)=random
No
Sistema en
reposo
No
u(k)=0
Algoritmo RLS
ki=0;
n=n+1;
no
Si
ki=ki+1
ki>nfi
)(
{ }
) )(
)(
)
) )
(
(
) )(
)(
)
) )
( (
))
( )
)}
)}
{ }
( )
( )
}19
(
(
(
(
(
)
)
)(
)
(
)(
)
)
21
)(
27
Cambio en la
referencia
No
Esperar al siguiente
tiempo de muestreo
Si
Is=1;
Ii=0;
Iteracin=0;
Ha sido
encontrado
Yes
s=Ractual-Ranterior
=0.5(Is+Ii)
No
Iteracin =Itermax
Mediante divisin
sinttica encontrar
Iteracin =Iteracin +1
ci>Lmax
Si
Is=Is;
Ii= ;
No
ci<Lmin
No
Is=;
Ii=Ii;
Si
}}
{
{
setup(block);
'Tunable'
block.NumDialogPrms = 13;
block.DialogPrmsTunable=
{'Tunable','Tunable','Tunable','Tunable','Tunable','Tunable','Tunable','Tunable','Tuna
ble','Tunable','Tunable','Tunable','Tunable'};
block.NumDialogPrms(1)
block.NumDialogPrms(2)
block.NumDialogPrms(3)
block.NumDialogPrms(4)
block.NumDialogPrms(5)
block.NumDialogPrms(6)
block.NumDialogPrms(7)
block.NumDialogPrms(8)
block.NumDialogPrms(9)
block.NumDialogPrms(10)
block.NumDialogPrms(11)
block.NumDialogPrms(12)
block.NumDialogPrms(13)
block.NumInputPorts = 3;
block.NumOutputPorts = 2;
block.NumInputPorts(1)
block.NumInputPorts(2)
block.NumInputPorts(3)
block.NumOutputPorts(1)
block.NumOutputPorts(2)
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
block.InputPort(1).Complexity
block.InputPort(1).DataTypeId
block.InputPort(1).SamplingMode
block.InputPort(1).Dimensions
=
=
=
=
block.OutputPort(1).Complexity
block.OutputPort(1).DataTypeId
block.OutputPort(1).SamplingMode
block.OutputPort(1).Dimensions
CheckPrms.
'Real';
0;
'Sample';
1;
=
=
=
=
'Real';
0;
'Sample';
1;
block.RegBlockMethod('CheckParameters',
block.RegBlockMethod('ProcessParameters',
block.RegBlockMethod('PostPropagationSetup',
block.RegBlockMethod('Start',
block.RegBlockMethod('Outputs',
@CheckPrms);
@ProcessPrms);
@DoPostPropSetup);
@Start);
@Outputs);
block.SetAccelRunOnTLC(true);
T = block.DialogPrm(1).Data;
if T <= 0
error('--EL TIEMPO DE MUESTREO DEBE SER UN NUMERO POSITIVO DISTINTO DE CERO--');
end
block.NumDworks = 8+2*block.DialogPrm(2).Data
block.Dwork(1).Name
block.Dwork(1).Dimensions
block.Dwork(1).DatatypeID
block.Dwork(1).Complexity
block.Dwork(1).UsedAsDiscState
block.AutoRegRuntimePrms;
=
=
=
=
=
block.Dwork(1)
block.Dwork(2)
block.Dwork(3)
block.Dwork(4)
block.Dwork(5)
block.Dwork(6)
block.Dwork(7)
block.Dwork(8)
block.Dwork(9,10,...,2 +8)
AutoUpdateRuntimePrms
block.AutoUpdateRuntimePrms;
ganancia_den=ganancia_den*(1-B_negativo(i));
end
GANANCIA=ganancia_num/(ganancia_den*GAIN);
Q=zpk(raices_A,[zeros(1,length(B_negativo)+1) B_positivo_estable B_positivo_inestable],
GANANCIA,1);
for i=1:Nc
cosiente=B(1)/A(1);
rho(i)=cosiente;
D=A*cosiente;
for j=1:Nc
B(j)=B(j)-D(j);
end
B=[B(2:Nc) 0];
end
rho=rho-U_estableciemiento*ones(1,Nc);
nivel_energia=0;
for i=1:Nc
if rho(i)<=Ls && rho(i)>=Li
else
nivel_energia=1+nivel_energia;
break
end
end
if nivel_energia==1
sup=1;
inf=0;
alf=0.5;
for h=1:8
RF=tf([Amp_step*(1-alf) 0 0],[1 -(1+alf) alf],1);
U=minreal(Q*RF);
[Num_U,gan_U]=zero(U);
Num_U=gan_U*poly(Num_U);
Den_U=pole(U);
Den_U=poly(Den_U);
B=[Num_U zeros(1,Nc-length(Num_U))];
A=[Den_U zeros(1,Nc-length(Den_U))];
rho=zeros(1,Nc);
for i=1:Nc
cosiente=B(1)/A(1);
rho(i)=cosiente;
D=A*cosiente;
for j=1:Nc
B(j)=B(j)-D(j);
end
B=[B(2:Nc) 0];
end
rho=rho-U_estableciemiento*ones(1,Nc);
nivel_energia=0;
for i=1:Nc
if rho(i)<=Ls && rho(i)>=Li
else
nivel_energia=1+nivel_energia;
break
end
end
if nivel_energia==1
inf=alf;
else
sup=alf;
end
alf=(sup+inf)/2;
end
end
end
block.DialogPrm(13).Data
alf
alf_robusto
block.Dwork(7).Data(4)
block.Dwork(7).Data(10)
salida_control=0;
for m=1:length(numcontrol);
salida_control=real((numcontrol(m)*Econtrol(m))+salida_control);
end
for m=2:length(dencontrol);
salida_control=(dencontrol(m)*Ucontrol(m-1)*(-1))+salida_control;
end
salida_control=real(salida_control/dencontrol(1));
if block.Dwork(7).Data(4)==1
if block.Dwork(7).Data(10)==1
if salida_control>Ls
block.OutputPort(1).Data=Ls;
else
if salida_control<Li
block.OutputPort(1).Data=Li;
else
block.OutputPort(1).Data = salida_control;
end
end
else
block.OutputPort(1).Data =0;
no_exitacion=block.Dwork(7).Data(7:9)';
no_exitacion=[block.InputPort(1).Data no_exitacion(1:2)];
prom_no_exitacion1=(abs(no_exitacion(1))-abs(no_exitacion(2)));
prom_no_exitacion2=(abs(no_exitacion(1))-abs(no_exitacion(3)));
prom_no_exitacion3=(abs(no_exitacion(2))-abs(no_exitacion(3)));
prom_no_exitacion=abs(prom_no_exitacion1)+abs(prom_no_exitacion2)+abs(prom_no_exitacion3);
if prom_no_exitacion<0.001
block.Dwork(7).Data(7:10)=[1 1 1 1];
Econtrol=zeros(1,n+1);
else
block.Dwork(7).Data(7:10)=[no_exitacion 0];
end
end
else
Lsident=block.DialogPrm(11).Data;
Liident=block.DialogPrm(12).Data;
y=block.InputPort(1).Data;
if y<Liident
block.OutputPort(1).Data=AMP_IDENT*2*(0.5)+OFFSET_IDENT;
else
if y>Lsident
block.OutputPort(1).Data=AMP_IDENT*2*(-0.5)+OFFSET_IDENT;
else
block.OutputPort(1).Data=AMP_IDENT*2*(randint(1,1)-0.5)+OFFSET_IDENT;
end
end
end
block.Dwork(9,10,...,2 +8)
u=block.OutputPort(1).Data;
y=block.InputPort(1).Data;
% Paso 2: calcular el error e%
e=y-psi'*theta;
error=abs(e/y);
% Paso 3: calcular la matriz de ganacia L%
c=block.Dwork(3).Data;
L=(P*psi)*(inv(psi'*P*psi+c));
% Paso 4: recalcular theta%
theta=theta+e*L;
block.OutputPort(2).Data(1:2*n) =theta';
comp_c=0;
% Paso 5:Actualizar factor de olvido
for i=1:length(psi')
comp_c=psi(i)'+comp_c;
end
for i=1:length(L')
comp_c=L(i)'+comp_c;
end
if comp_c==0
c=0.9;
else
c=1-(1-psi'*L)*(error*2000);
end
cmin=block.DialogPrm(8).Data;
cmax=block.DialogPrm(9).Data;
if c<=cmin
c=cmin;
else
if c>=cmax
c=cmax;
end
end
block.Dwork(3).Data=c;
% Paso 6: Actualizar la matriz de covarianzas P%
P=(1/c)*((eye(2*n)-L*psi')*P);
% Paso 7: Actualizar psi%
for m=1:2*n-1;
h=2*n-m;
psi(h+1)=psi(h);
end
psi(1)=-y;
psi(n+1)=u;
block.Dwork(5).Data(1:2*n)=psi;
block.Dwork(6).Data(1:2*n)=theta;
for i=1:2*n;
block.Dwork(8+i).Data(1:2*n)=P(i,1:2*n);
end
=
=
=
=
zeros(1, block.DialogPrm(2).Data)';
zeros(1, block.DialogPrm(2).Data)';
0.97;
zeros(2*block.DialogPrm(2).Data,1);
block.Dwork(6).Data = ones(2*block.DialogPrm(2).Data,1);
block.Dwork(7).Data(1:5) = zeros(5,1);
for i=1:2*block.DialogPrm(2).Data;
block.Dwork(8+i).Data = zeros(1,2*block.DialogPrm(2).Data);
block.Dwork(8+i).Data(i)=alpha;
end
block.OutputPort(1).Data = 0;
no_exitacion=block.Dwork(7).Data(7:9)';
no_exitacion=[block.InputPort(1).Data no_exitacion(1:2)];
prom_no_exitacion1=((no_exitacion(2))-(no_exitacion(1)))/block.DialogPrm(1).Data;
prom_no_exitacion2=((no_exitacion(3))-(no_exitacion(2)))/block.DialogPrm(1).Data;
prom_no_exitacion3=((no_exitacion(3))-(no_exitacion(1)))/(2*block.DialogPrm(1).Data);
prom_no_exitacion=abs(prom_no_exitacion1)+abs(prom_no_exitacion2)+abs(prom_no_exitacion3);
if prom_no_exitacion<0.001
block.Dwork(7).Data(6:9)=[1 1 1 1];
else
block.Dwork(7).Data(6:9)=[0 no_exitacion];
end
end
end
Motor DC
Sensor
TAD
TAD
0 a 5 V dc
Input
Acondicionamiento
de la seal
10 a -10 V dc
PWM
Comparador
generador PWM
Oscilador Miller - Schmitt
Etapa de potencia
Acondicionamiento
de la Seal
Sensor optoelectrnico
Conversor de
Frecuencia a Voltaje,
LM2907