Está en la página 1de 4

UNIVERSIDAD CATOLICA BOLIVIANA “SAN Sejas

Lucia Gabriela PABLO”


Mercado-Rafael Rodríguez Soliz Facultad de Ingeniería
Fundamentos de Control IMT-243 Ing. Gabriel Rojas Semestre: I-2019
14/05/19

PROYECTO FINAL FUNDAMENTOS DE CONTROL

1. Objetivo

1.1 Objetivo General Determinar el


funcionamiento de un controlador PID de
posición para una esfera sobre un eje horizontal
(“Ball & Beam”)
1.2 Objetivos Específicos
 Simular por medio de MATLAB el
controlador mencionado Para el análisis del problema asumiremos que no
 Armar el código en Arduino para una existe una fuerza de fricción y definimos los
futura implementación siguientes parámetros:
 Determinar los parámetros del control PID
 Masa de la pelotita: 0.11[kg]
 Radio de la pelotita: 0.015[m]
 Longitud del apoyo: 0.03[m]
2.Procedimiento
 Longitud del eje: 1[m]
Para el siguiente proyecto se busco diseñar y  Inercia de la esfera: 9.99e-6 kg m2
simular el funcionamiento del proyecto Se espera que el diseño responda a un setting time
denominado “Ball & Beam” el cual consta en menor a los 3 segundos y un overshoot menor al
tener una esfera en un eje horizontal y esta con un 5%
solo grado de libertad, se trata de poder
mantenerla a cierta distancia con la ayuda de un Para definir nuestra función de transferencia se
motor que sea el que moverá el eje hasta dejar a la utilizará la ecuación de Lagrange del movimiento
esfera en el lugar deseado y sin moverse. de la esfera la cual es la siguiente:

El eje horizontal será movido gracias a un servo


motor el cual tiene adherido un apoyo que a su
vez esta adherido a un lado del eje,
El ángulo α del eje puede ser expresado en el
Cuando el motor se gira se forma un ángulo y el ángulo que forma el servo motor:
nivel del eje cambia con respecto a otro ángulo.
Cuando el eje ya no esta horizontal la pelotita se
mueve gracias a la gravedad, el controlador se
encargará de mover el eje hasta tener la pelotita
en la distancia deseada Sobre esto es complicado armar un modelo en
simulink entonces se modelará la ecuación de
UNIVERSIDAD CATOLICA BOLIVIANA “SAN PABLO” Facultad de Ingeniería
Fundamentos de Control IMT-243 Semestre: I-2019

manera no linear. Se usará el bloque Fcn que es bloque derivador y el sistema queda de esta
para expresar una función. Primero expresaremos manera:
las derivadas de r con los bloques integradores

Después se inserta el bloque de función que toma


el vector [r ṙ α α̇ ] y retorna r̈
Se inserta el bloque Fcn y se conecta su salida a la
entrada del primer integrador y se cambia la Este es el sistema en lazo abierto, se lo guardo en
función a la siguiente un bloque de modelo y se paso a realizar pruebas
en lazo abierto

(3)
Este bloque de función tiene un vector de entrada
“u” que en este caso el vector es u=[r ṙ α α̇ ]

Ahora construiremos el vector de entradas con la Al simular el sistema de esta manera obtuvimos
ayuda de un bloque Mux y queda de esta manera una respuesta totalmente inestable y podríamos
en un principio con los feedbacks de la señal r: deducir que la esfera saldrá del eje
Para diseñar el controlador obtuvimos el espacio
de estados equivalente con una función de
MATLAB llamada linmod y además con esto
podemos sacar la función de transferencia
Se realizo lo siguiente:
[A,B,C,D]= linmod(‘ball’)

[num,den]= ss2tf(A,B,C,D)
Ahora necesitamos a la señal α que además viene
de la entrada θ.
Insertamos un bloque de entrada que será θ,
insertaremos un bloque de ganancia que
representará a la derivada de α y pondremos un
UNIVERSIDAD CATOLICA BOLIVIANA “SAN PABLO” Facultad de Ingeniería
Fundamentos de Control IMT-243 Semestre: I-2019

Servo myServo; //Objeto del servo motor.

void setup() {

Serial.begin(9600);

myServo.attach(servoPin);

Input = readPosition

myPID.SetMode(AUTOMATIC); //Objeto PID


automatico

myPID.SetOutputLimits(-80,80); //Limite de angulos

void loop()

Setpoint = 15;

Input = readPosition();

Con la siguiente función de transferencia se armo myPID.Compute();


el control PID, importamos la función al PID ServoOutput=102+Output; // 102 es la compensacion de
tuner y pudimos sacar las ganancias adecuadas las grados para tenerlo horizontal
cuales son las siguientes:
myServo.write(ServoOutput);

float readPosition() {

delay(40

const int pingPin = 7;


Con estas ganancias se armó un código en
Arduino el cual podría ser implementado cuando long duration, cm;
el proyecto se armado y el código es el siguiente: unsigned long now = millis();
#include<Servo.h>
pinMode(pingPin, OUTPUT);
#include<PID_v1.h>
digitalWrite(pingPin, LOW);
const int servoPin = 9; //Servo Pin
delayMicroseconds(2);
float Kp = 2.5; //Kp Inicial
digitalWrite(pingPin, HIGH);
float Ki = 0; //Ki inicial
delayMicroseconds(5);
float Kd = 1.1; //Kd inicial
digitalWrite(pingPin, LOW);
double Setpoint, Input, Output, ServoOutput;

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd,


DIRECT); /Objeto PID inicalizado en la clase
UNIVERSIDAD CATOLICA BOLIVIANA “SAN PABLO” Facultad de Ingeniería
Fundamentos de Control IMT-243 Semestre: I-2019

pinMode(pingPin, INPUT);

duration = pulseIn(pingPin, HIGH);

cm = duration/(29*2);

if(cm > 30) // 30 cm es la má xima distancia a la que


puede estar la esfera

Serial.println(cm);

return cm;

3. Conclusiones
 Se implemento un controlador PID al
sistema y con las ganancias halladas se
armó el código en Arduino
 Usando simulink de MATLAB
simulamos el comportamiento de este
sistema

4. Referencia Bibliográfica
1. http://ctms.engin.umich.edu/CTMS/index.php?
example=BallBeam&section=SimulinkModeling
2. http://ctms.engin.umich.edu/CTMS/index.php?
example=BallBeam&section=SimulinkControl
3.
http://www.sc.ehu.es/sbweb/fisica3/dinamica/lagrange/
lagrange.html
4.https://personales.unican.es/corcuerp/matlab_simulink/
Slides/Ejemplos_Simulink.pdf

También podría gustarte