TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: IVANCHO20 en 09 de Mayo de 2004, 15:19:00

Título: control pid que pasa
Publicado por: IVANCHO20 en 09 de Mayo de 2004, 15:19:00
este es un control pid que hace girar un motor segun el set point no funciona ni es proteus y otra presgunta como se sacan las simulaciones animadas en proteus
#include <16f877a.h>
#use delay(clock=2000000)
//#fuses hs
#include <lcd.c>
#byte portc=7
#byte portb=6
#use fast_io(b)
int val1,val2,val3,setp,val_med;
float a0,a1,a2,xn_1,xn_2,yn,yn_1,kp,k1,kd,ts,xn;
main(){

setup_adc_ports(all_analog);
setup_adc(adc_clock_div_32);
setup_ccp1(ccp_pwm);
setup_ccp2(ccp_pwm);
setup_timer_2(t2_div_by_1,255,1);

lcd_init();
while(true){
while((input(pin_b0))){
set_adc_channel(2);
val1=read_adc();
delay_us(10);
set_adc_channel(3);
val2=read_adc();
delay_us(10);
set_adc_channel(4);
val3=read_adc();
delay_us(10);
kp=(float)val1;
k1=(float)val2;
kd=(float)val3;
ts=0,01;
a0=kp+k1*ts+kd/ts;
a1=kp+2*kd/ts;
a2=k1/ts;
lcd_gotoxy(1,1);
printf(lcd_putc,"p:%1.1f,i:%1.1f,
d:%1.1f",kp,k1,kd
);}lcd_putc("f";
while((!input(pin_b0))){
set_adc_channel(0);
setp=read_adc();
delay_us(1);
set_adc_channel(1);
val_med=read_adc();
xn=(float)(setp-val_med);
lcd_gotoxy(1,1);
printf(lcd_putc,"x:%1.1f,v:%1.1u,
s%1.1u",xn,val_med,setp);
if(xn>0){
yn=a0*xn-a1*xn_1+a2*xn_2+yn_1;
set_pwm1_duty(yn);
xn_2=xn_1;
xn_1=xn;
yn_1=yn;
}
else{
yn=a0*xn-a1*xn_1+a2*xn_2+yn_1;
set_pwm2_duty(yn);
xn_2=xn_1;
xn_1=xn;
yn_1=yn;

}
}
}
}
Título: RE: control pid que pasa
Publicado por: pacalaconcurso en 11 de Mayo de 2004, 15:57:00
es un tema muy interesante
quizas puedas comentar lo que pretendes con el codigo que pones....

habitualmente en un lazo PID digital (este es nuestro caso) hay que tener en cuenta el tiempo entre muestreos y habitualmente este ronda en torno a los 200 ms (mas que suficiente para la mayoria de las aplicaciones)

nunca intente hacer un PID en un pic pero me atrae la idea sin embargo he programado y ajustado mas de uno (y de dos......)

ahora no dispongo te tiempo (y quien lo tiene) pero me apuntaria a un equipo para implementarlo.

saludos y adelante con este tema que merece el intento
Título: RE: control pid que pasa
Publicado por: IVANCHO20 en 11 de Mayo de 2004, 16:41:00
ra posicionar un motor segun el estado que se encuentre este del set point, pero no sale lo voy a intentar hacer para un control de velocidad
Título: RE: control pid que pasa
Publicado por: IVANCHO20 en 11 de Mayo de 2004, 16:44:00
RE: control pid que pasa[/b]

<
Título: Re: control pid que pasa
Publicado por: JavierPIC18 en 22 de Julio de 2007, 19:07:39
Qu mas IVANCHO, pues estoy realizando un control PID para un motor DC Y para contolar temperatura tanto analogo como discreto, pero miro su codigo y en realidad me confunde cada vez mas, mi codigo lo estoy desarrollando en C18 y creo que es totalmente diferente al suyo, bueno si le interesa intercambiamos informacion, listo
nos vemos