uzaktan kumanda ile PWM uygulaması yardım.

Başlatan kerem, 04 Temmuz 2017, 17:03:33

ete

Açıkladıklarından şunu anlıyorum. Baslat tuşu ile ateşleme yaptırılıp gaz yakıldıktan sonra bir zamanlayıcı çalıştırılacak ve süre en azından 5 sn (5000 ms) olacak. Bu süre içinde ateşleme kartından gelen çıkış (PORTB.5) ucuna bakılacak ve şayet 1 olmuş ise zamanlayıcı durdurulup ateşleme çıkışı kapatılacak.
Ateşleme açıldıktan sonra herhangi bir denedenle baslat tusuna tekrar basarsam ateşleme yine kapatılacak.
Kısaca ateşleme açıldıktan sonra ya ben baslat tuşuna tekrar basarak iptal edeceğim yada ateşleme kartından gelen çıkış ucu high olmuş ise kapatılacak.
Tabiiki burada bazı açık noktalar var. 5 sn süre verdik süre sonuna kadar çıkış ucundan high gelmemiş ise ne olacak? bana göre sistem her halukarda kapatılmalı. Gerekirse yeniden start verilmeli.
Bütün bu anladıklarımı programa çevirdim. Ancak senin programda kademeli PWM verme işi var o neden gerekli anlamadım. Bu nedenle onları göz ardı ettim şimdilik gerekirse sen verdiğimin üzerinde çalışarak programını tamamlarsın artık.
İlişiktedir.
Ete

kerem

Ete hocam başla tuşuna basılınca ateşleme kartına ateşleme verilecek ve ateşleme kartına verilen pin sürekli high olacak(kesilmeyecek tabi kapat kumutuna dallandığında herşey kapatılacak ). ateşleme kartından geri sinyal alınca da çıkışı kapatatılmayacak yani biz oralarla ugraşmıyoruz.

kısacası picten 1çıkış alıyoruz ateşleme kartına veriyoruz . o picten aldığımız çıkış high olduktan 1 veya 2 saniye sonra . ateşleme kartından bir geri dönüş bekleyecez bu sinyali picin giriş pini olarak ayarlayıp 2 saniyeye kadar bekleyecek gelmezse tüm sistemi kapatacak.gelirse sinyal sistem calışmaya devam edecek.
yani bizim ugraşacağımız şey . picten 1 çıkış 1 giriş olacak. çıkış high olduktan 1 veya 2 saniye sonra  giriş high olmuşsa sistem çalışacak high olmamışsa sistem herşeyi kapatacak . ama devre çalıştıktan sonra pice gelen giriş sinyali(sürekli beklenmeli)  herhangi bir zamanda low olabilir. her ne zaman hangi aşamada olursa olsun low olduğu gibi sistemi kapatması gerekiyor. diğer herşeyi ateşleme kartı kendi içindeki devrede yapıyor.

herhangi bir nedenle başlat tuşuna basarsak kendini kapatmaması gerekiyor. biz sistemi kapatmak için başlatma tuşuna bakmayacaz  bizim sistemi kapatmak için bakacağımız yer ra.5 yani ateşleme kartından pice gelen sinyale göre hareket edecez (0 veya 1 oluşuna göre) sürekli onu bekleyecez başkada bişey yapmayacaz.

biz birşey iptal etmeyecegiz onları ateşleme kartı kendisi yapıyor . ateşleme kartının bizden bir tane 5v istiyor. gaz yandıktan sonra bize dönüş olarak o 5v kendisi geri veriyor. ateşleme kartının bize verdiği 5v işleyecez yani .

sistem 5snye sonra high gelmezse ateşleme kartından sistem kapatılacak ve 3snye sonra sistem tekrar ateşleyecek . yani sinyal gelmezse ateşleme iki defa ateşleyecek yine sinyal yoksa sistemi kapatacak.

ete

Yolunu gösterdim gerisini kendin yap artık.
Çünki olay senin kafanda. Bende bir şey yok. Ancak sen bitirirsin.
Ete

kerem

bide ete hocam ben pwm den aldığım sinyal ile ırfz44n mos sürüyorum. Mosfet sürücü kullanmıyorum. pwm degeri düştüğünde çok ısınıyor. baska 5v ile çalışan mos veya önerebileceginiz birşey bir yöntem varmı teşekkürler.

ete

Ya mosfet sürücü kullanacaksın yada IRFZL44 bu mosfet 5 v ile sürülebiliyor. Yada başka bir lojik level mosfet ile çalışman gerek.
Ete

kerem

mrb hocalarım. şimdi benim şöyle bir projem var: ben ır ile uzaktan kumanda devresi ile bir motoru pwm ile sürme devresini yapacağım.
çalışması şöyle olacak.
1. 3 tane button olacak
2. 1.buttona basıldığında tüm sistemi açacak tekrar basıldığında tüm sistemi kapatacak(toggle ile yaptım.)
       2.1 sistemi açtığı zaman ilk olarak ''sistem hazır sensörüne''  picten  5v  gönderilecek (yani sensör çalışacak) ve (sistem1
       kademede çalışıyor olacak)  ,sensör  geri dönüşlü olarak bir sinyal çıkışı verecek bu sinyal picin bir pinine  işlenecek . bu pin
       dönüşü sürekli 1 sinyali vermelidir. 1 sinyali vermediği  zaman bütün sistem kapanacak 7 snye (timer kullanılmayacak sleep
      komutu kullanılabilir.) sonra tekrar start verecek kendi kendine   , bu işlem 3 defa tekrarlananip en son seferde ise tüm sistemi
       kapatıp displaya E yazdıracak.
3. 2.inci buttona bastağımda motor pwm ile sag tarafa hızlanarak çalışacak.
4. 3 buttona bastığımda motor pwm ile sol tarafa yavaşlayarak çalışacak.
5. motorun kademeliri pwm olarak 1-3 kademe arasında bölünecek sağ tarafa hızlanırken 1-2-3 kademeleri 7 segment displayda görüncek. sol tarafa yavaşlarken de 3-2-1 yada diye yavaşlayacak.
daha öncede yazmıştım ete hocam son olarak devreyi yaptım bazı pürüzlerde takıldım. ugraştım ama sensör sinyalinin geri dönüşünü pice işletemedim tekrar yaptıramadım. teşekkürler.
devre şeması ve kodları ektedir.

ete

Bu dediklerini bu basit devre ile yapmak mümkün değil.
Devrende mutlaka bir H köprü devresi olması gerekir. Ancak bu şekilde PWM kullanarak motoru istediğin yönde hız ayarıda yaparak çevirebilirsin.
Yazdığın programada baktım. Bana göre bir aç kapa buton kontrolü ile displaye birşeyler yazdırmaktan öte bir şey yok.
Şeman eksik program hepten eksik. Ya işi iyi bilmiyorsun yani neyi nasıl yapacağını bilmiyorsun yada işi başkasına yaptırmayı hedeflemişsin.
İşin nasıl yapılacağını anlatırım. Ancak bunun için önce motorunun ne kadar akım çektiğini bilmem gerekiyor. Ona göre H köprü önereceğim. Şayet 1A altında ise L293D isimli entegreyi kullan sonunda D olmasına diikkat et L293 de mevcut ve yalnızca 600 ma lik akıma dayanabilir. L293D ise 1A akıma dayanabilir. Motorun daha yüksek akımlar çekiyor ise LMD18200 entegresini kullanmanı öneririm 3A kadar akıma dayanır. Dahada yüksek akım çeken motorun var ise Allah yardımcın olsun derim. Bunun anlamı kendin bir H köprü devresi oluşturman gerekecek ve mosfet sürücüleri kullanman gerekiyor. Bu ise belalı bir iştir. Usulüne uygun çalışırsan bela yanına yaklaşmaz ama bunun içinde çok fazla araştırma yapman gerekecek. Özellikle mosfet sürücüleri konusunda.
Sonuç olarak 16F628 ile bu işi halledemezsin. Tek PWM çıkışı sana yetmeyecektir. İki PWM çıkışı olan bir işlemci mesela 16F876A gibi kullanman işini kolaylaştıracaktır. L293D üzerinden yürür isek data sheet'ine bakarsan nasıl kontrol edildiğini göreceksin. Söylemem gereken yalnızca PWM girişlerini entegrenin Enable ucuna girmen gerektiği. Böylece istediğin yönde istediğin hızda motoru hareket ettirebilirsin.
Bana kalırsa önce buton kontrollerini hallet. Sonra H köprüye hakim olmak adına onu yön kontrolü vererek kontrol etmeye çalış. Takıldığın yerde bize danış. Kafiye oldu ama doğrusu budur.
Ete

kerem

şuan 3 tane button olacak
2. 1.buttona basıldığında tüm sistemi açacak tekrar basıldığında tüm sistemi kapatacak(toggle ile yaptım.)
2.inci buttona bastağımda valf 1/3 oranında artarak yükselecek.
4. 3 buttona bastığımda valf 1/3 oranında azalacak.
5. valf kademeleri pwm olarak 1-3 kademe arasında bölünecek sağ tarafa hızlanırken 1-2-3 kademeleri 7 segment displayda görüncek. sol tarafa yavaşlarken de 3-2-1 yada diye yavaşlayacak. bunlar proğramda mevcut)




kerem

COK sağolun ete hocam Allah razı olsun .   
hocam program biraz dağınık sürekli ekleme çıkarma yaptığımdan dolayı  ,  devrede aynı şekilde dağınık k bakmayın. devreyide kimseye yaptırma peşinde değilim. ben devreyi manuel olarak çalıştırdım.
daha önce yardım etmiştiniz yazılımda yardımınız sayesinde baya ilerlettim. sadece 1 noktada sorun yaşıyorum. daha önceden anlattığım gibi ben motor kullanmıyorum. misal olarak motor yazdım . motor yerine ben modülasyon valfi kullanıyorum. h köprüsüne ihtiyaç yok şuan çektiğim akım ise kücük 500ma seviyesinde.
elektronik devre şuan çalışıyor bana tek kanallı pwm yeterli, onunla 24v u 1/3 oranında azaltıp yükseltiyorum.

bu dediklerimin hepsi tamam yardımınızla bu dediklerim şuan programda mevcut. benim suan ki takildiğim sorun şu.
 

kerem

#39
 
  sistemi aç kapa botunuyla açtığı zaman ilk olarak ''ateşleme kartına''  picten  5v  gönderilecek (yani ateşleme kartı çalışacak) ve   ,ateşleme kartı  geri dönüşlü olarak 5v çıkış verecek bu sinyal picin bir pinine  işlenecek(bu pin porta.5) .

bu pin  dönüşü sürekli 1 sinyali vermelidir. 1 sinyali vermediği  zaman bütün sistem kapanacak 7 snye bekleyecek (timer kullanılmayacak sleep  komutu kullanılabilir.) sonra tekrar start verecek kendi kendine   , bu işlem 3 defa tekrarlananip en son seferde ise tüm sistemi
kapatıp displaya E (error) yazdıracak.

eklenecek kod :en fazla 3-5 satırlık bir koddur diye düşünüyorum. yani ateşleme kartı  dönüş sinyalini göre devre kontrol edilecek high geliyorsa sistem sürekli çalışacak  low geliyorsa sistem kapanacak tekrar ateşleme yapacak 3 defa tekrar yapıp eror verecek. yani if porta.5=o than goto kapat. sleep 7 sonra tekrar başa çevir.

kerem

3 button la(PWM İLE) aç kapat artır azalt yapacam bide dönüş sinyali geliyormu ona bakılacak . 24v 3 e bölüp pwm ile çalıştırcam 1 kademede 9v, 2 kademede 17v, 3 kademede 24v çıkış vercek bir pwm yazılımı gerekiyor.
yani pwm ile 24v regüle etcem 9-15-24v olarak ondan sonra istenirse azaltılır istenirse yükseltilir.

ete

Bütün programı (BASLA-GOTO BASLA arasını) ;
WHILE PORTA.5=1
...
WEND
aralığına sok. Bu sistemde PORTA.5 sürekli 1 olduğunda sistem normal olarak çalışır.
PORTA.5 =0 olduğunda ise program WEND komutunu aşar. Orayada Sleep 7 yaz ve altına GOTO BASLA yazıp sistemi dene istersen.
Bu arada programa koyduğun gereksiz pause ler nedeni ile sistemin sıhhatli çalışmıyor. Pause 500 , Pause 50 komutlarını sil tamamen hiç gereği yok. Anlamsız Pause kullanmaktan vazgeç.

Ete

kerem

#42
Dikkat!!!! Büyük harfler ile mesaj yazmayın lütfen. Büyük harf , form dilinde bağırarak konuşma anlamına geliyor!!

tamam ete hocam cok sağolun .ben o pauseleri kaldırırım.




BASLA:

       IF ACKAPA=1 THEN     
         TOGGLE DURUM         
         IF DURUM=0 THEN       
         GOSUB KAPAT         
         GOTO BIR
         ENDIF
             
         WHILE PORTA.5=1' ETE HOCAM BENİM WHİLE DÖNGÜM CİHAZI ACTIĞIMIZ ZAMAN BAŞLAMALI YANİ İLK AC KAPA BOTUNUNA BASINCA . BEN BURAYA KOYDUM AMA İF LERLE ALAKALI HATA VERDİ.
     

          IF  GERI=0 THEN
         
       
           SECIM=1 
           
          PORTA=%00000110 
         'high PORTB.1
          LOW PORTB.7 AND PORTB.6
           
           duty=800  '%33 için Duty=(199+1)*33/25= 264
          'pause 1000
          'IF PORTA.5=0 THEN GOSUB KAPAT
           GOSUB duty_ver  '%33 duty ile sistem açıldı
           CCP1CON=%00001100
          ' ILERI=1
         
         


'HIGH PORTB.6

'sleep 1 'yada iç içe döngülerle pause yapmak gerek
          'IF PORTA.5=0 THEN GOSUB KAPAT
         ' SLEEP 3
         ' IF PORTA.5=1 THEN   GOSUB KAPAT
           
           
           'PAUSE 300
          'IF PORTA.5=0 THEN GOSUB KAPAT     
           'PAUSE 500
           
             
           'IF PORTB.1=0 THEN 
           'GOSUB KAPAT
         
         
          ' ENDIF
             '  wend
          ENDIF   
BIR:
ILERI=1
'WHILE ACKAPA=1


'IF DONUS=0 THEN GOTO KAPAT
'GOTO BIR
'ENDIF
'WEND



'HIGH PORTB.6

'sleep 1 'yada iç içe döngülerle pause yapmak gerek
          'IF PORTA.5=0 THEN GOSUB KAPAT
'        SLEEP 3
  '       IF PORTA.5=1 THEN   GOSUB KAPAT
       
 
             WHILE ACKAPA=1:WEND
         ENDIF   
           
       
       IF SECIM>0 AND ARTIR=1 THEN
       'IF PORTA.5=1 THEN GOTO KAPAT
         SECIM=SECIM+1:PORTB.6=0
         PORTB.7=1: PORTB.1=0
         ILERI=1 
           
         
         IF SECIM=4 THEN SECIM=3
      '  IF PORTA.5=1 THEN GOTO KAPAT
         GOSUB KADEMEVER
           
         WHILE ARTIR=1
       
         WEND
         ENDIF
       
       IF SECIM>1 AND AZALT=1 THEN
      ' IF PORTA.5=1 THEN GOTO KAPAT
          SECIM=SECIM-1:PORTB.7=0
          PORTB.6=1 : PORTB.1=0
         
          IF SECIM=0 THEN SECIM=1 
        ' IF PORTA.5=1 THEN GOTO KAPAT         
          GOSUB KADEMEVER
           
          WHILE AZALT=1
          WEND   
             
          ENDIF
          PAUSE 50
         
            wend 
WEND
           GOTO BASLA

kerem

aç kapa botunundan sonra while döngüsü çalışmalı ve program herhangi bir nedenden dolayı porta.5=0 olursa devre kapanacak, mesella başta calıştı 1 sinyali geldi. belli bir süreden sonra  0 sinyali gelirse cihaz kendini kapatmalı yukarda anlatıldığı gibi.teşekkürler.

ete

Öncelikle yukarıdaki mesajını küçük harfe çevir bakalım.
Sorununa gelince;
BASLA etiketinden hemen sonrasına;
WHILE ACKAPA=0:WEND
komut satırını eklersen basla butonuna basıncaya kadar program bekler
Bu satırın altına biraz gecikme koyabilirsin. Ateşleme yapılıp da PORTA.5 pinine HIGH gelme süresi ne ise o kadar bir gecikme koyup DURUM=1 yapıp programı alttaki while wend döngüsüne sokman gerekiyor.
Çalışan örnek ilişiktedir.
Ete



Powered by EzPortal