KingFrm
KingFrm
KingFrm
Would you like to react to this message? Create an account in a few clicks or log in to continue.

KingFrm

Bilgi paylaşım adresi
 
AnasayfaAnasayfa  GaleriGaleri  Latest imagesLatest images  AramaArama  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

 

 PIC16F877A ile unipolar step motor kontrol devresi

Aşağa gitmek 
YazarMesaj
BySamet
Forumcunet Hoşgeldiniz
Forumcunet Hoşgeldiniz
BySamet


Mesaj Sayısı : 198
Reputation : 31
Kayıt tarihi : 13/03/11
Yaş : 34
Nerden : EskiÅŸehir

PIC16F877A ile unipolar step motor kontrol devresi Empty
MesajKonu: PIC16F877A ile unipolar step motor kontrol devresi   PIC16F877A ile unipolar step motor kontrol devresi EmptySalı Mart 15, 2011 3:37 pm

[Resimleri görebilmek için üye olun veya giriş yapın.]
Merhaba arkadaşlar bu yazımda unipolar step motor kontrol devresi ile ilgili bir çalışma paylaşacağım.
Tasarladığım bu devrenin amacı devreye bağlanan unpolar step motoru
üzerindeki butonlar yordamıyla yönünü, hızını ve adım sayısını
belirleyip belirlediğimiz bu komutları step motora uygulayan bir
sistemdir. Devrede pic16f877 mikrodenetleyicisi kullanılmıştır.
[Resimleri görebilmek için üye olun veya giriş yapın.]
Devre ilk çalıştığında step motora 120 derecelik ileri geri sinyali
uygulayarak sıfır ayarı yapar. Devrenin üzerinde bulunan yön tuşlarını
kullanarak menüler arası geçiş yapabilir ve menülerdeki birimleri
ayarlayabilirsiniz. Motorun hız ayarı adım/saniye cinsindendir.En fazla
200 adım/saniye ve en az 1adım/saniye hızında hareket
ettirilebilir.Motorun atabileceği adım sayısı en fazla 200 adım ve
en az 1 adım atabilir.Devrede en fazla motorun bir sargısından 500
mA akım geçirilebilir. Motor sürücü olarak uln2803 darlington [Linkleri görebilmek için üye olun veya giriş yapın.] bağlantılı entegre seçilmiştir.
[Linkleri görebilmek için üye olun veya giriş yapın.]
STEP_KOD.pbp yazılım içeriği;
'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 PORTE '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

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
Sayfa başına dön Aşağa gitmek
https://kingfrm.catsboard.com
 
PIC16F877A ile unipolar step motor kontrol devresi
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» PIC16F877A ile unipolar step motor kontrol devresi
» SHT11 ile nem kontrol devresi (pic16f88 picbasic pro)
» Paralel Port İle 32 Kanal Kontrol Devresi
» LM2576-5 smd 5v step down regülatör devres
» PIC16F84 ve DS1621 ile sıcaklık ısı ölçümü röle kontrol

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
KingFrm :: Elektronik Sistemler-
Buraya geçin: