Autor Tema: control pid que pasa  (Leído 1828 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado IVANCHO20

  • PIC10
  • *
  • Mensajes: 23
control pid que pasa
« 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;

}
}
}
}

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: control pid que pasa
« Respuesta #1 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

Desconectado IVANCHO20

  • PIC10
  • *
  • Mensajes: 23
RE: control pid que pasa
« Respuesta #2 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

Desconectado IVANCHO20

  • PIC10
  • *
  • Mensajes: 23
RE: control pid que pasa
« Respuesta #3 en: 11 de Mayo de 2004, 16:44:00 »
RE: control pid que pasa[/b]

<

Desconectado JavierPIC18

  • PIC10
  • *
  • Mensajes: 5
Re: control pid que pasa
« Respuesta #4 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