PIC16F877A ile unipolar step motor kontrol devresi

| Mart 23, 2021 Tarihinde güncellendi
PIC16F877A ile unipolar step motor kontrol devresi

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.

pic16f877a-motor-control-asm-assembly-uln2803

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 transistör bağlantılı entegre seçilmiştir.

motor-kontrol-malzemeleri-plaket-entegre-pasif-elemanlar delikli-plaket-yerlesim-start delikli-plaket-devre unipolar-motor

unipolar-motor-kontrol-lcd-test motor-kontrol-devre-tamamlanmis-hali motor-kontrol-devre-tamamlanmis-hali-alt motor-kontrol-devre-tamamlanmis-hali-motor-bagli

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

PIC16F877A ile unipolar step motor kontrol projesine ait proteus isis simülasyon dosyası picbasic pro kod Dosya indirme LINK listesi (TXT formatında) link-13976.zip şifre-pass: 320volt.com

Yayım tarihi: 2011/02/13 Etiketler: , , ,



24 Yorum “PIC16F877A ile unipolar step motor kontrol devresi

  1. Ediz AĞARER

    Baskı devresi yok . Amatör bir yapım delikli pertinans 😀

    CEVAPLA
  2. guzel

    yukarda step motor kontrol devresini vermişsiniz ama picin sağ tarafının bacak bağlantılarını okuyamıyorum daha görünür bir sekilde gönerebilirmisiniz çok ihtiycm var okul için ….teşekkürler

    CEVAPLA
  3. gevv

    yazının sonunda kaynak dosyalar verildi dosya içinde isis şemasıda var tüm detayları o şemadan görebilirsiniz

    isis programı yok diyorsanız aşağıdaki resime tıklayın

    motor-kontrol-sema

    iyi çalışmalar

    CEVAPLA
  4. seyalp

    isiste çalıştırmayı denedim ama hata verdi.sebebi nedir acaba?

    CEVAPLA
  5. adem

    merhaba hocam ben bir kaç yerde takıldım acaba j3 ve j1 konnektörlerine ne bağlıyoruz ? j1 step motor galiba ama j3 biliyorum karasızım

    CEVAPLA
  6. Baran

    Merhaba;
    Böyle bir devre ve step motora ihtiyacım var. Bu motoru dönebilen bir plaka üzerinde kullanacağım ve 10 derecelik açılarla 36 dönüş yapmasını sağlayacağım. Yazılımla uğraşıyorum . Elektronikten anlamıyorum . Böyle bir devre ve motorun bana tam olarak yapılmış halde maliyetini söyleyebilir misiniz. (Satın alabilirim) Ayrıca step motor için torku nedir. Yani üzerinde atıyorum 5kg lik bir nesneyi döndürebilir miyim? Yardımcı olabilirseniz çok sevinirim İyi çalışmalar baran.aydin@cvfix.net

    CEVAPLA
  7. adem

    aynı hata bendede veriyor ama birine step motor bağlıyoruz ama diğerini bende çözemedim ?

    CEVAPLA
  8. Ediz Ağarer

    J1 step motorun soket bağlantısı.J3 ise Pic’e program atmak için koyduğum soket yani simülasyonda bunu görmek için j3 ü silebilirsiniz varsa simülasyona 5 uçlu step motor bağlıyabilirsiniz.Ama simülasyonda fazla güvenli olmadığı için ben tercih etmiyorum.

    CEVAPLA
  9. murat

    bu devre için kullanacağım malzemelerı rica etsem söleyeyebilirmisiniz ..

    CEVAPLA
  10. Ufuk Dermenci

    eyvallah usta ellerine sağlık. bu devreyi proje1 için seçtim ve simülasyonu en sonunda başardım. yalnız kodun “DEFINE LCD_RWREG PORTE ‘LCD read/write port” kısmında hata var PORTE yerine PORTD olması gerekiyor. bu devreyi yapacak olanların aklında bulunsun

    CEVAPLA
  11. HawKe

    ben bazı insanları anlayamıyorum kızmıyım diyorum kızdırıyorlar
    devrede kullanılan malzemelerin listesini istemek gibi bir sey yazıyorlar ya arkadaş resme bak ve varsa al ha birde plaket almayı unutma emi

    hadi devre çalısmaz hata verir yanlışlık olur tamam ama görüpte hala malzeme listesini istemek mantıksızlık körlük hatta üşengecliktir

    arkadaşlar kusura bakmayın bu malzeme listesi isteme konusu beni sinirlendiriyor

    CEVAPLA
  12. Ediz Ağarer

    son düzenlemeden bir önceki yazılımı koymuşum ve rw bacağı port e ye bağlı gibi gözüküyor. ufuk arkadaşın dediği doğru kusura bakmayın. teşekkürler ufuk

    CEVAPLA
  13. yasin

    kardeş devreni yapmaya karar verdim yalnız 7805 li kısım pic program atman lazım ben pıc programı dışardan atacağım devreye onu koymama gerek var mı step motorun çalışmasına ihtiyaç varmı onsuz çalışırmı devrem

    CEVAPLA
  14. paşa

    bu devreyi bir türlü çalıştıramadım..proteusda lcd de her hangi bir görüntü step sanki kafasına göre hareket ediyor gibi compiler sürekli hata veriyor ..yada ben bu işi bilmiyorum .

    CEVAPLA
  15. mustafa erdogan

    melekette bu tip çalışmaların yapıldıgını görmek insana çalışma azmi veriyor bu bana gore

    CEVAPLA
  16. Ediz AĞARER

    Devre simülasyonda çalışmıyor olabilir. Ben simüle etmeden devreyi board a kurdum ve çalıştırdım bu birinin bitirme ödevidi ve 100 le geçtiğine göre devrede donanımsal sorun yok. Ancak simülasyonda çalışmayabilir. Zaten ben sadece açık devre şeması bulunması için isis kullandım. Şema simülasyon amaçlı değil.

    CEVAPLA
  17. Seyit Ali Yiğit(ZoRRo2083)

    Devreyi daha yeni inceleme fırsatım oldu. gerçekten güzel bir devre olmuş ellerinize sağlık. pause ayarlarını biraz değiştirdim. devrenin yavaş işlemesi biraz kötü olmuş. buton sürelerini değiştirdim. ve nihayetinde devreyi çalıştırdım. gerçekten sistemi çok güzel olmuş ellerinize sağlık

    CEVAPLA
  18. Ali

    step motoru bağladık ama b portuna çıkış gelmiyor step motor dönmüyür yardım edermisiniz ?

    CEVAPLA
  19. Kübra

    Merhaba , 3. Sinif elektrik elektronik muhendisligi ogrencisiyim . Proje odevim pic16f877 kullanarak lcd ve keypad ile step motor hiz kontrolu devresi yapmak. Bu devre de keypad kulllansak kodlardaki degisiklik icin yardimci olur musunuz acaba ? Nasil yapabilirim yardimci olurmusunuz ?

    CEVAPLA
  20. Alper

    Merhaba,pcbye çıkartan oldu mu acaba ben yaptım fakat 2-3 yerde hata alıyorum bir türlü düzeltemedim.Ayrıca Lcd ekran olarak 14 degil de 16 girşili alırsak bir problem yaşar mıyız?

    CEVAPLA

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.