Autor Tema: AQUI ESTA MAS O MENOS?  (Leído 1544 veces)

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

Desconectado IVANCHO20

  • PIC10
  • *
  • Mensajes: 23
AQUI ESTA MAS O MENOS?
« en: 15 de Mayo de 2004, 08:16:00 »
#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,xn;
int a0,a1,a2,xn_1,xn_2,yn,yn_1,kp,k1,kd,ts;
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=val1;
k1=val2;
kd=val3;
ts=0,01;
set_pwm1_duty(0);
lcd_gotoxy(1,1);
printf(lcd_putc,"p:%1.1u,i:%1.1u,
d:%1.1u",kp,k1,kd
);}lcd_putc("f";
while(true){
while((!input(pin_b0))){
set_adc_channel(0);
setp=read_adc();
delay_us(1);

set_adc_channel(0);
setp=read_adc();
kp=10;
ts=4.16;
xn=0.62;
while(true){
set_adc_channel(1);
val_med=read_adc();
lcd_gotoxy(1,1);
printf(lcd_putc,"v:%1.1u,
s%1.1u,kp:%u",val_med,setp,kp);
if(val_med<setp){
kp=kp++;
yn=kp*(1+1/ts+xn);
set_pwm1_duty(yn);}
if(val_med>=setp){
kp=kp-1;
yn=kp*(1+1/ts+xn);
set_pwm1_duty(yn);
}
}
}
}
}
ESTE ES EL CODIGO QUE ME DIO EL PROFE DE LA U NO SE SI ESTA BIEN ES SOLO PARA EL CONTROL PROPORCIONAL LO REVISAMOS ENTRE TODOS

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: AQUI ESTA MAS O MENOS?
« Respuesta #1 en: 15 de Mayo de 2004, 17:11:00 »
le voy a dar un vistazo pero a primera vista parece que pierdes precision en las operaciones con enteros.
he montado un motor con encoder para hacer unas pruebasy parece que va perfecto con un IRF1104.
creo que es mas interesante hacer la regulacion usando la interrupcion fija para facilitar las operaciones o bien calculando el tiempo entre llamadas.....
parece recomendable comenzar solo con el proporcional y luego pasar a los demas....
voy a intentar adaptar el programa para poder representar la grafica del lazo y modificar los parametros desde VB.