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,126
Mesajlar
933,361
Kullanıcılar
453,199
Son üye
mosmanali01

Yeni konular

Çevrimiçi üyeler

Geri
Üst