• Hoşgeldin ziyaretçi , forumdan daha fazla yararlanmak için buradan üye olunuz...

adım (step) motor kontrolu (bilgisayarlı)

Okunuyor :
adım (step) motor kontrolu (bilgisayarlı)

multialper

Acemi
Üye
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 transistörlüsü 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 transistör ve dahili diod barındırdırmaktadır. Haliyle bizi transistör 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 ¼ 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 anlamına 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 portun ş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 D0 pinlerine karşılık gelen lojik değerler "1" olduğundan o pinler +5 Volt olacaktır.

Örnek : OUT &h378,25

Buradaki &h378 ise paralel portunuzun taban adresidir. Biz şekilde D0, D1, 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-NEXT döngüsünü yazıyoruz. Fakat dikkat etmeniz gereken nokta FOR-NEXT 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 D0, D1, 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=1 to sayi:next i
End sub
Command1_Click()

‘ 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 ‘D0 pininin lojik değeri “1” 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 ‘D1 pininin lojik değeri “1” 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 “1” 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 “1” 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 anlamına 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 D0 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 D1 D0

9 1 0 0 1

1 0 0 0 1

2 0 0 1 0

6 0 1 1 0

4 0 1 0 0

2 0 0 1 0

12 1 1 0 0

8 1 0 0 0

Tam Adım Metodu

Değer D3 D2 D1 D0

9 1 0 0 1

3 0 0 1 1

6 0 1 1 0

12 1 1 0 0

Dalga sürümü Adım Metodu

Değer D3 D2 D1 D0

1 0 0 0 1

2 0 0 1 0

4 0 1 0 0

8 1 0 0 0
 

multialper

Acemi
Üye
Bir diğer olayda adım motorun referans noktasını nasıl bulacağı. Yani motorun durduğu en son pozisyonun ne olduğunu nerden bileceğiz? Döndürme işlemine başladığımız noktayı biliyorsak bu çok fazla sorun olmayacaktır. Fakat motoru daha döndürmeye başlamadan, elimizle biraz çevirdiğimizi düşünelim. Bu durumda başlangıç noktası kayacak ve motoru istediğimiz pozisyona getiremeyeceğiz. Disket sürücülerde kullanılan yöntem oldukça ilkel ama geçerli bir yöntemdir. Disket sürücü bir şekilde diski okuyan kafanın nerede olduğunu bilmek zorundadır. Bunun için motoru bir yönde sürekli döndürerek, kafanın en başa dayanmasını sağlar. Bu gelinen noktaya referans noktası denir. Bu sebeple bazı adım motorların kendi etrafında sürekli olarak dönmesini engelleyecek bir tırnak vardır. Motoru referans noktasına dayamak için bu tırnaktan yararlanılır. Biz şimdilik hassas hareket yaptırmayacağımızdan varsa bu tırnağı sökebilirsiniz.

Adım motor transistörlü sürücü devresi malzemeleri:
4 X BC547B Transistör
4 X 1N4001 Diyot
1 X 12 Volt 5 Cable Step Motor

Her iki devrede de kullandığımız diyotun değerinin herhangi bir önemi yoktur. Motorda adım attıktan sonra oluşacak ters EMK bu diyot sayesinde absorbe edilebilir. Yine benim tavsiyem entegreli sürücü devresini kullanın. Bu entegrenin nasıl çalıştığını iyi anlarsanız, bir çok uygulamada transistörler ile uğraşmak zorunda kalmadan 12 Voltu kontrol edebilirsiniz.

Transistörlü sürücü devresi, geçen ayki RÖLE devremize benzemektedir. Bu sefer +12 Voltluk akım vMotor kablosuna bağlıdır. Motorun diğer kablolarını sıra ile toprağa göndermemiz gerekmektedir. Transistörün BEYZ ucuna uygulayacağımız data pininden gelen +5Volt sayesinde transistör tetiklenecek ve kollektör-emitör (CE) iletime geçecektir. Dolayısı ile transistörün C ucuna bağlı kablolar toprağa ulaşabilecektir. Transistörün uçlarını bulmak biraz zor olduğundan, BC547 transistörünün, alttan bakıldığındaki bacak bağlantılarını veriyorum.

Visual Basic Kod örneğini çekmek için elektronikhobi.com
 

prof33

Acemi
Üye
Slm sevgili kardeşim ben bu kadar paralel portla ilgili yazı okudum ama senin gibi anlatımı harika bir yazı görmedim sana teşekkür ederim şimdi benim sana bir sorum olacak benim Nakış makinasının 2 adet servo motoru var bunu lpt den kontrol eden programda var ama program çok eski ve eski bilgisayarlarda çalışıyor msdos tabanlı bu programa benzer bir proğramı windows ta çalışacak şekilde yazabilirmiyiz biraz ip ucu verbilirmisin ayrıca bu programı yazan adamın bu konu hakkında açıklama yaptığı siteyi veriyorum bir inceleyebilirmisin başına www koymadan ayrı bir wep sayfasına yaz öyle aç

omer_sahin.tripod.com
 

kala

Acemi
Üye
multialper kardeş. step motoruyla teleferik yapmam gerekiyor ve motora bilgisayara paralel portla bağlayıp sinyaller gndermem gerekiyor. vew bu konuda hiçbir bilgim yok hiç anlamam bu işlerden. ve bu sinyaller c# programından gönderilecek. bana bu konuda yardımcı olabilirmisin. şimdiden teşekkürler.
 
Üst Alt