Pid Pic18f4550

Control Digital. Guía 5 1 Facultad: Ingeniería. Escuela: Electrónica. Asignatura: Control Digital. Lugar de ejecución:

Views 109 Downloads 1 File size 176KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Control Digital. Guía 5

1

Facultad: Ingeniería. Escuela: Electrónica. Asignatura: Control Digital. Lugar de ejecución: Instrumentación y Control (Edificio 3, 2da planta)

Implementación de Controlador PID con PIC Objetivos específicos • • • • •

Utilizar un controlador PIC 18F4550 como controlador PID. Programar el PIC con una aplicación utilizando el MPLAB X IDE, el compilador XC8 y el PICkit 2. Conectar un sistema térmico para comprobar su funcionalidad. Cambiar la consigna dentro del programa y comprobar la respuesta del sistema. Modificar el programa para hacer que los parámetros puedan ser transferidos por algún otro medio al controlador.

Materiales y equipo • • • • • • • • • • • • • • •

1 Computadora con MPLAB X IDE v1.85, y XC8 Instalado 1 Fuente de alimentación 15 VCD [SO3538-8D] 1 Elemento PT1 (Delay Line) [SO3536-6C] 1 Amplificador de potencia [SO3536-7Q] 1 Sistema controlado de temperatura [SO3536-8T] 2 Controladores proporcionales [SO3536-5T]. 1 Multímetro 1 Microcontrolador PIC 18F4550 1 Programador USB PICkit 2 19 Puentes 1 Switch 4 Cables de Conexión 9 Alambres de telefonía 1 Pinza 1 Cortadora

Control Digital. Guía 5

Introducción teórica Controlador PID Los controladores PID son muy utilizados en la industria, pueden ser de tipo analógico o digital, utilizando microprocesadores o microcontroladores. La ecuación diferencial característica de ellos es como la siguiente:

Ec. 1 Donde e(t) es el error de la señal y u(t) es la entrada de control del proceso. Kp es la ganancia proporcional, Ti es la constante de tiempo integral, y Td es la constante de tiempo derivativa. En el dominio de la frecuencia, la función de transferencia para un filtro PID puede expresarse como:

[

U (z )=K P 1+

]

(1−z−1) T +T E (z) d T T i (1−z −1 )

Ec. 2

Donde T es el tiempo de muestreo Control Digital PID La función de transferencia para un controlador PID digital se puede expresar de la siguiente manera: U

( z) b =a + + c (1−z −1 ) E (z) (1−z −1)

Ec. 3

Esta función de transferencia puede ser expresada de la siguiente manera: Donde: (K T ) T a 0=K P b= p c=K p d Ec. 4 Ti T Existen distintas posibilidades para realizar de forma práctica un controlador PID, la siguiente figura muestra la realización en paralelo:

Control Digital. Guía 5

3

KP

+

1

1

z −1

x(k)

K pT Ti

y (k )

K pT d T

+ 1

+

−1 z

−1

Figura 1. Controlador PID discreto Los valores para K P , T d y T i pueden obtenerse a partir de las características del sistema por el método de Ziegler-Nichols de lazo abierto o lazo cerrado. x (k ) Es la entrada de error al controlador y y (k ) es la salida controlada

Procedimiento Para un controlador PI y un tiempo de muestreo de 0.1s

K P=2,0 , T N =9.00s y T V =0

Se tiene el cálculo de los coeficientes de salida: a=K P =2.00

b=

 K p T  2.00 =  0.1  =0,02 Ti 9.00

 

c=

K pTd =0 T

El algoritmo de realización del filtro PID paralelo de la Figura 1 tendría las siguientes partes: a) b) c) d) e) f) g) h) i)

Declaración de variables Configuración de los periféricos del PIC que serían el ADC y PWM Toma de la muestra de salida Escalado de la muestra Cálculo del error x(k) Cálculo de rama proporcional x(k)*Kp Cálculo de rama integral Cálculo de rama derivativa Suma de respuestas proporcional, integral y derivativa para obtener salida de control y(k) j) Escalado de la salida de control k) Modificación del Duty Cycle del PWM l) Retardo de 100ms (la muestra se toma cada 100ms)

Control Digital. Guía 5

m) lazo hasta c) Procedimiento de programación en PIC: 1. Abra el programa MPLAB IDE (Aplicaciones-->Programación) 2. Seleccione del menú “File” la opción “New Project ”, aparecerá la ventana de trabajo, seleccione en “Categories” la opción “Microchip Embedded” y en “Projects” la opción “Standalone Project” , luego presione el botón “Next” 3. En la siguiente pantalla de selección del dispositivo elija en “Family” la opción “Advanced 8-bit MCUs (PIC18)” y luego busque en “Device” la opción “PIC18F4550” y dé clic en “Next” 4. Aparecerá la ventana de selección de herramientas, en Herramientas de Hardware seleccione “PICKit 2” y dé clic en “Next”, aparecerá la ventana de seleccionar compilador, elija la opción “XC8(V1.20)” y dé clic en “Next”. 5. Finalmente asigne un nombre al proyecto y seleccione la ruta de la carpeta donde este quedara alojado, puede usar las rutas por defecto asegurándose de registrarlas para posteriores búsquedas, luego presione “Finish” con lo que la herramienta concluirá la creación del proyecto, presentando el entorno de trabajo. 6. Ahora proceda a crear el archivo fuente del programa que se desea crear, para ello haga click derecho sobre la carpeta “Source Files” ubicada en el arbol del proyecto ubicado en la parte izquierda de la pantalla y seleccione la opción “New” y luego “C Main File”, escriba el nombre del archivo y presione “Finish”, se abrirá el editor para que pueda escribir el código fuente en C que se muestra a continuación: //Programa para Realizar el control PID //para sistema Térmico con terminal analógica AN0 //Utilizando la salida PWM #include //Cabecera de Nucleo #include #include #include //Directivas para activar los bits de configuracion #pragma config FOSC = INTOSCIO_EC //Oscilador Interno, Puerto A RA6 activo, #pragma config WDT = OFF //Watchdog timer apagado #pragma config PBADEN = OFF //Parte baja del puerto B digitales #pragma config MCLRE = ON //MCLRE Disponible #pragma config DEBUG = ON //Modo de depuraciòn disponible #pragma config LVP = OFF //Fuente de ISCP apagada //Definición de variables globales //Programa principal

Control Digital. Guía 5

void main() { // Declaración de variables locales int valor; int controlsignal; float a= 2.0; //KP float b =0.02;//KP*Tm/Ti = 2.0*100m/9s float c=0.0; //KP*Td/Tm Td=0.0 float SETPOINT=750.0; float eT=0.0; float iT=0.0; float dT; float yT; float uT; float iT0; float eT0; float max=1000.0; float min=0.0; // Modificación de la preescala del clock principal a 1Mhz IRCF2=1; IRCF1=0; IRCF0=0; //Configurar el puerto C Bit 2 como salida del PWM TRISC2 = 0; // Configurar el ADC AN0 con el ADCON ADCON1=0x0E; ADCON0=0X01; ADCON2=0x80; //Configurar los parámetros del PWM //_,T2OUTPS3,T2OUTPS2,T2OUTPS1,T2OUTPS0,TMR2ON,T2CKPS1,T2CKPS0 //0 0 0 0 0 1 0 1 PR2=0x7C;//Configurar periodo para 500Hz de PWM TMR2=0; //Limpiar el Timer2 T2CON=0x05; //Preescala de 4 y activación del T2 //Configurar el registro CCP1CON, seleccion de modo PWM //_,_,DCxB1,DCxB0,CCPxM3,CCPxM2,CCPxM1,CCPxM0 //0 0 0 0 1 1 0 0 CCP1CON=0x0C;//Bits 4 y 5 de CCP1CON en 0 while (1){ ConvertADC(); while (BusyADC()){} valor = ReadADC();//leer el Canal analógico AN0 yT = 1000.0*valor/1024.0;//Escala para obtener la entrada de 0 a 1000

5

Control Digital. Guía 5

}

eT = SETPOINT-yT; //cálculo del error iT = b*eT+iT0; //cálculo de la componente integral dT = c*(eT-eT0); //cálculo de la componente derivativa uT = iT+a*eT+dT; //cálculo de la señal de respuesta del controlador if(uT>=max){ uT = max; //Estableciendo límite superior de la respuesta } else { if(uT