Hazırlayan: Volkan Selçuk – Emeği geçen Kişilere Teşekkürler Adım (Step) Motorlar : Adım motor, açısal konumu adımlar halinde değişen motordur. Belirli adımlar halinde hareket eden bu motor, sargılarına uygun işaretler gönderilerek kontrol edilir. Herhangi bir uyartımda motorun yapacağı hareketi, adım açısı belirlemektedir. Adım açısı motorun yapısına göre genelde 1, 3, 5, 15, 45 gibi değerler olabilir. Örneğin 30 ’lik adım açısına sahip step motoru 300 hareket ettirebilmek için motora 10 adım attırmak gerekir.
Adım motorlarının belirli bir yönde dönmesi için sargılarının sıralı olarak ve belli bir düzen içerisinde enerjilendirilmesi gerekmektedir.
Adım motor sargı uçları
Adım motorlar genel olarak 4, 5 ve 6 uçlu olabilmektedir. Piyasada 5 uçlu step motor lar yaygın olarak kullanılmaktadırlar. 5 uçlularda, uçlardan birisi “ V motor ” olarak adlandırılan ortak uçtur. Ortak uca seçilen sürücü katına göre +12V besleme veya toprak uygulanır ( Eğer motor 6 uçlu ise bu sefer 2 uç birleştirilerek +12V besleme veya toprak girişine bağlanır.) Diğer 4 kabloda motor bobinlerine gitmektedir. Motora adım attırmak için “ V motor ” kablosuna +12V( ya da toprak ), Bobinlere bağlı uçlara ise belli bir sıra ile toprak ( ya da +12V ) gönderilmesi gerekmektedir.
Orta güçte bir adım motorunu sürmek için tercih edilen en yaygın yol ULN 2003 tüm devresi kullanılmaktadır. Bu tüm devre, içerisinde 7 adet NPN transistör ve diyot bulundurmaktadır. Mikrodenet- leyici uçlarından ULN 2003 tüm devresinin girişlerine lojik ‘1’ uygulanır, tüm devrenin çıkışından ise motoru sürmek için gerekli olan lojik ‘0’ elde edilir.
Adım motorların uyartımı için birkaç farklı yol vardır. Bunlar:
Tek Fazlı Uyartım( Single Coil ):
Motor sargılarının sadece birisinin uyarıldığı uyartım cinsine tek-faz uyartım denir. Uyartım , saat yönü için 1000, 0100, 0010, 0001 şeklinde saat yönünün tersi için 0001, 00010, 0100, 1000 şeklinde olmalıdır.
Tek faz uyartım için sargılara uygulanacak değerler
İki Faz Uyartım(Double Coil):
İki faz uyartım, motor sargılarının ikisinin sıra ile aynı anda uyartıldığı uyartım şeklidir. Bu uyartımda rotorun geçici durum tepkisi tek-faz uyartıma göre daha hızlıdır ancak güç iki katına çıkmaktadır.
İki faz uyartım için sargılara uygulanacak değerler
Yarım Adım Uyartım (Half Step):
Bu uyartım modunda tek faz ve iki faz arda arda uygulanır. Yarım adım uyartımda rotor her bir uyartım işareti için yarım adımlık bir işaret yapmaktadır. Örneğin: Fabrika çıkışı 2° olan bir motorun adım açısını 1° düşürmek bu sayede mümkün olmaktadır.
Yarım adım uyartım için sargılara uygulanacak değerler
Adım motorun kullanımına örnekler:
Adim motorların, endüstriyel ve elektronik uygulamalarda kullanımı oldukça fazladır. En basitinden, bilgisayarımızdaki floppy disket sürücüsünde ve hard diskler de bu teknolojiye başvurulmuştur. Adim motorlar, girişlerine uygulanan lojik sinyalleri dönme hareketine çevirirler. İstediğiniz yönde ve derecede döndürebileceğiniz adim motorlar, hassas hareketleri sayesinde, birçok cihazda konum kontrolü amacıyla kullanılmaktadır. Dışarıdan bakınca çok karışık bir is gibi gözükse de PC ile adim motor kontrolü oldukça kolay ve eğlencelidir.
Adim motor sürücü devresi:
- 1 X ULN2003 Entegre
- 1 X 1N4001 Diyot
- 1 X 12 Volt 5 Cable Step Motor
Adim motor sürücüsü olarak ULN2003 entegresini kullanıyoruz.Sürücü devresi olarak kullanılan ULN2003 içerisinde 7 adet NPN transistör ve dahili diyot barındırmaktadır. Haliyle bizi transistör bacaklarıyla uğraşmaktan kurtarmaktadır.
Kullanımı ise oldukça kolaydır. Devre semasından da anlaşılabileceği gibi 9 numaralı bacağına +12 Volt ve 8 numaralı bacağına da Toprak (ground) uyguluyoruz. Daha sonra 3 ve 6 numaralı bacaklara da paralel portun DATA pinlerinden gelen +5 Voltluk değerleri uygulayacağız. Bu sayede örneğin 3 numaralı bacağa +5 Volt (lojik voltaj) uyguladığımızda 14 numaralı bacak toprak olacaktır. Ayni şekilde sırayla 4 için 13, 5 için 12, 6 için ise 11 numaralı bacaklar toprak olacaktır.
ULN2003 Motor Sürücü Entegresi Bacak Bağlantıları
ULN2003 Motor Sürücü Entegresi Sürücü Devresi Bağlantıları
5 kablolu adim motoru kullanılmıştır devrede. Çalisma prensipleri ayni olduğundan kablo sayısının değişmesi yazacağımız programın mantığını değiştirmeyecektir. 5 kablolu adim motorunun kablolarından bir tanesi Vmotor dediğimiz ortak kablodur. Önemli olan bu kablonun hangisi olduğunu bulmaktır. Bunun için avometreyi OHM ölçere getiririz ve kabloların uçlarını ikişer ikişer ölçeriz.
Tüm uçlar ile arasındaki direnç ayni olan kablo ortak Vmotor kablosudur. Şekilde gözüktüğü gibi, diğer 4 kablo motor kömürlerine (coil) gitmektedir. Bu 4 kablonun da bir sırası vardır. Eğer bu kablolar yanlış sırada bağlanırsa, motor dönmek yerine sadece titreme yapacaktır. Yukarıda anlatıldığı gibi motora adim attırmak için yapmamız gereken, Vmotor kablosuna +12 Volt verirken, diğer kömürlere bağlı kablolara belli bir sıra ile toprak göndermek. 4 kabloya toprak sinyalini göndermek için entegrenin 3, 4, 5 ve 6. bacaklarına sıra ile +5 Volt gönderilmesi gerekir.
METİN (TEXT) LCD (Liquid Cristal Display) :
2×16 Text LCD
Şekil de görülen 2×16 Text Lcd’dir. Günümüzde kullanılan Lcd’lerin çalışma ilkeleri ve uç bağlantıları standartlaştırılmıştır. Lcd’nin dışardan veri okuyabilme ve dışarıya veri gönde- rebilmesini D0-D7 arasındaki veri yolu sağlar. Lcd’nin çalışabilmesi için 1 numaralı ucuna (VSS) şase ve 2 numaralı ucuna (VDD) +5 voltluk besleme gerilimi verilir.3 numaralı bacağı Lcd ‘nin görüntü netlik ayarı(kontrast) için kullanılır. Ayrıca saklayıcı seçme (RS, Register Selected) ucu veri girişlerinden gönderilen 8 bitlik bilginin, bir karakter kodu veya komut olduğunu belirler . (RS=0 veri – RS=1 komut) Oku/yaz (R/W, Read/Write) ucu Lcd’ye veri aktarmak veya Lcd ‘den veri okumak için kullanılır.(R/W=1 ise veri okuma işlemi –R/W=0 ise veri yazma işlemi yapılır.) Yetki (E, Enable) ucu istenilen işlemlerin gerçekleşmesi için lojik 1 seviyesine kurulan tek bitlik giriştir.
EA (External Accsess) :
Mikrodenetleyicinin (AT89S52) 31. ucu olan bu uç düşük seviyede aktiftir. +5 voltluk besleme gerilimine ya da şaseye bağlanır. +5 volta bağlanırsa programlar dahili romdan şa- seye bağlanırsa programlar harici bellekten çalışır.
Oku/Yaz (Read/Write, R/W) Ucu:
LCD ‘ye veri aktarmak veya LCD ‘den veri okumak için kullanılır. Eğer bu uçta lojik ‘1’ seviyesi varsa LCD ‘den veri okuma işlemi, lojik’0’ seviyesi varsa LCD ye bilgi giriş işlemi yapılır. LCD ‘ye veri girişinde bilginin komut ya da karakter olduğunu yukarıda anlatıldığı gibi RS belirler eğer RS bu verinin karakter olduğunu gösterirse LCD bu veriyi İçerisindeki ASCII kod çözücü bir tüm devre ye verir ve karakterin görüntülenmesini sağlar.
Yetki ( Enable, E) Girişi:
LCD de gerekli ayarlamalar yapıldıktan sonra istenile işlemlerin gerçekleştirilebilmesini sağlayan tek bitlik giriştir. LCD ‘deki bütün işlemler (okuma yazma komut vb.) düşen kenarda gerçekleştirilir. Dolayısıyla işlemlerden önce E ucu ‘1’ kurulmalı daha sonrada ‘0’lanmalıdır. Bu şekilde düşen kenarlı bir işaret elde edilmiş olur.
AT89S52 Özellikleri ve Pin Konfügürasyonu :
Özellikleri:
- Kontrol uygulamalarına yönelik 8-bit CPU
- Mantıksal işlemci
- 8051-Tabanlı Düşük-Voltaj 16MHz CMOS Kontroller 4 adet 8-bit giriş/çıkış(I/O) portu(32 uç)
- 3 adet Zamanlayıcı/sayıcı
- Watchdog Zamanlayıcı
- 2 öncelik seviyesine sahip 8 kesme donanım yapısı
- UART, 2 DPTRs,
- 8K Byte Flash hafıza (ISP), 256 Byte On-chip RAM
AT89S52 Pin konfigürasyonu
Devrede Kullanılan Malzemeler:
- 1 adet 5 uçlu step motor
- 1 adet AT89S52 Mikrodenetleyici
- 1 adet ULN2003 paket step motor sürücü transistor
- 1 adet 2×16 metin LCD
- 5 adet buton
- 1 adet Kristal 11,0592MHz
- 1 adet 10µF kondansatör
- 1 adet 8.2K direnç
- 4 adet 10K direnç
- 2 adet 22pF kondansatör
Uygulamanın C Kodları:
Bu kaynak kodlar Keil derleme programı kullanılarak C programlama dilinde yazılmıştır ve gerekli açıklamalar kodların yanında yapılmıştır.
Ana program;
#include <AT89X52.H> #include "T_LCD.h" #define stepmotor P2 #define YUKARI P3_0 #define ASAGI P3_1 #define GIRIS P3_3 #define RESET P3_2 static code unsigned char adim[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; static code unsigned char sayi[10]={'0','1','2','3','4','5','6','7','8','9'}; unsigned char yuks,konum; unsigned char c1=0,c2=0,c3=0; bit kesme=0; /*prototip tanimlamalar*/ unsigned char konum_bul(void); void hareket(unsigned char,unsigned char); void ekran_yaz(void); void arttir_azalt(unsigned char *sayi,unsigned char dgskn,unsigned char alt,unsigned char ust) { if(!ASAGI) { while(!ASAGI); if ((*sayi)>alt) *sayi=(*sayi)-dgskn; else *sayi=ust; } if(!YUKARI) { while(!YUKARI); if ((*sayi)=konum) { adim_say=4*(yukseklik-konum); bas=konum_bul(); for(i=bas+1;i<(bas+adim_say+1);i++) { stepmotor=adim[(i%8)]; Gecikme(100); } } else { adim_say=4*(konum-yukseklik); bas=konum_bul(); x=8*((adim_say/8)+1); for(i=bas-1+x;i>(bas-1+(x-adim_say));i--) { stepmotor=adim[(i%8)]; Gecikme(100); } } } void ekran_yaz(void) { Komut(Sil); Komut(IkinciSatir); VeriDizi("Konum: ",0); c1=konum/100; Veri(sayi[c1],0); c2=(konum/10)%10; Veri(sayi[c2],0); c3=konum%10; Veri(sayi[c3],0); VeriDizi("mm",0); Komut(BirinciSatir); VeriDizi("Yukseklik: mm",0); Komut(ImlecGeri);Komut(ImlecGeri);Komut(ImlecGeri);Komut(ImlecGeri);Komut(ImlecGeri); } void main(void) { LcdAc(); Komut(Sil); yuks=0; konum=0; stepmotor=0x03; //baslangic konumu verme Komut(IkinciSatir); VeriDizi(" Volkan SELCUK ",0); Komut(BirinciSatir); VeriDizi("Yukseklik: mm",0); Komut(ImlecGeri);Komut(ImlecGeri);Komut(ImlecGeri);Komut(ImlecGeri);Komut(ImlecGeri); while(1) { if(GIRIS && !kesme) { arttir_azalt(&yuks,5,0,250); //mm olarak degerler girin -->1 = 1mm artarak asagı yukarı kontrol 0 ile 250 mm yani 0 ile 25 cm arasinda degerler girilir. c1=yuks/100; Veri(sayi[c1],0); c2=(yuks/10)%10; Veri(sayi[c2],0); c3=yuks%10; Veri(sayi[c3],0); Komut(ImlecGeri);Komut(ImlecGeri);Komut(ImlecGeri); } else { if(yuks!=konum) { while(!GIRIS); hareket(konum,yuks); konum=yuks; ekran_yaz(); } kesme=0; } } }
Alt program T_LCD adında uzantısı h olan bir başlık dosyası olarak kayd edilmiş bir fonksiyondur; ana program LCD ile ilgili işlem yapacaksa buraya dallanarak işlemi gerçekleştirir.
Yukarıda yazmış olduğumuz programın, LCD’de istenilen karakterleri ekrana basabilmesi bazı başlangıç ayarlarının yapılması gerekmektedir. Göstergenin açılması, kullanılacak bit sa- yısının belirlenmesi LCD’nin çalışması için ilk yapılması gereken işlemlerdir.
Metin ekran LCD uygulamalarında standart olarak kullanılacak olan komut gönderme, LCD’nin başlangıç koşullarını ayarlama vb. rutinleri bir fonksiyon olarak tanımlamak ve gerektiğinde çağırmak için aşağıdaki T_LCD fonksiyonundan yararlanılmıştır. Bu fonksiyon kütüphane dosyası olarak kaydedilmiştir.
Alt Program
/****************************************************************/ /* T_LCD.H */ /****************************************************************/ /* LCD'de kullanılan komutların tanımlanması */ #define Sil 1 // Ekranı temizler #define BasaDon 2 // İmleci sol üst köşeye getirir #define SolaYaz 4 // İmlecin belirttiği adres azalarak gider #define SagaYaz 6 // İmlecin belirttiği adres artarak gider #define ImlecGizle 12 // Göstergeyi aç, kursör görünmesin #define ImlecYanSon 15 // Yanıp sönen blok kursör #define ImlecGeri 16 // Kursörü bir karakter geri kaydır #define KaydirSaga 24 // Göstergeyi bir karakter sağa kaydır #define KaydirSola 28 // Göstergeyi bir karakter sola kaydır #define EkraniKapat 8 // Göstergeyi kapat (veriler silinmez) #define BirinciSatir 128 // LCD'nin ilk satir başlangıç adresi // (DDRAM adres) #define IkinciSatir 192 // İkinci satırın başlangıç adresi #define KarakUretAdres 64 // Karakter üreteci adresini belirle // (CGRAM adres) /* LCD'de Kullanılan Fonksiyon Seçimi */ #define CiftSatir8Bit 56 // 8 bit ara birim, 2 satır, 5*7 piksel #define CiftSatir4Bit 48 // 8 bit ara birim, 1 satır, 5*7 piksel #define TekSatir8Bit 40 // 4 bit ara birim, 2 satır, 5*7 piksel #define TekSatir4Bit 32 // 4 bit ara birim, 1 satır, 5*7 piksel /* LCD Girişlerinin Tanımlanması */ #define Data P1 // LCD Data girişleri için port ata #define RS P3_7 // Saklayıcı seçme girişi RS=0 komut, RS=1 veri #define RW P3_6 // Oku/Yaz girişi RW=0 yaz, RW=1 oku #define EN P3_5 // Yetki girişi /* LCD Gecikme Fonksiyonu */ void Gecikme (long int sure) { long int i; for (i=1;i<=sure;i++) {;} } /* LCD Hazır Olana Kadar Bekle Fonksiyonu */ void LcdHazir () { Data=0xFF; // LCD den veri almaya hazirlan RS = 0; // komut modu RW = 1; // LCDden okuma EN = 1; // yetki için düşen kenar ayarı Gecikme(200); // kısa bir bekleme süresi while(Data & 0x7F == 0x80); // mesgul bitini kontrol et. } /* LCD'ye Komut Yazdırma Fonksiyonu */ void Komut (int komut) { LcdHazir(); // LCD hazir olana kadar bekle RS=0; // RS komut modunda RW=0; // RW yaz modunda EN=1; // işlemin yetkilendirilmesi için düşen kenar ayarı Data=komut; // LCD data girişlerine komut bilgisini aktar EN=0; // yetki için düşen kenar sağlandı Gecikme(1000); // gecikme } /* LCD'ye Tek Bir Karakter Yazdırma Fonksiyonu */ void Veri (char veri, long int hiz) { LcdHazir(); // LCD hazir olana kadar bekle RS=1; // RS komut modunda RW=0; // RW yaz modunda EN=1; // yetki için düsen kenar ayar işlemi Data=veri; // LCD data girişlerine veri bilgisini aktar EN=0; // yetki için düşen kenar sağlandı Gecikme(hiz); // Ekranda karakterlerin görünmesi arasındaki süre } /* LCD'ye Karakter Dizisi (String) Yazdırma Fonksiyonu */ void VeriDizi (char veri[], long int hiz) { int i=0; while(veri[i]!=0) { LcdHazir(); // LCD hazir olana kadar bekle RS=1; // RS komut modunda RW=0; // RW yaz modunda EN=1; // yetki için düsen kenar ayar işlemi Data=veri[i]; // LCD data girişlerine veri bilgisini aktar EN=0; // yetki için düşen kenar sağlandı i++; // bir sonraki veri bitini almak için dizi'yi 1 arttır Gecikme(hiz); // karakterlerin görünmesi arasındaki süre } } /* LCD Başlangıç Ayarlarını Yapan Fonksiyon */ void LcdAc(void) { Komut(ImlecGizle); Komut(CiftSatir8Bit); Komut(SagaYaz); }
Asansör projesine ait Keil ve proteus ares isis dosyaları;
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/10/04 Etiketler: 2X16 LCD, adım motor, asansör, asansör devresi, asansör projesi, AT89S52, atmel avr projeleri, faz, motor sürücü, step motor, ULN2003
Merhaba hocam
link silinmiş linki yenileyebilir misiniz?