Sunteți pe pagina 1din 16

Control de Velocidad Digital PID de un Motor DC de Escobillas

Autor: Ing. Carlos Narvez Universidad de Oriente email: cnarvaez@udo.edu.ve

Introduccin
En el presente trabajo se desarrolla un Control de velocidad en lazo cerrado de un motor DC de Escobillas aplicando el conocido algoritmo de control PID. El objetivo es mantener constante la velocidad ante variaciones de la carga (perturbaciones), de manera automtica. El sistema se realiz usando un motor DC de escobillas extrado de una impresora de inyeccin de tinta, el cual es controlado por un H-bridge basado en un chip LMD18200 que permite usando la tcnica PWM variar la velocidad del motor y su sentido de giro. Como unidad de realimentacin, se utiliza un tacmetro construido como se detalla ms adelante y todo el sistema es controlado por un microcontrolador PIC18F452.

Sistema de Control de Lazo Cerrado


Tal como se muestra en la fig. 1, el sistema consta de un pequeo motor DC de escobillas, cuya seccin de potencia la constituye un H-Bridge que permite, por un lado, definir la direccin de giro y por otro, controlar la velocidad con la aplicacin de una seal PWM. El lazo de control es cerrado usando un tacmetro construido con un disco de acetato codificado colocado en el eje del motor y el cual se hace pasar por un foto interruptor, para producir as pulsos cuya cantidad por unidad de tiempo es proporcional a la velocidad de giro del motor.

Fig. 1 Control de Lazo Cerrado

Modulacin de Ancho de Pulso (PWM)


Es el mecanismo utilizado para variar la velocidad de un motor DC de escobillas. Consiste en variar la anchura de pulso o el duty cycle en un ciclo de PWM de manera de variar el average de la tensin DC aplicada al motor, tal como muestra la fig. 2.

Carlos A. Narvez V, 2008

Fig. 2 Modulacin de Ancho de Pulso PWM es una manera eficiente, para simular un rango de valores anlogos usando circuitos digitales. Switchando rpidamente entre cero voltios y el voltaje nominal del motor, se obtiene un valor promedio comprendido entre esos dos lmites. Tres seales son presentadas en la figura arriba, todas tienen la misma frecuencia, pero el ancho de los pulsos son diferentes. Variando la duracin del tiempo on, el motor puede ver un promedio de cualquier valor entre 0V y +V. Frecuencias recomendadas para PWM estn entre 20 y 30 Khz.

H-Bridge
El H-Bridge es bsicamente un mecanismo para hacer girar un motor DC en direccin hacia adelante y en reversa. Un H-Bridge tpico de motores DC de escobillas es el integrado LMD18200 de Nacional Semiconductors el cual puede suministrar continuamente hasta 3 Amp
VS

.1uf U1 6 3 5 4 7 8 Vs Dir PWM Brake Ground Sense B1 Out1 Out2 B2 TFO 1 2 10 11 9

10nf 1 +

A
10nf MOTOR DC 2

LMD18200

Fig. 3 H-Brigde LMD18200

Carlos A. Narvez V, 2008

y opera con suministro de voltaje de hasta 55 Voltios. Tiene proteccin contra sobrecarga, sus entradas son compatibles TTL y CMOS. Usa PWM para regular la velocidad del motor y tienes pines para las funciones de: freno, direccin, sensor de corriente y seal de advertencia de temperatura. El pin sense sirve de sensor de corriente de salida. Tiene una sensibilidad de 377 microamperio por amperio de corriente de salida. Usando una resistencia de 2.7K se tiene 0.999 Voltios por amperio de salida. El pin TOF es una seal de advertencia de temperatura. Es una salida colector abierto que se vuelve 0 a 145 grados centgrados. El pin Brake realiza un freno de emergencia del motor cuando este pin pasa a 1y el pin PWM tambin. El LMD18200 puede manejar seales PWM del tipo Signo-Magnitud y Locked-antiphase las cuales se describen a continuacin.

PWM Locked-antiphase
La Seal PWM de tipo Locked-antiphase, consiste en un nica seal de anchura de pulso variable en la cual se codifica tanto la informacin de direccin como la de amplitud. El 50% de la anchura de pulso representa cero. Valores por debajo del 50% representan direccin reversa y valores por encima del 50% representan direccin hacia adelante del motor. Para el LMD18200 el uso de este tipo de seal PWM implica usar el pin 3 (DIR) como entrada de la seal PWM, mientras el pin 5 (PWM) se lleva a valor lgico 1. Una de las grandes ventajas de usar seales PWM del tipo locked-antiphase es que slo se necesita una lnea I/O para controlar completamente el motor. Si se tiene restricciones de lneas I/O, esta puede ser una buena opcin.

PWM Signo Magnitud


Si se usa seal PWM del tipo signo-magnitud, el microcontrolador establece la direccin de giro del motor a travs de un pin del H-Brigde destinado para tal fin (Dir) y varia la cantidad de potencia aplicada al motor o duty-cicle con otro pin del H-Brigde denominado PWM. La ausencia de pulso o lgica 0 en forma continua representa cero y lgica 1 en forma continua representa 100%. Este tipo de seal, por su sencillez, se ha usado en la realizacin del presente trabajo.

Implementando Modulacin de Ancho de Pulso (PWM) en un PIC


Para obtener una seal PWM, se usa el timer2, el cual establece la frecuencia de la seal PWM cargando un valor en el registro PR2. El ciclo se inicia con un reset, donde timer2 pasa a cero, luego se va incrementando hasta que su valor iguale a PR2, momento en que ocurre un nuevo reset y as sucesivamente. La anchura del pulso el tiempo que la seal permanece a 1 (duty cycle), viene dado por el valor cargado en el registro CCPR1L:CCP1CON<5:4> (8bits 10bits). As cuando ocurre un reset del timer2, el pin de salida PWM pasa a 1, luego cuando timer2 iguale el valor cargado en el registro CCPR1L:CCP1CON<5:4>, el pin de salida PWM pasa a 0. El timer2 continua su conteo hasta que iguale a PR2 y un nuevo reset ocurre.

Carlos A. Narvez V, 2008

Fig. 4 Ciclo PWM

La fig. 4 muestra un ciclo de una seal PWM. La instruccin setup_ccp1(CCP_PWM) configura el mdulo CCP1 como PWM, entonces la patita RC2/CCP1, funciona como salida PWM. El periodo de duracin de un ciclo de PWM esta determinado por el valor cargado en PR2 segn la frmula:
PWM_Periodo=(1/clock)*4*t2div*(PR2+1) PR2=((PWM_periodo*clock)/(4*t2div))-1

y la anchura de pulso (duty cycle) o tiempo que la seal PWM esta alta durante cada ciclo, viene dada por la formula:
Duty_cycle= value*t2div*(1/clock)

si value es LONG INT y


Duty_cycle= value*t2div*4*(1/clock)

si value es INT. Donde value es el valor cargado en CCPR1L:CCP1CON<5:4> (8bits 10bits). El Duty Cycle puede se establecido usando la instruccin:
set_pwm1_duty(value);

La instruccin:
Setup_timer_2(mode, P, postscale)

permite establecer el periodo del PWM dado un valor de PR2 entre 0 y 255. Este valor determina cuando timer2 se resetea iniciando as un ciclo de PWM. Postscale es un nmero entre 1 y 16 que determina cuantas veces el timer2 se resetea antes de ocurrir una interrupcin.

Carlos A. Narvez V, 2008

Ejemplo: Si clock = 20MHZ y PR2 = 127, entonces, un ciclo de PWM dura:


Periodo = 1/20000000)*4*1*128 = 25.6 us

Luego usando la instruccin:


setup_timer_2(T2_DIV_BY_1, 127, 5);

Tenemos que Timer2 se incrementa cada 200nseg, reset cada 25.6 useg y genera una interrupcin cada 25.6 * 5 = 128 useg. Adems si hacemos PR2 igual a 100, un valor de 45 en CCPR1L crea un duty cycle de 45%, un valor de 65 en CCPR1L crea un duty cycle de 65%.

Tacmetro digital
El tacmetro se construy usando un foto-interruptor CNZ1021 a travs del cual se hace pasar un disco de acetato codificado colocado en la parte posterior del eje del motor. La fig. 5 muestra un disco codificado de 12 pulsos/rev. Los pulsos emitidos se hacen pasar por el Smithtrigger 7414 y realimentados al microcontrolador para as calcular la velocidad de rotacin del motor.

Fig. 5 Disco Codificado 12 Pulsos/revolucin

La fig. 6, muestra el circuito del tacmetro construido utilizando un foto-interruptor CNZ1021 y un acondicionador de seal Smith Trigger 7414.

+5VDC

180

10K 1

7414 2 Seal

CNZ1021

Fig. 6 Tacmetro Carlos A. Narvez V, 2008

Implementando un Control PID


La accin de control PID en controladores analgicos esta dada por:
t de(t ) 1 u (t ) = K e(t ) + e(t )dt + Td Ti 0 dt

(1-1)

Donde e(t) es la entrada al controlador (seal de error), u(t) es la salida del controlador, K es la ganancia proporcional, Ti es el tiempo integral (o tiempo de reajuste) y Td es el tiempo derivativo (o tiempo de adelanto). En el dominio S, el controlador PID puede ser escrito como:

1 + Td .S E ( S ) U ( S ) = K 1 + Ti.S

(1.2)

La forma discreta del controlador PID puede ser derivado encontrando la transformada Z de la ecuacin 1.2:

T T (1 Z 1 ) U ( Z ) = K 1 + + Td E (Z ) 1 T 2Ti Ti (1 Z )

(1.3)

U (Z ) Ki = Kp + + Kd (1 Z 1 ) 1 E (Z ) 1 Z
donde:

(1.4)

Kp = K KT Ti

KT Ki =K 2Ti 2

Ganancia Proporcional

Ki =

Ganancia Integral

Kd =

KTd T

Ganancia Derivativa

y T es el periodo de muestreo.

Carlos A. Narvez V, 2008

Ntese que la ganancia proporcional para el controlador PID digital es ms pequea que la ganancia K para el controlador PID analgico por un factor de Ki/2. La ecuacin 1.4 puede ser realizada como indica la figura 7.

Ki

+ + T

p(kT)

e(kT) Kp

u(kT)

+ Kd T + q(kT)

Fig. 7 Realizacin paralela de un controlador PID

Esto puede ser implementado en un computador digital usando el siguiente seudo-cdigo:

BEGIN DO FOREVER Obtenga el set point: Obtenga la salida del sistema: Calcule el error: Calcule el trmino I: Calcule el trmino D: Calcule la Salida PID: Enve control al motor Guarde variables: r(kT) y(kT) e(kT)=r(kT)y(kT) P(kT)=Ki.e(kT)+p(kT-T) q(kT)=Kd.e(kT)Kd.e(kT-T) u(kT)=p(kT)+Kp.e(kt)+q(kT) p(kT-T)=p(kT) e(kT-T)=e(kT)

END

Espere hasta prximo periodo de muestreo ENDDO

Carlos A. Narvez V, 2008

Sintonizacin de los parmetros del PID


Conociendo el modelo matemtico del motor, es decir su funcin de transferencia de lazo abierto, podemos aplicar numerosos mtodos que incluye la representacin de Bode, mtodo de Laplace, respuesta en frecuencia, criterio de Nyquist, lugar geomtrico de la races y otros para hallar los parmetros del PID adecuados. Como criterio de diseo general, se escogen los parmetros de tal manera que el sistema en lazo cerrado sea estable, de respuesta rpida y sin sobrepaso. Como herramienta de trabajo se pueden usar programas como MATLAB. Existen tambin, mtodos experimentales tales como el ideado en 1942 por John G. Ziegler y Nathaniel B. Nichols que partiendo de la respuesta del proceso a un escaln unitario en lazo abierto, se pueden obtener los parmetros del PID. Ziegler y Nichols tambin describieron una tcnica de ajuste en lazo cerrado. En casos donde no tenemos el modelo del motor, ni podamos aplicar mtodos experimentales como Ziegler y Nichols, se puede utilizar un mtodo de prueba y error basado en el conocimiento de lo que cada accin de control (proporcional, integral y derivativa) aporta a la accin de control general del sistema. Por simplicidad utilizaremos esta tcnica en el presente trabajo, la cual se describe a continuacin: 1) Se requiere de una manera de variar instantneamente el valor de referencia (set-point) de cero al mximo de la velocidad esperada. Esto es equivalente aplicar un escaln a la entrada del controlador. 2) Teniendo la ganancia integral y derivativa a cero. Aplique un escaln repetidamente variando cada vez la ganancia proporcional hasta obtener un valor razonable de Kp. Esto es que la respuesta se aproxime a la entrada y oscile continuamente alrededor de la entrada con una pequea cantidad de amortiguamiento. Si la oscilacin no decrece gradualmente en su amplitud, entonces el sistema es considerado inestable. 3) Luego que se encuentre un valor razonable para Kp, se trabaja con el ajuste de Kd. Aplique un escaln repetidamente variando cada vez la ganancia derivativa hasta obtener un valor razonable de Kd. Esto es que la respuesta se amortigue rpidamente eliminando las oscilaciones alrededor de la entrada y permaneciendo en un valor ligeramente menor que el valor de la entrada. Esto es lo que se denomina error de estado estable y que puede ser corregido con el ajuste de Ki. 4) Luego que se encuentre un valor razonable para Kd, se trabaja con el ajuste de Ki. Aplique un escaln repetidamente variando cada vez la ganancia integral hasta obtener un valor razonable de Ki. Esto es eliminar el error de estado estable tal que la respuesta sigue a la entrada. Este parmetro debe ajustarse cuidadosamente pues puede introducir inestabilidad en el sistema.

Periodo de Muestreo
Como periodo de muestreo se toma normalmente 1/10 del tiempo de subida del sistema en lazo cerrado. El tiempo de subida se define como el tiempo necesario para que el sistema pase del 10% al 90% del valor final de la respuesta. Otro criterio que se puede usar es 1/10 de la constante de tiempo del sistema. La constante de tiempo de un sistema se define como el tiempo necesario para que la respuesta a un escaln unitario alcance el 63% del valor final de la respuesta. Para un sistema que logra su valor final a los 2 seg. se toma como periodo de muestreo T igual a 0.12 seg. que es 1/10 de la constante de tiempo del sistema.

Carlos A. Narvez V, 2008

Hardware
La fig. 8 muestra el prototipo desarrollado que consta de: Motor DC de escobillas 25 Voltios, tacmetro, H-Bridge basado en el LMD18200 y fuente de poder 5VDC para la lgica TTL. La alimentacin de 25VDC para el motor se obtuvo de una fuente de poder variable de laboratorio. El microcontrolador y el resto del circuito se implement en un break-board separado.

Motor DC Fuente Poder +5VDC

Tacmetro

Control LMD18200

Fig. 8 Prototipo Control Motores DC de escobillas

La fig. 9 muestra el diagrama esquemtico utilizado en este trabajo. En el podemos observar lo siguiente: Se utiliza cuatro potencimetros conectados a cuatro canales del convertidor analgico digital del PIC18F452, los tres primeros representan los parmetros del controlador digital (Kp, Ki y Kd) y el ltimo establece la velocidad referencia o setpoint. Se utiliza una pantalla LCD de 16X2 caracteres, comandada por dos interruptores (push-botton) los cuales permiten desplegar informacin variada, uno de ellos despliega la informacin en sentido hacia delante y el otro en reversa. El LMD18200 ha sido configurado para ser utilizado en modo PWM signo-magnitud. La direccin de giro se escogi de manera arbitraria, en este caso colocando el pin Dir a 1 y el freno (pin Brake) se deshabilit colocando este pin a 0. La seal PWM se obtiene configurando el mdulo CCP1 del microcontrolador en modo PWM y los pulsos generados por el tacmetro son realimentados al microcontrolador y contados configurando el TIMER1 en modo contador. El microcontrolador trabaja a 10Mhz.

Carlos A. Narvez V, 2008

+5VDC

+5VDC

+5VDC

Kd
100 0.1uf 10K

Ki
100 0.1uf 10K

Kp
100 0.1uf 10K

RPM
100 0.1uf

+5VDC

10K

+5VDC 10K +5VDC 25VDC 6 3 5 4 7 8 U4 Vs Dir PWM Brake Ground 9 Sense TFO LMD18200 +5VDC 1 B1 2 Out1 10 Out2 11 B2

10nf 1 +

+5VDC

VDD .1uf

2 3 4 5 6 7 33 34 35 36 37 38 39 40

.1uf

LED

1K 10Mhz

13 14 1 11 32

PIC18F452 22pf +5VDC 4.7K

12 31

Fig. 9 Diagrama Esquemtico del Sistema

D7 D6 D5 D4 D3 D2 D1 D0 E R /W RS VEE VC C VSS

RC0/T1OSO/T1CKI RA0 RC1/T1OSI RA1 CCP1/RC2 RA2 RC3/SCK/SCL RA3 RC4/SKI/SDA RA4/TOCKI RC5/SDO RA5/SS RC6/TX/CK RC7/RX/DT INT0/RB0 INT1/RB1 RD0/PSP0 INT2/RB2 RD1/PSP1 CCP2/RB3 RD2/PSP2 RB4 RD3/PSP3 RB5 RD4/PSP4 RB6 RD5/PSP5 RB7 RD6/PSP6 RD7/PSP7 OSC1/CLKIN OSC2/CLKOUT RE0/RD MCLR/VPP RE1/WR RE2/CS VDD VDD VSS VSS

15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10

A
10nf MOTOR DC 2

180

10K 1

7414 2 Seal

CNZ1021

10K +5VDC

14 13 12 11 10 9 8 7 6 5 4 3 2 1 LCD-Display

Carlos A. Narvez V, 2008

Software
El Software fue escrito utilizando el compilador C de CCS inc. Los valores de los parmetros del PID se obtienen a travs de canales del convertidor analgico digital de 10bits. Estos valores son divididos por la variable INPUT_SCALE, para que los valores estn en un rango de 0 a 1. El rango de los parmetros del PID se modifican, cambiando el valor de esta variable. El lazo PID se realiza cada 26 miliseg y la actualizacin del duty cicle del mdulo PWM se realiza cada 408 microseg. El despliegue de informacin en la pantalla LCD se refresca cada segundo.

/////////////////////////////////////////////////////////////////////////// //// MOTOR_PID.C //// //// Control PID de Velocidad de un Motor DC //// /////////////////////////////////////////////////////////////////////////// #include <18f452.h> #device ADC=10 #fuses HS,PUT,BROWNOUT,WDT128,NOLVP #use fast_io(A) #use fast_io(B) #use fast_io(C) #use fast_io(D) #use fast_io(E) #use delay(clock=10000000,RESTART_WDT) #use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7) #zero_ram #define TIMER3_DIV 120 #byte #byte #byte #byte PORTA PORTB PORTC PORTE = = = = 0xF80 0xF81 0xF82 0xF84

#bit SYSLED = PORTB.4 #define LEDTIME 10 #byte TMR1L #byte TMR1H = 0xFCE = 0xFCF /* definitions for Timer1 module */

#define ALL_OUT 0 #define ALL_IN 0xff /************************************************************************** * Variables Globales **************************************************************************/ int tickcount, t; unsigned ledticks; // P_GAIN, I_GAIN, D_GAIN valor entre 0.0 y 1.0 resolucion 0.0009

#define Input_Scale 1024; unsigned int16 wheel_counts, wheel_test, last_counts; unsigned int16 delta_counts; signed int16 pwmSet; signed int16 error, ePrev, iPrev; unsigned int16 Drive_Command;

// PWM values

Carlos A. Narvez V, 2008

//definiciones para motor trabajando a 25 Voltios DC #define #define #define #define MIN_PULSES 1 MAX_PULSES 21 MAX_PWM 1015 MIN_PWM 40 /* /* /* /* Mnimo Mximo Maximo Minimo pulsos por periodo de muestreo */ pulsos por periodo de muestreo */ PWM (100%) del controlador */ PWM del controlador */

unsigned int channel; signed int16 P_Term, I_Term, D_Term; unsigned int16 Vel, P_GAIN, I_GAIN, D_GAIN; #include "lcd-pd.h" // Rutinas Manejo LCD

/************************************************************************** * Leer Velocidad Motor **************************************************************************/ void read_Vel(void) { SET_ADC_CHANNEL(0); delay_us(10); Vel = READ_ADC(); // Motor Velocidad, escala 0-1023 } /************************************************************************** * Leer Ganancias PID **************************************************************************/ void read_pid_Gain(void) { SET_ADC_CHANNEL(1); delay_us(10); P_GAIN = READ_ADC(); // Ganancia Proporcional SET_ADC_CHANNEL(2); delay_us(10); I_GAIN = READ_ADC(); // Ganancia Integral SET_ADC_CHANNEL(3); delay_us(10); D_GAIN = READ_ADC(); // Ganancia derivativa } /************************************************************************** * desplegar datos segun channel **************************************************************************/ void desplegar_datos(int channel) { switch(channel) { case 0: printf(displays,"\r P I D "); printf(displays,"\n%4LU %4LU %4LU ",P_GAIN, I_GAIN, D_GAIN); break; case 1: printf(displays,"\rVel. Counts "); printf(displays,"\n%04LU %04LU ",Vel, Delta_counts); break; case 2: printf(displays,"\rError "); printf(displays,"\n%5ld ",error); break; } }

Carlos A. Narvez V, 2008

/************************************************************************** * Interrupcion INT0 Switch Display UP **************************************************************************/ #INT_EXT void EXT0_isr(void) { if(channel == 2) channel = 0; else channel++; } /************************************************************************** * Interrupcion INT1 Switch Display Down **************************************************************************/ #INT_EXT1 void EXT1_isr(void) { if(channel == 0) channel = 2; else channel--; } /************************************************************************** * Actualiza PWM Duty Cycle **************************************************************************/ #int_TIMER2 void TIMER2_isr(void) // 408 microseg - 2450.98 Hz. { // update PWMs during rollover for // glitch-free operation set_pwm1_duty(Drive_Command); // put x% duty on Drive Signal } /*************************************************************************** * Lazo PID Periodo de muestreo cada 26 miliseg ***************************************************************************/ #int_timer3 void timer3_isr(void){ t = t + 1; Wheel_counts = TMR1H << 8; Wheel_counts += TMR1L; Wheel_test = TMR1H << 8; Wheel_test += TMR1L; if(Wheel_test != Wheel_counts) { Wheel_counts = TMR1H << 8; Wheel_counts += TMR1L; } //velocidad del motor en pulsos/periodo de muestreo

delta_counts = (Wheel_counts - last_counts); last_counts = Wheel_counts; //Velocidad Referencia (Setpoint) Escala 0-1023 read_vel(); // Escale delta_counts a valores PWM (0-1023) // para usar la misma escala y calcule el Error error = (vel - ((delta_counts*MAX_PWM) / MAX_PULSES));

Carlos A. Narvez V, 2008

//

Ecuacin Estndar PID = = = = (signed int32)P_GAIN * error/input_scale; (signed int32)I_GAIN * error/Input_Scale; I_Term + iPrev; (signed int32)(D_GAIN * error - D_GAIN * ePrev)/Input_Scale;

P_Term I_Term I_Term D_Term

//Accin de control escala 0-1023 pwmSet = pwmset + (P_Term + I_Term + D_Term) ; // Guarde el error actual y el trmino integral actual //para se usado como valores previos en el prximo periodo de muestreo ePrev = error; iPrev = I_Term; // Limite la salida al Mximo o mnimo del Controlador if(pwmSet >= MAX_PWM) pwmSet = MAX_PWM; else if(pwmset <= MIN_PWM) pwmSet = MIN_PWM; // Aplique valor a mdulo PWM del microcontrolador Drive_Command = (int16)pwmSet; } /************************************************************************** * Programa Principal **************************************************************************/ void main() { setup_adc_ports(ALL_ANALOG); // Configura los 8 Convertidores A/D setup_adc(ADC_CLOCK_DIV_32); // setup_wdt(WDT_ON); // Perro guardian ON setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); // Contador eventos Externos setup_ccp1(CCP_PWM); // Configura modulos CCP1 como PWM setup_timer_2(T2_DIV_BY_4, 255, 1); // PWM 2.44Khz, interrupcin 40 mseg setup_timer_3(T3_INTERNAL|T3_DIV_BY_1); // Real time interval 26 milliseg set_tris_A(ALL_IN); set_tris_B(0x0F); set_tris_c(0x01); set_tris_D(ALL_OUT); LCD_SETUP(); disp_serial = FALSE; disp_lcd = TRUE; timeout(ledticks,0); port_b_pullups(false); read_pid_Gain(); // Leer ganancias PID set_pwm1_duty(0); enable_interrupts(INT_EXT); ext_int_edge(0,H_TO_L); enable_interrupts(INT_EXT1); ext_int_edge(1,H_TO_L); enable_interrupts(INT_TIMER2); enable_interrupts(INT_TIMER3); enable_interrupts(GLOBAL); while(1) { restart_wdt(); if(t > 38) // Una vez por segundo.... { read_pid_Gain(); SYSLED = !SYSLED; desplegar_datos(channel); t = 0; } } }

Carlos A. Narvez V, 2008

Conclusiones
La realizacin de un control PID es una tarea sencilla, pero la entonacin de los parmetros es compleja. Partiendo del conocimiento del efecto de cada parmetro sobre la accin de control total y experimentando con diferentes valores, se puede obtener un rendimiento satisfactorio del sistema.

Carlos A. Narvez V, 2008

S-ar putea să vă placă și