step motor kontrolü hakkında yardım

mobilspy

Üye
Katılım
13 Eki 2006
Mesajlar
122
Puanları
1
Yaş
44
arkadaslar 16f84 ile tekbuton kullanarak bir step motor kontrol etmek istiyorum
devrenin çalışması:
butona basıldıgında motor sag yöne 16 adım donecek ve buton basılı oldugu surece duracak buton basılması kesildiginde tekrar ilk konumuna yani sola 16 adım donecek ancak 16 adım dolmadan misal 7. adımda buton basılması kesilirse 7 adım geri donmesini istiyorum.

bunun için asagıdaki kodu hazırladım ama bi sorunum var bundada ilk calıs etiktindeki for..next döngüsünü

( FOR X=0 TO 10 STEP 1) yapıp (x=x+1) satırını sildiğimde program çalışmıyor aşagıdaki şekilde çalışıyor fakat ileri çalışırken ikişer ikişer atlıyor geri tek tek dönüyor. bir yorumu olan varmı acaba

Kod:
TRISA=1
TRISB=0
PULS VAR BYTE
X VAR BYTE
Y VAR BYTE
PULS=0
PORTB=%00000001
X=0
Y=0

BASLA:
button PORTA.1, 1, 255,255,PULS,1,CALIS
GOTO BASLA
CALIS:
        FOR X=0 TO 16 
        x=x+1    
        gosub TABLO
        IF PORTA.1=0 THEN GOTO DUR
PAUSE 500
            NEXT X
GOTO BEKLE

BEKLE:
    IF PORTA.1=1 THEN GOTO bekle
GOTO    dur

DUR:
Y=X-1
 FOR Y=Y TO Y=0 step -1
        GOSUB TABLOY
        IF PORTA.1=1 THEN GOTO BASLA
PAUSE 500
            NEXT
GOTO    BASLA

TABLO:
SELECT CASE x
CASE 1
PORTB =%00000001
RETURN
CASE 2
PORTB =%00000011
RETURN
CASE 3
PORTB =%00000010
RETURN
CASE 4
PORTB =%00000110
RETURN
CASE 5
PORTB =%00000100
RETURN
CASE 6
PORTB =%00001100
RETURN
CASE 7
PORTB =%00001000
RETURN
CASE 8
PORTB =%00001001
RETURN
CASE 9
PORTB =%00000001
RETURN
CASE 10
PORTB =%00000011
RETURN
CASE 11
PORTB =%00000010
RETURN
CASE 12
PORTB =%00000110
RETURN
CASE 13
PORTB =%00000100
RETURN
CASE 14
PORTB =%00001100
RETURN
CASE 15
PORTB =%00001000
RETURN
CASE 16
PORTB =%00001001
RETURN
CASE IS > 16
PORTB =%00001001
RETURN
CASE ELSE
PORTB =%00000001
END SELECT 

TABLOY:
SELECT CASE Y
CASE 1
PORTB =%00000001
RETURN
CASE 2
PORTB =%00000011
RETURN
CASE 3
PORTB =%00000010
RETURN
CASE 4
PORTB =%00000110
RETURN
CASE 5
PORTB =%00000100
RETURN
CASE 6
PORTB =%00001100
RETURN
CASE 7
PORTB =%00001000
RETURN
CASE 8
PORTB =%00001001
RETURN
CASE 9
PORTB =%00000001
RETURN
CASE 10
PORTB =%00000011
RETURN
CASE 11
PORTB =%00000010
RETURN
CASE 12
PORTB =%00000110
RETURN
CASE 13
PORTB =%00000100
RETURN
CASE 14
PORTB =%00001100
RETURN
CASE 15
PORTB =%00001000
RETURN
CASE 16
PORTB =%00001001
RETURN
CASE IS > 16
PORTB =%00001001
RETURN
CASE ELSE
PORTB =%00000001
END SELECT 
END


denemek isterseniz isis dosyası ekte:
 

Ekli dosyalar

  • step motor.rar
    15.2 KB · Görüntüleme: 55
arkadaslar sorunumu cozdum programın daha pratik cozumu olabilecegini dusunen arkadaslardan yorumlarını bekliyorum.


Kod:
'****************************************************************
'*  Name    : Step.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 20.04.2009                                        *
'*  Version : 1.0                                               *
'*  Notes   : Step Motor Kontrolu                               *
'*          :                                                   *
'****************************************************************
TRISA=1
TRISB=0
PULS VAR BYTE
X VAR BYTE
Y VAR BYTE
PULS=0
PORTB=%00000001
X=0
Y=0

BASLA:
button PORTA.1, 1, 255,255,PULS,1,CALIS
GOTO BASLA
CALIS:
        FOR X=0 TO 16 STEP 1
        Gosub TABLO
        IF PORTA.1=0 THEN GOTO DUR
PAUSE 500
            NEXT 
GOTO BEKLE

BEKLE:
    IF PORTA.1=1 THEN GOTO bekle
GOTO    dur

DUR:
Y=X-1
 FOR Y=Y TO Y=0 step -1
        GOSUB TABLOY
        IF PORTA.1=1 THEN GOTO YARIDA
PAUSE 500
            NEXT
GOTO    BASLA

YARIDA:
FOR X=Y TO 16 STEP 1
        Gosub TABLO
        IF PORTA.1=0 THEN GOTO DUR
PAUSE 500
            NEXT 
GOTO BEKLE


TABLO:
SELECT CASE x
CASE 1
PORTB =%00000001
RETURN
CASE 2
PORTB =%00000011
RETURN
CASE 3
PORTB =%00000010
RETURN
CASE 4
PORTB =%00000110
RETURN
CASE 5
PORTB =%00000100
RETURN
CASE 6
PORTB =%00001100
RETURN
CASE 7
PORTB =%00001000
RETURN
CASE 8
PORTB =%00001001
RETURN
CASE 9
PORTB =%00000001
RETURN
CASE 10
PORTB =%00000011
RETURN
CASE 11
PORTB =%00000010
RETURN
CASE 12
PORTB =%00000110
RETURN
CASE 13
PORTB =%00000100
RETURN
CASE 14
PORTB =%00001100
RETURN
CASE 15
PORTB =%00001000
RETURN
CASE 16
PORTB =%00001001
RETURN
CASE IS > 16
PORTB =%00001001
RETURN
CASE ELSE
PORTB =%00000001
RETURN
END SELECT 

TABLOY:
SELECT CASE Y
CASE 1
PORTB =%00000001
RETURN
CASE 2
PORTB =%00000011
RETURN
CASE 3
PORTB =%00000010
RETURN
CASE 4
PORTB =%00000110
RETURN
CASE 5
PORTB =%00000100
RETURN
CASE 6
PORTB =%00001100
RETURN
CASE 7
PORTB =%00001000
RETURN
CASE 8
PORTB =%00001001
RETURN
CASE 9
PORTB =%00000001
RETURN
CASE 10
PORTB =%00000011
RETURN
CASE 11
PORTB =%00000010
RETURN
CASE 12
PORTB =%00000110
RETURN
CASE 13
PORTB =%00000100
RETURN
CASE 14
PORTB =%00001100
RETURN
CASE 15
PORTB =%00001000
RETURN
CASE 16
PORTB =%00001001
RETURN
CASE IS > 16
PORTB =%00001001
RETURN
CASE ELSE
PORTB =%00000001
RETURN
END SELECT 
END
 
Arkadaşım bu devreyi çalıştırabildinmi?

banada böyle bir devre lazım
 
Yukarıdaki kodu MPASMWIN ile hex e çevirirken hata çıkıyor hexe çevirmiyor bunu nasıl düzeltiriz ?

 
Son düzenleme:
bende yeniyim bu pic işinde , ama codu daha kısa olusturman mumkun.. belki işini görür
ekde isis çizimide var.. bekle değişkenini degıstırerek hızı artırıp azaltabilirsin.. anahtar on iken saat yönunde off iken saat yönü tersinde donuyor, sinyal.1=0 ve sinyal.1=1 yer değiştirirsen anahtarın durumuna gore donus yonude degısecektır..
picbasic proton ile hazırladım, microbasıc icn degısıklık yapman gerekebilir derleme sorunu cıkar...





Device 16F877
XTAL = 20
Dim adim As Byte
Dim tekrar As Byte
Dim bekle As Word
Dim adimlar[8] As Byte


TRISD=0
PORTD=0
TRISB=255
TRISB=0
Symbol sinyal=PORTB
Symbol a1=PORTD
adimlar[0]=%00001001
adimlar[1]=%00000001
adimlar[2]=%00000011
adimlar[3]=%00000010
adimlar[4]=%00000110
adimlar[5]=%00000100
adimlar[6]=%00001100
adimlar[7]=%00001000
sinyal=0
adim=0
a1=0
tekrar=0
bekle=5 ' 30 ms adım arası süre
basla:


If sinyal.1=1 And tekrar <= 15 Then
Inc adim
If adim=8 Then adim=0
a1=adimlar[adim]
Inc tekrar
EndIf

If sinyal.1=0 And tekrar>1 Then
Dec adim
If adim=-1 Then adim=7
a1=adimlar[adim]
Dec tekrar
EndIf
DelayMS bekle
GoTo basla
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…