Control Digital_ESPE_Fonseca Manosalvas Morales Polo

19
CONTROL DIGITAL CONTROL DE POSICIÓN DE UN BALANCÍN CON MOTOR Y HÉLICE INTEGRANTES: 1. Fonseca Milton 2. Morales Diego 3. Manosalvas Felipe 4. Polo Juan Pablo Sangolquí, 20 de Agosto de 2015

description

Control de Posicion

Transcript of Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Page 1: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

CONTROL DIGITAL

CONTROL DE POSICIÓN DE UN BALANCÍN

CON MOTOR Y HÉLICE

INTEGRANTES:

1. Fonseca Milton

2. Morales Diego

3. Manosalvas Felipe

4. Polo Juan Pablo

Sangolquí, 20 de Agosto de 2015

Page 2: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Tabla de contenido Tema ............................................................................................................................................3

Objetivos ......................................................................................................................................3

Descripción de la planta ...............................................................................................................3

Como se tomó los datos para la obtención de la planta ................................................................4

Procedimiento para el cálculo de la planta ...................................................................................5

Características de la planta ...........................................................................................................8

Controlador PI ..............................................................................................................................8

Nuevos parámetros de desempeño ...........................................................................................8

Fórmulas para el cálculo del controlador PI .............................................................................9

Cálculo de las raíces .................................................................................................................9

Criterio del ángulo ....................................................................................................................9

Criterio de magnitud...............................................................................................................10

Ecuación a diferencias del controlador .......................................................................................11

Implementación en Arduino .......................................................................................................12

Programa para ángulo fijo ......................................................................................................12

Programa para ángulo variable ...............................................................................................13

Conclusiones ..............................................................................................................................14

Recomendaciones .......................................................................................................................15

Page 3: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Tema

CONTROL DE POSICIÓN DE UN BALANCÍN CON MOTOR Y HÉLICE.

Objetivos

Obtención de la función de trasferencia de la planta por medio del Ident de Matlab y con la ayuda de dos datos obtenidos por medio de una tarjeta arduino

Diseñar un controlador discreto que cumpla con las especificaciones del sistema

Descripción de la planta

La planta consta de un sistema compuesto por dos barras, un motor, una hélice, un tope y

un soporte.

El sistema está colocado de tal manera que encima del soporte se colocó un tope para que

las hélices del motor no rozaran con la superficie del soporte, se colocó una de las barras

en posición vertical, la otra está unida a esta permitiendo el giro de una barra sobre la

otra, en la posición de giro se encuentra un potenciómetro de 5KΩ que nos servirá para

saber la posición de la barra, en el extremos de la segunda barra se encuentra el motor y

la hélice de este donde la hélice que es la encargada del movimiento ya que cuanto más

voltaje reciba el motor a mayor velocidad girara la hélice y la barra cambiara de posición.

En la parte de control se encuentra una tarjeta de arduino, y para la parte de potencia

transformador de corriente alterna-continua que nos permite conectarlo a la red eléctrica

y obtener 12 voltios CC en sus terminales.

Page 4: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Como se tomó los datos para la obtención de la planta

Entre las variables a controlar esta el ángulo de elevación del sistema, como ángulo inicial

tenemos el ángulo del balancín apoyado en su tope sin movimiento del motor, este ángulo

corresponde a 45 grados con respecto a la barra vertical.

Luego de la perturbación del sistema al ingresar un Step al sistema, el ángulo final de

control es de 65 grados con respecto a la vertical, con la tarjeta arduino generamos una

base de datos

Page 5: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Procedimiento para el cálculo de la planta

Una vez realizada la planta realizamos la adquisición de datos por medio de nuestro

controlador arduino

Ingresamos los datos obtenidos de nuestro puerto serial que previamente guardamos en

Excel, creamos dos vectores en el turbox de Matlab uno llamado entrada y otro llamado

salida con el número de datos ingresados en nuestro caso 4073 datos.

Abrimos el Ident del Matlab e importamos los vectores tanto de entrada como de salida

Page 6: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Para la primera aproximaciones que realizaremos lo haremos con dos polos y dos ceros,

con esta configuración la función de transferencia de la planta tiene una coincidencia del

73% aproximadamente.

Page 7: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Para la segunda aproximación se usa con la configuración de tres polos y ningún cero,

con esta configuración la función de transferencia de la planta tiene una coincidencia

del 94% aproximadamente.

Obteniendo de esta manera la función de transferencia de la planta

𝑓𝑢𝑛𝑐𝑖𝑜𝑛 𝑑𝑒 𝑡𝑟𝑎𝑛𝑠𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎 = 8.395

𝑠3 + 8.312𝑠2 + 30.45𝑠 + 86.33

Page 8: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Características de la planta

Controlador PI Se establecen los siguientes parámetros de desempeño en base a los datos obtenidos de

la figura 1 en donde se aprecia un valor alto de sobre impulso de 32.1% y también se

busca reducir el tiempo de establecimiento del sistema 3.87

Nuevos parámetros de desempeño

Parámetro Valor inicial Valor deseado

Mp 32.1% 10%

Ts 9.87[s] 7.5[s]

Una vez definidos los parámetros a mejorar se busca un controlador óptimo para el

sistema, en este caso se ha decidido diseñar un CONTROLADOR PI, el cual permite

reducir el parámetro ts, Mp y además elimina el efecto de las perturbaciones externas.

Page 9: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Fórmulas para el cálculo del controlador PI

𝜎 =4

𝑡𝑠 𝜔𝑑=

−𝜋 𝜎

ln (𝑀𝑝

100)

Cálculo de las raíces

𝒔 = −𝝈 ± 𝒋𝝎𝒅

𝜎 =4

𝑡𝑠=

4

3= 1.333

𝜔𝑑=

−𝜋 𝜎

ln (𝑀𝑝

100)

=−𝜋 ∗ 1.333

𝑙𝑛 (10

100)= 1.814

⟹ −𝜎 ± 𝑗𝜔𝑑 = −1.333 ± 𝑗1.814

𝒔 = −𝟏. 𝟑𝟑𝟑 ± 𝒋𝟏. 𝟖𝟏𝟒

Criterio del ángulo

∑ ∡𝑧𝑖 − ∑ ∡𝑝𝑖 = ± 𝑟𝜋 ; s evaluado en -1.33+j1.814

−∡(𝑠 + 4.22) − ∡(𝑠 + 0.8949 + 4.505𝑖) − ∡(𝑠 + 0.8949 − 4.505𝑖) − ∡(𝑠) = ± 𝑟𝜋

∡ − 153.17° ≠ −180°

→ 𝑆𝑒 𝑐𝑜𝑚𝑝𝑒𝑛𝑠𝑎 𝑢𝑛 𝑎𝑛𝑔𝑢𝑙𝑜 𝑑𝑒 − 26.82°

Page 10: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Por medio de AutoCAD se determina la raíz 𝑠 = −4.9087 necesaria para compensar

los 26.82°.

−∡(𝑠 + 4.22) − ∡(𝑠 + 0.8949 + 4.505𝑖) − ∡(𝑠 + 0.8949 − 4.505𝑖) − ∡(𝑠) − ∡(𝑠 + 4.9087) = ± 𝑟𝜋

∡ − 180° = −180°

Criterio de magnitud

𝑘𝑝 ∗ 𝐺𝑝(𝑠) ∗ 𝐺𝑐(𝑠) = −1

𝐺𝑐(𝑠) =𝑘𝑝(𝑠 + 4.9087)

𝑠

𝐺𝑝(𝑠) =8.395

𝑠3 + 8.312𝑠2 + 30.45𝑠 + 86.33

⟹ 𝑘𝑝 =1

|𝐺𝑝(𝑠) ∗ 𝐺𝑐(𝑠)|𝑠=−1.333+𝑗1.814

∴ 𝒌𝒑 = 𝟎. 𝟎𝟎𝟑𝟖𝟕𝟑

𝑠 =𝑘𝑖

𝑘𝑝

∴ 𝒌𝒊 = 𝟕. 𝟕𝟒𝟔𝟔𝟗

Page 11: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Ecuación a diferencias del controlador Con el modelo del controlador se realiza la ecuación a diferencias para posteriormente

ser implementada en el controlador físico.

𝐺𝑐(𝑧) = 𝑘𝑝 +𝑘𝑖𝑇𝑧

𝑧 − 1

𝐺𝑐(𝑧) =𝑘𝑝(𝑧 − 1) + 𝑘𝑖𝑇𝑧

𝑧 − 1

𝐺𝑐(𝑧) =𝑘𝑝𝑧 − 𝑘𝑝 + 𝑘𝑖𝑇𝑧

𝑧 − 1

𝑀(𝑧)

𝐸(𝑧)=

𝑘𝑝 − 𝑘𝑝𝑧−1 + 𝑘𝑖𝑇

1 − 𝑧−1

𝑀(𝑧)(1 − 𝑧−1) = 𝐸(𝑧)(𝑘𝑝 − 𝑘𝑝𝑧−1 + 𝑘𝑖𝑇)

𝑀(𝑧) − 𝑀(𝑧)𝑧−1 = 𝐸(𝑧)𝑘𝑝 − 𝑘𝑝𝐸(𝑧)𝑧−1 + 𝐸(𝑧)𝑘𝑖𝑇

𝑀(𝑧) = 𝑀(𝑧)𝑧−1 + 𝐸(𝑧)𝑘𝑝 + 𝐸(𝑧)𝑘𝑖𝑇 − 𝑘𝑝𝐸(𝑧)𝑧−1

𝑚(𝑘) = 𝑚(𝑘 − 1) + 𝑒(𝑘)𝑘𝑝 + 𝑒(𝑘)𝑘𝑖𝑇 − 𝑘𝑝𝑒(𝑘 − 1)

𝒎(𝒌) = 𝒎(𝒌 − 𝟏) + 𝒌𝒑[𝒆(𝒌) − 𝒆(𝒌 − 𝟏)] + 𝒆(𝒌)𝒌𝒊𝑻

Page 12: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Implementación en Arduino Una vez definido el controlador PI, se halla la ECUACION A DIFERENCIAS para

posteriormente ingresar la misma en el entorno de programación de la placa Arduino.

Programa para ángulo fijo

Page 13: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Programa para ángulo variable

Respuesta entiempo real del sistema después de implementar el controlador

Page 14: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Conclusiones Se realizó un controlador PI para poder obtener un error muy pequeño junto a

sobrepicos y tiempo de estabilización bajos, como se ha podido comprobar en el las

gráficas del controlador aplicado al sistema.

Para nuestro trabajo de aplicación se trabajó únicamente con un solo rotor de

movimiento elevación PICHT.

Las pruebas realizadas al concluir la aplicación han sido satisfactorias, se ha

logrado implementar un sistema que tiene un comportamiento aceptable y que

cumple con los objetivos planteados, sin sobrepicos y cuya posición evoluciona

linealmente ante cambios en la referencia.

Desde el punto de vista teórico, al comparar el modelo matemático en lazo cerrado

con el sistema de control real en cuanto a respuesta temporal, vemos que aunque

con valores diferentes para las ganancias proporcional e integral del regulador PI,

ambas respuestas son muy similares y semejantes a las de un sistema de primer

orden con retardo

Los parámetros de desempeño impuestos con el controlador PI fueron:

𝑀𝑝 = 10%.

𝑡𝑠 = 7.5 𝑠

Salida del sistema sin perturbación

Mp≤10 % ts=7.5 s

Page 15: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

Salida del sistema con perturbación

Mp≤10 % ts=7.5 s

Se comprueba con la gráfica obtenida que dichos parámetros fueron logrados, y el control de la

planta es satisfactorio al mantener el ángulo de 25° establecido ante cualquier perturbación.

Recomendaciones Se debe tener un conocimiento adecuado de la herramienta Matlab y de cada uno de los

comandos para garantizar un correcto diseño del controlador Proporcional Integral

Derivativo.

Es necesario saber claramente cuando se debe trabajar en lazo abierto y lazo cerrado

para obtener resultados claros y validos con la planta real.

Page 16: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

ANEXOS

Page 17: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

PROGRAMA DE ADQUISICION DE

DATOS

#include <ServoTimer2.h>

#define PIN_thr 9

ServoTimer2 motor_thr;

const int thr_mid=1500;

int val=1100;

int tie=0;

int medi=0;

void setup()

Serial.begin(115200);

motor_thr.attach(PIN_thr);

motor_thr.write(1000);

delay(1000);

motor_thr.write(val);

void loop()

if(Serial.available()>0)

switch(Serial.read())

case 's':

tie=millis();

Serial.println("------------------------------

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

--");

motor_thr.write(1300);

break;

case 'c':

for(int i=1300;i>1100;i--)

motor_thr.write(i);

Serial.print(i);

Serial.print(" ");

Serial.println(analogRead(A0));

delay(100);

break;

case 'p':

for(int i=1110;i<1300;i++)

motor_thr.write(i);

delay(1000);

for(int j=0;j<10;j++)

medi+=analogRead(A0);

delay(50);

Serial.print(i);

Serial.print(" ");

Serial.println(medi/10);

medi=0;

break;

case 'k':

val++;

motor_thr.write(val);

Serial.print(val);

Serial.print(" ");

Serial.println(analogRead(A0));

break;

Serial.print(millis()-tie);

Serial.print(" ");

Serial.println(analogRead(A0));

Page 18: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

PROGRAMA DE CONTROL CON

SETPOINT FIJO

#include <ServoTimer2.h>

#define PIN_thr 9

ServoTimer2 motor_thr;

//float Kc=0.9750,Ki=14.7498, Kd=0.5,

T=0.001;

//float Kc=0.9750,Ki=14.7498, Kd=0.5,

T=0.001;

float Kc=0.003873,Ki=7.74669, Kd=0,

T=0.001;

float e=0;

float e1=0;

float m=0;

float m1=0;

float error=0;

float setpoint=0;

int control=0;

void setup()

Serial.begin(115200);

motor_thr.attach(PIN_thr);

motor_thr.write(1100);

delay(1000);

motor_thr.write(1100);

delay(3000);

Serial.println("Inicio");

motor_thr.write(1320);

delay(5000);

Serial.println("control");

setpoint=analogRead(A0);

Serial.println(setpoint);

void loop()

e=analogRead(A0);

error=setpoint-e;

m=m1+Kc*(error-e1)+Ki*T*error;

e1=error;

m1=m;

control=(int)m;

motor_thr.write(1320+(control/100));

Serial.print(1320+(control/100));

Serial.print(" ");

Serial.println(error);

Page 19: Control Digital_ESPE_Fonseca Manosalvas Morales Polo

PROGRAMA DE CONTROL CON

SETPOINT VARIABLE

#include <ServoTimer2.h>

#define PIN_thr 9

ServoTimer2 motor_thr;

float Kc=0.003873,Ki=7.74669;

float e=0;

float e1=0;

float m=0;

float m1=0;

float error=0;

float setpoint=0;

int control=0;

int x=390;

int ang=0;

void setup()

Serial.begin(115200);

motor_thr.attach(PIN_thr);

ang=-0.0004*x*x + 0.4042*x + 1224.9;

motor_thr.write(1100);

delay(1000);

motor_thr.write(1100);

delay(3000);

Serial.println("Inicio");

motor_thr.write(ang);

delay(5000);

Serial.println("control");

setpoint=analogRead(A0);

Serial.println(setpoint);

void loop()

if(Serial.available()>0)

switch(Serial.read())

case 'a':

x=375;

ang=-0.0004*x*x + 0.4042*x +

1224.9;

motor_thr.write(ang);

delay(5000);

Serial.print("cambio de setpoint a: ");

Serial.println(x);

setpoint=analogRead(A0);

break;

case 'b':

x=360;

ang=-0.0004*x*x + 0.4042*x +

1224.9;

motor_thr.write(ang);

delay(5000);

Serial.print("cambio de setpoint a: ");

Serial.println(x);

setpoint=analogRead(A0);

break;

case 'c':

x=345;

ang=-0.0004*x*x + 0.4042*x +

1224.9;

motor_thr.write(ang);

delay(5000);

Serial.print("cambio de setpoint a: ");

Serial.println(x);

setpoint=analogRead(A0);

break;

e=analogRead(A0);

error=setpoint-e;

m=m1+Kc*(error-e1)+Ki*T*error;

e1=error;

m1=m;

control=(int)m;

motor_thr.write(ang+(control/100));

Serial.print(ang+(control/100));

Serial.print(" ");

Serial.print(error);

Serial.print(" ");

Serial.println(analogRead(A0));