Elektronik / Mikrodenetleyici Projeleri/

PIC16F877A ile unipolar step motor kontrol devresi

Sponsorlu Bağlantılar

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 dosyaları: PIC16F877A ile unipolar step motor kontrol devresi

Dosya indirme LINK listesi (TXT formatında) link-13976.zip şifre-pass: 320volt.com

  • cafer

    baskı devresi varmı hocam.

  • Ediz AĞARER

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

  • 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

  • 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

  • guzel

    çok teşekkür ederim iyi akşamlar…

  • seyalp

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

  • 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

  • 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

  • guzel

    isiste j1 ve j3 hata veriyor ne yapmamız gerek acaba ?

  • adem

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

  • 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.

  • murat

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

  • 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

  • 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

  • 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

  • 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

  • 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 .

  • mustafa erdogan

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

  • 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.

  • 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

  • Ali

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

  • mevlüt

    bu devrede pic 16f876a kullanabilirmiyiz. ?