Pid

Embed Size (px)

DESCRIPTION

.

Citation preview

#include //#define LCD_ENABLE_PIN PIN_B4//#define LCD_RS_PIN PIN_B5//#define LCD_RW_PIN PIN_B6//#define LCD_DATA4 PIN_B0//#define LCD_DATA5 PIN_B1//#define LCD_DATA6 PIN_B2//#define LCD_DATA7 PIN_B3//#BYTE TRISC = 0x87 #define IZ PIN_C6#define DE PIN_C7//#include void main(){ int rep; int16 valor,valor2; //lectura de temperatura int16 control; //valor del PWM float a,b,c; //constantes del PID float rT,yT,eT,pT,iT,dT,uT,iT0=0,eT0=0; //variables de ecuaciones float iT1=0,eT1=0; float max,min; //lmites mximo y mnimo de control. min=0.0; //inicializacin variables max=1000.0; a=.650; //ganancia del proporcional b=0.062; //ganancia del integral c=0.7; //ganancia del derivativo TRISC=0; setup_timer_2(t2_div_by_4,0xff,1); //periodo de la seal PWM a 1ms setup_ccp1(ccp_pwm); //Mdulo CCP a modo PWM setup_adc_ports(sAN0|sAN3); //Puerto A analgico setup_adc(ADC_CLOCK_INTERNAL); //reloj convertidor AD interno //lcd_init(); //printf(lcd_putc,"\fIniciando ^,^"); //printf(lcd_putc,"\nControl de pos"); //delay_ms(2000); while(TRUE) { if (input(pin_E0)==true ) {//Sintoniza PID //pwm off set_adc_channel(1); //Selecciona CH1 delay_us(20); //Retardo para obtener lectura completa 8 Bits a = read_adc(); //Guarda Kp a = ((a) / (64)) + (1); set_adc_channel(2); //Selecciona CH2 delay_us(20); //Retardo para obtener lectura completa 8 Bits b = read_adc(); //Guarda Ki b = ((b) / (1024)) + (0.01); set_adc_channel(3); //Selecciona CH3 delay_us(20); //Retardo para obtener lectura completa 8 Bits c = read_adc(); //Guarda Kd c = ((c) / (16)) + (1); //printf(lcd_putc,"\fP=%2.2f i=%1.3f",a,b); //printf(lcd_putc,"\nd=%2.2f",c); //delay_ms(100); } if (input(pin_E1)==true ) { for(rep=0;repmax){ uT=max; } control=uT; //Transferencia de salida PID a seal PWM set_pwm1_duty(control); delay_ms(10);//Tiempo de muestreo } lcd_gotoxy(1,1); printf(lcd_putc,"\fE=%5.0f",eT); lcd_gotoxy(10,1); printf(lcd_putc,"C=%4.0f",uT); lcd_gotoxy(1,2); printf(lcd_putc,"r=%5.0f",rT); lcd_gotoxy(10,2); printf(lcd_putc,"y=%4.0f",yT); } if (input(pin_E0)==false & input(pin_E1)==false ){ set_pwm1_duty(0); printf(lcd_putc,"\fSeleccionne una opcion"); printf(lcd_putc,"\nGain 0 Control"); delay_ms(10); } }}