Pic programı ile oran orantı kurmanın yolları.

Başlatan has_artvin_li, 31 Mayıs 2013, 02:10:38

has_artvin_li

Değerli ustalarım ve sayın ete hocam Geçenlerde aklıma şöyle bir soru geldi ;

Pic ile şunu yap bunu yap şu kodu yolla bunu oku gibi programlar yazıyoruz ama bu çok amatör ve çok basit olduğu kanaati uyandırdı şimdi sorum şu :

Diyelim ki bir adc uygulaması yapıyoruz burada ışık şiddeti ile çalışacağız fakat ışık şiddeti bizim ayarladığımız seviyeye geldiği zaman lambayı yak yada söndür şeklinde olmayacak.
Işık şiddeti arttıkça gerilimin de değeri artacak veya azalacak burada önemli olan bir ters birde düz orantı kurmanın mantığını anlamak.
Şöyle ki
Soru : Bir ortamdaki ısı arttıkça rezistansın üzerindeki gerilimi azaltmak istiyoruz fakat bu bir dengeye göre olacak örneğin ; set değerimiz 40 derece oda sıcaklığını 40 derecede sabit tutmak istiyoruz derece sabit olması için on off yerine PID kontol uygulamamız gerekiyor sıcaklık arttıkça rezistansın üzerine gelen gerilimi nasıl azaltabiliriz yani bunun denklemi nasıl olmadılır.

Ve bu olay tam tersi olarak düşünülürse denklem nasıl olur yani sıcaklık arttıkça rezistans üzerine gelen gerilimin de miktarı artırılmak istenirse ?

Bu konudaki parametreler nelerdir

İlgileriniz için şimdiden teşekkür ederim.


ete

Sıcakılığın kontrol mekanizmasını vermeden formül oluşturmak imkansız. Hangi mantığa göre oluşturacağız?  Bu gibi durumlarda benim uyguladığım bir metod var. Genelde rezistansı sanki pwm sinyali ile sürüyormuşum gibi düşünürüm. Aslında gerçektede öyle yaparım. Tek farkla peryodum 1 sn olur yada 1000 ms.
Şimdi formülü oluşturmaya başlayalım. Okunan dediğimiz şey ölçülen sıcaklık. Set dediğimiz şey sabit tutmaya çalıştığımız sıcaklık olsun. Okunan sıcaklık bu set değerinden ne kadar uzakta? Anlamak için fark almak gerekir.
If set>okunan then
Fark=set-okunan
Seviye=0  bu set büyükse sıfır küçükse 1 olacak
Else
Fark= okunan-set
Seviye =1
Endif
Tecrübelerim bana şunu gösterdi. Set sıcakılığın 5 derece altına kadar rezistansı direk sürmek gerekiyor. Böylece sistem hızla set sıcaklığına yaklaşıyor.
O halde If seviye=0 and fark>5
    then triac=1:goto cık
Else
   Sure=(5-fark)*100+500
Endif
Triac=1 : pause sure
Triac=0: pause 1000-sure
Cık:
.....

....
Goto basla
Şimdi yine tecrübelerim şunu söylüyor. Set sıcaklığına ulaşınca triac ı sürmeyi kesme. Kesersen ısı kayıpları nedeni ile sıcaklık anında düşer. O halde belli bir oranda sürmeye devam et. Bunu %50 oranında sürme ile hallediyorum. O halde set sıcaklığında triacı 500 ms süreceğim 500 ms kapatacağım demektir.
1 derece altında formüle göre triacı 600 ms sürecek 400 ms kapatacağım
2 derece altında  700 ms sürecek 300 ms kapatacağım
3 derece altında 800 ms sürecek 200 ms kapatacağım
4 derece altında 900 ms sürecek 100 ms kapatacağım demektir.
Zaten 5 derece ve fazlasında triac direk sürülüyor. Bu sistemim yarı pid mantığı ile çalışıp sıcaklığı genelde sabit tutabilmektedir.
Ete


has_artvin_li

Sayın ETE hocam öncelikle vermiş olduğunuz bilgi ve konuya ilginizden dolayı çok ama çok teşekkür ederim.İzlediğiniz yol farklı bir mantık ve yarı pid.

Şimdi benim asıl merak ettiğim şey şu diyelim ki fark alacağız Farkı alırken istediğimiz set değerinden o anda ki var olan değeri mi çıkartacağız yoksa
O anda ki var olan değerden set değerini çıkartarak mı farkı bulacağız ?

Diyelim ki siz cevap verdiniz ve biz de farkı bulduk hesapladık

Set değerimiz                   X olsun
o anda olan değerimiz     Y olsun
Farkımız da                      Z olsun

Şimdi bu fark bilgisini pwm sinyali ile nasıl işleyeceğiz malumunuz pwm sinyalinde bir değer var duty değeri yani iş yapma süresi olarak geçiyor.Biz bu farkı duty değerine nasıl oranlayacağız yani duty değeri 0-255 arasında ayarlanabilen bir değer 0 iken %0 127 iken %50 255 iken ise %100 olarak ele alınıyor dolayısı ile bizim bu fark bilgimiz set bilgimize ne kadar uzakta yada yakında olduğumuzu bildirmek amaçlı elde edilen bir bilgi
Diyelim ki biz set değerine 20 derece uzaktayız şimdi duty değerini hesaplamak için şöyle yapsak mümkün olabilir mi

(Fark/255)*100 dersek farkın % olarak değerini hesaplayabilirmiyiz

Fark = 20 ise
fark/255=0,0784 çıktı
duty = 0,0784*100
duty=7,84 oldu Ve bence olmadı ısı devamlı olarak düşer yönde ilerleyecektir.

Peki

(Fark*100)/255 dersek farkın % olarak değerini hesaplayabilirmiyiz

20*100=2000

2000/255=7,84 oldu Ve bence yine bu matematiksel formülde bir problem oldu


En son olarak aklıma en mantıklı gelen formül ise

(fark*255)/100

bu da

20*255=5100

5100/100=51

Sonuç olarak duty değerinin 55 olması denemedim ama normal olabilir gibi geliyor en azından diğer formullere nazaran sanki biraz daha mantıklı dolayısı ile yukarıdaki formulle farkın 100 olduğu durumda ve farkın 10 olduğu durumdaki hallerini de hesapladığım zaman duty değerleri şöyle çıkıyor

Fark = 10 iken duty değeri = 25,5

fark = 100 iken duty değeri = 255 çıkıyor

Dolayısı ile

Farkın 1 olduğu durumda da duty değerimiz 2,55 olacağı için bu formulü kullanabiliriz Diye düşünüyorum Sizce de kullanabilirmiyiz yoksa bu formul de yanlış bir forml mü ?

Ve son olarak da fark değerimizin eksili sayılarda çıkması durumunda ne tür bir çözüm üretmeliyiz Gerçi farkın eksili sayılarda çıkması kuracağımız orantının bize ters orantı olduğunu gösterecektir şöyle ki :
Biz ısı arttıkça rezistans üzerindeki gerilimi düşürerek ısı değerini set değerinde sabit tutmaya çalışıyoruz Fakat sayının eksili çıkması demek ısının arttıkça gerilimin de artması anlamına gelecektir sizce bu düşüncem yanlış bir teori mi ?


ete

Fark alırken daima büyükten küçüğü çıkartmak gerekir. Ama hangisi yüksek bilmiyorsan farkı rastgele alıp sonra onun absolute (ABS)  değerini alırsan sonuç hep pozitif olur. Ancak farkın eksimi artımı olduğunu bilmen gerekiyor. Diyelimki hep set-okunan şeklinde fark alıyorsun. Sonuç pozitif ise pwm_duty artması gerekir. Eksi ise azalması gerekir. Bu nedenle benim verdiğim örneği yeniden oku.
Formül işi bu şekilde havadan tartışılmaz. Ortada somut bir şeyler olması gerekir.
Karar verilmesi gerek şey öncelikle şudur. Fark kaç olunca pwm_duty hangi değeri alacak. ?
Uc noktaları bilirsen arayı orantılayabilirsin. Sana ip ucu verdim aslında benzer şekilde düşünce geliştirebilirsin. Okunan=set olduğu zaman duty=%50 olacak ise bunun üzeri ve altını formüle etmek zor değil. Diyelimki max duty %100=255 ve min duty=0, şimdi araları formüle bağlayabiliriz. Elimizdeki parametre daima fark değeri olacaktır. %50 duty değeri 127 olacağı için fark pozitif yönde ise bu değere eklenecektir. Her derece için bir birim eklersek geriye doğru 127 derece daha gitmek gerekir. Bu ise mantıksız olur. O halde geriye doğru 10 derece gidince 127 rakamına ulaşmalıyım.
Demekki derece başına eklenecek rakam 127/10 =12,7 olacaktır. Bunuda (fark * 127)/10 şeklinde hesap edebiliriz. Ohalde ;
Set> okunan ise. Fark=set-okunan. Ekle=(fark*127)/10 ve duty=127+ekle. Şeklinde hesaplanır.
Set<okunan ise , fark=okunan -set.  Ekle=(fark *127)/10. Ve duty=127- ekle. Şeklinde hesaplanacaktır.
Bu sistem gerçek devrede denenmeli ve sistemin sıcaklığı set değerinde tutup tutmadığına bakılmalıdır. Uygun olmayan durum olursa yeniden değerlendirilerek işlem yapılmalıdır.
Ete

has_artvin_li

Evet ete hocam Aslında benim bütün yazımda anlatmak istediğim soruyu tek satırda çözmüşsünüz : "Karar verilmesi gerek şey öncelikle şudur. Fark kaç olunca pwm_duty hangi değeri alacak. ?" benim formulize etmek istediğim durum bu idi ve yukarıda da bunun mantığını açıklamışsınız İlgi ve alakanız için teşekkür ederim.

Özellikle "Fark alırken daima büyükten küçüğü çıkartmak gerekir" diyerek kafamdaki soru işareti giderildi Bu konu ile ilgili bir miktar daha çalışma yapıp sonra bir uygulama yapmak için uğraşacağım bakalım sonuç ne olacak...

Hayırlarla ve sağlıcakla kalın...

Powered by EzPortal