Vous êtes sur la page 1sur 13

Universidad Autónoma de San Luis Potosı́

Maestrı́a en Ingenierı́a Eléctrica

System Identification
Practica V

Semestre 2018-2019/II

Laboratorio de Control

Ing. Saúl Rolando Méndez Elizondo

3 de mayo de 2019
1. Introducción UASLP-CIEP

Existen varios elementos para el desarrollo en el área de control sumamente importantes, tales como el
control, el sensado, el modelo, etc. Una de las más importantes es la planta, la cual se puede generar
mediante ecuaciones diferenciales o parciales, de los elementos fı́sicos conocidos, se tienen desventajas como
incertidumbres, pero puede llegar a ser muy exacto. Otra forma es mediante identificación de la planta
experimentalmente, esta practica se basa en un método de identificación (PRBS), el cual es comparado
mediante su modelo generado por ecuaciones diferenciales.

2. Objetivos
Generar experimentalmente el modelo mediante mı́nimos cuadrados de un circuito filtro pasa bajas RC de
3er orden. Mediante la excitación al sistema con el uso de PRBS.

3. Desarrollo

Figura 1: Circuito RC de tercer orden.

El circuito RC de tercer orden planteado es presentado en la figura 1 y sus ecuaciones en 1.


Vi (s) − Vo (s)
Vo (s) =
RCs
1 Vi (s)
Vo (s)(1 + =
RCs RCs
Vo (s) 1 (1)
= H(s) =
Vi (s) 1 + RCs
R∗C =1
1
H(s) =
(1 + s)3

3.1. Cálculos

El objetivo de la practica es generar una función de transferencia discreta 2 mediante mı́nimos cuadrados.

b1 ∗ z n−1 + b2 ∗ z n−2 + ... + bn−1 ∗ z + bn


G(z) = (2)
z n + a1 ∗ z n−1 + ... + an−1 ∗ z + an

Con la estimación del vector contenida en los coeficientes:

3 DESARROLLO 1
UASLP-CIEP

θ = [a1 ...an b1 ...bn ] (3)

El objetivo es encontrar θLS , que sea la mejor estimada de θ mediante minimos cuadrados. Mediante una
entrada u[k] y la mediación de la salida y[k], representada por la k th muestra.

Se supone que Np muestra para cada u y y son colectadas por una matriz 3.1. Entonces se puede resolver
por:

θLS = (X T ∗ X)− 1 ∗ X T ∗ Y (4)

donde Y=[y[n]..y[Np ]]T es un vector columna que contiene Np -n+1 muestras de salida. Una condición
necesaria es que X T ∗ X sea no singular.

3.2. Simulación

Figura 2: Generador PRBS mediante delays y ganancia de 125.

Como se menciono anteriormente, para que las ecuaciones desarrolladas se asemejen a los resultados experi-
mentales, se debe de hacer uso de amplificadores operacionales en forma de seguidores de voltaje, para tener
un alta impedancia de entrada.
La primer etapa en el proceso de identificación, generar la señal de entrada. La cual como se mencionó
anteriormente viene dada por una señal de ON-OFF aleatoria. En el área de simulación viene dada por2,
que es una secuencia de 13 delays con condiciones iniciales. Para nuestro caso se utiliza una señal aleatoria,
con un OFF de 0 en palabra digital y un 125 que representa en voltaje aproximadamente 2.5 V , se muestra
en la Fig. 3.

3.3. Resultados experimentales

El montaje de el análisis se hizo mediante Arduino, en este se genera una interfaz que contiene el periodo
de muestro del algoritmo mediante Timmers de 500 milisegundos, además de que el usuario puede agregar
cantidad de datos y el tamaño del PBRS. Como se menciono anteriormente es de 125 en palabra digital. Los
resultados son mostrados en las figuras 4 y 5 respectivamente

3 DESARROLLO 2
UASLP-CIEP

Figura 3: Generador PRBS mediante delays y ganancia de 125.

Figura 4: Generador PRBS mediante delays y ganancia de 125.

3 DESARROLLO 3
UASLP-CIEP

Figura 5: Adquisición de datos a lazo abierto del filtro de 3er orden con entrada de la Fig. 4

Recordando, que con mı́nimos cuadrados se obtiene la mejor θ estimada, para con esto obtener los mejores
coeficientes para la función de transferencia en el plano Z, de ahi se realiza una transformación bilineal para
obtener una función de transferencia en S y se obtiene:

−0,4493494 + 0,0964225s + 0,0103525s2 − 0,0015934s3


H(s) = (5)
−0,4550231 − 1,4692656s − 1,6311699s2 − 0,4932687s3
1
Recordando, que mediante ecuaciones diferenciales el modelo de la planta viene dado por (s+1) 3 cuyo dia-

grama de BODE Fig. 6 y el diagrama de BODE de la función de transferencia eq. 5 esta dado por la Fig. 7.
Como se puede apreciar, se tiene una gran aproximación hasta 1 Hz.
Ahora bien, se prueban las funciones de transferencia, a una entrada escalón de 1 de amplitud durante
un periodo de 10 segundos, cuyos resultados satisfactorios están mostrados en la Fig. 8, donde la señal de
arriba es de la planta mediante ecuaciones diferenciales y la de abajo es la función de transferencia generada
experimentalmente. Además para evaluar la cantidad de error, se obtiene el valor absoluto de las dos la
salida de las dos funciones de transferencia en la Fig. 9.

3.4. Código documentado

3.4.1. Codigo Arduino

//El codigo toma dos valores, datasize 500 y step 500 (divide sobre 4)
#include <MsTimer2.h>

const int PWMOut = 9;

3 DESARROLLO 4
UASLP-CIEP

Figura 6: Bode de la función de transferencia ec. diferenciales.

Figura 7: Bode obtenido mediante PBRS de la función de transferencia 5.

3 DESARROLLO 5
UASLP-CIEP

Figura 8: Respuesta a escalón unitario de periodo de 10 segundos de las dos funciones de transferencia.

Figura 9: Error del valor absoluto de las plantas.

3 DESARROLLO 6
UASLP-CIEP
const int VO = A2; // output of RC network

int i = 0; // index
String rcvdstring; // string received from serial
String cmdstring; // command part of received string
String parmstring; // parameter part of received string
int parmvalint; // parameter value

int newcmd = 0; // flag when new command received


int sepIndex; // index of seperator
int datasize = 100;
int stepcmd = 0; // command value
int stepcmdold = 0; // previous value of command
int vo = 0; // output voltage value
int pwmout = 0; // pwm value
int stepcmdchange = 0; // flag for change in command value

void cmdInt(void); // command interpreter function


void RCCircuit(void); // timer interruput routine

// variable definition
float PRBSVal = 2; // volts
int feedin;
byte bvec[13]={0,1,1,0,0,0,1,1,0,0,1,0,1}; // unit delay output
int bj; // index for bvec
int u0;

void setup() {
pinMode(PWMOut, OUTPUT);
Serial.begin(9600);
MsTimer2::set(500, RCCircuit); //Periodo de 500 milisegundos
MsTimer2::start();

void loop() {

while (Serial.available() > 0 ) {


rcvdstring = Serial.readString();
newcmd = 1;
}
if (newcmd) { // execute this part only when new command received
cmdInt(); // invoke the interpreter
newcmd = 0;
}
delay(10); // delay 10 millisecs
}

// command interpreter implementation


void cmdInt(void)
{

3 DESARROLLO 7
UASLP-CIEP
// find index of separator (blank character)
sepIndex = rcvdstring.indexOf(’ ’);
// extract command and parameter
cmdstring = rcvdstring.substring(0, sepIndex);
parmstring = rcvdstring.substring(sepIndex+1);
parmvalint = parmstring.toInt(); // convert parameter to value

// check if received command string is a valid command


if (cmdstring.equalsIgnoreCase("step")) {
if (parmvalint > 1023) parmvalint = 1023; // limit step command to 10-bit value
else if (parmvalint<0) parmvalint = 0;
stepcmd = parmvalint;
}
else if (cmdstring.equalsIgnoreCase("datasize")) {
if (parmvalint > 5000) parmvalint = 5000; // limit datasize to 5000 points max
else if (parmvalint<0) parmvalint = 0;
datasize = parmvalint;
}
else {
Serial.println("Invalid command");
}
}

// timer interrupt routine


void RCCircuit(void)
{
if (abs(stepcmd-stepcmdold) >= 1) {
//Serial.print("stepcmd = ");
//Serial.println(stepcmd);
stepcmdold = stepcmd; // save previous step command
stepcmdchange = 1; // set the flag
i = 0;
Serial.println("Vo = [");
}

vo = analogRead(VO); // read output voltage


pwmout = stepcmd/4; // scale pwm output to value 0 - 255

feedin = bvec[0]^(bvec[2]^(bvec[3]^bvec[12]));
for (bj = 12;bj>=1;bj--) {
bvec[bj]=bvec[bj-1];
}
bvec[0] = feedin;
if (bvec[12]==0) u0 = pwmout;
else u0 = 0; //Se~
nal mandada al PWM

analogWrite(PWMOut, u0); // send out PWM signal


if (stepcmdchange) {
Serial.println(u0);
Serial.println(vo); // send output voltage value to host

3 DESARROLLO 8
UASLP-CIEP
i++;
if (i== datasize) {
stepcmdchange = 0; // reset the command change flag
i = 0; // reset index
Serial.println("];");
}
}
}

3.5. Codigo Scilab

n=length(Vo); //Vector obtenido de Arduino


V01=Vo(1:2:n);
V02=Vo(2:2:n)/4;

z=poly(0,’z’);
//morder = 5;
//Np = 450;
morder = 3;
Np = 500;
//np 400 ts .5
ts = .5; // sampling period

//u_lsid = datamat(:,3); // PRBS input vector


//y_lsid = datamat(:,2); // plant output vector

u_lsid = V01; // PRBS input vector


y_lsid = V02;

X_lsid = [];

for i = 1:(Np-morder),
ys = []; // y section
us = []; // u section
for j = 1:morder,
ys = [-y_lsid(i+j-1) ys];
us = [u_lsid(i+j-1) us];
end
X_lsid = [X_lsid; ys us];
end
Y_lsid = y_lsid(morder+1:Np);

theta_lsid = inv(X_lsid’*X_lsid)*X_lsid’*Y_lsid; // LS algorithm


an = [];
bn = [];
for i=1:morder, // extract an and bn coefficients
an = [an theta_lsid(i)];
bn = [bn theta_lsid(morder+i)];
end

numd = 0;

3 DESARROLLO 9
UASLP-CIEP
dend = z^morder;
for i=1:morder
numd = numd + bn(i)*z^(morder-i);
dend = dend + an(i)*z^(morder-i);
end
Pd_lsid = syslin(ts,numd,dend); // discrete-time plant
// convert to continuous-time plant using bilinear transform
s=poly(0,’s’);
fz = -(s*ts+2);
gz = (s*ts-2);
nums = 0;
dens = fz^(morder);
for i=1:morder,
nums = nums + bn(i)*(fz^(morder-i))*(gz^i);
dens = dens + an(i)*(fz^(morder-i))*(gz^i);
end
P_lsid = syslin(’c’,nums,dens); // confinuous-time plant
// plot bode
figure(1);
clf();
bode(P_lsid, 0.01, 100);
/*
subplot(211),gainplot(P_lsid,0.00001,100);
title(’Bode plot of LSID plant’);
subplot(212),phaseplot(P_lsid,0.00001,100);
*/
figure(2)
s = poly(0, ’s’);
h = syslin(’c’, 1/(s+1)^3);
clf(); bode(h, 0.01, 100);

nu=P_lsid.num
pu=P_lsid.den

4. Diagrama de flujo

5. Conclusiones
Se torna la identificación experimental mediante PRBS, una herramienta de gran utilidad para la identifica-
ción de plantas.
Se comparan los resultados obtenidos respecto al modelado mediante ecuaciones diferenciales y el obtenido
mediante mı́nimos cuadrados. Y se dan resultados satisfactorios, dentro de esto hay que aclarar que se
compara respecto al modelo perfecto mediante simulación respecto al modelo generado experimentalmente.
Se observa que las funciones de transferencia son aproximaciones dentro de un rango de frecuencia que
dependen tanto del periodo del algoritmo, en este caso 500 milisegundos.

5 CONCLUSIONES 10
UASLP-CIEP

Figura 10: Diagrama de flujo.

5 CONCLUSIONES 11
UASLP-CIEP

Figura 11: Foto del montaje

5 CONCLUSIONES 12

Vous aimerez peut-être aussi