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.
 

Yeni mesajlar

Forum istatistikleri

Konular
129,702
Mesajlar
929,087
Kullanıcılar
452,404
Son üye
kartal_157925

Yeni konular

Geri
Üst