Jump to content
şenol eker

Nedir bu PID? Neden gerekli?

Önerilen İletiler

şenol eker    0

PID birçok yerde kullanılsa da en iyi "bir odayı ısıtma" problemi ile tarif edilebilir. Bir odanın sıcaklığını sabit tutmak istiyorsak, bir ısıtıcı elemana, bir de sıcaklığı ölçen elemana ihtiyacımız var. Sıcaklığı ölçen elemana "termometre", ısıtıcı elemana da "ısıtıcı" diyelim.

İlk akla gelen şey, eğer termometre istediğimiz sıcaklıktan az bir değer gösteriyorsa ısıtmaya başlar, istediğimiz sıcaklığa ulaşınca da ısıtmayı keseriz. Bunu hepimiz biliriz,  "termostat" bunun adı.

Ama şöyle bir sıkıntı var: Eğer termometreyi hemen ısıtıcının yanına koyarsak, ısıtıcı çalışır çalışmaz termometre yüksek bir sıcaklık değeri gösterir. Çünkü ısıtıcı gerçekten sıcaktır. Ama ısıtmamız gereken ortam henüz ısınmamıştır. O halde termometreyi ısıtıcıdan uzağa koymamız gerekir.

Termometreyi uzağa koyduğumuzda ortam ısınır, ama tam da istediğimiz sıcaklıkta tutamayız ortamı. Isıtıcıyı çalıştırdığımızda ısıtıcı ortamı ısıtmaya başlar, termometremiz sıcaklığı görür, istenen sıcaklığa geldiğinde ısıtıcıyı kapatırız ama ısıtıcının yüksek sıcaklığı ile ortam bir süre daha  ısınmaya devam eder, sıcaklık bizim istediğimizden daha yüksek değere çıkar. Neyse, düşene kadar bekleriz, sıcaklık sınıra geldiğinde ısıtıcıyı açarız ama bu sefer de ısıtıcı kendini ısıtana kadar ortam soğumaya devam edeceğinden bizim istediğimiz sıcaklığın altına düşer. Mesela biz 30 dereceye ayarladıysak bir 25'e düşer, bir 35'e çıkar. Eh, bu da bir şey tabii ki. Ama neden daha iyisi olmasın? Nasıl bir şey yapmalıyız ki sıcaklık tam da o derecede dursun?

Aslında şöyle yapabiliriz:

Isıtıcımız aç - kapa şeklinde değil de ayarlı olsa, ilk başta sonuna kadar açıp ortamı istenen sıcaklığa getirsem, sonra öyle bir şekilde kıssam ki, istediğim sıcaklıktan ne aşağı ne yukarı gitmese. Ne güzel olur değil mi?

Bu mümkün aslında. Yapmamız gereken oda ne kadar ısı kaybediyorsa, ısıtıcıdan aynı miktar ısıyı ortama verirsek odanın sıcaklığı sabit kalır. Peki odanın ne kadar ısı kaybettiğini nereden bileceğiz? Bunu ölçmek zor değil mi? Bunun bir kolayı yok mu?

Bunu yapmak aslında çok kolay. Isıtıcıyı öyle sonuna kadar açmayacağız. Oda sıcaklığı ile bizim istediğimiz sıcaklık arasındaki fark ne kadar büyükse o kadar çok açacağız. Tabii tam tersine istenenden daha sıcak ise, ısıtıcıyı daha çok kısacağız. Böylece tam noktasını bulabileceğiz.

Termometreden gelen sıcaklık "t" olsun.

İstediğimiz sıcaklık "g" olsun.

Bu "g-t" değeri, bizim hatamızdır.

Yani bizim sistemimiz istenen şeyi yapamamış demektir. Yani bir hatamız var demektir. Bu hata da, istenen ve ölçülen sıcaklık değerleri arasındaki farktır. Biz, bu farkın yani hatanın sıfır olmasını isteriz. Bakın bu "hata" çok mühim. PID'in kalbi bu "hata"

(Devam Edecek)

İletiyi paylaş


İletiye bağlantı
Sitelerde Paylaş
şenol eker    0

PID'deki bu üç harf, üç hesaplamaya karşılık gelir.

Birincisi: P. Proportional'in kısaltması. Proportional kelimesi, "oransal" demek sözlüklere göre. Zaten birçok durumda PID'nin sadece P'sini kullandığımızda işimiz görülür. Odanın "sıcaklığını" sabit tutabiliriz. I ise, kapı açılıp kapandığında içerisi soğuyacak ya, istenen sıcaklığa daha "düzgün" gelmesi içindir.

Önceki gönderide "hata"yı hesaplamıştık. Hesap denirse tabii :) Yani istenen sıcaklıktan ölçtüğümüz sıcaklığı çıkartmıştık.

Bu hata ne kadar büyükse, ısıtıcımızı o kadar "güçlü" çalıştıracağız.

Mesela ısıtıcıyı PWM ile ya da analog olarak çalıştırıyor olabiliriz. (PWM ve Analog nedir biliyorsunuz umarım. Bilmiyorsanız önce bunları iyice anlayın, aksi halde devamı havada kalacaktır, kafanız karışacaktır, dolayısı ile devam etmeyin, PWM'i öğrenin, Analog kontrolu öğrenin sonra buraya tekrar gelin)

Isıtıcımızı her ne şekilde kontrol ediyorsak edelim, bunu bir "sayı" ile yapacağız. Bu sayının bir alt bir üst sınırı vardır. Mesela PWM ile kontrol ediyorsak bir "duty cycle", analog olarak kontrol ediyorsak bir "analog deger" vardır. Örneğin ısıtıcımıza "0" gönderirsek hiç çalışmıyor, "100" gönderirsek son gücüyle çalışıyor olsun. Kimi zaman bu değerler örneğin "0" ile "1" arasında ya da "0" ile "1023" arasında olabilir.

Eğer PID'ye bir göz attıysanız, P,I ve D için "katsayılar" verilmesi gerektiğini ve bu katsayıları belirlemenin çok zor olduğunu öğrenmişsinizdir. Şimdi "hata" yı bulduğumuza göre, P değerini de vererek PID'mizin ilk kısmını yapalım.

Evet, şimdi iki değer çıktı karşımıza: alt ve üst sınır. Bir de ne vardır? istenen sıcaklıkla ölçülen sıcaklık arasındaki fark, yani "hata". Üç tane değerimiz oldu. Alt ve üst sınırı neden kullanacağız? Eğer hesap sonucu alt sınırdan az ya da üst sınırdan çok çıkarsa sonucu bunlara uyduracağız:

Basic kullanıyorsak:
 

hata=istenen_sicaklık-olculen_sıcaklik
deger=hata*P_katsayisi
IF deger>UstSinir THEN deger= UstSinir END IF
IF deger<AltSinir THEN deger= AltSinir END IF

Ya da C kullanıyorsak:
 

hata=istenen_sicaklık-olculen_sıcaklik;
deger=hata*P_katsayisi;
IF (deger>UstSinir) deger= UstSinir;
IF (deger<AltSinir) deger=AltSinir;

Sonra bu değeri ısıtıcımıza gönderiyoruz. Hepsi bu.

Şimdi bu anlattıklarımızı program haline getirelim. Ama hem BASIC hem C yazmak istemiyorum, ben buraya C olarak yazacağım.


 

istenen_sicaklik=25; //Odamızı 25 derece sıcaklıkta sabit tutmak istiyoruz.
UstSinir=100; //Isıtıcımızı tam güç çalıştırmak için vermemiz gereken değer
AltSinir=0; //Isıtıcımıza verebileceğimiz en düşük değer
P_katsayisi=1;
while (1) //PID döngüsü, Bu kısımları programınızda başka kolar da varsa, ana döngüye yerleştireceksiniz.
{
  olculen_sicaklik=TermometreOku(); //Termometre okumak konumuz dışında, onu açıklamayacağız
  hata=istenen_sicaklık-olculen_sıcaklik;
  deger=hata*P_katsayisi;
  IF (deger>UstSinir) deger= UstSinir;
  IF (deger<AltSinir) deger=AltSinir;
  IsiticiCalistir(deger); //Isıtıcıyı PWM ya da analog ile çalıştırmak da konumuz dışında
}

Böylece bir P kontrolü yapmış olduk. Bu kadar basit :)
 

(Devam Edecek)

İletiyi paylaş


İletiye bağlantı
Sitelerde Paylaş
Misafir
Bu konu kapalıdır ama konuya cevap yazmaya yetkiniz var görünüyor.

×

Önemli Bilgilendirme

Facebook / Twitter / Google hesabınızla kolayca kaydolup cevap verebilir, soru sorabilir, istekte bulunabilirsiniz.
Devam etmeniz, forum kurallarını kabul ettiğiniz anlamına gelir.            Forum Kuralları