avatar_Mucit23

PID kontrol Sistemleri

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

huzame

Alıntı yapılan: inventor - 11 Aralık 2011, 14:51:20
PID kontrol konusunda şöyle bir uygulama yapılabilir;

Bilgisayarlarda kullanılan CPU fanlarını sanırım herkes biliyordur. Bu fanlarda 3 adet kablo bulunuyor.
1. +
2. -
3. sesnse ( Devir bilgisi )

Bu fanlarla yapılacak bir uygulama hem motor hemde encoder sorununu çözecektir. Ayrıca herkes uygulama yapabilir.

3 nolu uçtan çıkan bilgiyi şu formülle devire çevirebiliriz;

Devir ( d /dak. ) = (Frekans / 2) *60

Sense ucundan her tur için iki adet kare dalga çıkıyor bu fanlarda. Bizim için oldukça uygun bir ekipman olur diye düşünüyorum. Tek sorun fan uygulamalarında PID işleminin sağlıklı olmaması. Nedeni de şu;

Fanlar enerji kesildikten sonrada bir süre dönmeye devam ederler. Buna serbest duruş deniliyor. Bu nedenle devir yükseltirken sorun olmuyor ancak düşürmeye geldiğinde fan hızlı cevap veremediği için sorun çıkıyor. Tek yapmamız gereken şey; fanı zorlayacak bir sistem o0luşturmak. İster fan göbeğine sürtünen birşey olsun, ister kanatları kırıp kayış kasnak gibi bir düzen olsun. Basit bir şekilde fanı yüke sokabiliriz.

Bence hem uygulaması kolay,hem bulunabilirliği fazla, hemde maliyet düşük. Siz ne dersiniz?

Tamam ben de varım. Benim de elimde eski ve çalışır durumda bir fan var. İnovator'un degindiği sorunla ilgili aklıma şöyle bir şey geliyor. Fan motorunu H-köpru surucu ile surersek yada L298 ile bir tarafa dönerken ani duruş için bir anlık ters yöne dönecek şekilde polarmalandırıp tekrar duracak şekilde bir ayarlama yapabilirmiyiz?



şunu demek istiyorum Brake yazan işlemi bir anlığına yapalım diyorum acaba olurmu ?

kolay gelsin

inventor

Bahsettiğiniz köprü fan motorlarının içinde sabit olarak bulunuyor. Bu nedenle dıraşrıdan bir bağlantı ile yapılamaz. Mekanik olarak bir yük vermek gerekiyor.

Ete hocam, biraz uzak mı kaldınız konuya?
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ete

Uzak kalmadım. Yakından izliyorum. AMa benim deneme yapacak durumum yok. Hem vakit hemde ekipman yönünden zayıfım.
Aldığınız neticeler bana yetecek. Devam edin bana bakmayın.

Ete

huzame

Herkese iyi akşamlar  arkadaşlar konu ilerlemez oldu. Bu konuda birşey yapmayacak mıyız ? Böylece kalacak mı? Mesela pic secimiyle devam edelim mi? Hangi donanımı olan bir pic seçelim? Donanımsal PWM yeterli mi ADC converter de olmalımı Pic 18
serisinden mi seçelim yoksa pic 16 serisinden mi Mesela PİC 16F88 olabilir mi? Hem Donanımsal PWM modulu var hem de 10 bit çözünürlüte çalışan ADC' si var. Ne dersiniz olur mu? Hadi arkadaşlar bu konuyu canlandıralım herkese kolay gelsin

inventor

Ben bir proje hazırlıorum ama iş yoğunluğum çok arttı. 16f628 ile PID PWM çıkış projesini düşündüm. Bilgisayar fanı kullanarak,değişken yük altında  devir sabitleme projesi olacak. İsis projesi ve yazılımına başladım ama dediğim gibi çok yoğunum. Bitince buradan yayınlarım. Uygulamak isteyen uygulayabilir.

Gönül istiyor ki her aşamayı buradan paylaşalım. Bunun için pc başında uzun süre bulunmak gerekiyor. Şu sıralar en uzun 10 dk. oturabiliyorum.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

huzame

Zaman zaman bizlerin de yogun oldugu dönemler oluyor sizi anlıyorum 16f628 ile yapacağınız projeyi merakla bekliyorum. Kolaylıklar dilerim İyi akşamlar.

huzame

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



inventor hoca iyi geceler yukarıdaki satırı ben tam olarak anlayamadım. PI ve PID konularını okudugum halde anlayamadım. Biraz açıklarsanaız sevininirim. Tekrar iyi geceler.

ete

#52
Soruyu ben cevaplayayım. Zira Inventor şu sıralar çok meşgul. Pek internete de giremiyor.
Pic Basic de negatif sayı yoktur. Ama sayının negatif olduğunu gösteren bazı işaretler vardır.
KOnumuz 16 bit sayılarla ilgili olduğu için 16 bit üzerinden açıklayayım.
A sayısı 16 bitlik bir sayı olsun.
B sayısıda 16  bitlik bir sayı olsun.
C  sayısıda 16 bitlik bir sayı olsun.
A= 4800
B=100
C=A-B  işlem sonucu  C= 4800-100 = 4700 olarak C sayısına yerleşir. Tersini yapsak ne olurdu?
C=B-A işlem sonucu yani C=100-4800 normal matematik kurallarına göre C= -4700 şeklinde olacak idi. Ama pic matematiğinde negatif sayı olmayacağına göre işlem sonucu ne olabilir acaba. Hemen açıklayalım.
B sayısının 100 değeri kadar pozitif bir değeri vardır. Önce 100 sayısından 4800 lük payın 100 kadarı çıkartılır.
B=0 olur ve A=4700 olur yada kalır. Şayet B den 4700 değerini çıkartırsak Bu sefer birer birer geriye doğru gidersek;
B değeri Önce 65535 sırası ile 65534.... şeklinde geriye doğru sayarak 65536 değerinden 4700 çıkartılıncaya kadar devam eder.
Sonuçta C=100-4800 işleminin sonucu 60836 olarak elde edilmiş olur.    Bunu binary olarak yazdırırsak;
15-14-13 nolu bitlerin hepsinin "1" olduğunu görebilirsiniz.

Normalde bu işlemi sonucun negatif olacağını kestirebilirsem C=A-B şeklinde yaparım ama bilemez isem O zaman işlem sonucunda elde edilen sayının 15 nolu bit değerine bakarım şayet 1 ise sayı negatif demektir o halde bu sayı elde edilen sayını tersi olmalıdır bu durumda  sayıyının bitlerini ters çevirip 1 eklersem işlem sonucunu doğru bulurum. Yani 15 nolu bit "1" ise C=~C +1  ve bu işlem sonucuda bana 4700 rakamını verir. Artık bu rakamı eşitlikte eksi değer olarak kullanacağınızı programa söyleyebilirsiniz.
Aslında yukarıdaki eşitlikte 15 bit " ise C=-C şeklinde bir ifade var ama bu PBP için geçerli değil maalesef. Inventor ne amaçla yazdı ona sormak lazım bu kısmını. Bana göre o ifade C=~C+1 şeklinde olmalı idi.

Ete

Mucit23

Alıntı yapılan: ete - 25 Aralık 2011, 08:39:29
Soruyu ben cevaplayayım. Zira Inventor şu sıralar çok meşgul. Pek internete de giremiyor.
Pic Basic de negatif sayı yoktur. Ama sayının negatif olduğunu gösteren bazı işaretler vardır.
KOnumuz 16 bit sayılarla ilgili olduğu için 16 bit üzerinden açıklayayım.
A sayısı 16 bitlik bir sayı olsun.
B sayısıda 16  bitlik bir sayı olsun.
C  sayısıda 16 bitlik bir sayı olsun.
A= 4800
B=100
C=A-B  işlem sonucu  C= 4800-100 = 4700 olarak C sayısına yerleşir. Tersini yapsak ne olurdu?
C=B-A işlem sonucu yani C=100-4800 normal matematik kurallarına göre C= -4700 şeklinde olacak idi. Ama pic matematiğinde negatif sayı olmayacağına göre işlem sonucu ne olabilir acaba. Hemen açıklayalım.
B sayısının 100 değeri kadar pozitif bir değeri vardır. Önce 100 sayısından 4800 lük payın 100 kadarı çıkartılır.
B=0 olur ve A=4700 olur yada kalır. Şayet B den 4700 değerini çıkartırsak Bu sefer birer birer geriye doğru gidersek;
B değeri Önce 65535 sırası ile 65534.... şeklinde geriye doğru sayarak 65536 değerinden 4700 çıkartılıncaya kadar devam eder.
Sonuçta C=100-4800 işleminin sonucu 60836 olarak elde edilmiş olur.    Bunu binary olarak yazdırırsak;
15-14-13 nolu bitlerin hepsinin "1" olduğunu görebilirsiniz.

Normalde bu işlemi sonucun negatif olacağını kestirebilirsem C=A-B şeklinde yaparım ama bilemez isem O zaman işlem sonucunda elde edilen sayının 15 nolu bit değerine bakarım şayet 1 ise sayı negatif demektir o halde bu sayı elde edilen sayını tersi olmalıdır bu durumda  sayıyının bitlerini ters çevirip 1 eklersem işlem sonucunu doğru bulurum. Yani 15 nolu bit "1" ise C=~C +1  ve bu işlem sonucuda bana 4700 rakamını verir. Artık bu rakamı eşitlikte eksi değer olarak kullanacağınızı programa söyleyebilirsiniz.
Aslında yukarıdaki eşitlikte 15 bit " ise C=-C şeklinde bir ifade var ama bu PBP için geçerli değil maalesef. Inventor ne amaçla yazdı ona sormak lazım bu kısmını. Bana göre o ifade C=~C+1 şeklinde olmalı idi.

Ete

Hocam çok güzel açıklamışsınız Ellerinize sağlık.
  Boş Bir vaktinizde Pic Basicde kullanılan Tüm matemaik ve Mantık operatörlerini kullanımını  birer örnekle açıkyabilirmisiniz. Mantık operatörleri neysede matematik operatörlerini çok karıştırıyorum. Neyin ne işe yaradığını unutuyorum. Elimde bir kaynak olur en azından
   Aciliyeti hiç yok boş bir vaktinizde böyle bir çalışma yaparsanız çok sevinirim
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Mucit böyle genel bir istek yaparsan ben, Toplama ,Çıkartma , Bölme gibi operatörleride anlatmak zorunda kalırım. Genelleme yapmışsın çünki "Bütün Matematik Operatörler" neyi anlamadığını yada neyi karıştırdığını söylesen daha uygun olurdu onu açıklardım. Bana göre karıştırılabilecek bir kaç komut var. Ben onları açıklarım ama en iyisi sen buraya bir mesajla şunlar -şunlar desen daha uygun olacak.

Ete

Mucit23

Haklısınız hocam çok genel konuşmuşum. 4 işlemi anlatmanıza gerek yok :D

  Benim karıştırdığım kısımlar şunlar. Mesela bir önceki mesajınızda  C=~C +1 gibi bir işlem yapmışsınız Buradaki "~" işareti işlemi değil işlemine tabi tutuyor. Bunun gibi diğer programlarınızda kullanıdığınız birkaç operatör daha var Mesela "&, &/, */ gibi işlemler var. Bunlardan bahsediyorum. Elimde bu konuda fazla bir kaynak yok. Bu konuyu biraz açıklarsanız sevinirim.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

inventor

Alıntı yapılan: huzame - 24 Aralık 2011, 23:28:59
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



inventor hoca iyi geceler yukarıdaki satırı ben tam olarak anlayamadım. PI ve PID konularını okudugum halde anlayamadım. Biraz açıklarsanaız sevininirim. Tekrar iyi geceler.

ETE hocam anlatmış ama ben de tekrar edeyim.
Bildiğiniz gibi PBP da 32 bit işlemler biraz aşama gerektiriyor. Bunun yanında birde negatif sayılar ve ondalıklı sayılar bir dizi işlem yapılmadan kullanılamıyor. Bu işin PBP da nasıl yapılacağını ETE hocam zaten anlatmış,tekrara gerek yok.

Ben protonda bu işin nasıl olduğunu anlatmaya çalışayım. Birazda PBP ile karşılaştırarak bu işi yapalım ki farkı ortaya çıksın.

dört adet değişkenimiz olsun. Parantez içindekiler PBP karşılığı oluyor.

Dim i as bit   ( i var bit )
Dim a   As Word   ( a var word )
Dim sonuc As Word ( sonuc var word )
Dim b As Word  ( b var word )

şimdi basit bir işlem yapalım

a=1000
b=500
i=0
sonuc=0

basla:
sonuc=a-b
i=sonuc.15
sonuc=abs sonuc
if i=1 then sonuc=-sonuc
Print At 1,1," sonuc = ",SDec sonuc

Bu satırların sonucunda ekrana  sonuc=500    şeklinde bir yazı gelecektir
a-b yerine b-a yazarsak ne olur?

500-1000=-500

PBP bu işlemi tanımıyor.Protonda kısmen zorlanıyor ama çözümlüyor. Bu işlemi yaptığımızda proton sonucun 500 olduğunu biliyor ve pozitif mi negatif mi sorununu bize bırakıyor. Bizde 15. bite bakıyoruz. 1 ise sayı negatiftir diyoruz. şimdi bunu ekrana değişik şekillerde verelim ki konu anlaşılsın

basla:
sonuc=b-a
i=sonuc.15
sonuc=abs sonuc
if i=1 then sonuc=-sonuc

şimdi sadece dec sonuc dersek;
Print At 1,1," sonuc = ",Dec sonuc

sonuc=65036  değerini görürüz. ETE hocamın anlatmak istediği konu bu.

SDec sonuc  dersek ne olur;
Print At 1,1," sonuc = ",SDec sonuc

Sonuc=-500 değerini görürüz. Sanırım SDec komutu PBP da yok. Varsa da ben hiç kullanmadım.

Şimdi yukarıdaki program satırlarını tek tek açıklayalım

a=1000
b=500
i=0
sonuc=0

basla:
sonuc=b-a

burada sonuc=500-1000  işlemini yapıyoruz. Sonuç haliyle -500 çıkacak. Ama binary olarak 1111111000001100 değerine sahip

i=sonuc.15

1111111000001100 ( desimal -500 sayısı ) binari sayısının 15. bitine bakıyoruz ve 1 olduğunu görüyoruz.Yeri gelmişken birde ben hatırlatayım. +500 ile -500 arasındaki fark PIC için şudur ( Word için )

-500=1111111000001100
+500=0000000111110100

Bunun nedenini ETE hocam zaten anlatmış. Bu nedenle 15. biti kontrol ediyoruz. Eğer 1000-500 işlemi yapmışsak sonuç 500 dür ama bin olarak 0000000111110100 değerine sahiptir. 500-1000 işlemini yapmışsak sonuç yine 500 dür ama 1111111000001100  değerine sahiptir. Bizim işlemimizde 500-1000 olduğu için 15. bit 1 olacaktır.

sonuc=abs sonuc

Burada sonuç değişkeninin mutlak değerini alıyoruz. Nedir mutlak değer onu da açıklayalım. Bilmeyenler olabilir. Bir sayı doğrusu düşünün. Orta noktasında 0 var ve sağa doğru +1  +2  +2  .......+100  e kadar gidiyor. Sola doğruda -1  -2  -3  ......-100 e kadar gidiyor olsun. Biz +65 sayısının üzerine bir şaret koyalım. Sonra sola doğru gidip  -25 sayısına da bir işaret koyalım. İşte bu iki nokta arasındaki sayıların mutlak değeri 65+25  kadar olur.Yani 90 dır. Oysaki normal değer olarak toplarsak 75+ (-25 )=50 olacaktır.Biz sonuc değişkenimizin mutlak değerini alıp kaydediyoruz. İşaretini de zaten bir üst satırda kayıt altına almıştık ( i )

if i=1 then sonuc=-sonuc

Yukarıdaki satırda dedik ki eğer 15. bit 1 ise bizim sonuc değişkenimizin işareti - olacak.

Print At 1,1," sonuc = ",SDec sonuc

Burada biraz durmak gerekiyor. Eğer mutlak değer almadan yukarıdaki satırı işleme koymuş olsaydık. Sonuc=500 diyecekti. Mutlak değeri devreye sokunca sonuc=-500 dedi. SDec bize işaretli sayıları ekrana taşıma imkanı verir. Birde işlem sonucunu çevirmeden direk yazabilirsiniz. Yani SDec yerine Dec yazarsanız ve mutlak değer işlemini devreye koyarsanız;

int At 1,1," sonuc = ",Dec sonuc

Sonuc=65036 olacaktır. Mutlak değer almazsak ne olur;

Sonuc=500 olacaktır.Ama +500.  PBP bu işlemleri nasıl yapıyor, onu ETE hocam açıklar sanırım.

Protonda -sonuc demek ; sonuc değişkeninin işareti negatif demek anlamına geliyor. İşlemlerinide basitçe anlatmaya çalıştım.

Arkadaşlar internete bir süre daha giremeyeceğim sanırım. Biraz gecikmeli oluyor kusura bakmayın.
Selam
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

huzame

Mrhabalar!!  İnventor hocam yogunlugunuz hala devam ediyormu? Burda bir proje gelçekleştirecektik musaitseniç bir el atalım mı?

huzame

Herhalde bu proje de sadece konuşulup tamam yaparız ederiz deyip öylece bırakılan  projeler içindeki yerini almış durumda. Hiç kimseden çıt çıkmadığına göre !!!! Yazık oluyor yazık  :( :( :(.

inventor

Projeyi yapmayı çok istiyorum ama geçen süre zarfında vücudum yoğun tempoyu kaldıramadı. Uzun süreli bir hastane hayatı yaşadım. Kendi işlerim bu bir aylık dönemde iyice sıkıştı. Sağolsun bazı işlerimi ETE hocam hallediyor. Yoksa yetiştirme şansım kalmamıştı.

Rahatladığımız  anda projemizi hayata geçireceğiz inşallah. Nette Pic ile PID konusunda bitmiş bir proje bulunmuyor. Burada ise hem anlatımı hemde projesi ile güzel bir çalışma olmasını ben de istiyorum. Lütfen biraz daha bekleyelim. İnanın nete bile doğru dürüst giremiyorum.

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

Powered by EzPortal