Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

step motor lütfen yardım edin

Başlatan smail, 30 Ocak 2012, 19:21:29

smail

arkadaşlar bu kodlara ek olarak step motorun hep ileri veya hep geri dönmesi fonksiyonunu eklemem gerekiyor. ve hep ileri ve geri dönerken aynı zamanda hızını artırıp azaltmam gerekiyor.. teşekkür ederim...

'STEP MOTOR KONTROL DEVRESİ PROGRAMI
DEFINE OSC 4 ;4MHZ OSİLATÖR KULLANILACAK

TRISB=0      ;B PORTUNUN TÜM PİNLERİ ÇIKIŞ YAPILDI
TRISC=255    ;C PORTUNUN TÜM PİNLERİ GİRİŞ YAPILDI
TRISD=0      ;D PORTUNUN TÜM PİNLERİ ÇIKIŞ YAPILDI

@ DEVICE pic16F877A
@ DEVICE pic16F877A, PWRT_ON
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16F877A, PROTECT_OFF  ;kod koruması yok
@ DEVICE pic16F877A, XT_OSC       ;KRİSTAL OSİLATÖR KULLANILACAK

DEFINE LCD_DREG PORTD 'LCD data port
DEFINE LCD_DBIT 4 'LCD data starting bit 0 or 4
DEFINE LCD_RSREG PORTD 'LCD register select port
DEFINE LCD_RSBIT 1 'LCD register select bit
DEFINE LCD_EREG PORTD 'LCD enable port
DEFINE LCD_EBIT 0 'LCD enable bit
DEFINE LCD_RWREG PORTD 'LCD read/write port
DEFINE LCD_RWBIT 2 'LCD read/write bit
DEFINE LCD_BITS 4 'LCD bus size 4 or 8
DEFINE LCD_LINES 2 'Number lines on LCD
DEFINE LCD_COMMANDUS 2000 'Command delay time in us
DEFINE LCD_DATAUS 50 'Data delay time in us 

LCDOUT $FE,$40,4,14,21,4,4,4,4,0 ;YUKARI OK İŞARETİ SIFIRINCI ADRES
LCDOUT $FE,$48,4,4,4,4,21,14,4,0 ;AŞAĞI OK İŞARETİ BİRİNCİ ADRES
LCDOUT $FE,$50,0,4,8,31,8,4,0,0  ;SOL OK İŞARETİ  İKİNCİ ADRES
LCDOUT $FE,$58,0,4,2,31,2,4,0,0  ;SAG OK İŞARETİ ÜÇÜNCÜ ADRES

YUKARI VAR PORTC.0
ASAGI  VAR PORTC.1
OK     VAR PORTC.2
SAG    VAR PORTC.3
SOL    VAR PORTC.4


ADIM   VAR BYTE
HIZ    VAR BYTE
SAYI   VAR BYTE
X      VAR BYTE
Y      VAR BYTE
SURE   VAR WORD
M      VAR BYTE [2]
K      VAR BYTE [4]

LCDOUT $FE,1  ;LCD TEMİZLENİYOR
PAUSE 200

M[0]=0
M[1]=0
K[0]="A"
K[1]="G"
K[2]="O"
K[3]="L"
ADIM=1
HIZ=1
Y=0
SAYI=1

PORTB=0 ;MOTOR DATA PİNLERİNE SIFIR GÖNDERİLİYOR

ACILIS:

LCDOUT $FE,$83,"STEP MOTOR"
LCDOUT $FE,$C4,"KONTROL"
PAUSE 2000
LCDOUT $FE,1
LCDOUT $FE,$80,".....SiSTEM....."
LCDOUT $FE,$C0,"...YUKLENiYOR..."
PAUSE 1000

;MOTOR BU İKİ FOR DÖNGÜSÜ İLE RASTGELE SAĞA VE SOLA
;HAREKET ETTİRİLEREK SIFIR AYARI YAPILIR 

FOR X=0 TO 16

PORTB=SAYI
PAUSE 5
SAYI=SAYI*2
IF SAYI>8 THEN SAYI=1

NEXT X

FOR X=0 TO 16

IF SAYI=1 THEN
SAYI=8
ELSE
SAYI=SAYI/2
ENDIF

PORTB=SAYI
PAUSE 5

NEXT X

WRITE 0,SAYI ;MOTORUN SON KALDIĞI KONUMUN ADRESİ HAFIZAYA KAYDEDİLİYOR

LCDOUT $FE,1 ;LCD TEMİZLENİYOR

GOTO MENU1

MENU1:

LCDOUT $FE,$80,2
LCDOUT $FE,$82,"ADIM  SAYISI"
LCDOUT $FE,$8F,3
LCDOUT $FE,$C0,0
LCDOUT $FE,$C7,DEC3 ADIM
LCDOUT $FE,$CF,1
PAUSE 10

IF YUKARI=0 THEN  ;ADIM SAYISI ARTTIRILIR

ADIM=ADIM+1

IF ADIM>200 THEN

GOSUB UYARI1
ADIM=1

ENDIF

PAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR

ENDIF

IF ASAGI=0 THEN ;ADIM SAYISI AZALTILIR

ADIM=ADIM-1

IF ADIM=0 THEN

GOSUB UYARI2
ADIM=200

ENDIF

PAUSE 300  ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR

ENDIF

IF SAG=0 THEN ;HIZ MENÜSÜNE GEÇİŞ YAPILIR

PAUSE 300  ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR
LCDOUT $FE,1
GOTO MENU2

ENDIF

IF SOL=0 THEN  ;YÖN MENÜSÜNE GEÇİŞ YAPILIR

PAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR
LCDOUT $FE,1
GOTO MENU3

ENDIF

IF OK=0 THEN GOSUB ISLE ;GİRİLEN İŞLEMİN MOTORA UYGULANACAK MENUYE GİDİLİR

GOTO MENU1

MENU2:

LCDOUT $FE,$80,2
LCDOUT $FE,$83,"HIZ  AYARI"
LCDOUT $FE,$8F,3
LCDOUT $FE,$C0,0
LCDOUT $FE,$C6,DEC3 HIZ
LCDOUT $FE,$CF,1
PAUSE 10

IF YUKARI=0 THEN

HIZ=HIZ+1

IF HIZ>200 THEN

GOSUB UYARI3
HIZ=1

ENDIF

PAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR

ENDIF

IF ASAGI=0 THEN

HIZ=HIZ-1

IF HIZ=0 THEN

GOSUB UYARI4
HIZ=200

ENDIF

PAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR

ENDIF

IF SOL=0 THEN

PAUSE 300  ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR
LCDOUT $FE,1
GOTO MENU1

ENDIF

IF SAG=0 THEN

PAUSE 300  ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR
LCDOUT $FE,1
GOTO MENU3

ENDIF

IF OK=0 THEN GOSUB ISLE ;GİRİLEN İŞLEMİN MOTORA UYGULANACAK MENUYE GİDİLİR

GOTO MENU2

MENU3:

LCDOUT $FE,$80,2
LCDOUT $FE,$83,"YON  AYARI"
LCDOUT $FE,$8F,3
LCDOUT $FE,$C0,0
LCDOUT $FE,$C6,"S",K[Y],K[Y+1]
LCDOUT $FE,$CF,1
PAUSE 10

IF YUKARI=0 THEN

Y=2 ;YÖN SEÇİMİNİN SOL OLARAK AYARLANMASI
PAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR

ENDIF

IF ASAGI=0 THEN

Y=0 ;YÖN SEÇİMİNİN SAĞ OLARAK AYARLANMASI
PAUSE 300  ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR

ENDIF

IF SOL=0 THEN

PAUSE 300  ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR
LCDOUT $FE,1
GOTO MENU2

ENDIF

IF SAG=0 THEN

PAUSE 300  ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİR
LCDOUT $FE,1
GOTO MENU1

ENDIF

IF OK=0 THEN GOSUB ISLE ;GİRİLEN İŞLEMİN MOTORA UYGULANACAK MENUYE GİDİLİR

GOTO MENU3


CALIS:

SURE=1000/HIZ
READ 0,SAYI
M[1]=M[0]
M[0]=Y

IF M[0]=M[1] THEN
ADIM=ADIM-1
ELSE
ENDIF

IF Y=2 THEN
FOR X=0 TO ADIM
PORTB=SAYI
PAUSE SURE
SAYI=SAYI*2
IF SAYI>8 THEN SAYI=1
NEXT X
ENDIF

IF Y=0 THEN
FOR X=0 TO ADIM
IF SAYI=1 THEN
SAYI=8
ELSE
SAYI=SAYI/2
ENDIF
PORTB=SAYI
PAUSE SURE
NEXT X
ENDIF

WRITE 0,SAYI

IF M[0]=M[1] THEN ADIM=ADIM+1

PORTB=0

RETURN


TRISB = %0000      

sol:
       PORTB = %0001
       PAUSE 1
       PAUSE = %0011
       PAUSE 1
       PORTB = %0010
       PAUSE 1
       PORTB = %0110
       PAUSE 1
       PORTB = %0100
       PAUSE 1
       PORTB = %1100
       PAUSE 1
       PORTB = %1000
       PAUSE 1
       PORTB = %1001
       PAUSE 1
       GOTO sol
       PORTB = %0000
       RETURN

TRISB = %0000      

sag:

       PORTB = %1000
       PAUSE 1
       PORTB = %1100
       PAUSE 1
       PORTB = %0100
       PAUSE 1
       PORTB = %0110
       PAUSE 1
       PORTB = %0010
       PAUSE 1
       PORTB = %0011
       PAUSE 1
       PORTB = %0001
       PAUSE 1
       PORTB = %1001
       PAUSE 1
       GOTO sag
       PORTB = %0000
       RETURN

ISLE:

LCDOUT $FE,1
LCDOUT $FE,$80,".....SiSTEM....."
LCDOUT $FE,$C0,"...YUKLENiYOR..."
PAUSE 1000
GOSUB CALIS
LCDOUT $FE,1

RETURN

UYARI1:

LCDOUT $FE,1
LCDOUT $FE,$82,"MAKSiMUM 200"
LCDOUT $FE,$C6,"ADIM"
PAUSE 2000
LCDOUT $FE,1

RETURN

UYARI2:

LCDOUT $FE,1
LCDOUT $FE,$83,"MiNiMUM 1"
LCDOUT $FE,$C6,"ADIM"
PAUSE 2000
LCDOUT $FE,1

RETURN

UYARI3:

LCDOUT $FE,1
LCDOUT $FE,$82,"MAKSiMUM HIZ"
LCDOUT $FE,$C1,"200 ADIM/SANiYE"
PAUSE 2000
LCDOUT $FE,1

RETURN

UYARI4:

LCDOUT $FE,1
LCDOUT $FE,$82,"MiNiMUM HIZ"
LCDOUT $FE,$C2,"1 ADIM/SANiYE"
PAUSE 2000
LCDOUT $FE,1

RETURN

fryrmnd

sağa sola döndürdüğün kodları sonsuz döngü içinde kullanırsan motor hep sağa ve hep sola döner.  faz sinyalleri arasındaki beklemeleri (pause) kısaltırsan  hızlanır uzatırsan yavaşlar.