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.
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.
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 simülasyon ve picbasic pro kod dosyaları;
Şifre-Pass: 320volt.com
Yayım tarihi: 2011/02/13 Etiketler: microchip pic projeleri, PIC16F877 örnekleri, ULN2803, unipolar motor
baskı devresi varmı hocam.
Baskı devresi yok . Amatör bir yapım delikli pertinans 😀
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
iyi çalışmalar
çok teşekkür ederim iyi akşamlar…
isiste çalıştırmayı denedim ama hata verdi.sebebi nedir acaba?
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
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 [email protected]
isiste j1 ve j3 hata veriyor ne yapmamız gerek acaba ?
aynı hata bendede veriyor ama birine step motor bağlıyoruz ama diğerini bende çözemedim ?
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.
bu devre için kullanacağım malzemelerı rica etsem söleyeyebilirmisiniz ..
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
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
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
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
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 .
melekette bu tip çalışmaların yapıldıgını görmek insana çalışma azmi veriyor bu bana gore
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.
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
step motoru bağladık ama b portuna çıkış gelmiyor step motor dönmüyür yardım edermisiniz ?
bu devrede pic 16f876a kullanabilirmiyiz. ?
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 ?
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?