Control Digital_ESPE_Fonseca Manosalvas Morales Polo
-
Upload
juan-pablo-polo -
Category
Documents
-
view
230 -
download
0
description
Transcript of 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
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
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.
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
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
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.
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
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.
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°
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
∴ 𝒌𝒑 = 𝟎. 𝟎𝟎𝟑𝟖𝟕𝟑
𝑠 =𝑘𝑖
𝑘𝑝
∴ 𝒌𝒊 = 𝟕. 𝟕𝟒𝟔𝟔𝟗
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)
𝒎(𝒌) = 𝒎(𝒌 − 𝟏) + 𝒌𝒑[𝒆(𝒌) − 𝒆(𝒌 − 𝟏)] + 𝒆(𝒌)𝒌𝒊𝑻
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
Programa para ángulo variable
Respuesta entiempo real del sistema después de implementar el controlador
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
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.
ANEXOS
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));
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);
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));