arkadaşlar PID olayını çözmeye çalısıyorum soru

Başlatan zamzam23, 25 Ağustos 2010, 15:07:13

zamzam23

internett iki tane kod buldum PID ile alakalı ama ıkısı de farklı ısler yapıyor sankı.kafam karıstı hangısının dedıgı dogru.değişkenleri vermiyorum neyin ne oldugu anlasılıyor
1-
   velo_error_present = velo_target - velo_current;
   daoham1 = velo_error_present - velo_error_past;
   daoham2 = velo_error_present - 2*velo_error_past + velo_error_perfect;

   Proportion = Kp * daoham1;
   Integration = Ki * velo_error_present;
   Derivation = Kd * daoham2;
   delta_duty = (signed long) (Proportion + Integration + Derivation);

2-
      e= Ref-Ger;
      mpid=A+Kp*e+Ki*e+(Kd*(e-eonceki));
      p=(int)mpid;
      A=p;
      eonseki=e;
3-
   float p_term, i_term, d_term;
   p_term = pid_p_gain * erro;
   pid_i_state += erro;
   i_term = pid_i_gain * pid_i_state;
   d_term = pid_d_gain * (posicao_set - pid_d_state);
   pid_d_state = posicao_set;
   updatepid = p_term + i_term - d_term;

örneğin 2. kodda eonceki(onceki hata) yeterliyken 1. kodda oncekı hatanın oncekısı(velo_error_perfect) diye bi değişken daha var.kafam karıstı size danısayım dedim.
3. kodda da 2.kodda olan "Ki*e" kısmı daha bi farklı yapılmıs sanki.kafam allak bullak.hangisi dogru