You are on page 1of 3

#INCLUDE <18F4550.

H>
#FUSES NOWDT
#FUSES WDT128
#FUSES INTHS
#FUSES NOPROTECT
#FUSES NOBROWNOUT
#FUSES NOPUT
#FUSES NOCPD
#FUSES STVREN
#FUSES NODEBUG
#FUSES NOLVP
#FUSES NOWRT
#FUSES NOWRTD
#FUSES IESO
#FUSES FCMEN
#FUSES PBADEN
#FUSES NOWRTC
#FUSES NOWRTB
#FUSES NOEBTR
#FUSES NOEBTRB
#FUSES NOCPB
#FUSES MCLR
#FUSES LPT1OSC
#FUSES NOXINST
#FUSES PLL1
#FUSES CPUDIV4
#FUSES USBDIV
#FUSES VREGEN
#FUSES ICPRT

#DEVICE ADC=10
#USE delay(int=4000000)

INT16 salida, REF, control;


FLOAT a,b,c;
FLOAT rT,eT,Kp,Ti,Td,yT,Ti0,eT0;
FLOAT uT=0,kp_analogo,Ti_analogo,Td_analogo,T;
FLOAT max,min;

Void Main()
{
setup_wdt(WDT_OFF);
setup_oscillator(OSC_4MHZ|OSC_INTRC);

setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);

set_tris_b(0x00);

min=0.0;
max=250.0;
Ti0=0.0;
eT=0.0;

kp_analogo=1.61;
Ti_analogo=1.61;
Td_analogo=0.37;

T=0.2;
a=kp_analogo;
b=(kp_analogo*T/Ti_analogo);
c=kp_analogo*Td_analogo/T;

while(true)
{
set_adc_channel(0);
salida=read_adc();
yT=5.0*salida/1024.0;

set_adc_channel(1);
REF=read_adc();
rT=5.0*REF/1024.0;

eT=rT-yT;

kp=a*eT;
Ti=b*eT+Ti0;
Td=c*(eT-eT0);
uT=Kp+Ti+Td;

if(uT>max)
{
uT=max;
}
else
{
if(uT<min)
{
uT=min;
}
}

control=(255.0*uT)/5.0;
output_b(control);

Ti0=Ti;
eT0=eT;

delay_ms(200);
}
}

***********************************************************************************
********************************************

#INCLUDE <18F2550.h>
#DEVICE ADC=10
#USE DELAY(CLOCK=4000000)
#FUSES HS,NOWDT,NOPROTECT,NOLVP

Void Main()
{
INT16 salida, REF, control;
FLOAT REFERENCIA;
FLOAT rT,yT,eT,eT0;
FLOAT uT,uT0,T;
FLOAT max,min;
min=0.0;
max=250.0;
eT0=0.0,
uT0=0.0;

setup_adc_ports(all_analog);
setup_adc(adc_clock_internal);

while(true)
{
set_adc_channel(0);
salida=read_adc();
delay_ms(1);
yT=5.0*salida/1024.0;

set_adc_channel(1);
REF=read_adc();
delay_ms(1);
rT=5.0*REF/1024.0;

eT=rT-yT;

uT=uT0+(2.1*eT)-(1.9*eT0);

if(uT>max)
{
uT=max;
}
else
{
if(uT<min)
{
uT=min;
}
}

control=(255.0*uT)/5.0;
output_b(control);

eT0=eT;
uT0=uT;

delay_ms(200);
}
}

You might also like