avatar_Mucit23

PID kontrol Sistemleri

Başlatan Mucit23, 30 Kasım 2011, 11:30:30

inventor

#15
PID NEDİR?  ALGORİTMASI NASIL HAZIRLANIR? ÇIKIŞ NASIL KULLANILIR?

Şimdi bu konulara tek tek değinelim. İlk olarak ;

Oransal ( P ) çalışma modu:

Üç çalışma modu içerisinde temel olanı bu moddur. Adından da anlaşılacağı gibi; referans kaynağından gelen bilgiye göre oransal bir çıkış verir. Matematiksel olarak ifade edecek olursak :

CIKIS= Kp * (SET - OLCUM )

Burada ki ifadeleri açalım;

CIKIS --> P kontrolör tarafından kontrol noktası için üretilen sinyal
Kp ------> Kullanıcı tarafından girilen  katsayı. Matlap ile hesaplanan sayı. Ya da sistemde deneme yapılarak bulunuyor
SET -----> Sistemdeki kontrol noktasının gelmesini istediğimiz değer.
OLCUM -> Sistemdeki kontrol noktasının o anki değeri. Referans alınan değer

Örnekle açıklayalım; 

İçi dolu bir su tankımız var diyelim ve altında bir rezistans takılı olsun. Suyun sıcaklığını görebilmemiz için de bir termoeleman olsun ve o andaki suyun sıcaklığı 25 C olsun. Amacımız bu tankın sıcaklığını 75 C derecede sabit tutmak olsun. Bu işi yapacak olan cihazımıza kontrolör diyelim. Farzedelim ki bu kontrolör 0V .......10V arasında bir çıkış üretiyor olsun. Isıtıcımızıda 0v.....10V  girişli bir güç elemanı ile sürelim.

Bu sistemdeki verilere göre formülü açalım;

CIKIS      : 1v......10v arasındaki analog değer. Isıtıcıyı sürecek olan yarı iletken vb. sisteme bilgi gönderecek.
SET         : 75 C . Bizim olmasını istediğimiz ısı değeri
OLCUM   : O anki suyun sıcaklığı. Isıtıcı devreye girdikten sonrada sürekli aldığımız ölçüm değeri. ( 25 C )
Kp          : Düzeltme katsayısı. Oransal katsayı. Bu sayıyı birazdan etraflıca inceleyeceğiz.


Formülümüzü tekrar yazarsak ;

ÇIKIŞ= Kp*(SET-ÖLÇÜM)

Burada bir bilgi daha verelim. (SET-ÖLÇÜM) işleminin sonucuna HATA sinyali diyoruz. OFFSET veya "e" de denilir. Bazende kayma deriz. İlerleyen kısımlarda HATA ya da "e" ismini kullanacağız.

ÇIKIŞ=Kp*(75-25)
ÇIKIŞ=Kp*50       

Bu işlemde Kp değerini "1" kabul edersek çıkış değerimiz 50 olacaktır. Oransal çıkışlı cihazların çıkışını genelde % olarak ifade ederiz. O zaman çıkış değerimiz %50 olacaktır. Yani tankın sıcaklığı 25 derece ise ve biz bu ısıyı 75 derece yapmak istiyorsak bizim cihaz çıkış sinyalini %50 yapacaktır. Cihazımızın çıkışı 0....10 V  verebiliyorsa %50 için bize 5 V çıkış verecektir. Diyelim ki bir süre sonra tankın ısısı 43 C dereceye yükseldi. O anda cihazımız bize nasıl çıkış verecek bakalım:

ÇIKIŞ=Kp*(75-43)
ÇIKIŞ=Kp*32

Kp değerini "1" kabul edersek çıkışımız %32 olacaktır. Bu da aynı sistem için bizim cihazımızın 3,2V çıkış vermesi anlamına gelir. Sanırım buraya kadar bir sorun yok. Gelelim Kp değerine.

Yukarıdaki örnekte gördük ki; 25 C derecelik bir tankın sıcaklığını 75 C Dereceye çıkarabilmek için cihazımız bize sadece %50 gibi bir çıkış verdi.Oysa ki sıcaklık farkı 50 C derece gibi farka sahipti. Biz isteriz ki çıkışımız %100 olsun,SET ile ÖLÇÜM yaklaşınca oransal kontrole geçsin. İşte bu noktada Kp ve RÖLE devreye giriyor.

Kp değerinin prosese göre hesaplandığını söylemiştik. Diyelim ki bizim prosesimizde sıcaklık ayarı sürekli 30 C derece ile 75 C  derece arasında değişiyor. Yani suyumuz en az 30 C derece oluyor. Böyle bir durumda Kp için bir hesaplama yapalım.

Kp=5   şeklinde bir sayı kullanalım. ( Sayıyı tamamen uydurma kullandık )

ÇIKIŞ=5*(75-30)
ÇIKIŞ=5*40
ÇIKIŞ=200

Bir süre sonra ÖLÇÜM değerimiz 45 C - 55 C  - 70 C  derece oldu diyelim ;

ÇIKIŞ=5*(75-45) ==> ÇIKIŞ=150 ==> 10V

ÇIKIŞ=5*(75-55) ==> ÇIKIŞ=100 ==> 10V

ÇIKIŞ=5*(75-70) ==> ÇIKIŞ=25  ==> 2,5V

Şeklinde bir çıkış alırız. Burada Kp değerini oynayarak çıkış sinyalinin değerini istediğimiz gibi logaritmik yapabiliriz. ( Aslında lineer ama %100  ün üstü bir anlam ifde etmediği için logaritmik olmuş oluyor)

Cihazımızda bir yazılım varsa %100 ve üstü için HIGH ROLE gibi bir satır yazabiliriz. Röle kontolü ilede PID yapılabiliyor ama ben bu sistemlere PID demiyorum. Sonuçta oran değil ON-OFF kontrol olmuş oluyor. Ama ON- OFF kontrole göre daha hassas sonuç alınıyor. Şimdi Kp değeri hangi şartlarda değişir ona bakalım.

Bizim prosesimizde bir değişiklik oldu ve artık sıcaklık değeri 25 C derece ile 45 C derece arasında sabitlenecek diyelim. Set Noktamız 45 C derece, o anki  sıcaklığımızda 32 C derece olsun. Kp değerimiz yine 5 olsun.

ÇIKIŞ=5*(45-32) ==> ÇIKIŞ=45  ==> 4,5 V 

Görüldüğü gibi set noktasına sadece 13 C derece kaldı ama çıkış hala çok yüksek. Bu sistem sıcaklığı dengeleyebilmek için sürekli salınım yapacaktır ve kontrol işleminde çok zorlanacaktır. İşte böyle bir durumda Kp değerini düşürürüz. İlk verdiğimiz örnekte de aslında Kp değeri yüksek seçilmişti. Şimdi makul bir Kp ile tekrar hesaplayalım. Kp değerimiz 0,5 olsun.

ÇIKIŞ=0,5*(45-32) ==> ÇIKIŞ=6,5 ==>  0,65 V

Artık çok daha hassas ayarlama yapabilir ama bu seferde SET noktasına ulaşma konusunda bir gecikme söz konusu olacaktır. Bu nedenle Kp değerinin prosese göre tespit edilmesi gerekiyor. Çok yüksek seçilirse prosesi kontrol etmek oldukça zorlaşıyor, salınımlar artıyor. Düşük seçilirse SET noktasına ulaşmak oldukça uzun zaman gerektiriyor. MATLAB bu konuda bize bu sayının tespiti  konusunda kolaylık sağlıyor. Sürekli sistem üzerinde oynamadan masaüstünde değer bulduruyor. ( Ben MATLAB kullanmıyorum ve bilmiyorum. Çok lazım olursa bilen arkadaşlardan rica ediyorum tahmini bir değer gönderiyorlar ama onlar gerekli sistem bilgilerini tespit edip matlab a girene kadar ben yaklaşık değeri proseste bulmuş oluyorum.)

Şimdi de Proton ile kodları yazalım. Bu noktada hata yapabilirim. ETE hocam gerekli düzeltmeleri yapacaktır.



Dim PID_PS  As Word   ; Oransal Sürücü Değeri
Dim PID_Kp  As Word   ; Oransal Katsayı Değeri
Dim PID_e    As Word   ; Hata Değeri ( SET-ÖLÇÜM)

;Bir kesme rutini ile ya da daha farklı bir yolla sürekli ölçüm alınacak ve "e" değeri bulunacak. ( e=SET-ÖLÇÜM )

PID_PS = Abs PID_e                   ; Hata sinyalinin değerini oransal sürücüye yüklüyoruz
PID_PS = PID_PS */ PID_Kp          ; oransal sürücü değeri ile oransal katsayımızı çarpıyoruz (32 bit )         
If PID_e.15 = 1 Then PID_PS = -PID_PS  ; Hata sinyalinin 15. bitine bakarak yönünü öğreniyoruz ( +  -  )

; Bu son satırı PI ve PID kullanırken göreceğiz


P yani oransal kontrol hakkında aklıma gelenler bunlar. Buraya kadar ki kısım hakkında aklınıza gelen bir şey olursa birlikte tartışabiliriz.











İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

3mZ

#16
Öncelikle herkeze merhabalar;

Plastik imalatı yapıyorum asıl dalım elektronik ama plastik benim mecburiyetim. Ete hocanın yardımlarıyla 2012 de tam anlamıyla elektronik sıcaklık kontrol sanayisine hizmet vericem . İlk imalatımız termostat olucak bu arada ete hocam ve invertor arkadaşım karta bir bakı verin nasıl olmuş ekte,

Benim kendi yaptığım termostat çift fonksiyonlu çalışıyor birisi on/off birisi timer modunda zaman oransallı. on/off sisteminde klasik yöntem set değeri veriyorsunuz gelinmesi istenen derece o dereceye geldimi durur aktif derece set barajının altına düştüğü zaman çalışır timer modunda ise +/-30 derecelik sapmaları +/- 1 dereceye kadar indirgiyorum tamamen programsal ve ssr çıkışlı.

PID mantığını bilmiyorum ama kendi makinelerimde PID sistem var ve devreye saniyede 4 sefer girip çıktığını ve kontaktörlerimi mahfettiğini biliyorum :) yanlız bunu kötü bir sistem diye düşünmüyorum kullanmayı bilirsen tam tersine süper bir sistem 3 gün önce PID sistem çalışan bir cihaz aldım çıkışını öbür makinelerdeki gibi kontaktör bağlamadım solid state röle bağladım sonuç mükemmel 333 dereceye ayarlıyorum sabahtan akşama kadar aynı kalıyor 333 bir derce oynamıyor taki ben sıcaklığı artırıp veya azaltana kadar sistemi parçalamak için aldım bilginize içinde 10Amperlik bir normal röle var ve birde tryak kullanılmış ve oda 4-20mA lik oransal çıkış olarak verilmiş bilginize...

ETE Hocam sorunuza gelince sudan değirmenden bahsedince aklıma enerji üreteci gibi birşey geldi ;) sorunuzda anlamadığım nokta su motora sürekli aynı gelmiyor yani motorun emiş hattına sürekli aynı basınçta su gelmiyor sorun burdamı açıklarsanız sevinirim
saygılar
3mZ

Mucit23

#17
Teşekkür Ederim. Gerçekten mükemmel derecede anlaşılır anlatmışsınız. Konuyu merakla takip ediyorum. Hatta bu anlattıklarınızla P kontrollü sıcaklık kontrol sistemi yapabilirim. :D
Bazı PID kontrolü yapan termostatları inceledim. Hepsinde Kp Değeri 0 ile 100 arasında menüden ayarlanabiliyor. O halde benim anladığım Her farklı set değerinde KP (oransal Band) değeri 0 ile %100 arasında yeniden ayarlanıyor. Zaten Kp değeri 0 olarak seçilirse sistemin on-of olarak çalışması gerekiyor öyle değilmi
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

inventor

#18
3Mz arkadaşım,
PCB çalışmanı ilk fırsatta inceler fikrimi söylerim. PID için röleli kontrol olmaz diye bir şey yok. Tabii ki olur ama sürekli tik tak ses duyarsın. Mekanik kontakları yıpratır. SSR kullanırsan o sorun ortadan kalkar ama tam anlamıyla PID olmuş olmaz. Basit sistemlerde kullanılabilir ve kullanılıyor. Mesela plastik doğrama yapan arkadaşların tek kafa kaynak makinelerinde bunlardan bolca var. Ama hiç bir zaman oransal çıkış gibi olmazlar. Kontaklı PID mantığı kaba sistemler için geçerlidir. Oransal PID virgülden sonrası ile rahtlıkla oynayabilir. ( 123,33 C gibi )

Mucit23,

Kp değerini % likli bir sayı gibi düşünme ya da kendini buna şartlandırma. 1,23 olabilir ya da 2 olabilir. Bunun gibi. % likli bir rakam gibi düşünmen seni sınırlar.
Kp değerini hiçbir zaman 0 yapmayız. Nedeni de şu;

ÇIKIŞ=Kp*e   ( e=SET-ÖLÇÜM )
e=12 olsun
Kp=0

ÇIKIŞ=Kp*12
ÇIKIŞ=0*12
ÇIKIŞ=0

Hiçbir zaman çıkış alamayız. Bunu genelde PID kontrolü kapatmak için kullanırız. Cihazların katologlarında da bu konuda uyarı vardır. Kp >0  olmalı der.

Sistemdeki set noktasının değiştirilmesi durumunda Kp sürekli değişecek diye bir şey yok. Sonuçta aynı rezistansı aynı tankda kullanıyorsanız , rezistans veriminde bir değişiklik yoksa yani proses değişmemişse ,sadece SET noktasını değiştirecekseniz Kp yi oynamanıza gerek yoktur. Kp sadece proses değişikliklerinde kurcalanır.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

inventor

#19
Şimdi İntegral konusuna gelelim.

PID nin I kısmını oluşturan integral hesabı karışık gibi görünsede aslında ETE hocanında sık sık kullandığı ve bizlerede anlattığı ortalama alma konusunu ilgilendirir. Kısaca tanımlamayı şöyle yapabiliriz; HATA (e) değerinin zamana bağlı olarak toplanması olayına integral alma denilir.

P ( Oransal ) kontrol için yukarıda söylemeyi unuttuğumuz bir şey var. P ( Oransal ) kontrol hiç bir zaman SET=ÖLÇÜM  eşitliğini sağlayamaz. Arada mutlaka bir miktar fark olur. Ama SET değerine paralel bir farktır bu. PID yazısını tamaladığımızda bu konuyu grafiklerle daha iyi anlatabilirim. Şimdi konu dağılmasın.

İntegral alma işlemi P ( Oransal ) çalışmada ortaya çıkan bu paralelliği ortadan kaldırabilir. Hatta tek başına bile kullanılabilir ama bu durumda karşımıza bir sorun çıkar. Bu da zaman sorunudur. İntegral sistemin SET=ÖLÇÜM eşitliğini sağlaması için uzunca bir zaman gereklidir. Bu da ani tepki veren sistemlerde kullanışsız olması demektir. Küçük sistemlerde tek başına kullanılabilir. ( I kontrol olarak bilinir )

Bu nedenle P ( oransal ) ve I ( integral ) birlikte kullanılırlar ve adına PI kontrol denilir.  I ( integral ) , P ( oransal ) den kaynaklanan SET=ÖLÇÜM eşitlik hatalarını ortadan kaldırırken , P ( oransal ) da ,I ( integral ) den kaynaklanan zaman gecikmelerine karşı ani tepkiler verir.

PID için integral hesabı özetle şöyle yapılır. Öncelikle ( SET-ÖLÇÜM ) işlemi sonunda e ( HATA ) değerini buluruz. Sonra bu değeri belirli zaman aralıklarında,belirli sayıda tekrar tekrar ölçeriz. Sürenin sonunda ( Belirlenen miktarda ) ölçüm yaptıktan sonra ortalama değeri buluruz. Formül şu şekilde anlatılır ama programda incelerseniz daha iyi anlarsınız. Matematiksel ifadesi şu;

ÇIKIŞ = Ki * ∑(SET - ÖLÇÜM)dt

Buradaki ∑ işaretinin altında ve üstünde sizin integral ölçüm sayınız olduğunu varsayın. 1 den 8 e gibi. dt değeride bizim zaman sabitimiz oluyor. Bence formüle çok takılmayın. Direk örnek üzerinden gidin.

Örnekle açıklayalım,

P kontrol konusundaki örneğimize dönersek, orada sürekli olarak ÖLÇÜM değerini analog olarak okuyorduk. Bu işleme I ( integral) kontrolde de  devam edeceğiz. Ama bir yandan da zaman tutup,belli adet de ölçüm yapacağız.Sonrasında da bu ölçümlerin ortalamasını alacağız. Burada zaman tutacağız derken ; yaptığımız her ölçümün arasının eşit olması gerektiğini anlatmaya çalışıyorum. 100 ms aralıklarla ölçüm yapıyorsak bu bütün aralıklarda aynı olmalı. Yoksa integral hesap saçmalamaya başlar. PIC programı yazarken başka işlemlerin bu aralığı bozmasını engelemeniz gerekiyor.

SET    ÖLÇÜM    e ( HATA )    ZAMAN
75          69              6              150 
75          69              6              150
75          70              5              150
75          71              4              150
75          72              3              150


buradan ;

e= 6+6+5+4+3 / 5
e= 4,8

buluruz. Buraya kadarı tanıdık gelmiştir. Sonrasıda aslınd bilindik şeyler. Bunları proton kodları olarak yazayım,daha iyi anlaşılır.


    Dim PID_ISET As PID_bStatus.6           ; İntegral sürücü için flag                               
    Dim PID_Ki As Word                              ; integral kazanc ( Bizim girdiğimiz değer - Matlab ın hesapladığı )   
    Dim PID_e As Word                               ; e değeri ( HATA)  e=SET-ÖLÇÜM 
    Dim PID_it As Byte                                ; integral zaman sabitimiz.Buraya adet bilgisi gireceğiz
    Dim PID_Imax As Word                        ; İntegral değer hesabı için girilecek max. değer. Programa bakınca anlarsınız
    Dim PID_IS As Word                             ; İntegral sürücü
    Dim PID_isat As Word                          ; integral sürücü ara toplam değeri
    Dim PID_Isayac As Byte                      ; İntegral ölçümler için sayıcı
    Dim PID_a As Bit                                 ;  Bit bazında kayıt yapabileceğimiz bir register

integral:

PID_isat = PID_isat + PID_e              ; HATA değerini ara toplam değeri ile topluyoruz
PID_Isayac= PID_Isayac + 1              ; Sayaç değerimizi arttırıyoruz
If PID_Isayac>= PID_it Then              ;( PID_it = 8 ) kaç adet ölçüm yapacaksak onun karşılaştırmasını yapıyoruz. Ben 8 dedim
    PID_a= PID_isat.15                         ; ara toplam değerinin işaretine bakıyoruz. ( + - )
    PID_isat = Abs PID_isat                   ; ara toplamın mutlak değerini alıyoruz
    PID_isat = PID_isat*/ PID_Ki          ; ara toplam değeri ile Ki değerini çarpıyoruz. Ki değerini biz veriyoruz. Matlabın işi :)
    PID_isat = PID_isat / PID_it            ; ara toplam değerini integral ölçüm adedine bölüyoruz. Ben 8 kabul etmiştim
    If PID_a = 1 Then PID_isat = -PID_isat      ; ara toplam değerinin işaretini geri yüklüyoruz
    PID_IS = PID_IS+ PID_isat              ; İntegral sürücünün değerini hesaplıyoruz.Bu değer giderek artar. Ne zaman isat değeri
                                      ; negatife kaydı o zaman bu değer azalmaya başlar. Böylece SET noktasının altında ve 
                                                     ; üstünde salınım yapar. Bir süre sonra tam SET değerine oturur. Biraz uzun sürer
    PID_a = PID_IS.15                          ; Integral sürücünün işaretini kaydediyoruz ( + - )
    PID_IS = Abs PID_IS                      ; integral sürücünün mutlak değerini kaydediyoruz
        
        If PID_IS >= PID_Imax Then          ; Hesap sonucu integral sürücü değeri 100 den büyükse 
            PID_ISET= 1                                 ; Taşma var diyoruz
            PID_IS = PID_Imax                     ; ve 100 e eşitliyoruz. ( Imax için önceden 100 değerini girmiştim.)
        EndIf

       If PID_a = 1 Then PID_IS = -PID_IS   ; integral sürücünün işaretini geri yüklüyoruz ( +  - )
          PID_Isayac= 0                                   ; İntegral sayacı sıfırlıyoruz
          PID_isat = 0                                       ; ara toplam değerini sıfırlıyoruz                        
EndIf

Saat 1:30 olmuş. Sabah devam ederiz.
 

İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

@3MZ,
Verdiğim değirmen örneği konuyu yada sorunu açıklamak için yalnızca bir örnek idi. AMa sorunun şu olduğunu tekrar belirteyim.
Vana eşit miktarda su geçiriyor Ne kadar açık ise o kadar su geçiriyor. Sorun şu;
- biz değirmen devirine baktığımız zaman devrin set değerini geçtiğini görüyoruz ve geçmi deyip vanayı biraz kısıyoruz.
- Bu seferde devir set değerin altına düşüyor ve vanayı tekrar açıyoruz.
- gördüğünüz gibi değrmen devri bir artıyor bir azalıyor. İşte bu On-Off kontrolün karşılığı olan hastalıktır.
Halbuki bizim vana henüz devir set devri aşmamış iken belirli oranmlarda açılıp kapansa devir set değerinde kalacak idi. Bunuda PID yapabiliyor ancak.İşte bunu anlatmaya çalışmış idim.


@ Inventor,
Anlatımlar çok güzel ve anlaşılır şekilde. Sonunda bu işi bir örnekle bitirmemizde yarar görüyorum. Herkes bir örnek düşünsün ve onu bir şekilde hayata geçirelimki konu pekişmiş olsun.

Ete

inventor

#21
Anlatımlar bitince bir uygulama yapalım hocam. Böylece ben de parçalar halinde yazdığım yazılımın bütününe kavuşmuş olurum. Proje için fikir üretirken mümkünse akış - basınç ve sıcaklık üzerine düşünmemeye çalışın. Bunlar için en ideal olanı genelde PI kontroldür. Bunların dışında bir şey olsun. PID genelde hızlı değişim gösteren prosesler için kullanılır. Sizin değirmen konusuna bakabiliriz,sanırım uygun bir konudur. Düşünmek lazım biraz.

Şimdi T ( Türev ) kontrol konusuna girelim.

Türev kontrol ,Ölçüm noktasının o anki değeri ile set değeri arasındaki farkın ( SET - ÖLÇÜM ) değişim hızına göre çıkış sinyali üretir. Matematiksel ifadesi şu şekildedir ;

ÇIKIŞ = Kd [d( SET - ÖLÇÜM )/dt]

Yukarıdaki formülün [d( SET - ÖLÇÜM )/dt] bölümünün anlamı ; hatadaki değişimin zamandaki değişime oranını formüle etmesi olarak anlatılabilir. Her bir (Δy) nin, geçen zamana (Δt) bölünmesi anlamına gelir. Sanırım örnekle daha kolay anlaşılacaktır. Aslında grafik ile anlatsam daha iyi olacak ama şimdi uzun sürer. Biz örnekle anlatmaya çalışalım. Anlaşılmazsa grafikle destekleriz.

Örnek olarak ilk anlatımda kullandığımız prosesi kullanalım. Tankımızın mevcut sıcaklığı 30 °C derece olsun. Isıstıcımızında devreye girdiğini düşünelim ve SET değerimizin 75 °C derece olduğunu farzedelim ve kontrolör cihazımızın içinde Türev ( D ) için nasıl bir işlem yapılıyor onu anlamaya çalışalım.

Kontrolör cihazımız hemen zamanlayıcıyı ( timer ) resetliyor. Akabinde ÖLÇÜM noktasından bir değer okuması yapıyor. Sonra bizim belirlediğimiz bir zaman sonunda tekrar ÖLÇÜM noktasından bir değer okuması yapıyor.

Şimdi elimizde iki adet ölçüm değeri ve aralarında geçen süreye ait zaman bilgisi bulunuyor. Buna göre anlatmaya çalışayım;

ÖLÇÜM 1  ==>  32 °C  ( y1 )
ÖLÇÜM 2  ==>  33 °C  ( y2 )

ZAMAN 1  ==> 0 ms  ( t1 )
ZAMAN 2  ==> 100 ms ( t2 )

Türev hesaplarken zaman birimi olarak genelde sn alınır. Ama yazılım içerisinde ihtiyaca göre de değişiklik yapılabilir. Şimdi örneğimize göre hesap yapalım. Önce dT ve dY değerlerini bulalım;

dY = y2-y1  ==>  dY=33-32  ==>  dY=1 °C

dT= t2-t1  ==>  dT=100-0  ==>  dT=100 ms ==> 0,1 sn

Bu bilgilere göre ;

ÇIKIŞ=Kd* ( 1 / 0,1 )

olur. Burada Kd değerini 5 kabul edelim;

ÇIKIŞ=5*(1/0,1)  ==>  ÇIKIŞ= 50  (%50 diyebiliriz )

Peki ya sıcaklıkta ki değişme şöyle olsaydı ne olurdu ona bakalım;

y1 = 32
y2= 32

O zaman [d( SET - ÖLÇÜM )/dt] formülünün sonucu ;

( 0/0,1 ) olurdu. Bu da bildiğiniz gibi 0 a eşittir. Şimdi asıl formülde bu rakamları kullanalım bakalım sonuç ne olacak;

ÇIKIŞ= Kd*( 0/0,1 )  ==> Kd=5 kabul edelim
ÇIKIŞ=5*0  ==> ÇIKIŞ=0

Yani eğer ölçüm değerimiz iki zaman arasında değişim göstermiyorsa D ( Türev ) çıkışımız 0 olur. Bunun iki anlamı var bizim için

1. Türev hesabı yaparken bu durumla karşılaşmamak için mümkün olan en uzun zamanı kullanırız. Bu zamanı biz değil prosesimiz belirler.

2. Hiç bir zaman D ( Türev ) kontrol tek başına bir cihaz olarak tasarlanıp kullanılamaz. Yani tek başına bir yönetim modu olamaz. Sistemi ya 0 çıkışa götürür ya da max çıkış yaptırıp tripe götürür. ( Ölçüm değerindeki ani ve yüksek değişimler için geçerli )

Peki o zaman D ( Türev ) PD ve PID kontrolde ne işe yarar? Onu da açıklayıp proton ile kod örneği verelim.

Bildiğiniz gibi  proses kontrol döngülerinde gecikmeler yaşanır. Bu gecikmelerin sebebi; kontrölörün yaptığı çıkış değişikliklerine prosesin verdiği cevap için geçen sürelerdir. İşte bu zaman kayıplarından doğan gecikmeleri karşılamak için, türev işlemi denetimciye önceden hazırlanma zamanı verir. Doğru uygulandığında prosesi kararlı hale getirir.

Şimdi proton ile kod yazalım. Burada şunu belirtmek istiyorum; Türev hesaplarken hatanın zamana oranı olduğunu söylemiştik. Ve yukarıda buna uygun olarak fomülü vermiştik. Ancak incelediğim cihazlarda işin teori kısmında bu formülü uygularken pratik kod yazılımlarında farklı bir yol izlemişler. Bende oturup niye böyle yapıyorlar diye hiç incelemedim. Belki de aslında aynı yere çıkıyordur. Ama dediğim gibi incelemedim. Bu yazı işi bitince oturup inceleyeceğim. Bizde kod kısmında profesyonel cihazlarda yazıldığı gibi kod yazacağız. Şimdi kodlara geçelim.


Dim PID_Kd As Word                  ; Türev katsayısı ( Biz belirliyoruz - matlab da yapabiliyor )
Dim PID_DS As Word                  ; Türev sürücü
Dim PID_son_e As Word            ; Yeni hata değeri için register
Dim PID_e As Word                    ; Hata değeri için register ( SET - ÖLÇÜM )
Dim PID_a As Bit                        ; Bit bazında kayıt yapmak için register


PID_DS = PID_e - PID_son_e     ; Son hata ile ilk hatanın arasındaki farkı alıp DS ( Türev Sürücü ) ye kaydediyoruz
PID_a = PID_DS.15                     ; DS ( Türev Sürücü ) değerinin işsretine bakıyoruz 
PID_DS = Abs PID_DS                 ; DS ( Türev Sürücünün ) mutlak değerini alıyoruz
PID_DS = PID_DS */ PID_Kd     ; DS ( türev Sürücü ) ile Kd değerini çarpıyoruz ve artık DS ( Türev Sürücü ) için son
                                                      ; değeri hesaplamış oluyoruz
    
If PID_a = 1 Then PID_DS = -PID_DS      ; DS ( Türev Sürücü )nün işaretini geri yüklüyoruz.

DCIK:
    PID_son_e = PID_e                 ; Son hata değerini güncelliyoruz.

Yukarıda dikkat ettiyseniz hesap yaparken iki hata arasındaki farkı alarak yetindik. Aslında işin içine zaman ve oranların girmesi gerekiyordu ama dediğim gibi hesap işi yazılıma dönüşünce bu şekilde kullanılıyor. Yarın ilk iş bunun nedenine bakacağım.

Artık geriye sadece bu üç modun ( P - I - D ) birleştirilmesi kalıyor. Onu da ilerleyen saatlere bırakalım.
Bu arada anlaşılmayan bir yer olursa onu tartışmış oluruz







İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

Mucit23

Aslında bende PID sıstemi görüp deneyebileceğim bi termostat benzeri birşey yapmak istiyordum. kombiler müsade etseydi oda termostatlarındada süper olurdu
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

inventor

Bir odanın ısısını kontrol etmek  için PID lüks olur kanaatindeyim. ÇÜnkü değişim çok yavaş olacaktır. PI ya da P bile bu işi rahatlıkla yapacaktır.,Daha hızlı değişim gösteren bir proses düşünmek lazım.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

Mucit23

Hocam SMPS sistemlerinde PID uygulanabilirmi?
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

inventor

smps sistem entegrelerinin PID uygulamaları ile kullanılabildiğini yazmıştım. Bununla ilgili bir anlatım daha doğrusu datasheet şu linkte var. Fikir açısından faydası olacaktır. Genelde büyük sistemler için PID uygulaması yapılıyor. ( KW gibi )

http://www.datasheetarchive.com/PID%20control%20SMPS%20PIC-datasheet.html
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

M_B

@inventor hocam
Acıklamalarınızı dikkatle takıp ediyorum.
Alıntı yapılan: inventor - 03 Aralık 2011, 18:34:56
Bir odanın ısısını kontrol etmek  için PID lüks olur kanaatindeyim. ÇÜnkü değişim çok yavaş olacaktır. PI ya da P bile bu işi rahatlıkla yapacaktır.,Daha hızlı değişim gösteren bir proses düşünmek lazım.

Hocam bir kazanın icindeki suyun sıcaklıgının kontrolunu demı yapmak luks olur.

Piyasada çaycılarda,kahvelerde bir takım cafeler de elektrikli çay kazanları var
Bunların calısması sanırsam on/of mantıgıyla oluyor. Cunku bir resistans ve termostat var.

Şimdi biz diyelimki bu çay kazanını PID mantığıyla yaptık, daha sonrada ıkısınıde aynı sıcaklıga set edip aynı ortamda aynı anda ikisini 7 saat çalıştırsak acaba elektrik sarfiyatında fark olurmu.
Hangisi daha verimli ve kullanışlı olur. 

Teşekkürler



inventor

#27
Burada dikkat edilmesi gereken noktalar var. PID kullanım olarak on - off kontrolden iyidir ama ekonomik midir?

Şimdi verilere bakalım. Benim bulunduğum yerde çay ocaklarındaki su 94 °C de kaynıyor. Kaynama başladıktan sonra suyun sıcaklığında bir değişme olmaz. Düdüklü tencerelerde falan bu nedenle basınç arttırılır ve kaynama noktasının yüksek olması sağlanır. Yani kaynama noktası basınçla yakından ilgilidir.

Eğer çay güğümünün üzerinde demlikler oturuyorsa ( üstü açık değilse ) güğüm 94 °C de kaynayacaktır. Siz ısıyı 90 °C ye düşürsenizde kaynama devam edecektir. Yaklaşık 5 °C gibi bir aralık olur. Mevcut sistemdeki on - off kontrole bakmak lazım. Eğer 5°C den fazla bir aralık yoksa kontrol iyi demektir.. Ama iş burada çaycıya kalıyor. Suyun hangi derecede kaynadığını iyi bilmesi gerekiyor. Tasarrufu o yapacak. Bazı kahvehanelerde ben 110 °C gibi rakamlar görüyorum. Düşünün harcana elektriği.
Suyun sıcaklığının o noktalara çıkabilmesi için güğüm içerisinde basınç oluşması gerekiyor. Boşuna enerji sarfiyatı bence.


Şimdi PID konusuna gelelim. Amaç güğümü sürekli kaynama noktasında tutmak ise ; amacımız 90-95 ° C arasında olmalı ( Hava basıncı ile yakından alakalı bir değerdir. Deniz seviyesine indikçe rakam yükselir ). Bu işi aslında termostat da on - off ile yapabilir. Ama çok hassas bir gözlemle suyun kaynama noktası gözlenip + - 1 °C gibi aralıkta tutulursa mutlaka faydası olacaktır.

Tabii bu arada güğüme sürekli soğuk su takviyesi oluyor. Bunu da düşünmek lazım

Bence bahse konu kazanlar için on - off yeterlidir. PI belki kullanılabilir. Ama PID luks olur. Piyasada PID kontrolü diye satılan ama aslında PI olan bir sürü cihaz var.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

inventor

#28
PID konusunda artık son noktaya geldik. Bütün verileri toparlayıp PID sinyalini oluşturalım.

Üç modun ( P - I - D )  temel özelliği aynı giriş verilerine (KATSAYI , ÖLÇÜM ve SET ) karşılık birbirinden farklı birer çıkış sinyali üretmeleridir. Veri girişi ile birlikte bu sayılarda oynamalar olur ve bu düzene PID denir.

Bu üç moda ait üretilen değerler bir araya getirildiğinde PID kontrolörü sistemi kontrol eder. Oransal mod  ( P ) temel kontrolü sağlar. İntegral mod ( I ), oransal modun yetersiz kaldığı uzun süreçli hataları düzeltir. Türev mod ( D ), çalışan  proseste ortaya çıkan net sorunlarla meşgul olur.

PID algoritması genelde büyük sistemlerde, dengesiz diye tabir ettiğimiz ani değişimli proseslerde ve ya bu değişimlerin yüksek olduğu durumlarda tercih edilir.

İşin özünde oldukça karışık bir sistemdir ( PID yi bütün düşündüğünüzde ) . Çok randımanlı ve verimi yüksek olan bir algoritmadır ancak bunu garanti edebilmek için sizinde Kp - Ki - Kd sayılarını garanti etmeniz gerekir. Bu nedenle mutlaka sistem üzerinde ayarlama gerekir. Matlab falan sonuçta kesin rakamları üretemez.

Bu üç sinyali toplayarak konuyu bitirelim. Fazla anlatmaya gerek yok. Kodlardan zaten anlaşılıyor.


    Dim PID_TB As PID_bStatus.7                  ; CIKIS taşma bayrağı 
    Dim PID_CIKIS As Word                            ; PID CIKIŞI ( P + I + D )
    Dim PID_CIKIS_ON As Word                    ; PID sinyali için ön karşılaştırma değeri ( Programın başında değer verilir )
    Dim PID_PS As Word                                 ; Oransal sürücü
    Dim PID_IS As Word                                 ; İntegral sürücü
    Dim PID_DS As Word                                ; Türev sürücü
    Dim PID_a As Bit                                       ; Bit bazında kayıt yapmak için register



PID_CIKIS = PID_PS + PID_IS + PID_DS         ; Bütün sürücü değerlerini topluyoruz. ( P + I + D ) CIKIS içine yazıyoruz
PID_a = PID_CIKIS.15                                        ; CIKIS değerinin yönüne bakıyoruz ( + - ) 
PID_CIKIS= Abs PID_CIKIS                               ; CIKIS bilgisinin mutlak değerini alıyoruz
    
If PID_CIKIS >= PID_CIKIS_ON Then              ; PID CIKIS değeri ile ön değeri karşılaştırıyoruz ( Taşma var mı diye )         
        PID_TB= 1                                                   ; Taşma varsa taşma bayrağını set ediyoruz
        PID_CIKIS = PID_CIKIS_ON                      ; PID CIKIS değerini Ön değer ile eşitliyoruz              
EndIf
If PID_a = 1 Then PID_CIKIS = -PID_CIKIS     ; PID CIKIS sinyalinin işaretini tekrar geriye yüklüyoruz
             


Burada açıklama ihtiyacı duyduğum bir yer var. PID_CIKIS_ON  nedir diye aklınıza gelebilir. BU kayıtçı  PID CIKIS sinyalinin belli bir değerin üzerine çıkmasını engeliyor. Örnek verelim;

Yukarıda bütün sürücüleri hesapladık diyelim ve şöyle bir tablo ortaya çıkmış olsun;
P=85  ( Oransal )
I=64  ( İntegral )
D=70 ( Türev )

O zaman PID sinyalimiz  PID_CIKIS=85+64+70  ==>  PID_CIKIS= 219

İşte buradaki 219 rakamı bazen bizim için yüksek olabiliyor. Bu rakamı sınırlamak için ilgili registerı kullanıyoruz.

Artık elimizde oransal - integral ve türev bilgilerini içeren bir çıkış var. ETE hocamın da istediği buydu sanırım. İşi biraz daha ileri götürüp bu sinyali nasıl kullanabiliriz noktasına da gelelim diyorum. PIC deyince PWM ilk akla gelen oluyor oransal kontrolde. O halde bizde bu çıkış sinyali ile PWM üretmeye çalışalım. Yanlışım olursa ETE hocam düzeltir.



YON = PID_CIKIS.15                ; PID CIKIS sinyalinin yönüne bakıyoruz ( + mı , - mi diye ). Bunu YON içine yüklüyoruz
PID_CIKIS = Abs PID_CIKIS   ; PID CIKIS sinyalinin mutlak değerini alıyoruz           
HPWM 1, PID_CIKIS, 10000    ; PID CIKIS değeri ile pwm üretiyoruz. ( 1. pinden , PID değeri kadar DUTY , 10 KHz )
DelayMs 10                                ; 10 ms bekliyoruz ve başla ya gidiyoruz

GoTo Start                           


Mesela bu kodda kullandığımız DUTY değeri 255 in üzerinde olamaz. O zaman Kp - Ki - Kd  değerlerini ve en önemlisi CIKIS_ON  yükleme dediğimiz değeri iyi ayarlamak gerekiyor. Kp - Ki - Kd bize proses için lazım olacak ama CIKIS_ON dediğimiz değer işte bu 255 değerini geçmemek için lazım olacak.

Hepsi bu kadar arkadaşlar.
Umarım faydalı olmuşumdur

Selam

Yüksel


İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

inventor

Buraya kadarki anlatımları dosya haline getirerek
http://etepic.com/index.php?topic=191.msg1570;topicseen#msg1570

linkine yükledim. İleride örnek projeyide için atarız. İhtiyacı olan arkadaşlar tek dosya halinde alabilirler.

Proje olarak fikir üreten var mı ?
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

Powered by EzPortal