Академический Документы
Профессиональный Документы
Культура Документы
GUAYAQUIL
F ACUL TAD DE EDUCACIO N T ECNICA P ARA EL DESARROL LO
INGENIERIA EN ELECTRONICA EN
CONTROL Y AUTOMATISMO
Realizado por
Erik Liger Alejandro Triviño Kevin Pincay
(Espacio Reservado)
Revisado:
Semestre: A-2017
Introducción
General
- Conocer el funcionamiento del controlador PID en un sistema de barra y
bola a través de una investigación bibliográfica para elaborar un modelo
a escala de dicha planta de control como aplicación de lo aprendido.
Específicos
- Obtener información de diferentes fuentes bibliográficas.
- Realizar el controlador PID en el software de Matlab.
- Implementar físicamente la planta de control.
- Realizar las respectivas pruebas de funcionamiento del sistema.
Estado del Arte
Sistemas de Control
Un sistema de control se define como un conjunto de dispositivos, los cuales
trabajan en conjunto para poder lograr un objetivo en específico.
Los sistemas de control en lazo cerrado son aquellos sistemas en los cuales la
señal de salida del sistema (conocida como variable controlada), si tiene un
efecto directo sobre la acción de control (conocida como variable de control).
(Luiz, 2012)
Controlador proporcional (P): Este control brinda una salida del controlador
que es proporcional al error, es decir: u(t) = KP.e(t), cuya función de
transferencia es:
Controlador integral (I): Este tipo de control brinda una salida del controlador
que es proporcional al error que se ha acumulado, lo que implica que es un modo
de control lento.
La señal de control u(t) tiene un valor que es diferente de cero cuando la señal
de error e(t) es cero. Por lo que se puede decir que dada una señal de referencia
constante, o perturbaciones, el error en régimen permanente es cero. (Rubio,
2013)
Controlador proporcional-integral (PI): Este tipo de controlador se define de
la siguiente manera:
Internamente el servomotor está conformado por un motor DC. El eje del motor
esta acoplado a una caja de varios engranajes (similar a una transmisión). Esto
se realiza con el objetivo de potenciar el torque generado por el motor y de esa
manera permitir que se mantenga una posición fija, cada vez que se requiera. El
circuito electrónico del servomotor es el que se encarga del manejo del
movimiento y de la posición del motor. (García, 2016)
Tipos de servomotores
Existen varios tipos de servomotores, para la industria, la robótica, entre otras
aplicaciones, sin embargo, en este apartado se hablara acerca de los
servomotores de modelismo, los cuales son utilizados para el sector de la
robótica y sus derivados.
Los servomotores de modelismo son aquellos que operan a voltajes con valores
bajos (voltaje de corriente continua) generalmente entre los 4 y los6 voltios.
Mientras que los servomotores de tipo industrial operan en corriente directa DC
como en corriente alterna AC (monofásica o trifásica).
Los servomotores se pueden clasificar también según sus características de
rotación:
Servomotores de rango de giro limitado: Estos son el tipo más común
de servomotores. Estos dispositivos solo permiten una rotación como
máximo de 180 grados, característica que los hace incapaces de dar una
vuelta completa (180 grados). Sin embargo existen métodos mediante los
cuales este tipo de servomotor puede ser modificado internamente para
que pueda girar toda la vuelta completa.
Esta es una pregunta que puede ser respondida con base en las necesidades
que deban satisfacerse durante la etapa de diseño, entre otras consideraciones.
A grandes rasgos, las diferencias entre los servomotores y los motores a pasos
se muestran en la siguiente tabla:
Servomotores Motores a pasos
Funcionamiento de un servomotor
Todo servomotor posee tres cables (a diferencia de un motor común que
solamente posee dos cables). Los tres cables la mayoría de las veces poseen
los mismos patrones de color que son fácilmente identificables.
Ilustración 16. Normativa de colores para los cables de un servomotor. Fuente: Autores
El tipo de color utilizado va a depender del fabricante del servomotor. La
necesidad de que exista una señal de control para que los servomotores puedan
funcionar, hace que sea imposible que sean utilizados sin recurrir a un circuito
de control adecuado. Esto es debido a que, si se quiere que el circuito de control
interno funcione, se necesita de una señal de control que sea modulada, para tal
efecto se hace uso de una modulación por ancho de pulso o más conocida como
PWM. (García, 2016)
Las señales que se pueden apreciar en la imagen adjunta son las que permiten
que el eje del motor adopte una posición específica. Las señales deben repetirse
en el tiempo que está establecido para que el motor mantenga una posición fija.
Ilustración 21. Ciclo de trabajo de un servomotor. Fuente: Autores
digitalWrite (pulso,LOW);
delayMicroseconds(5);
delayMicroseconds (10);
distancia = 0.01715*tiempo;
1 /*
2 PRACTICA 1 "SENSOR DE ULTRASONIDOS"
3 Muestra la distancia a la que se encuentran los objetos
4 */
5
6 #define pulso 9 //define la salida por donde se manda el pulso como 9
7 #define rebote 8 //define la salida por donde se recibe el rebote como 10
8 int distancia; //crea la variable "distancia"
9 float tiempo; //crea la variable tiempo (como float)
10 void setup()
11{
12 Serial.begin(9600); //inicializa el puerto serie
13 pinMode(pulso, OUTPUT);
14 pinMode(rebote, INPUT);
15}
16
17
18 void loop()
19{
20 digitalWrite(pulso,LOW); //Por cuestión de estabilización del sensor
21 delayMicroseconds(5);
22 digitalWrite(pulso, HIGH); //envío del pulso ultrasónico
23 delayMicroseconds(10);
24 tiempo = pulseIn(rebote, HIGH);
25 distancia = 0.01715*tiempo; //fórmula para calcular la distancia
26
27 /*Monitorización en centímetros por el monitor serial*/
28 Serial.print("Distancia: ");
29 Serial.print(distancia);
30 Serial.println(" cm");
31 delay(3000); }
32
33
𝐽 𝑑2𝑟 𝑑𝛼 2
( 2 + 𝑚) 2 + 𝑚𝑔(sin 𝛼) − 𝑚𝑟 ( ) = 0 (1)
𝑅 𝑑𝑡 𝑑𝑡
𝐽 𝑑2𝑟
( 2 + 𝑚) 2 = −𝑚𝑔𝛼 (2)
𝑅 𝑑𝑡
𝑑
𝛼= 𝜃 (3)
𝐿
𝐽 𝑑2𝑟 𝑑
( 2 + 𝑚) 2 = −𝑚𝑔 𝜃 (4)
𝑅 𝑑𝑡 𝐿
Para hallar la función de transferencia, aplicamos Laplace a la ecuación (4)
𝐽 𝑑2𝑟 𝑑
ℒ [( 2
+ 𝑚) 2
] = ℒ [−𝑚𝑔 𝜃]
𝑅 𝑑𝑡 𝐿
𝐽 2
𝑚𝑔𝑑
( + 𝑚) 𝑅(𝑠)𝑆 = − 𝜃(𝑠) (5)
𝑅2 𝐿
𝑅(𝑠) 𝑚𝑔𝑑 1
𝐺1 (𝑆) = =− (6)
𝜃(𝑠) 𝐽 𝑆 2
𝐿 ( 2 + 𝑚)
𝑅
Para este trabajo se va a utilizar una pelota de ping-pong. Los valores que se
muestran son aproximados, de igual manera, al momento de la implementación
física, ciertos valores podrían variar un poco.
La función de transferencia una vez reemplazados todos los valores anteriores,
queda de la siguiente manera:
𝑅(𝑠) 0.493
𝐺(𝑆) = =
𝜃(𝑠) 𝑠2
Ilustración 28. Esquemático del circuito de Fuerza del proyecto. Fuente: Autores
Cabe recalcar que la lista de materiales que se presentan en la tabla, son los
elementos con los que inicialmente se desarrolló el prototipo del sistema; sin
embargo, durante la realización real del proyecto, puede cambiarse algún
material por otro, ya sea por factor económico o por calidad. Así mismo, también
puede que se adquiera más de un elemento del mismo tipo por seguridad. Razón
por la cual, el precio final podría variar un poco del que esta mostrado al final de
la tabla.
Variación de la variable manipulada para producir el efecto de control de su
sistema.
Matlab
Planta
(Sistema de Sensor
Servomotor Control Ball Ultrasónico
and Beam)
Monitor Serial
Gráficos de simulación de su planta en lazo abierto y lazo cerrado.
Para realizar la calibración del controlador y hallar las constantes kp, ki, kd, se
procede en Matlab, se procede de la siguiente manera:
2. Una vez hecho esto, escribimos el comando sisotool (variable), el cual nos
permitirá empezar con la calibración de nuestro controlador.
11. Con los valores actuales que se colocan por defecto al momento de
seleccionar los polos y ceros, la respuesta del sistema que antes era
completamente oscilatoria, ahora presenta la siguiente forma; como
puede verse ha mejorado considerablemente la estabilidad. Hacemos clic
derecho sobre la gráfica y en las características, marcamos “Peak
Response” (el cual nos muestra el sobre-impulso máximo de la planta) y
también “Settling Time” (que muestra el tiempo de estabilización de la
planta).
Ilustración 44. Elección de los parámetros de la gráfica del proyecto. Fuente: Autores
13. Abrimos nuevamente la ventana de Analysis Plot y nos damos cuenta que
ahora la respuesta a pasos de nuestra planta está mucho más estable en
comparación con los dos gráficos anteriores. Como se puede ver también,
gracias a las características que incluimos anteriormente se puede ver
más detalles de la respuesta a pasos, como por ejemplo que el tiempo de
establecimiento es aproximadamente de 0.7 segundos, el sobre-impulso
es de aproximadamente 2.86% y la amplitud máxima es de 1.03
Ilustración 46. Respuesta de la Planta con una Entrada Step. Fuente: Autores
𝑘𝐷 = 56.98
𝑘𝑃 = 53.56
𝑘𝐼 = 5.69
Proceso de construcción de la planta
Ilustración 50. Eje del Servomotor que mueve al balancín. Fuente: Autores
La barra horizontal sobre la cual se moverá la pelota y la barra vertical que sirve
de soporte a la anterior se mantienen juntas por medio de un eje, el cual fue
creado mediante un tornillo y un pequeño ángulo de metal, de tal manera que se
forma un balancín entre las dos estructuras
Ilustración 53. Mecanismo de desplazamiento del balancín. Fuente: Autores.
La barra vertical que sirve de soporte, está fijada por medio de otro ángulo de
metal en la parte inferior, además de un grupo de tuercas y tornillos que aseguran
su estabilidad en la base de madera, tal como puede apreciarse en la imagen
adjunta inferior.
Finalmente toda la estructura fue colocada en una base de madera, tal y como
puede apreciarse en la imagen adjunta.
Se definen también las constantes del PID del tipo flotante, ya que este
tipo de datos admite números reales (incluyendo los decimales). Los
valores de cada constante pueden verse en la imagen adjunta.
Se declaran 3 variables de tipo double, las cuales corresponden al
Setpoint o referencia, la salida del actuador y la entrada del sensor. El tipo
de dato double es similar a un dato de tipo flotante, con la diferencia que
el double admite una cantidad mucho más grande.
Ahora se procederá al uso de cada una de las librerías que fueron declaradas al
inicio del programa:
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCIA);
Esta línea de código permite la inicialización del sensor ultrasónico, como vemos
recibe tres argumentos de entradas, los cuales son los respectivos pines del
sensor y la distancia máxima que fue declarada para ejecutar las mediciones.
Servo myServo;
Finalmente se da un nombre al objeto servo con la finalidad de facilitar la
programación.
Ilustración 60. Uso de las librerías incluidas en el programa. Fuente: Autores
Lo siguiente que sigue es la función del setup, que como se sabe, contiene el
modo de los pines y demás elementos necesarios para el funcionamiento del
código de programación.
Lo primero que se hace es iniciar la comunicación serial con el dispositivo y
asignarle una velocidad de transmisión, la más típica que se utiliza es 9600.
Por medio de la siguiente instrucción se asigna el pin declarado anteriormente al
objeto nombrado como “myServo”.
myServo.attach(servoPin);
Con las instrucciones “pinMode” se indica el tipo de dato que manejara cada
una de las variables utilizadas para el manejo y visualización por parte del
usuario. Como puede verse, los pulsadores son de tipo entrada mientas que los
Led son de tipo salida.
pinMode(MARCHA,INPUT);
pinMode(PARO,INPUT);
pinMode(LEDM,OUTPUT);
pinMode(LEDP,OUTPUT);
Una vez que la variable tipo bandera ha cambiado de valor, se la utiliza dentro
de otro condicional if.
Se verifica si la bandera ha tomado el valor de uno. Si esto es verdadero, se
ingresa a las instrucciones dentro del condicional:
Se escriben los estados de cada Led indicador, como inicialmente se ha
pulsado el botón de marcha del sistema, por lógica debe mantenerse
encendido el Led de color verde que en este caso indica inicio, mientras
que el Led de color rojo se mantiene apagado, ya que este es el que indica
paro del sistema.
Input = readPosition();
A continuación se expresa:
Salida=Output;
Lo que hace es mostrar por medio del monitor serial, los valores del Setpoint, la
entrada y la salida del sensor. De esta manera el usuario puede verificar si la
planta está funcionando adecuadamente.
Ilustración 66. Funcionamiento mediante el pulsador de marcha. Fuente: Autores
De igual manera que en el caso anterior, se empieza a colocar las librerías que
se utilizaran a lo largo del programa. Como anteriormente ya se presentó para
que sirven algunas líneas de código, ahora no se mostraran tantos detalles.
Se incluyen las librerías para el control del servomotor y el manejo del sensor
ultrasónico HC-SR04
#include <NewPing.h>
#include<Servo.h>
Se definen las constantes para los pines del sensor ultrasónico, el puerto digital
donde se encontrara el servomotor y la distancia máxima que va a ser leída por
el sensor ultrasónico. Con esta distancia máxima, cualquier lectura más allá de
ese valor, no será detectada por el sensor.
#define TRIGGER_PIN 5
#define ECHO_PIN 6
#define MAX_DISTANCIA 35
const int servoPin = 9;
Luego se crea una librería para leer la posición por parte del sensor. Esta librería
será de tipo flotante y no tendrá datos de entrada
Se genera un retardo de tiempo, a continuación se crea una variable de tipo
entero en la cual se van a almacenar las lecturas de los pulsos generados por el
sensor. Se establecerá la lectura con un valor máximo de 5 pulsos en cada
lectura.
Finalmente la función retorna la variable con el valor de la distancia almacenado,
pero dividido para un valor constante de 57, este valor viene por defecto indicado
en la librería del propio sensor ultrasónico.
float readPosition() {
delay(40);
int uS = sonar.ping_median(5);
return uS / 57;}
void setup() {
Serial.begin(9600);
myServo.attach(servoPin); }
Se declaran dos variables de tipo byte y se las inicializa en cero, estas variables
serán utilizadas para establecer la comunicación y enviar los datos desde el
Arduino hacia el Matlab.
byte angle = 0;
byte sensor = 0;
Luego en la funcion del loop, se indica que la variable sensor será igual a las
lecturas efectuadas por el ultrasónico.
Esta variable es enviada con los datos para ser visualizada en el Simulink.
sensor = (byte)readPosition();
Serial.write(sensor);
Espersson, M. (2010). Vision Algorithms for ball on beam and plate . Recuperado
de:
http://lup.lub.lu.se/luur/download?func=downloadFile&recordOId=884745
8&fileOId=8859300
Lin, M. (2016, 11 11). Ball and beam control system project. Recuperado de:
https://web.njit.edu/~ml383/Project%20Report.pdf
Oporto, M. (2015). Control PID barra y bola con Arduino. Retrieved from
https://repositorio.unican.es/xmlui/bitstream/handle/10902/6366/374763.
pdf?sequence=1
Pecker, E. (2010). Sensado basado en vision para el sistema Ball and Beam.
Recuperado de: http://www.sase.com.ar/2011/files/2011/02/32-
Sensado_basado_en_vision_para_control_de_Ball_Beam.pdf
Pelton, C. (2012). Application for Real-Time
Control of Ball and Beam System . Recuperado de:
http://thl.okstate.edu/Handout_BallBeamOpt.pdf
Velaz, L. (2011). Control automático del sistema no lineal Ball and Beam.
Recuperado de: http://academica-
e.unavarra.es/xmlui/bitstream/handle/2454/4175/577596.pdf?sequence=
1&isAllowed=y
Zona Maker. (2012). Sensor Ultrasonico HC-SR04. Recuperado de:
https://www.zonamaker.com/arduino/modulos-sensores-y-
shields/ultrasonido-hc-sr04
Espersson, M. (2010). Vision Algorithms for ball on beam and plate . Recuperado
de:
http://lup.lub.lu.se/luur/download?func=downloadFile&recordOId=884745
8&fileOId=8859300
Pecker, E. (2010). Sensado basado en vision para el sistema Ball and Beam.
Recuperado de: http://www.sase.com.ar/2011/files/2011/02/32-
Sensado_basado_en_vision_para_control_de_Ball_Beam.pdf