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
129,177
Mesajlar
923,949
Kullanıcılar
451,529
Son üye
Ramazan Çelikten

Yeni konular

Geri
Üst