- Katılım
- 18 Mar 2008
- Mesajlar
- 1,179
- Puanları
- 92
Aslında PID kontrolü öğrenmek o kadar zor değildir. Ben yaklaşık 5 yıldır LabVIEW ile kendi kontrol algoritmamı kullanıyorum, PID değil. Kendi kontrol sisteminizi yapınca büyük resme bakmış oluyorsunuz. Piyasada bir çok konuda olduğu gibi PID konusunda kavram kargaşası yaratacak söylemler çok fazla olduğu için aslında kafanız karışıyor. Bu yüzden biraz kontrol sistemlerinden ve PID özelinde konuşalım.
Bir kontrol sistemi olarak servo motor uygulamasını düşünelim. Servo motoru istediğimiz gibi çalıştırmanın birden fazla yöntemi var. Analog çıkışla sürme veya hazır kütüphanelere ilgili parametreleri göndererek sürme gibi düşünebiliriz. Aslında temelde iki yöntem de ne yapar diye düşünürsek, o motorun hareket etmesini sağlayacak sinyali üretirler. Motorun yapmasını istediğiniz şeyleri yapması için, doğru yapıp yapmadığını anlayabileceği bir bilgi gerekmektedir. İnsan gözü kapalıyken rastgele yürüyeceği için tamamen kontrolsüz yürür. Dengeli yürümesi gözle alakalı olmadığı için dengeli yürüyebilir ama istediği dönüşlü yollara gitmesi için yön bilgisine ihtiyacı var. Bu durumu motorun açık çevrim çalışmasına benzetebiliriz. Ama gözümüz açıkken, herhangi bir problemimiz yoksa, muhteşem bir şekilde hareket ederiz. Frenleme ihtiyacı duymadan istediğimiz yöne döner, zıplar, yürür veya koşarız. Bu durumu da motorun kapalı çevrim çalışmasına benzetebiliriz. Encoder bilgisi düzgün geldiği zaman istediğimiz konumda istediğimiz hızda hareket etmesini sağlayabiliriz. Bu bilgiler temel kontrol sistemi içindi, şimdi biraz da kısaca PID kontrolden bahsedelim.
Öncelikle ben PID cihazı tabirine karşıyım. PID kontrol bir algoritmadır ve bir cihaz değildir. Birçok insanın PID dendiği zaman sıcaklık kontrol cihazları aklına gelmektedir. İşte kavram kargaşası dediğim konu budur. Neyse, biz devam edelim.
Kapalı çevrim kontrol sistemi için yer yüzündeki en güzel ve muazzam örnek insandır. Masanın üstündeki bir poşeti alacağınız zaman doğru şekilde yönelir ve kavrarsınız. İlk tuttuğunuz anda uzattığınız güçte kaldıramayacağını farkettiğiniz anda daha fazla güç uygular, havada tutar ve istediğiniz yere götürürsünüz. Şimdi bu anı bir motordaki PID algoritması için düşünelim. PLC kütüphanesinde standart PID parametreleri ile motor harekete başlamış olsun yani poşeti kaldırsın. Eğer uygulanan güç yeterli olmazsa poşeti kaldırmak için P yani oransal parametresini arttırmanız gerekir. Bu parametre direkt olarak çıkışa etki eder. Örneğin siz 50 mm kaldırmak istiyorsunuz ama milin dönmesi için daha fazla güç gerekiyor. Sizin verdiğiniz parametrelerle 40 mm'de kalıyor. Oransal değerini biraz daha arttırdığınız zaman 50 mm'ye yaklaştığınızı görürsünüz. Aynı şekilde oransal değeri fazla gelirse ilk hareketinizde 60 mm'ye çıkıp sonra 50 mm'ye gelmeye çalışan bir hareket görürsünüz ki Overshoot denilen durum da budur. Yani başka bir deyişle kontrol sistemi çok agresif hareket eder. Geri beslemeyi okuyup işlem yapana kadar çoktan set değerini kaçırmış olur ama hızınız da artmış olur çünkü analog voltajınız artmış olur. Kısacası; eğer oransal değeri çok fazla olursa motor olması gerekenden çok hızlı hareket edip sizin set değerinizi aşıp, geri gelip, o değeri yaklaşmaya çalışır. Peki o zaman mükemmel bir oransal değeri yakalarsak niye I yani integral kazancına ihtiyacımız olsun ki?
Sadece oransal çalışan sistemler bahsettiğimiz gibi çıkışa direkt etki etmesinden dolayı her zaman agresif olur. Anlık duruşlar veya adımlarınız varsa sadece oransal ile durmaya çalışmak çok sert olacaktır. Bu hareketi yumuşatmak için düşük oransal değeri seçmek gerekir. Ama bu sefer de istenilen set değerine ulaşamamış olacağız yani hep bir hata değeri olacak. Örneğin 50 mm'ye git denildiğinde 48 mm'de kaldığını düşünürsek, motorda 2 mm'lik bir hata söz konusudur. İşte integral değeri bu 2 mm'lik farkı sıfırlamak için ayarlanır. Böylelikle, uygun integral ve oransal değerleri ile hem agresif olmayan hem de hatalı olmayan bir sistem elde etmiş oluruz.
PID kontrol aslında çok da akıllı bir algoritma değildir çünkü örneğimizdeki milin maruz kaldığı yük değiştikçe çoğu zaman parametrelerin de değişmesi gerekir. Bunun için PID kontrole seri olarak başka teknikler de kullanılır, akıllı olması sağlanır. Günümüzde artık PID kontrolden çok daha iyi algoritmalar geliştirildi ve geliştiriliyor. Örneğin popüler olanlardan birisi model tabanlı kontrol sistemi: https://en.wikipedia.org/wiki/Model-based_design. Benim geliştirdiğim kontrol sistemimde örnek aldığım modelden bağımsız adaptif kontrol (Model Free Adaptive Control) algoritması çok daha başarılıdır. (http://www.cybosoft.com/newsevents/mfa.html)
Özetle; kontrol sistemlerini anlamak için yorumlamak gerekiyor. Sadece kütüphanelerden kod çağırmak bir çok kişi için yeterli olabilir ancak farklı bir uygulamada sıkıntı yaşanabilir.
Umarım açıklamalarım faydalı olmuştur. Aslında uzun zamandır böyle bir şey yapmak istiyordum ama yoğunluktan dolayı bir türlü nasip olmadı. Biraz daha düzenli ve örnekli olmasını isterdim. Yakın bir zamanda kısmetse onu da yaparım.
İyi çalışmalar,
Bir kontrol sistemi olarak servo motor uygulamasını düşünelim. Servo motoru istediğimiz gibi çalıştırmanın birden fazla yöntemi var. Analog çıkışla sürme veya hazır kütüphanelere ilgili parametreleri göndererek sürme gibi düşünebiliriz. Aslında temelde iki yöntem de ne yapar diye düşünürsek, o motorun hareket etmesini sağlayacak sinyali üretirler. Motorun yapmasını istediğiniz şeyleri yapması için, doğru yapıp yapmadığını anlayabileceği bir bilgi gerekmektedir. İnsan gözü kapalıyken rastgele yürüyeceği için tamamen kontrolsüz yürür. Dengeli yürümesi gözle alakalı olmadığı için dengeli yürüyebilir ama istediği dönüşlü yollara gitmesi için yön bilgisine ihtiyacı var. Bu durumu motorun açık çevrim çalışmasına benzetebiliriz. Ama gözümüz açıkken, herhangi bir problemimiz yoksa, muhteşem bir şekilde hareket ederiz. Frenleme ihtiyacı duymadan istediğimiz yöne döner, zıplar, yürür veya koşarız. Bu durumu da motorun kapalı çevrim çalışmasına benzetebiliriz. Encoder bilgisi düzgün geldiği zaman istediğimiz konumda istediğimiz hızda hareket etmesini sağlayabiliriz. Bu bilgiler temel kontrol sistemi içindi, şimdi biraz da kısaca PID kontrolden bahsedelim.
Öncelikle ben PID cihazı tabirine karşıyım. PID kontrol bir algoritmadır ve bir cihaz değildir. Birçok insanın PID dendiği zaman sıcaklık kontrol cihazları aklına gelmektedir. İşte kavram kargaşası dediğim konu budur. Neyse, biz devam edelim.
Kapalı çevrim kontrol sistemi için yer yüzündeki en güzel ve muazzam örnek insandır. Masanın üstündeki bir poşeti alacağınız zaman doğru şekilde yönelir ve kavrarsınız. İlk tuttuğunuz anda uzattığınız güçte kaldıramayacağını farkettiğiniz anda daha fazla güç uygular, havada tutar ve istediğiniz yere götürürsünüz. Şimdi bu anı bir motordaki PID algoritması için düşünelim. PLC kütüphanesinde standart PID parametreleri ile motor harekete başlamış olsun yani poşeti kaldırsın. Eğer uygulanan güç yeterli olmazsa poşeti kaldırmak için P yani oransal parametresini arttırmanız gerekir. Bu parametre direkt olarak çıkışa etki eder. Örneğin siz 50 mm kaldırmak istiyorsunuz ama milin dönmesi için daha fazla güç gerekiyor. Sizin verdiğiniz parametrelerle 40 mm'de kalıyor. Oransal değerini biraz daha arttırdığınız zaman 50 mm'ye yaklaştığınızı görürsünüz. Aynı şekilde oransal değeri fazla gelirse ilk hareketinizde 60 mm'ye çıkıp sonra 50 mm'ye gelmeye çalışan bir hareket görürsünüz ki Overshoot denilen durum da budur. Yani başka bir deyişle kontrol sistemi çok agresif hareket eder. Geri beslemeyi okuyup işlem yapana kadar çoktan set değerini kaçırmış olur ama hızınız da artmış olur çünkü analog voltajınız artmış olur. Kısacası; eğer oransal değeri çok fazla olursa motor olması gerekenden çok hızlı hareket edip sizin set değerinizi aşıp, geri gelip, o değeri yaklaşmaya çalışır. Peki o zaman mükemmel bir oransal değeri yakalarsak niye I yani integral kazancına ihtiyacımız olsun ki?
Sadece oransal çalışan sistemler bahsettiğimiz gibi çıkışa direkt etki etmesinden dolayı her zaman agresif olur. Anlık duruşlar veya adımlarınız varsa sadece oransal ile durmaya çalışmak çok sert olacaktır. Bu hareketi yumuşatmak için düşük oransal değeri seçmek gerekir. Ama bu sefer de istenilen set değerine ulaşamamış olacağız yani hep bir hata değeri olacak. Örneğin 50 mm'ye git denildiğinde 48 mm'de kaldığını düşünürsek, motorda 2 mm'lik bir hata söz konusudur. İşte integral değeri bu 2 mm'lik farkı sıfırlamak için ayarlanır. Böylelikle, uygun integral ve oransal değerleri ile hem agresif olmayan hem de hatalı olmayan bir sistem elde etmiş oluruz.
PID kontrol aslında çok da akıllı bir algoritma değildir çünkü örneğimizdeki milin maruz kaldığı yük değiştikçe çoğu zaman parametrelerin de değişmesi gerekir. Bunun için PID kontrole seri olarak başka teknikler de kullanılır, akıllı olması sağlanır. Günümüzde artık PID kontrolden çok daha iyi algoritmalar geliştirildi ve geliştiriliyor. Örneğin popüler olanlardan birisi model tabanlı kontrol sistemi: https://en.wikipedia.org/wiki/Model-based_design. Benim geliştirdiğim kontrol sistemimde örnek aldığım modelden bağımsız adaptif kontrol (Model Free Adaptive Control) algoritması çok daha başarılıdır. (http://www.cybosoft.com/newsevents/mfa.html)
Özetle; kontrol sistemlerini anlamak için yorumlamak gerekiyor. Sadece kütüphanelerden kod çağırmak bir çok kişi için yeterli olabilir ancak farklı bir uygulamada sıkıntı yaşanabilir.
Umarım açıklamalarım faydalı olmuştur. Aslında uzun zamandır böyle bir şey yapmak istiyordum ama yoğunluktan dolayı bir türlü nasip olmadı. Biraz daha düzenli ve örnekli olmasını isterdim. Yakın bir zamanda kısmetse onu da yaparım.
İyi çalışmalar,