soft start PWM

Başlatan efsanepoldem, 14 Aralık 2012, 13:06:35

efsanepoldem

  Ete Hocam merhabalar. Ekte gönderdiğim dosya siszin daha önce yayınlamış olduğunuz bir programdır, ben fazlalıkları çıkarttım. Yalnız çözemediğim bir sıkıntı var. Şöyle ki; devreye ilk enerji verdiğimde duty %50 olana kadar PWM   0'dan başlayarak %50 ye kadar yavaşça artsın istiyorum(soft start). Bu aşamadan sonra arttırma butonuna bastığımda duty %75 ve tekrar bastığımda duty %100 olsun istiyorum. Eksiltme butonuna her bastığımda da  duty   %75.%50,%25  olarak azalsın istiyorum.  Duty %25 ten aşağı düşmemeli  duty %0 olsun istemiyorum. Nasıl bir değişiklik yapmam konusunda yardımcı olursanız sevinirim. Kolay gelsin...

ete

Yapılacaklar;
1. Basla satırından evvel yer alan R=50 satırını sil. Bu duty değerini direk %50 yapıyor.
Onun yerine ;
For R=0 to 50
   RH=R:RL=100-RH
   GOSUB DELAY
NEXT
Satırlarını ilave et bu soft startı sağlayacaktır.

2. Artırma butonun bastıkça
   RH=RH+25 yaparsın. RH değeri 100 den büyük ise tekrar 100 olmasını sağlarsın
   RL=100-RH demeyide unutma sakın.
3. Eksiltme butonuna bastıkça
    RH=RH-25 yaprsın.  RH değeri 100 den büyük ise RH=0 yaparsın (100 den geriye doğru 25 eksilterek gittin zaman 100-75-50-25-0-225 değerine ulaşırsın. 225 değeri sıfırdan geriye gittiğin anlamına gelir ki o anda sıfırlaman gerekir)
   Aynı şekilde RL=100-RH demeyi unutma

Hepsi bu kadar
Ete


efsanepoldem

Hocam dediklerinizi yaptım soft start işi tamamdır. Fakat arttır azalt işini beceremedim. Anladığım kadarıyla programa dahil ettim faakat pwm de bir değişiklik olmuyor

ete

HEsaplamada R değerini hesaba katmaz isek sonuç öyle olur tabiiki.
Aşağıdaki şekilde düzelt.
BASLA:
IF PORTB.0=0 THEN
   r=r+25:if r>100 then r=99
   rh=r:RL=100-RH   
   while portb.0=0:wend
   GOSUB DELAY
ENDIF   
IF PORTB.1=0 THEN
    R=R-25:IF R>100 THEN R=1
    rh=R:RL=100-RH
    while portb.1=0:wend
   GOSUB DELAY
ENDIF           
GOTO BASLA

Bu tür programlarda limitlerde çalışmak olumsuz sonuçlar doğrur.
Mesela R=0 (veya RH=0) değerini vermek ekstradan komut gecikmesi yaratarak çıkan sinyalin sıfır duty yerine uzun bir duty ile çıkması sağlanmış olur. Bu nedenle makismum Duty değeri olan 100 yerine 99 değerini, min duty değeri olan 0 yerine 1 değerini kullanmanı öneririm.
Yukarıdaki hesaplamarda IF R>100 then r=100 yerine 99 demen daha dorğu olacaktır. Aynı şekilde sıfır yerine 1 değerini kullanmanı öneririm.

Kesme kısmınıda aşağıdaki şekilde düzelt.

IF PORTA.0=1 THEN
   RH=RH-1
IF RH=0 THEN
   PORTA.0=0
   RL=100-R
ENDIF
   ELSE
   RL=RL-1
IF RL=0 THEN
   PORTA.0=1
   rh=r
ENDIF
ENDIF


ete

efsanepoldem

Hocam çok teşekkür ederim. Ellerinize sağlık.....

kotan04

hocam programı bende denedim güzel çalışıyor fakat led tam kısılmıyor buton ile en düşük seviyeye getirdiğimizde led çok az yanık kalıyor

ete

%1 lik Duty değeri bile led'in bir miktar (kızarmış şekilde) yanmasını sağlamaktadır.
Bu genelde RGB sistemlerinde sorun olmaz. Led'lere çıplak bakarsanız elbette yakından bu kızarıklığı görürsünüz ama hiç bir zaman bu bir ışık değildir.
Aslında sorun ledlerin Mosfet ile sürülmesinden kaynaklanıyor genelde. Mosfet kısma yapmaya meyilli değil maalesef. Aç veya Kapa şeklinde çalıştığı için en ufak bir açma sinyali bile ledlerin kızarmasına sebep oluyor. Orda bir normal NPN transistör kullanın sonucun farklı olduğunu muhtemelen göreceksiniz.

İllaki Ledlerin tam kapatılmasını istiyorsanız R=0 değerini verebilirsiniz.

Ete

kotan04

merhaba arkadaşlar  transistör olarak bdx53c kullandım ve R=0 değerini verdim hala kızarıklık mevcut :(

ete

Bu durumda Base girişini biraz köreltmek gerekir diye düşünüyorum. Kullanılan transistör NPN olduğuna göre Emitteri ile Base arasına bir 10K direnç hatta 4K7 direnç bağlamak ve base giriş direncini en az 1K yapmak belkide çözüm olabilir.

Ete

Powered by EzPortal