PID Kontrol Algoritması Nedir ?
Robotik ve otomasyon sistemleri üzerinde çalışanlar mutlaka PID kontrol ile ilgili uygulamalar görmüşlerdir.Birçok kişi bu uygulamaları göresede çözmekte ve kavramakta zorluk çekerler.Bizde bu yazımızda PID hakkında bahsedeceğiz.Çalışma prensibi vs.
PID aslında bir kontrol geri bildirim mekanizmasıdır.Bir PID denetleyici ölçülü bir süreç içinde değişen ve istenilen ayar noktası ile arasındaki farkı olarak bir “hata” değerini hesaplar.Kontrol giriş ayarı yapılarak bu hata en aza indirilmesi sağlanır.
PID (Proportional,Integral,Derivative) diye tanımlanır.Türkçesi (Oransal,İntegral,Türevsel) denetleyicidir.
PID kontol’de öncelikle hata tanımlaması yapılmalıdır.Hata ise referans değere olan uzaklık olarak tanımlanabilir.
Ref = İstenilen değer
Gelen = Şu an ki konum
Hata = Ref - Gelen
Oransal (Proportional) Terim
Oransal terim sistemden gelen hatayı bir kat sayı ile çarparak hatayı küçültmeyi hedefler.Bozucu etkileride mevcuttur.Örneğin hata istenilen değerlere yaklaştığında çıkışta oslilosyon görülme ihtimali yüksektir.Buda yüksek seçmememiz gerektiği anlaşılır.
P = Kp * Hata
İntegral (Integral) Terimi
İntegral hatanın alanını bulmak anlamına gelmektedir. Her bir dt çevriminde hata ki katsayısıyla çarpılarak toplanır(Şekil4). İntegralin çok yükselmesini önlemek için sınırlandırmak gereklidir. Sürekli toplandığı için integral çok artarsa tekrar azalmasını beklemek zaman alır. Bu yüzden integrali sınırlamak sistemin çabuk toparlamasını sağlayacaktır.
dt = pid fonksiyonuna her girdiğindeki geçen zaman.
I = I + (Ki * Hata * dt)
Türev (Derivative) Terimi
Türev sistemdeki iki örnek arasındaki zamanı hesaplar.Eğer hatada bir değişim olmadıysa türev sıfır olur.
EHata = Bir önceki hatanın değeri (eski hata)
HD = Hata – EHata
D = (Kd * HD)/dt
PID Algoritması
Kp , Ki ve Kd katsayılarından oluşur.Bu katsayılar deneme yanılma yöntemiyle bulunur.Yapacağınız sistemde optimum katsayıları bulmak için değerde değişiliklik yapıp sistemi gözlemlemeniz gerekmektedir.Genelde robotlarda bu değerler bir potansiyometre kullanılarak değiştirilir.
Hata = Ref - Gelen
HD = Hata - EHata
P = Kp * Hata
I = I + (Ki * Hata * dt)
D = (Kd * HD)/dt
PID = P + I + D
EHata = Hata
Örnek PID Arduino Kodu
Bu kod ile sensörden alınan verilerle röle kontrolü gerçekleştirilmiş.
#include <PID_v1.h>
#define input_pin 0 // Kullanacağımız pinleri belirliyoruz.
#define role_pin 6
int Setpoint, Input, Output; // Değişkenleri tanımlıyoruz.
double Kp=1, Ki=5, Kd=1; // Ayar parametrelerimizi tanımlayıp belirliyoruz.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
int WindowSize = 1000; // Pulse için belirlediğimiz maksimum süre.
unsigned long windowStartTime;
void setup()
{
Serial.begin(9600);
windowStartTime = millis(); // Değişkenlerimizi atıyoruz, analog iletişimi başlatıyoruz.
Setpoint = 90; // Suyun gelmesini istediğimiz sıcaklık değeri.
myPID.SetOutputLimits(0, WindowSize); // PWM işleminin gerçekleşme süre aralığını belirliyoruz.
myPID.SetMode(AUTOMATIC); // PID kontrolörümüzü açıyoruz.
}
void loop()
{
Input = analogRead(input_pin); // PID kontrolörümüze göre rölenin açık duruma geçmesi
myPID.Compute(); // veya kapalı duruma geçmesini sağlayan kod.
if (millis() - windowStartTime > WindowSize)
{
windowStartTime += WindowSize;
}
if (Output < millis() - windowStartTime) digitalWrite(role_pin, HIGH);
else digitalWrite(role_pin, LOW);
}
Merhaba
Büyür eğitim destek yazılarınızı önemsiyorum ve diğer mühendislik konularını anlatmanızı; gelecek nesillerin yetişmesi anlamında destekliyorum