Adım (Step) motor kontrolü (bilgisayarlı)

Kodla Büyü

ghost

Site Admin
Yönetici
Mesajlar
736
Adım motor kontrolü
Adım 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. Adım motorlar, girişlerine uygulanan lojik sinyalleri dönme hareketine çevirirler. İstediğiniz yönde ve derecede döndürebileceğiniz adım motorlar, hassas hareketleri sayesinde, bir çok cihazda konum kontrolü amacıyla kullanılmaktradır. Dışarıdan bakınca çok komplike bir iş gibi gözükse de PC ile adım motor kontrolü oldukça kolay ve eğlencelidir.
Adım motorun kablolarından bir veya iki tanesi ortaktır (vMotor). Yaptığımız işlem basit olarak bu ortak kabloya sürekli +12 Volt göndermek ve diğer uçları ise belli bir sırada toprağa göndererek bir adım hareketi elde etmek. Bunu iki farklı şekilde yapabiliriz. Bunlardan bir tanesi geçen ayki yazımızda kullandığımız 12 Voltluk röle devresine benzer bir devrenin 4 transistorlusu ile bu sinyalleri göndermek. Bir diğer yolu ise içerisinde bu transistörleri hali hazırda bulunduran bir entegre kullanmak. Ben her iki yöntemide anlatacağım. Yine de benim kolaylık açısından tavsiyem, entegreli devreyi uygulamanız.
Adım motor entegreli sürücü devresi malzemeleri:
1 X ULN2003 Entegre
1 X 1N4001 Diyot
1 X 12 Volt 5 Cable Step Motor
Adım motor sürücüsü olarak ULN2003 entegresini kullaıyoruz. Bu entegreyi bundan sonraki uygulamalarımızda bol bol kullanacağız. Sürücü devresi olarak kullanılan ULN2003 İçerisinde 7 adet NPN transistor ve dahili diod barındırdırmaktadır. Haliyle bizi transistor bacaklarıyla uğraşmaktan kurtarmaktadır. Kullanımı ise oldukça kolaydır. Devre şemasından da anlaşılabileceği gibi 9 numaralı bacağına +12 Volt ve 8 numaralı bacağınada Toprak (ground) uyguluyoruz. Daha sonra 3 ve 6 numaralı bacaklarada 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. Aynı şekilde sırayla 4 için 13, 5 için 12, 6 için ise 11 numaralı bacaklar toprak olacaktır.




Herşeyden önce bir adım motora ihtiyacımız var. İşimize en çok yarayacak olan adım motorunu eski 5 V* disket sürücülerinden kolayca sökebilirsiniz. Tabi bundan önce parçalayabilecek bir sürücü bulabilmeniz gerekli. Eğer bulamıyorsanız adım motor için sanırım biraz elektronikçi dolaşmanız gerekecektir. Bulacağınız adım motoru 4,5 yada 6 kablolu olabilir. Ama benim en sık rastladığım 5 kablolu olanı olduğundan, uygulamamızda 5 kablolu adım motoru kullanacağız. Çalışma prensipleri aynı olduğundan kablo sayısının değişmesi yazacağımız programın mantığının değişmesi ani gelmeyecektir.




5 kablolu adım motorunun kablolarından bir tanesi vMotor dediğimiz ortak kablodur. Önemli olan bu kablonun hangisi olduğunu bulmaktır. Bunun için avometreninizi OHM ölçere getirin ve kabloların uçlarını ikişer ikişer ölçün. Tüm uçlar ile arasındaki direnç aynı olan kablo ortak vMotor kablosudur. Biraz deneyerek bulabileceğinizden eminim. Şekilde gözüktüğü gibi, diğer 4 kablo motor kömürlerine (coil) gitmektedir. Bu 4 kablonunda bir sırası vardır. Bu sırayıda deneme yanılma yöntemiyle bulmak mümkün olacaktır. Eğer bu kabloları yanlış sırada bağlarsanız, motor dönmek yerine sadece titreme yapacaktır. Yukarıdada bahsettiğim gibi motora adım 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.
Yukarıda bahsettiğimiz bu 4 kabloya toprak sinyalini göndermek için entegrenin 3,4,5 ve 6. bacaklarına sıra ile +5 Volt göndermemiz gerekiyor. Haliyle bu + 5 Voltu paralel portun şeklinde görülen DATA pinlerinden çekeceğiz. Paralel pottun şeklini bundan sonraki her yazıma ekleyeceğim. Okurken size kolaylık sağlayacaktır.
Herzamanki gibi DATA pinlerinden çıkış almak için OUT komudunu kullanıyoruz. Çokta kısa olsa yazıyı ilkkez okuyanlar için OUT komudu ile nasıl DATA pinlerini + 5 Volt yapacağımıza değineceğim. DATA portundan 8 bitlik veri çıkışı alabiliyoruz. DATA portuna hiçbir veri göndermediğimiz zaman ki değeri "00000000" dır. Dikkat ederseniz 8 tane "0" var. Örneğin data portuna 25 değerini gönderelim. 25 değerinin ikilik sayı sisteminde karşılığı "00011001" dir. Bu durumda D4, D3 ve DO pinlerine karşılık gelen lojik değerler "1" olduğundan o pinler +5 Volt olacaktır.
Örnek : OUT &h378,25
Buradaki 8th378 ise paralel portunuzun taban adresidir. Biz şekilde DO, Dİ, D2, D3 ile gösterilen ilk dört data pinini kullanacağız. Burada OUT komutlarını peşpeşe kullanamayız. Çünkü veriyi DATA pinlerine ufakta olsa belli zaman aralıkları ile göndermemiz gerekiyor. Bunun için her OUT komudunun arasına bekletmek için çok eski yöntemlerden biri olan FOR-NEKT döngüsünü yazıyoruz. Fakat dikkat etmeniz gereken nokta FOR-NEKT döngüsünü bitirdiğiniz sayı. Ben burada "2000" kullandım. Pentium bir PC için yeterli beklemeyi sağlıyor. Sizde sisteminizin hızına göre buradaki sayıyı değiştirmelisiniz. Örneğin 486 bir PC için "500" yeterli olacaktır. Aşağıdaki Visual Basic program örneği DO, Dİ, D2 ve D3 pinlerini sıra ile +5 Volt yapacak ve entegrenin bu pinlerine bağlı olan bacaklarının karşılıklarını toprağa çekecektir. Neticede motorunuz bir adım atmış olacaktır.

ADIM MOTOR KONTROLÜ (Dalga Sürüm) - Visual Basic kodu Sub bekle(sayi as long)
Dim i as long
For i=l to sayi:next i
End sub Commandl_Click()
1 Bu örnek program, dalga sürümü sinyallerini, motora göndermektedir.
Dim adres as integer
Adres=&h378
OUT adres, 0 Tüm data pinlerinin değerlerini "0" olacaktır
Bekle 2000
OUT adres,1 'DO pininin lojik değeri wl" olacak ve +5 Volt yüklenecek.
Bekle 2000 Tanımladığımız BEKLE fonksiyonu ile bir sürelik gecikme sağlıyoruz.
OUT adres,2 lDl pininin lojik değeri wl" olacak ve +5 Volt yüklenecek.
Bekle 2000 Tanımladığımız BEKLE fonksiyonu ile bir sürelik gecikme sağlıyoruz.
OUT adres,4 'D2 pininin lojik değeri wl" olacak ve +5 Volt yüklenecek.
Bekle 2000 Tanımladığımız BEKLE fonksiyonu ile bir sürelik gecikme sağlıyoruz.
OUT adres,8 'D3 pininin lojik değeri wl" olacak ve +5 Volt yüklenecek.
Bekle 2000 Tanımladığımız BEKLE fonksiyonu ile bir sürelik gecikme sağlıyoruz.
End Sub
Benim kullandığım adım motorlar 1.8 derecelikti. Bu, motora attıracağınız her normal adımda 1.8 derecelik bir dönme elde edeceğiniz demek oluyor. Bu da motorun bir tur atması için 200 normal adım atması gerektiği ani***** geliyor. Motorun vMotor dışında kalan diğer 4 kablosuna göndereceğiniz sinyallere göre bu adımın yönünü ve açısını değiştirmeniz mümkün olacaktır. En basitinden motora ters adım attırmak için, sinyalleri D3 ten DO a doğru göndermeniz yeterli olacaktır. Çok hassas çalışmadığımızı ve motorumuzun 2 derece olduğunu ve 45 derecelik bir dönme gerçekleştirmek istediğimizi düşünelim. Bunun için yukarıda anlattığım normal adım sinyalleri yeterli olmayacaktır. Bu durumda motoru 1 er derecelik açılarla döndürebilmemiz gerekmektedir. Yarım adım attırma metodu ile bu işi kolayca yapmamız mümkündür. Bir diğer metod ise dalga sürümü sinyalleridir. Hassas hareketler üzerinde çalışmayacaksanız dalga sinyallerini kullanabilirsiniz. Aşağıdaki tablolarda tam adım, yarım adım ve dalga sürümü için uçlara göndermeniz gereken sinyal çeşitlerini ve OUT komudu ile göndermeniz gereken değerleri yazıyorum. Değerlerin ikilik sistemdeki karşılıkları D3-D0 sütunlarını soldan sağa doğru okuduğumuzda ki değerlerine eşit olduğuna dikkatinizi çekmek istiyorum. Eğer ters yönde dönüş elde etmek istiyorsanız, sinyalleri ters yönde (tablodaki satırları aşağıdan yukarıya doğru okuyarak) gönderebilirsiniz.

Yarım Adım Metodu Değer D3 D2 Dİ DO
9 10 0 1
10 0 0 1
2 0 0 10
6 0 110
4 0 10 0
2 0 0 10
12 1 1 0 0
8 10 0 0
Tam Adım Metodu Değer D3 D2 Dİ DO
9 10 0 1
3 0 0 11
6 0 110
12 1 1 0 0
Dalga sürümü Adım Metodu Değer D3 D2 Dİ DO
10 0 0 1
2 0 0 10
4 0 10 0
8 10 0 0
 
ben bu devreyi yapmıştım ders projesi olarak. o iğrenç günler geldi aklıma.tşk yani. uln2003 den başka pıc16f84 kullanmıştık. :p
 
Esin hocam, bende bu projeyi yapmıştım micro labında .
Bence güzel günlerdi...:)
 
step motor kontrolü en kolay uln 2003 ve pic16f628 ile yapılır program kodu netten çok rahat bulunabiliyor
 
Geri
Üst