Motoru yavaş yavaş durdurmak

Başlatan cakotr, 09 Aralık 2008, 17:56:08

cakotr

Merhaba arkadaşlar,

Bu işe yeni başlayan birisi olarak bir iki soru kafama takıldı.

Örnegin ben bir motoru durdurmak istiyorum ama bunun durma zamanını ben belirlemek istiyorum(durma hızını).
  Mesela high dan low a çektigimde direk olarak durması değilde , araya bir for next döngüsü atarak bu işlemin bu döngü ile eş zamanlı sona ermesini istiyorum.
  örnegin

 ilk durum

    HIGH PORTB.0
    LOW PORTB.1
    HIGH PORTB.2
    LOW PORTB.3

bu olsun , ikinci durum ise

    HIGH PORTB.0
    LOW PORTB.1
    LOW PORTB.2
    LOW PORTB.3

bu olsun.Burada portB.2 nin low'a geçmesini bir döngü ile zaman aralıgına atabilirmiyiz.

aslan_korhan

HIGH ve LOW arasında PAUSE ilave edebilirsin.
FOR...NEXT döngüsü ile PAUSE süresini değiştirebilirsin.
Fakat HIGH LOW yerine PWM kullanırsan çok daha iyi olur.
Tabiki Step motor kullanmadıysan.

For X = 254 to 0
PWM PORTB.7,X,100
Next x


Buna benzer birşey kullanırsan Motor yavaşlar.
100 yazan değerinle ise süresini ayarlayabilirsin.
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

cakotr

@Aslan_Korhan cevabınız için teşekkür ederim.

  Dediginizi yapmaya çalıştım fakat konuya tam hakim olamadıgım için yapamadım.
  Sizden saga dönüş kısmında yardım isteyeceğim.Digerlerini ben yaparım.Aşagıdaki koda bakarsanız PWM kodunu tam olarak nerede ve nasıl kullanacağım ??

CMCON=7
@ DEVICE pic16F628A                      		 'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_ON              	 'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             	 'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF           'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_OFF            	 'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
TRISA=%00000111
TRISB=0
PORTA=0
PORTB=0
i var BYTE

SOLCNY VAR PORTA.0
ORTACNY VAR PORTA.1
SAGCNY VAR PORTA.2

        pause 200
        HIGH PORTB.0
   LOW PORTB.1
   HIGH PORTB.2
   LOW PORTB.3
   
BASLA:
      
   
    IF ORTACNY=1 THEN DUZGIT
    IF SOLCNY=1 THEN SOLAGIT
    IF SAGCNY=1 THEN SAGAGIT
        HIGH PORTB.0
        LOW PORTB.1
        HIGH PORTB.2
        LOW PORTB.3
    goto BASLA
    END
    
DUZGIT:
   
   HIGH PORTB.0
   LOW PORTB.1
   HIGH PORTB.2
   LOW PORTB.3
        goto BASLA
SOLAGIT:
   low PORTB.0
   low PORTB.1
   HIGH PORTB.2
   LOW PORTB.3  
    
        GOTO BASLA   
SAGAGIT:
    
  ' For i=255 to 0 step -1
    '  PWM PORTB.2,i,100
   ' Next  
HIGH PORTB.0
LOW PORTB.1
low PORTB.2
LOW PORTB.3

GOTO BASLA


SAGAGIT , burada amaç önceki degeri high olan PORTB.2 yi belli bir zaman aralıgında low'a çekmek.
  Cevabınızı bekliyorum.tşkler

aslan_korhan

Sanırım 4 adet motor kullanıyorsun.
Bu durumda şemayı da versen daha iyi olacak.
Program komple değiştirmek gerekebilir...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

cakotr

Devre şeması aşagıda
çalışması ;  (orta buton) ortacny=1 ise duzgit
                 solcny=1 ise sola
                 sagcny=1 ise saga


ayrıca isis ve pbp kodu nu rapide attım.

http://rapidshare.com/files/171860675/cizgi_izleyen.rar.html

aslan_korhan

L298'in "ENA" ve "ENB" girişlerini PIC'in "RB3/CCP1" pinine bağlayarak buraya Hardware PWM ( Donanımsal PWM ) verecek şekilde programa ilave yaparsan motoru istediğin hızda döndürebilirsin.

Hardware kullanıldığından RB3 sinyal gönderirken normal yazdığın program bağımsız olarak çalışmaya devam eder.

Bunu Preoteus'ta EN girişlerine bir tane sinyal kaynağı bağlayarak deneyebilirsin.
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.