Вы находитесь на странице: 1из 10

Lab. No.

6 – Implementación sistema de control PID 1


UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
FACULTAD DE INGENIERIA
CONTROL DIGITAL

LABORATORIO No. 6 – Implementación sistema de control PID


INSTRUCCIONES
1- Las técnicas y herramientas didácticas que se empleen en los laboratorios tiene como finalidad el refuerzo,
la conformación y ejecución de los diferentes aspectos que hacen parte de la asignatura. De forma que el
alumno desarrolle un pensamiento flexible, dinámico, audaz, independiente, persistente, divergente y
original en su formación como profesional.

OBJETIVOS

 Simular y analizar el comportamiento de un sistema de control PID discreto


 Programar e implementar un control PID en la unidad didáctica IPA1 a partir de las funciones de
transferencia obtenidas experimental anteriormente.

REFERENCIAS

 Andrew Knight Basics of MATLAB and Beyond. Chapman and Hall/CRC; 1 edition, 1999.
 Fernandez del Busto y Ezeta, Ricardo., "Análisis y diseño de sistemas de control digital", Mc Graw
Hill, 2013, ISBN: 978-607-15-0773-0
 http://www.mathworks.com

SESIÓN SIMULACIÓN
INTRODUCCIÓN

Un controlador Proporcional-Integral-Derivativo continuo o analógico tiene como respuesta de salida la


siguiente ecuación

Donde: K = Ganancia proporcional


Ti = Tiempo integral o de ajuste
Td = tiempo derivativo o de adelanto
Discretizando la anterior ecuación, se deben reemplazar los términos continuos a discretos como se indica a
continuación :

m(t) → m(kT),
e(t) → e(kT),

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 2
Que quedará de la siguiente forma:

(2)

Ahora se tiene que encontrar la Transformada Z - M(z). De la anterior ecuación:


La Transformada Z de la sumatoria se obtiene aplicando la propiedad de la suma de funciones , si :

Reemplazando en (2) :

o sea que :

Por tanto la función de transferencia de un controlador PID discreto es :

Cuyo diagrama en bloques es el siguiente:

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 3

El diagrama de un sistema con un controlador PID se encuentra mostrado en la siguiente figura:

Figura 1: Diagrama de un sistema con un controlador PID

Ejemplo 1:

Encontrar la función de transferencia en lazo abierto y lazo cerrado del sistema dado, si el controlador PID
tiene como parámetros Kp=1, Ki = 0.2 y Kd = 0.5. La planta tiene una función de transferencia igual a :

PROGRAMA EN MATLAB
% OBTENER FUNCION DE TRANSFERENCIA
% tiempo de muestreo: T = 1 seg
T = 1;
% parámetros del controlador PID
Kp=1; Ki = 0.2; Kd = 0.5;
% Función de transferencia de la planta
Gps = zpk([ ], [0 -2], 1)
% Función de transferencia de planta + retenedor
Gz =c2d(Gps, T,'zoh')
Gz = tf (Gz)
% Función de transferencia del controlador PID

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 4
GPID =tf([ Kp+Ki+Kd -(Kp +2*Kd) Kd], [1 -1], T)
% FUNCION DE TRANSFERENCIA DEL SISTEMA EN LAZO ABIERTO
Flazo_abierto = GPID*Gz
% FUNCION DE TRANSFERENCIA DEL SISTEMA EN LAZO CERRADO
Flazo_cerrado =feedback(Flazo_abierto,1)

Ejemplo 2:

El tiempo de muestreo es T = 1 seg, retroalimentación unitaria y la funci_on de transferencia de la

planta es:
Simulaci_on del PID anal_ogico considerando K = 1:1, Ti = 5:5, y Td = 0:2

Abrir MATLAB/SIMULINK y construya el siguiente diagrama para simular el PID


anal_ogico

Figure 2: Diagrama Simulink de un sistema con controlador PID

Coloque los par_ametros del PID anal_ogico

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 5

Figure 3: Par_ametros del controlador PID

Bosqueje los siguiente diagrama en MATLAB/SIMULINK para simular un sistema


con un controlador PID discretizado de forma posicional.

Figure 4: Sistemas con PID de forma posicional

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 6

Con_gure los blogues de la funci_on de transferencia discreta para que act_ue como
un controlador PID discreto de forma Posicional, tal como se muestra en la _gura
5.

Figure 5: Par_ametros del PID posicional regular

Cree un script con las variables especi_cadas previamente y encuentre mediante


c_alculos el valor de las variables a utilizarse en los diferentes tipos de controladores

Figure 6: C_odigo en el script de Matlab

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 7

Gra_que las variables obtenidas con comandos tal como se muestra en la _gura 6.

Figure 7: C_odigo para gra_car las variables en Matlab

SESIÓN EXPERIMENTAL
INTRODUCCIÓN

Es importante tener presente las etapas y montajes ya desarrollado en las anteriores sesiones experimentales
de los laboratorios, porque a medida que el curso se vaya ejecutando también se va ir desarrollando el
sistema de control discreto del flujo volumétrico en un sistema de tanques en serie mediante el uso de un
arduino, según figura 1, diagrama del sistema de control SISO discreto.

Figura 1. Sistema de control discreto del flujo volumétrico en tanques serie para la unidad IPA1

Desarrollo para esta práctica Lab 6.

 Ya en este punto, se debe tener programado en un solo código de programación del arduino:
 Subrutina para la adquisición de las dos (2) señales de voltaje del referencia R(s) por el canal A0 y la
retroalimentación Vretro(s) por el canal A1. De forma que se adquieran, se muestrean y se
almacenen en los respectivos registros de memoria del propio arduino uno.

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 8
 Subrutina para generar la señal PWM por un canal de salida puede ser D3.
 Las respectivas funciones de transferencia discretizadas de la planta (sistema IPA), el sensor de flujo
y el circuito conversor (PWM ---- Va).
 Análisis en matlab (modelamiento SIN y CON controlador sintonizado, de forma que se detalle los
parámetros de estudio en régimen transitorio y permanente en tiempo discreto del sistema SISO.)

 A continuación, se presenta la subrutina que sustenta la programación de un controlador PID en un


dispositivo Arduino:

Tenemos el siguiente código:

/* Variables utilizadas en el controlador PID. */


unsigned long lastTime;
double Input, Output, Setpoint;
double errSum, lastErr;
double kp, ki, kd;
void Compute()
{
/* Cuanto tiempo pasó desde el último cálculo. */
unsigned long now = millis();
double timeChange = (double)(now - lastTime);
/* Calculamos todas las variables de error. */
double error = Setpoint - Input;
errSum += (error * timeChange);
double dErr = (error - lastErr) / timeChange;
/* Calculamos la función de salida del PID. */
Output = kp * error + ki * errSum + kd * dErr;

/* Guardamos el valor de algunas variables para el próximo ciclo de cálculo. */


lastErr = error;
lastTime = now;
}

/* Establecemos los valores de las constantes para la sintonización. */


void SetTunings(double Kp, double Ki, double Kd)
{
kp = Kp;
ki = Ki;
kd = Kd;
}

El programa anterior funciona correctamente, pero tiene limitaciones en cuanto a su aplicación a un sistema
real. Para que se comporte como un PID de nivel industrial, hay que tener en cuenta otros parámetros; el
algoritmo del PID funciona mejor si se ejecuta a intervalos regulares, si se incorpora el concepto del tiempo
dentro del PID, se pueden llegar a simplificar los cálculos.

El problema:

Los PID principiantes, están diseñados para ejecutarse a periodos irregulares, esto puede traer 2 problemas:
- Se tiene un comportamiento inconsistente del PID, debido a que en ocaciones se lo ejecuta regularmente y a
veces no.
- Hay que realizar operaciones matemáticas extras para calcular los términos correspondientes a la parte
derivada e integral del PID, ya que ambos son dependientes del tiempo.

La solución:

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 9
Hay que asegurarse que la función que ejecuta el PID lo haga regularmente. Basado en un tiempo de
ejecución predeterminado, el PID decide si debe hacer cálculos o retornar de la función. Una vez que nos
aseguramos que el PID se ejecuta a intervalos regulares, los cálculos correspondientes a la parte derivada e
integral se simplifican.

// Variables utilizadas en el controlador PID.


unsigned long lastTime;
double Input, Output, Setpoint;
double errSum, lastErr;
double kp, ki, kd;
int SampleTime = 1000; // Seteamos el tiempo de muestreo en 1 segundo.
void Compute()
{
unsigned long now = millis();
int timeChange = (now - lastTime);
// Determina si hay que ejecutar el PID o retornar de la función.
if(timeChange>=SampleTime)
{
// Calcula todas las variables de error.
double error = Setpoint - Input;
errSum += error;
double dErr = (error - lastErr);
// Calculamos la función de salida del PID.
Output = kp * error + ki * errSum + kd * dErr;
// Guardamos el valor de algunas variables para el próximo ciclo de cálculo.
lastErr = error;
lastTime = now;
}
}
/* Establecemos los valores de las constantes para la sintonización.
Debido a que ahora sabemos que el tiempo entre muestras es constante,
no hace falta multiplicar una y otra vez por el cambio de tiempo; podemos
ajustar las constantes Ki y Kd, obteniendose un resultado matemático
equivalente
pero más eficiente que en la primera versión de la función. */
void SetTunings(double Kp, double Ki, double Kd)
{
double SampleTimeInSec = ((double)SampleTime)/1000;
kp = Kp;
ki = Ki * SampleTimeInSec;
kd = Kd / SampleTimeInSec;
}
void SetSampleTime(int NewSampleTime)
{
if (NewSampleTime > 0)
{
/* si el usuario decide cambiar el tiempo de muestreo durante el
funcionamiento, Ki y Kd tendrán
que ajustarse para reflejar este cambio. */
double ratio = (double)NewSampleTime / (double)SampleTime;
ki *= ratio;
kd /= ratio;
SampleTime = (unsigned long)NewSampleTime; }}

Los resultados:

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA


Lab. No.6 – Implementación sistema de control PID 10

- Independientemente de cuán frecuente es llamada la función para calcular el PID, el algoritmo de control
será evaluado a tiempos regulares.
- Debido la expresión (int timeChange = (now - lastTime);) no importa cuado millis() se hace
cero nuevamente, ya que al tiempo actual, se le resta el tiempo transcurrido con anterioridad.
- Como el tiempo de muestreo ahora es constante, no necesitamos calcular permanentemente las constantes
de sintonización. Con lo cuál nos ahorramos cálculos cada vez que procesamos el PID.
- Tener en cuenta que es posible mejorar la gestión de los tiempos de muestreos mediante interrupciones,
pero queda a cargo de usted la implementación y prueba de este concepto.

Control Digital IE. PhD. FRANCISCO E. MORENO GARCIA

Вам также может понравиться