___YöRüKBeYi___ Yönetici
![Yönetici Yönetici](https://2img.net/r/ihimizer/img260/259/yneticifu4.gif)
![___YöRüKBeYi___](https://2img.net/u/3211/61/15/68/avatars/3-65.jpg)
Mesaj Sayısı : 185 Reputation : 16 Kayıt tarihi : 14/03/11 Yaş : 40 Nerden : ESKİŞEHİR
![PIC16F877A ile unipolar step motor kontrol devresi Empty](https://2img.net/i/empty.gif) | Konu: PIC16F877A ile unipolar step motor kontrol devresi Çarş. Mart 16, 2011 5:24 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İ PROGRAMIDEFINE 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 KULLANILACAKDEFINE LCD_DREG PORTD 'LCD data portDEFINE LCD_DBIT 4 'LCD data starting bit 0 or 4DEFINE LCD_RSREG PORTD 'LCD register select portDEFINE LCD_RSBIT 1 'LCD register select bitDEFINE LCD_EREG PORTD 'LCD enable portDEFINE LCD_EBIT 0 'LCD enable bitDEFINE LCD_RWREG PORTE 'LCD read/write portDEFINE LCD_RWBIT 2 'LCD read/write bitDEFINE LCD_BITS 4 'LCD bus size 4 or 8DEFINE LCD_LINES 2 'Number lines on LCDDEFINE LCD_COMMANDUS 2000 'Command delay time in usDEFINE 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Ü ADRESYUKARI 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İYORPAUSE 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İYORACILIS: 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İYORLCDOUT $FE,1 ;LCD TEMİZLENİYORGOTO 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 ARTTIRILIRADIM=ADIM+1 IF ADIM>200 THEN GOSUB UYARI1 ADIM=1 ENDIF PAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİRENDIF IF ASAGI=0 THEN ;ADIM SAYISI AZALTILIRADIM=ADIM-1 IF ADIM=0 THEN GOSUB UYARI2 ADIM=200 ENDIF PAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİRENDIF IF SAG=0 THEN ;HIZ MENÜSÜNE GEÇİŞ YAPILIRPAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİRLCDOUT $FE,1 GOTO MENU2 ENDIF IF SOL=0 THEN ;YÖN MENÜSÜNE GEÇİŞ YAPILIRPAUSE 300 ;BUTONDAN ELİNİ ÇEKME SÜRESİ KADAR BEKLENİLİRLCDOUT $FE,1 GOTO MENU3 ENDIF IF OK=0 THEN GOSUB ISLE ;GİRİLEN İŞLEMİN MOTORA UYGULANACAK MENUYE GİDİLİRGOTO 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 [Linkleri görebilmek için üye olun veya giriş yapın.] simülasyon dosyası [Linkleri görebilmek için üye olun veya giriş yapın.] kod dosyaları: [Linkleri görebilmek için üye olun veya giriş yapın.] | |
|