Está en la página 1de 16

U NIVERSIDAD AUTÓNOMA DE Q UERÉTARO

FACULTAD DE I NGENIERÍA

I NGENIERÍA EN AUTOMATIZACIÓN

Control Avanzado

Control de posición de un motor CD con escobillas usando un


controlador PID discreto.

Práctica 3

Profesor:
Dr. Roberto Valentín Carrillo Serrano

Equipo 1
Integrantes:

Luna Ramos Javier Iván 252273 Cal. 6.5

Morales Pacheco Juan Pablo 252239 Cal. 6

Narváez González Miguel Gerardo 280528 Cal. 6.5

Ruiz Perea Juan Carlos 272217 Cal. 6

Velasquez Arredondo Marco Antonio 274907Cal. 6

21 de octubre de 2021
Índice

1. Objetivo 2

2. Marco Teórico 2

3. Materiales y Métodos 3
3.1. Equipo y materiales para la toma de mediciones . . . . . . . . . . . . . . . . . . . 3
3.2. Equipo y materiales para la representación y visualización de datos . . . . . . . . . 4
3.3. Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4. Resultados 8

5. Discusión de Resultados 9
5.1. Luna Ramos Javier Iván . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.2. Morales Pacheco Juan Pablo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.3. Narváez González Miguel Gerardo . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.4. Ruiz Perea Juan Carlos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.5. Velasquez Arredondo Marco Antonio . . . . . . . . . . . . . . . . . . . . . . . . 10

6. Conclusiones 10
6.1. Luna Ramos Javier Iván . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2. Morales Pacheco Juan Pablo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.3. Narváez González Miguel Gerardo . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.4. Ruiz Perea Juan Carlos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.5. Velasquez Arredondo Marco Antonio . . . . . . . . . . . . . . . . . . . . . . . . 11
6.6. Conclusiones del equipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Bibliografía 11

7. Anexos 12
Índice de figuras
1. Diagrama de la plataforma experimental. . . . . . . . . . . . . . . . . . . . . . . . 4
2. Gráfica generada mediante sisotool. . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Valores generados mediante sisotool. . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Esquemático del controlador PID utilizado para la simulación. . . . . . . . . . . . 7
5. Gráficas del sisotool con las ganancias finales. . . . . . . . . . . . . . . . . . . . . 8
6. Gráficas del experimento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1. Objetivo
Controlar la posición de la flecha de un motor de CD con escobillas usando un controlador PID
discreto cumpliendo condiciones de diseño especificadas por el cliente.
2. Marco Teórico
Un controlador PID es un mecanismo de control por realimentación ampliamente usado en
sistemas de control industrial. Este calcula la desviación o error entre un valor medido y un valor
deseado. La ecuación de un controlador PID es la siguiente:
Z t
de(t)
u(t) = kp e(t) + ki e(t)dt + kd (1)
0 dt
El algoritmo del control PID consiste en tres parámetros distintos: el proporcional, el integral y
el derivativo. El valor proporcional depende del error actual, el integral depende de los errores
pasados y el derivativo depende de los errores futuros. La suma de estas tres acciones es usada
para ajustar el proceso por medio de un elemento de control. Ajustando estas tres variables en el
algoritmo de control del PID, el controlador puede proveer una acción de control diseñado para los
requerimientos del proceso en específico.
En un controlador PID, la acción derivativa aporta la característica de anticipación dentro del
sistema de control.
Para esta práctica se utilizó un controlador PID con derivada de e(t) con t = kTs y adelanto de
integración rectangular de e(t), (Carrillo-Serrano, 2021):

U (z) Ts z−1 z kd z − 1
= kp + ki + + kd = kp + ki Ts + (2)
E(z) z−1 Ts z − 1 Ts z
kd
kpd = kp ; kid = ki Ts ; kdd = (3)
Ts
U (z) z z−1 kpd z(z − 1) + kid z 2 + kdd (z − 1)2
= kpd + kid + kdd = (4)
E(z) z−1 z z(z − 1)
U (z) (kpd + kid + kdd )z 2 + (−kpd − 2kdd )z + kdd
= (5)
E(z) z2 − z
U (z) (kpd + kid + kdd ) + (−kpd − 2kdd )z −1 + kdd z −2
= (6)
E(z) 1 − z −1
b0 = kpd + kid + kdd ; b1 = −kpd − 2kdd ; b2 = kdd (7)
Se sustituyen las variables anteriores en la ecuación 6:

U (z) b0 + b1 z −1 b2 z −2
= (8)
E(z) 1 − z −1

2
Se despeja U (z):

U (z)[1 − z −1 ] = E(z)[b0 + b1 z −1 + b2 z −2 ] (9)

U (z) − U (z)z −1 = b0 E(z) + b1 z −1 E(z) + b2 z −2 E(z) (10)


U (z) = z −1 U (z) + b0 E(z) + b1 z −1 E(z) + b2 z −2 E(z) (11)
u(k) = u(k − 1) + b0 e(k) + b1 e(k − 1) + b2 e(k − 2) (12)

3. Materiales y Métodos
3.1 Equipo y materiales para la toma de mediciones
Computadora DELL inspiron Intel(R) Core(TM) i5-8250U CPU @ 1.60 [GHz] 1.80 [GHz]
RAM 8.00 [GB].

Computadora AMD Sempron(tm) 140 Processor 2.70 [GHz] RAM 2.00 [GB].

1 Microcontrolador PIC16F877A.

1 Motor CD.

1 Codificador incremental de cuadratura.

1 MAX232.

1 L298N.

1 DM74LS08.

3 4N28.

4 Diodos.

Capacitores:

• 2 de 15 [pF ].
• 2 de 22 [pF ].
• 8 de 14 [µF ].

Resistencias:

• 1 de 330 [Ω].
• 2 de 1 [kΩ].
• 1 de 100 [kΩ].

Oscilador de cristal de cuarzo de 20 [M Hz].

3
3.2 Equipo y materiales para la representación y visualización de datos
Software MATLAB.

Plataforma expiremental del curso.

3.3 Métodos
Para la prueba física de nuestro controlador utilizamos la plataforma experimental de la figura
1 la cual nos sirve para controlar la posición de la flecha de un motor de corriente directa.

Figura 1: Diagrama de la plataforma experimental.

Para nuestro experimento, las condiciones de diseño fueron tr = 0.1 [s] y un sobrepaso no
mayor a S.P. = 27 [ %]. La capacidad máxima de la plataforma experimental es de 10 [V ], por lo
tanto, para no estar por encima de la capacidad máxima instalada sabemos que:
10
kp ≤ (13)
π
kp ≤ 3.183098862 (14)

4
Con ayuda de la herramienta sisotool (figura 2) de MATLAB y las condiciones de diseño, se usaron
ceros reales diferentes, se obtuvo:

kp = 3.183; ki = 10.9; kd = 0.15 (15)

Figura 2: Gráfica generada mediante sisotool.

Ahora con ayuda de MATLAB, se utilizó un script que nos ayuda a calcular rápidamente los
resultados tanto de las constantes del controlador y los valores para los coeficientes del controlador
ya discretizado. El script utiliza los valores de kp , ki , kd y Ts , que corresponde al periodo de
muestreo con un valor de Ts = 0.01 [s], para después arrojar los valores de bo , b1 y b2 , con ayuda
de las ecuaciones 3 y 7, y así poder cargarlos más facilmente a la correspondiente simulación de
Simulink, en un diagrama de bloques para el sistema continuo y otro para el sistema discreto.
Entonces obtenemos que:

b0 = 19.2920; b1 = −33.1830; b2 = 15 (16)

Los ceros reales y diferentes quedaron ubicados en los valores que se muestran en la figura 3.

5
Figura 3: Valores generados mediante sisotool.

Sin embargo, estos valores no resultaron aptos para usarlos en la plataforma experimental, por
lo que en la sesión de laboratorio se recurrió a la metodología empírica para obtener valores que se
adecuaran a la realización del experimento en la dicha plataforma.
De esta manera, los valores finales para las ganancias fueron:

kp = 3.1; ki = 4.8; kd = 0.1485 (17)

En función de estas ganancias se obtuvieron los siguientes valores para b0 , b1 y b2 fueron los
siguientes:
b0 = 17.998; b1 = −32.799; b2 = 14.850 (18)

6
Figura 4: Esquemático del controlador PID utilizado para la simulación.

Para probar los coeficientes obtenidos se construyeron diagramas de bloques en Simulink. Di-
cho diagrama se muestra en la figura 4 y representa la obtención del controlador PID de 3 maneras
distintas, la primera es de manera analógica, la segunda es por métodos numéricos y la tercera
representa la forma digital.

7
4. Resultados
Debido a la complejidad de obtener el tiempo de respuesta deseado, se nos fue dada la opor-
tunidad de diseñar para un tr = 0.11 [s] y S.P. = 27 [ %]. De la simulación realizada obtuvimos
un comportamiento que cumplió con los requisitos. En la primera gráfica se muestra el comporta-
miento de la planta en el tiempo continuo y en la tercer gráfica el comportamiento de la misma pero
discretizado. En base a estas dos gráficas podemos comparar los resultados obtenidos al discretizar
el controlador PID.

Figura 5: Gráficas del sisotool con las ganancias finales.

En la primera gráfica se alcanza el tiempo de respuesta deseado en 0.12 [s] aproximadamente


y el sobrepaso es de un 26.13 [ %]. Por otro lado, en la tercera gráfica el tiempo de respuesta fue
menor, siendo de 0.109 [s], pero el sobrepaso aumentó a un 27 [ %]. Este efecto se produjo como
consecuencia de la discretización del controlador PID, en algunos casos podrá ser insignificante,
mientras que para nuestra aplicación habrá que tener precaución con este fenómeno.
Una vez que corroboramos y cumplimos con las expectativas de diseño de manera simulada,
el siguiente paso fue implementar el controlador en la plataforma experimental. La gráfica que se
muestra a continuación representa los resultados obtenidos.

8
Figura 6: Gráficas del experimento.

Los valores obtenidos en la gráfica de la figura 6 son mejores de los que se esperaba obtener en
base a la simulación previamente hecha puesto que esta nos índicaba que estabamos prácticamente
al borde de los requisitos, sin embargo, en las gráficas de la figura 6 se observan valores de tr =
0.1098 [s] y un sobrepaso del 18.98 [ %] con lo cual estos valores son prácticamente sobrados
y mucho mejor de lo que esperabamos. Estos cambios pueden ser debido a variaciones en los
parámetros de la planta.
5. Discusión de Resultados
5.1 Luna Ramos Javier Iván
Los resultados obtenidos mediante el sisotool sirvieron unicamente como referencia para nues-
tra práctica puesto que después de realizar un análisis en clase con el profesor se llegó a la conclu-
sión de que no eran los valores correctos o cuando menos ideales para las ganancias del controlador,
por ende, se recurrió al método empírico y de esta forma logramos obtener valores para las ganan-
cias que si bien nos permitieron lograr el objetivo de la práctica quedamos un poco sobrados como
se puede observar en la figura 6.
5.2 Morales Pacheco Juan Pablo
Para esta práctica aprendimos a implementar un controlador PID de manera digital, la comple-
jidad empezó desde que nosotros tuvimos que usar herramientas en MATLAB para encontrar las

9
ganancias y estas nos permitan cumplir con las condiciones especificadas al inicio de la práctica.
La mejor forma para encontrar las ganancias fue fijar kp para obtener un valor inicial de voltaje no
mayor al máximo y modificar ki y kd de tal forma que nos acerquemos al tr y al S.P. deseados.
5.3 Narváez González Miguel Gerardo
En la sección de métodos hicimos los cálculos correspondientes para las ganancias del con-
trolador PID, sin embargo, estos valores de ganancia tuvieron que ser reajustados una vez que se
usó el PID discretizado por integración rectangular. Lo interesante fue ver el adelanto que sufrió la
planta cuando se implementó el controlador en la plataforma experimental, es de tenerse en cuenta
este efecto para futuros diseños.
5.4 Ruiz Perea Juan Carlos
Para poder realizar un correcto diseño de un PID discreto se utilizó el software MATLAB,
usando los valores dados por el profesor de tr y de S.P. Sin embargo, fue necesario obtener los
valores ideales de ki y kd para que el controlador estuviera bien sintonizado. Para lograr esto se
propuso un valor que estuviera fijo en kp mientras se modificaban los valores de las variables ki y
kd , procurando no exceder los valores iniciales.
5.5 Velasquez Arredondo Marco Antonio
Al utilizar la herramienta de sisotool en MATLAB obtuvimos los valores de kp , ki y kd que
funcionan tanto para el sistema continuo, el sistema de control por métodos numéricos y el sistema
discreto, recalcando que se necesitan algunos cálculos para llegar a los coeficientes de cada sistema.
Sin embargo tuvimos que hacer modificaciones a nuestros valores de forma empírica para lograr
las condiciones de diseño propuesta.
6. Conclusiones
6.1 Luna Ramos Javier Iván
El poder diseñar e implementar un controlador es algo muy interesante puesto que se suele estar
acostumbrado a no salir de lo teórico, sin embargo, con la aplicación en la plataforma experimental
se pudo observar como funciona realmente un controlador y de lo que se puede llegar a lograr con
esta herramienta.
6.2 Morales Pacheco Juan Pablo
El aprender este tipo de implementaciones de controladores es bastante buena ya que hablando
de código se reduce a básicamente una línea en el microcontrolador comparándolo con la forma
que antes usábamos por métodos numéricos facilita bastante la ejecución del programa. Pienso que
este tema tiene un gran peso en el ambiente laboral ya que en una empresa buscaran aprovechar al
máximo el tiempo por lo que si el microcontrolador trabaja de una manera más óptima se podría
ver reflejado.

10
6.3 Narváez González Miguel Gerardo
Desde prácticas pasadas fuimos introducidos a la transformada z, pero no fue hasta esta, donde
la aplicamos al discretizar un controlador PID. Esta maniobra hace mucho más fácil la implemen-
tación en sistemas digitales, e incluso la longitud del código disminuye. Poseer esta herramienta es
muy útil para nosotros que trabajamos con sistemas digitales.
6.4 Ruiz Perea Juan Carlos
Con el desarrollo de esta práctica aprendí que las ecuaciones o funcionaes implementadas en un
sistema pueden no funcionar del todo correctamente por que en casos así, se tendrá que buscar una
modificación que no altere valores deseados pero que proporcione un adecuado funcionamiento.
6.5 Velasquez Arredondo Marco Antonio
En esta práctica vimos una forma de discretizar un controlador PID con ayuda de la transfor-
mada z. Este método nos ayuda a tener un controlador programable en casi cualquier lenguaje de
programación y así tener sistemas discretos y conocerlos como se llega a ellos. Es muy bueno co-
nocer este tipo de métodos para la discretización, ya que hoy en día la mayoría de los controladores
son totalmente digitales. Cabe mencionar que implementar un controlador discretizado, como el de
esta práctica, en algún dispositivo programable tal como un microcontrolador es más práctico.
6.6 Conclusiones del equipo
La transformada z fue de gran utilidad al discretizar un controlador PID, ya que comparandolo
con el controlado realizado mediante métodos numéricos este se reduce en cuanto líneas de código
y es más sencillo de comprender e implementar, al ser un método algebraico relativamente básico
es muy útil y aplicable en diversas áreas o proyectos.

Referencias
Carrillo-Serrano, R. V. 2021. Material didáctico control avanzado. Notas de clase.

11
7. Anexos
Código del controlador

#include <iostream>
#include <string.h>
#include <dos.h>
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>

#define Ts 0.01
#define ppr 400.0
#define pi_ 3.141593

#define kp 3.1
#define ki 4.8
#define kd 0.1485

#define fte 11.5


#define cpH 1.5

unsigned char flagcom=0,flagfile=0,signo_sal,pwm; //de 8 bits


unsigned short int pos; //de 16 bits
float r=pi_,y=0,e=0,e_1=0,e_2=0,u=0,u_1=0,pwmf,t=0,esc=pi_/(2*ppr),iTs=1/Ts,VM=f
float kpd=kp,kid=Ts*ki,kdd=kd/Ts,b0=kpd+kid+kdd,b1=-kpd-2*kdd,b2=kdd;

using namespace std;


int main()
{
HANDLE h; /*handler, sera el descriptor del puerto*/
DCB dcb; /*estructura de configuracion*/
DWORD dwEventMask; /*mascara de eventos*/
FILE *fp;

if((fp=fopen("MONIT.txt","w+"))==NULL)
{
printf("No se puede abrir el archivo.\n");
exit(1);

12
}

/*abrimos el puerto*/
h=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

if(h == INVALID_HANDLE_VALUE)
{
/*ocurrio un error al intentar abrir el puerto*/
}

/*obtenemos la configuracion actual*/


if(!GetCommState(h, &dcb))
{
/*error: no se puede obtener la configuracion*/
}

/*Configuramos el puerto*/
dcb.BaudRate = 115200;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fBinary = TRUE;
dcb.fParity = TRUE;

/* Establecemos la nueva configuracion */


if(!SetCommState(h, &dcb))
{
/* Error al configurar el puerto */
}

DWORD n;
char enviar;
int recibido;

/* Para que WaitCommEvent espere el evento RXCHAR */


SetCommMask(h, EV_RXCHAR);
while(1)
{
recibido=0;

13
/* Enviamos... */

/* De la llamada a WaitCommEvent solo se retorna cuando ocurra51.


* el evento seteado con SetCommMask */
// WaitCommEvent(h, &dwEventMask, NULL);
/* Recibimos algun dato!*/
while(1)
{
ReadFile(h, &recibido, 1/* leemos un byte */, &n, NULL);
if(!n)
break;
else
{
if(flagcom!=0)
flagcom++;
if((recibido==0xAA)&&(flagcom==0))
{
pos=0;
flagcom=1;
}
if(flagcom==2)
{
pos=recibido;
pos=pos<<8;
}
if(flagcom==3)
{
pos=pos+recibido;
y=(signed short int)pos;
y=esc*y;
e=r-y;
//PID:
u=u_1+b0*e+b1*e_1+b2*e_2; //PID digital
e_2=e_1;
e_1=e;
u_1=u;
//u=2.0*sin(1.0*t);
if(u>VM)
u=VM;
if(u<-VM)
u=-VM;

14
pwmf=u;

//escalamiento de salida a 7 bits más 1 bit de signo


pwmf=escs*pwmf;
pwm=(unsigned char)fabs(pwmf);

if(pwmf<0)
pwm=pwm+128;

//mandando byte con la señal de control////////////////////////////////


enviar=pwm;
if(!WriteFile(h, &enviar/*puntero al buffer*/, 1/* 1 byte*/,
{
/* Error al enviar */
}
////////////////////////////////////////////////////////////////////

//Imprimiendo en pantalla
printf("%3.3f\t%3.3f\t%3.3f\t%3.3f\t%3.3f\n",t,r,y,u,e);

/*escribir algunos datos en el archivo*/


fprintf(fp,"%3.3f\t%3.3f\t%3.3f\t%3.3f\t%3.3f\n",t,r,y,u,e);

flagcom=0;
t=t+Ts;
}
}//cierre del else
//printf("%c",recibido);
//cout << recibido; /* mostramos en pantalla */
}//CIERRE WHILE()
}//CIERRE WHILE()
fclose(fp);
return 0;
}

15

También podría gustarte