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
130,059
Mesajlar
932,624
Kullanıcılar
453,039
Son üye
mertşahin44

Yeni konular

Geri
Üst