Está en la página 1de 13

MODELADO EN MATLAB UTILIZANDO UN CONTROLADOR PI

Objetivos:
Hallar el modelo matemtico del sistema, empleando las herramientas de MATLAB
aplicar el controlador PI
Convertir el modelo matemtico en tiempo continuo a tiempo discreto
Implementarlo en un microcontrolador, (se trabaj con la serie 18F45xx)
Para realizar encontrar un modelo matemtico de un sistema se requiere por lo menos una
variable a controlar: un nuestro caso es la temperatura. Para ello se consider lo siguiente:

422 muestras.
Fuentes de alimentacin 11.5 V.
Los datos se adquirieron cada 5 segundos.

Como se har con la ayuda del software de MATLAB, se empezar por introducir los datos
considerados en forma de vector.
>> T = [28.3157 28.3157 28.3157 28.3157 ... 30.7567 30.7567 33.1977 33.1977];
>> V = 11.5*ones(size(T));
>> t = (0:5:2105);
>> plot(t,T,'k')
>> ylabel('Temperatura')
>> xlabel('Tiempo')
>> ylabel('Temperatura')
>> title('grafica del comportamiento del horno')

En la figura anterior se puede observar el comportamiento del sistema con respecto al tiempo.
A continuacin se emplear la herramienta indent de MATLAB.

>> ident

Aparecer la ventana principal daremos clic Import data >> Time domain data, nos
aparecer otra ventana en la cual solo modificaremos los siguientes datos:
1. Workspace variable
Input: v
Output: T
2. Data information
Data name: horno
Starting time: 0
Sampling interval: 5
3. Input properties
4. Cannel names
5. Physical units or variables
6. Notes
Despus importamos y cerramos la ventana. Y si queremos ver el comportamiento de
modelo con respecto al tiempo tenemos:

La grafica anterior fue graficado con los datos que adquirimos, ahora precederemos hacer el
modelado, para ello aremos clic en: estmate >> process models
Considerando que el sistema es de primer orden, y que el tiempo en retardos es muy
mequeo deseleccionaremos la opcin de delay, y le damos estimular. No aparecern dos
valores la k y tp1.

Tiene opciones de la cual daremos que grafique la de adquisicin de datos con la del
modelado y tenemos la siguiente grafica (model output).

Ya tenemos el modelo, la cual quedo de la siguiente forma:

( )

introducimos esta funcin en MATLAB, para obtener su compensador.


>> H = tf(3.146,[3995.3 , 1])

Una vez teniendo el modelado, se realizara el compensador que en donde se aplicara el


control PID, la herramienta que se utilizara es sisotool, para ello tecleamos:
>> sisotoo

l
A esta ventana daremos clic en: System Data la cual abrir una ventana ms en donde
daremos clic en Browse de la nueva ventana seleccionamos Workspace, la letra H, luego
damos import y por ultimo close.
De la ventana principal de sositool aremos clic en la pestaa Automated Tuning, aparecer
una caja de texto desplegable, y seleccionaremos PID Tuning.

De esta ventana, al revisar el modelado se observ que no se requiere la parte derivativa, por
lo tanto se seleccionar la opcin PI y daremos clic en la pestaa Update Compensador y listo.
Ya tenemos el compensador.
La funcin queda de la siguiente forma: ( )

, introducimos esta funcin

en matlab para pasarlo al dominio de la frecuencia.


>> H=tf([0.153192,0.000127],[1,0]);
>> hd=c2d(H,1,'Tustin');
( )

Lo que sigue es ordenar la ecuacin de tal forma que quede en trminos de z-1

( )
( )

( )

( )
( )

( )
( )

( )

( )

( )

Aplicando transformada inversa tenemos:

Por lo tanto el modelo matemtico del sistema expresado en tiempo discreto es:

Pero si lo queremos es la expresin en trminos de ganancia se emplear la herramienta


simulink.
Simulink -> contiuous -> PID Controller
Simulink -> commonly used blocks -> sum
Simulink -> commonly used blocks -> scope
Simulink -> commonly used blocks -> constant
Simulink -> continuous -> transfer Fcn

Diagrama a bloque del sistema

Comportamiento del diagrama de bloque anterior

Incorporandole el controlador PI, el sistema quedaria de la siguiente manera:

Para modificar las ganancias de nuestro sistema damos doble clic sobre el icono de PI y nos
aparecer la siguiente ventana: a la ventana actual seleccionamos el tipo de controlador la cual
ser PI y damos clic en la pestaa tune..

Si lo queremos ms rpido entonces nos atenemos a un sobre tiro pero igual veremos
que tanto seria.

Por lo tanto nos queedaremos con:


P = 2.9345
Ki = 0.0058

Y el modelo matemtico a representar seria el siguiente:(el procedimiento matemtico est en


el anexo II).

Una vez teniendo el modelo matemtico en tiempo discreto, se procede a la implementacin


en el microcontrolador, para ello se considerara lo siguiente:
1.- Modelo a utilizar:
2.- seal analgica 10 bits
3.- seal de salida PWM
4.- seal de referencia.

U[n]
U[n-1]
E[n]
E[n-1]

Terminales a usar del microcontrolador


Terminal de uc
16
2
3
5

seal actual
seal anterior
error actual
error anterior

funcin
PWM
Seal del lm35
Temperatura a alcanzar
Seal de referencia

El programa en CCP quedara de la siguiente forma:

include <18f4520.h>

CCP_1 = 2000;

#fuses HS, NOWDT, NOMCLR,

setup_timer_1(T1_INTERNAL |

CCP2C1

T1_DIV_BY_1);

#device adc = 10
#use delay(clock = 8MHz)

setup_ccp1(CCP_COMPARE_RESET_TIM

#define c1 0.1533

ER);

#define c2 0.1531

enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);

float tem, ref, err_act=0,err_ant,

while(TRUE) { }

se_act=0, se_ant;

void main() {

#INT_CCP1

setup_adc_ports(AN0_TO_AN1 |
VSS_VREF);

void reloj() {
set_adc_channel(0); delay_us(25);

setup_adc(ADC_CLOCK_INTERNAL);

tem = read_adc()/10.24;

setup_timer_2(T2_DIV_BY_1,255,1);

set_adc_channel(1); delay_us(25);

setup_ccp2(CCP_PWM);

ref = read_adc()/10.24;

se_act = (se_act < 0) ? 0 : ((se_act >


err_ant = err_act;

1023) ? 1023 : se_act);

err_act = ref -tem;

set_pwm2_duty((int16) se_act);

se_ant = se_act;

se_act = se_ant + c1*err_act +


c2*err_ant;

Pero si lo que queremos es emplear la formula general para poder introducir kp y ki, se
empleara el siguiente cdigo.

#include <18f4520.h>
#fuses HS, NOWDT, CCP2C1
#device adc = 10
#use delay(clock = 8MHz)
#use standard_io(e)
#define kp 100
#define ki 50
#define ts 0.001

float tem,ref,err_act=0,err_ant,se_act=0,se_ant;

void main(){
setup_adc_ports(AN0 | VSS_VREF);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_2(T2_DIV_BY_1,255,1);
port_b_pullups(TRUE);
setup_ccp2(CCP_PWM);
CCP_1 = 1000;
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);

setup_ccp1(CCP_COMPARE_RESET_TIMER);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);

while(TRUE){ };
}

#INT_CCP1
void reloj() {
set_adc_channel(0); delay_us(25);
tem = read_adc()/10.24;
set_adc_channel(1); delay_us(25);
ref = read_adc()/10.24;

err_ant = err_act;
err_act = ref - tem;
se_ant = se_act;
se_act = se_ant + ((kp+(ts*ki/2))*err_act) + (((ts*ki/2)-kp)*err_ant);
se_act = (se_act < 0.0) ? 0.0 : ((se_act > 1023.0) ? 1023.0 : se_act);{
set_pwm2_duty((int16) se_act); }
}

Anexo I Datos obtenidos de la adquisicin

28.3157 28.3157 28.3157 28.3157 27.3393 27.3393 27.3393 27.3393 27.8275 27.8275 27.3393
27.3393 27.3393 27.3393 27.8275 27.8275 28.3157 28.3157 27.3393 27.3393 27.8275 27.8275
27.8275 27.8275 28.8039 28.8039 28.3157 28.3157 28.8039 28.8039 28.3157 28.3157 27.8275
27.8275 28.3157 28.3157 27.8275 27.8275 28.3157 28.3157 29.2921 29.2921 27.8275 27.8275
27.8275 27.8275 27.8275 27.8275 28.8039 28.8039 28.3157 28.3157 28.8039 28.8039 28.8039
28.8039 27.8275 27.8275 28.8039 28.8039 27.8275 27.8275 28.8039 28.8039 28.3157 28.3157
29.2921 29.2921 28.3157 28.3157 28.8039 28.8039 27.8275 27.8275 28.3157 28.3157 28.8039
28.8039 27.8275 27.8275 28.3157 28.3157 28.8039 28.8039 28.3157 28.3157 28.8039 28.8039
28.3157 28.3157 29.2921 29.2921 28.3157 28.3157 28.8039 28.8039 28.8039 28.8039 28.3157

28.3157 28.8039 28.8039 28.8039 28.8039 28.8039 28.8039 28.8039 28.8039 29.2921 29.2921
28.8039 28.8039 28.3157 28.3157 28.8039 28.8039 28.8039 28.8039 28.8039 28.8039 29.7803
29.7803 28.8039 28.8039 27.8275 27.8275 28.8039 28.8039 29.2921 29.2921 29.2921 29.2921
29.7803 29.7803 29.2921 29.2921 28.8039 28.8039 28.8039 28.8039 29.2921 29.292 28.8039
28.8039 29.2921 29.2921 28.8039 28.8039 29.7803 29.7803 30.268 30.2685 29.7803 29.7803
30.2685 30.2685 28.8039 28.8039 29.7803 29.7803 29.780 29.7803 29.2921 29.2921 28.8039
28.8039 29.7803 29.7803 29.7803 29.7803 29.7803 29.7803 29.2921 29.2921 29.7803 29.7803
30.2685 30.2685 29.2921 29.2921 28.8039 28.8039 29.2921 29.2921 29.2921 29.2921 31.7331
31.7331 31.7331 31.7331 29.2921 29.2921 28.8039 28.8039 29.7803 29.7803 29.2921 29.2921
29.7803 29.7803 29.7803 29.7803 29.7803 29.7803 30.2685 30.2685 29.2921 29.2921 30.2685
30.2685 29.7803 29.7803 28.8039 28.8039 29.7803 29.7803 29.7803 29.7803 29.7803 29.7803
29.2921 29.2921 29.7803 29.7803 29.7803 29.7803 29.2921 29.2921 30.268 30.2685 29.7803
29.7803 29.7803 29.7803 29.2921 29.2921 29.7803 29.7803 29.7803 29.7803 29.7803 29.7803
30.2685 30.2685 30.2685 30.2685 29.7803 29.7803 29.7803 29.7803 30.2685 30.2685 29.7803
29.7803 30.2685 30.2685 29.7803 29.7803 29.7803 29.7803 30.2685 30.2685 29.2921 29.2921
29.2921 29.2921 29.7803 29.7803 29.7803 29.7803 29.7803 29.7803 29.7803 29.7803 29.2921
29.2921 29.7803 29.7803 30.7567 30.7567 30.2685 30.2685 29.2921 29.2921 30.2685 30.2685
30.7567 30.7567 30.2685 30.2685 29.7803 29.7803 30.7567 30.7567 30.2685 30.268 30.7567
30.7567 29.7803 29.7803 29.7803 29.7803 30.7567 30.7567 30.7567 30.7567 30.2685 30.2685
29.7803 29.7803 30.7567 30.7567 30.7567 30.7567 30.7567 30.7567 30.7567 30.7567 30.7567
30.7567 30.2685 30.2685 31.2449 31.2449 30.2685 30.2685 31.2449 31.2449 31.2449 31.2449
30.2685 30.2685 30.2685 30.2685 30.7567 30.7567 30.7567 30.7567 30.7567 30.7567 31.2449
31.2449 31.2449 31.2449 30.2685 30.2685 31.2449 31.2449 31.2449 31.2449 30.7567 30.7567
31.2449 31.2449 31.2449 31.2449 30.7567 30.7567 30.7567 30.7567 30.7567 30.7567 31.2449
31.2449 31.7331 31.7331 31.2449 31.2449 31.2449 31.2449 30.7567 30.7567 31.2449 31.2449
31.2449 31.2449 30.7567 30.7567 31.2449 31.2449 30.7567 30.7567 30.7567 30.7567 31.2449
31.2449 30.7567 30.7567 31.2449 31.2449 31.7331 31.7331 31.2449 31.2449 30.7567 30.7567
30.7567 30.7567 30.7567 30.7567 30.2685 30.2685 30.7567 30.7567 31.2449 31.2449 31.7331
31.7331 30.2685 30.2685 31.2449 31.2449 30.2685 30.2685 30.7567 30.7567 30.7567 30.7567
30.7567 30.7567 33.1977 33.1977

Anexo II Obtencin de la formula general:

La frmula general para el controlador PI es: ( )

Aplicando la transformada de laplace, tenemos: ( )


Aplicando la ecuacin bilineal:
( )

, tenemos:
(

)
(

(
)

( )
( ( )
( )
(

( )
( )
(

(
)

( )
(

( )

( )
) ( )

)
(

( )

) ( )

( )

( )

) ( )

Aplicando transformada inversa, tenemos:


(

Simplificando y dejando en trminos de u(n), tenemos:


(

También podría gustarte