PID ve PIC

#include "PID_Lib.h"

void Reset_PID()
{
PID_Integrated = 0.0;
PID_Prev_Input = 0.0;
PID_First_Time = TRUE;
}

void Init_PID(float Kp, float Ki, float Kd, float MinOutput, float MaxOutput)
{
PID_Kp = Kp;
PID_Ki = Ki;
PID_Kd = Kd;
PID_MinOutput = MinOutput;
PID_MaxOutput = MaxOutput;
PID_Integrated = 0.0;
PID_Prev_Input = 0.0;
PID_First_Time = TRUE;
}

float PID_Calculate(float Setpoint, float InputValue)
{
float Err, ErrValue, DiffValue, Result;
Err = SetPoint - InputValue;
ErrValue = Err * PID_Kp;
PID_Integrated = PID_Integrated + (Err * PID_Ki);
if (PID_Integrated < PID_MinOutput)
PID_Integrated = PID_MinOutput;
if (PID_Integrated > PID_MaxOutput)
PID_Integrated = PID_MaxOutput;
if (PID_First_Time)
{
PID_First_Time = FALSE;
PID_Prev_Input = InputValue;
}
DiffValue = (InputValue - PID_Prev_Input) * PID_Kd;
PID_Prev_Input = InputValue;


if (Result < PID_MinOutput)
Result = PID_MinOutput;
if (Result > PID_MaxOutput)
Result = PID_MaxOutput;
return (Result);
}

Sanırım herkes bir yere atıyor ben toparlayayım.

Geribeslemeli sistemlerde hata(err) sistemdeki bozunmayı verir. Bu hata işareti ne kadar azalırsa bizim sistem istenilen noktaya (set pointe) o kadar hızlı varır.
Input = Rs
Output = Ys
Error = Output - Input
Çıkan hata işareti belirli bir katsayı ile çarpılırsa:
Us1 = err*Kp
Çıkan işaret bir önceki değeri ile arasındaki fark alınıp katsayı ile çarpılırsa:
err = err(n) - err(n-1)
Us2 = err*(Kd)
Çıkan işaret bir sonraki ile arasındaki değişim ile hesaplanır eklenirse:
Us3 = Ki*err*d(time)

Us = Us1+Us2+Us3
Us = Kontrol işareti olmuş olur

Bu anlattıklarım Sürekli zamanda. Ayrık zamanda ise işin içine birde Örnekleme Zamanı ve İntegrator yöntemleri girecektir.
 

Forum istatistikleri

Konular
128,184
Mesajlar
915,691
Kullanıcılar
449,956
Son üye
CharmanDear

Yeni konular

Geri
Üst