Bilgisayarla Dünyaya Hükmetmek
Geçen ay yaptığımız I/O kartı ile Stepper motor çalıştırmaya ne dersiniz? Merhabalar!
Geçen ay, düşük maliyetli bir I/O kartını evde nasıl üretebileceğimizden bahsetmiştik. Bu ay ise (I/O kartınız çalıştıysa tabi :))) ) kendi ürettiğimiz I/O kartıyla stepper motor kontrol etmeyi deneyeceğiz.
Dilerseniz öncelikle stepper motorların nasıl çalıştıklarını inceleyelim.
DC servo motorlarda döner alan, rotor üzerindeki kollektör aracılığıyla dönüş hareketiyle birlikte rotor üzerindeki sarımların belirli bir sırayla devreye girmesiyle sağlanır. Senkron ve asenkron AC motorlarda ise döner alan stator ve rotorda oluşan faz farkından yararlanılarak meydana getirilir. DC ve AC motorların aksine stepper motorlar, bobinlerine gerilim verildiğinde serbestçe dönmeye başlamazlar. Mikroişlemciler yada lojik sistemler aracılığıyla bobinlerin sırayla devreye girmesi ile döner alan oluşturulur ve rotor, motoru kontrol eden mikroişlemci yada lojik sistemin istediği hızda ve yönde dönmeye başlar. Ayrıca tork değerleri aşılmadığı sürece herhangi bir sensörle feedback almaya gerek yoktur.
Endüstride genellikle unipolar (çok kutuplu, şekilde soldaki motor) ve bipolar (iki kutuplu, şekilde sağdaki motor) olmak üzere iki tip stepper motor kullanılır. Daha hassas hareket kontrolü elde etmek amacıyla 5-6…n kutuplu stepper motorlar da üretilmektedir ancak biz bu tip stepper motorlarla ilgilenmeyeceğiz. (zaten piyasada bulmanız da oldukça zor.).
Unipolar stepper motorları 1 fazlı, 2 faz- tam adımlı ve 2 faz-yarım adımlı olmak üzere üç değişik şekilde sürebiliriz.
Adım | A1 | B1 | A2 | B2 |
1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 0 | 1 |
Yukarıdaki tablo, unipolar bir stepper motorun 1 fazlı olarak sürülmesini göstermektedir.
Adım | A1 | B1 | A2 | B2 |
1 | 1 | 0 | 0 | 1 |
2 | 1 | 1 | 0 | 0 |
3 | 0 | 1 | 1 | 0 |
4 | 0 | 0 | 1 | 1 |
Yukarıdaki tablo, unipolar bir stepper motorun 2 fazlı-tam adım sürülmesini göstermektedir. Unipolar stepper motorlar, tam adım sürüldüklerinde daha fazla tork elde edilebilir.
Adım | A1 | B1 | A2 | B2 |
1 | 1 | 0 | 0 | 0 |
2 | 1 | 1 | 0 | 0 |
3 | 0 | 1 | 0 | 0 |
4 | 0 | 1 | 1 | 0 |
5 | 0 | 0 | 1 | 0 |
6 | 0 | 0 | 1 | 1 |
7 | 0 | 0 | 0 | 1 |
8 | 1 | 0 | 0 | 1 |
Yukarıdaki tablo ise unipolar stepper motorun 2 fazlı-yarım adım sürülmesini göstermektedir. Motor yarım adım sürüldüğünde daha hassas hareket kontrolü sağlanır ancak tork neredeyse yarı yarıya düşer.
Bipolar stepper motorların sürülmesi:
Bipolar stepper motorları sürmek için, unipolar motorlara göre daha karmaşık sürücü devreleri gerekmektedir. Özellikle asimetrik beslemeli uygulamalarda (VCC-GND) 4 tane NPN ve 4 tane PNP olmak üzere 8 tane transistör gereklidir.
Adım | A1 | B1 | A2 | B2 |
1 | + | – | – | – |
2 | – | + | – | – |
3 | – | – | + | – |
4 | – | – | – | + |
Yukarıdaki tablo bipolar bir stepper motorun nasıl sürüleceğini göstermektedir. + ile simgelenen bölümlerde terminal VCC'ye, – ile gösterilen bölümlerde ise VSS'ye bağlanmalıdır.
Dilerseniz şimdi de hem bipolar hem de unipolar stepper motorlar için sürücü devrelerimizi inceleyelim.
1. Bipolar stepper motor sürücü
2. Uniplar stepper sürücü
Uygulama şemalarımız oldukça basit. Her iki sürücü devresi için de transistörleri belirtmedim çünkü bu tamamen kullanacağınız stepper motorlara bağlı. 0.5…0.8 amper için BC639-BC640, 2-3 amper için BDX53C-BDX54C, 4-5 amper için TIP141A-TIP142A kullanabilirsiniz. Aslında transistörün adının pek bi önemi yok. Motorunuz için gerekli I-ce akımını sağlayabilen herhangi bir darlington transistör olabilir.
Besleme voltajları da kullanacağınız stepper motora göre 5…40 volt arasındadır. Büyük akım gerektiren stepper motorlar kullandığınız takdirde sürücü transistörleri soğutucuya bağlamayı ihmal etmeyin. Küçük güçlü motorlarda transistör yerine ULN2003 gibi transistör dizileri de kullanabilirsiniz. Ve tabiki stepper motoru kompleks bir sistem içerisinde çalıştırmayı düşünüyorsanız optik yalıtımı ihmal etmeyin.
Ve son olarak 7404 entegrelerinin özellikle HC serisi olmasına dikkat edin. L, LS vb. gibi serilerle 8255'in arası pek iyi değil çünkü.
Şimdi de gelelim işin yazılım kısmına. Her ne kadar bilgisayarla kontrol uygulamalarında Delphi pek işe yaramaz deseler de ben sadece Delphi kullanıyorum. Delphi 1.x … 3.x versiyonlarında portlara erişim için standart port[address]:=data komutu bulunmaktadır ama Delphi 4.x ve üzeri sürümleri kullanıyorsanız öncelikle vereceğim port erişim fonksiyonlarını alın:
{**************************************
function ReadPort(wPort : Word): Byte;
wPort: Port Adresi
**************************************}
function ReadPort(wPort : Word): Byte;
begin
asm
mov dx, wPort
in al, dx
mov result, al
end;
end;
{**************************************
procedure WritePort(wPort : Word; bValue : Byte);wPort: Port Adresi
wPort: Port Adresi
bValue: Porta yazılacak değer
**************************************}
procedure WritePort(wPort : Word; bValue : Byte); begin asm mov dx, wPort mov al, bValue out dx, al end; end;
Unutmadan hatırlatayım, bu fonksiyonlar Windows NT ve Windows 2000'de çalışmaz.
Portlara erişim fonksiyonlarını yazdıktan sonra işimiz oldukça kolaydır.
Örneğin unipolar bir stepper motoru sürmemiz gerektiğinde
var
i,j: integer;
step: integer;
begin
step:=1; // şu anki adım: 1
for i:=1 to 50 do //50 adım at
begin
inc(Step); // step:=step+1
if (Step>4) then Step:=1; // step 4'ten büyükse step'i 1'e eşitle
case Step of // şu anki adıma göre unipolar stepper motoru 1 fazlı sür
1:WritePort(PortAdresi,1); // belirtilen adrese 1 gönder 1d = 00000001b
2:WritePort(PortAdresi,2); // belirtilen adrese 2 gönder 2d = 00000010b
3:WritePort(PortAdresi,4); // belirtilen adrese 4 gönder 4d = 00000100b
4:WritePort(PortAdresi,8); // belirtilen adrese 8 gönder 8d = 00001000b
end;
for j:=1 to 10000 do begin end; // 2 step arası zaman gecikmesi sağla
// zaman gecikmesi için Timer.OnTimer olayını kullanarak
// kontrollü zaman gecikmesi sağlayabilirsiniz.
end;
end;
Şeklinde kısa bir kod yazmak yeterlidir.
Yukarıdaki örnekte unipolar bir stepper motoru 1 fazlı olarak sürüyoruz. Diğer sürme şekillerine göre doğruluk tablolarını oluşturup portlara gereken değerleri gönderebilirsiniz. Örnekte PortAdresi yazan yere, stepper motor sürücüyü bağladığınız portun adresini yazın. İlk denemenizde motor dönmek yerine titreyebilir. Bu motor bağlantısında hata var demektir. Ben motorun bağlantılarını değiştirmek yerine genellikle yazılımda steplerin yerini değiştiriyorum. (şimdi kim uğraşcak o kadar kabloyu sök tekrar bağla :)) )
Bu ay stepper motorları masaya yatırdık. Gelecek ay I/O kartımıza ADC bağlayarak sıcaklık ve voltaj ölçümleri yapacağız, DAC bağlayarak lambaların parlaklıklarını kontrol edeceğiz, switchlerden lojik sinyaller toplayacağız ve I/O kartını yapamayan ve/veya çalıştıramayan arkadaşlar için paralel portu nası kullanabileceğimizden bahsedeceğiz.
Saygılar, Sevgiler.
Kaynaklar:
* Working With Stepper Motors – EIO – © 1998 Jason Johnson
* Mikroişlemci Tabanlı Sistemler – MEB Yayınevi
Windows NT ve Windows 2000, Microsoft Corp'ın ticari markalarıdır.
Delphi, Inprise Corp'ın ticari markasıdır.