Bilgisayarlı step motor kontrolü maus ile motoru sağa sola döndürme

| Haziran 21, 2011 Tarihinde güncellendi
Bilgisayarlı step motor kontrolü maus ile motoru sağa sola  döndürme

Elektronik devrelerin, cihazların bilgisayar ile kontrolü sayesinde bir çok şey yapılabilir aslında elektronik ile ilgilenen bir kişinin özellikle meslek olarak elektronik seçimini yapan bir kişinin az çok bilgisayar programcılığı vb, delphi, c vs.. bilmesi gerekli biraz pic programlama çok iyi olur

Bilgisayar ile step motor kontrol progjesi YAVUZ DİNÇ – FERHAT ÖZALP – EMRE ÇALIŞKAN tarafından hazırlanmış Derleyen : EROL KÜTÜK ve SEDAT ELCİVAN Emeği geçen hazırlayan kişilere teşekkürler

Benzer uygulamalar için feyz verecek faydalı bir örnek…

EKRANDA AÇ VE KAPA YAZILARINA MOUSE İLE TIKLANDIĞINDA STEP MOTORUN SAĞA YA DA SOLA DÖNDÜRÜLMESİ

Debug ile çalışan motor.com adlı program kullanıldı. Amaç bir program aracılığı ile step motoru sürmek, gerektiğinde program üzerinde değişiklik yapılarak tur sayısını ve dönüş hızını değiştirebilmektir.

Ayrıca görsellikte kullanılarak programın daha işlevli hale getirilmesi sağlandı. Buna göre sol taraftaki kutucuğun içinde herhangi bir bölgeye mouse ile sol tıklandığında step motor sola doğru, sağ taraftaki kutucuğun herhangi bir bölgesine mouse ile sol tıklandığında ise step motor sağa doğru dönüyor. Programdan çıkmak için ise sol taraftaki kutucun her hangi bir bölgesine mous ile sağ tıklanması gerekiyor. Dönüşler ise örneğin bir kapıyı açma kapama düşünüldüğünde kapı tamamen açılmadan ya da kapanmadan başka bir deyişle step motor tamamen sola dönmeden veya sağa dönmeden yön değiştirilemiyor veya programdan çıkılamıyor.

Programın çalışmasına gelince; program belirli süre ve aralıklarla paralel porta 1 ve 0 bilgileri gönderiyor.

step-motor-sol-yon-sag-yon

Fakat step motoru sürmek için parelel port çıkışında elde edilen bu lojik gerilimin akımı yeterli olmuyordu. Bunun üzerine yeterli akımı sağlamak üzere ULN serisinden ULN2004AN entegreli bir devre kullanıldı. Bu entegrenin amacı girişine gelen küçük akımlı lojik değişimlere göre çıkışında verilen gerilim altında lojik değişmeler meydana getirmesidir.

Yani girişteki küçük akım ile çıkıştaki büyük akımların kontrol edilebilmesidir. Bu özelliği sayesinde bu serideki entegreler büyük akım kontrolü gerektiren diğer devreler için de kullanılabilir.

Biz devremizde ilk olarak tek bir ULN2004AN kullandık ve entegremizin kısa sürede çok fazla ısındığını gördük. Yaptığımız ölçümlerde motorumuzun boşta iken yaklaşık 1.4A dönüş sırasında iken yaklaşık yarısı olan 0.7A civarı akım çektiğini gördük. Bu nedenle özdeş ikinci bir entegre daha kullandık ve hem girişleri hem çıkışları tamamen paralel (senkron) olacak şekilde bağladık. Böylece step motorunun sürülmesi için gereken akım iki entegreden sağlanmış ve bunun sonucunda da entegre başına düşen akım azaltılmasıyla ısı düşürülmüş oldu. Daha yüksek akım gereken uygulamalar için entegre sayısı artırılabilir.

Programın çalıştırılması : İlk önce bilgisayarın paralel portuna istenilen bilgiyi göndermek amacıyla DOS ortamında kullandığımız “debug” aracılığıyla “motor.com” adlı bir programcık yazıldı. Bu program görsel içerik de içerdiğinden yani motor yönü ve programdan çıkış gibi özellikler mouse aracılığı ile seçildiğinden öncelikle program açılmadan önce mouse ile ilgili küçük bir programcığın çalıştırılması gerekliydi. Bu amaçla bilgisayar dos ortamında açıldıktan sonra “mouse.com” çalıştırılarak ara program belleğe yüklenir. Daha sonra motor.com çalıştırılır ve ekrana gelen kutucuklar ve mouse yardımıyla step motor sağa-sola dönderildi.

Bu programda step motorun tur sayısını değiştirmemizde mümkündür.Programda 01C2 (sola) ve 01F2 (sağa) satırlarındaki CX’in içeriğini değiştirirsek tur sayısını değiştirmiş oluruz. Ayrıca motorun dönüş hızınıda değiştirmemiz mümkündür.Programdaki 023C satırındaki CX’in değerini değiştirirsek hızı azaltmış yada arttırmış oluruz.

Step Motor Program


0100:	MOV	AL,12	   ; INT 10,0 grafik moda geçmek için kullanıldı.Al=12 iken ekran 
0102:	MOV	AH,00		; 640x480 16 color graphics (vga) moda alınır.
0104:	INT	10
0106:	MOV	AH,02		; INT 10,02 kurzör pozisyonunu set etmek için kullanıldı.
0108:	MOV	DH,05		; DH:row(satır)	DL:column(sütun)	BH:page number
010A:	MOV	DL,07		
010C:	INT	10
010E:	MOV	AH,09		; INT 21,09 ekrana string yazdırma fonksiyonu. Yazılacak string
0110:	MOV	DX,0300	; DS:DX adresinde olmalı. ‘$’ karakteri görene kadar ekrana
0113:	INT	21		; karakterler basılır.(0300 adresinde ‘Left Click To Open$’ )
0115:	MOV	AH,02		; Kurzör 05,32 koordinatlarına konumlandırıldı
0117:	MOV	DH,05
0119:	MOV	DL,32
011B:	INT	10
011D:	MOV	AH,09		; 0350 adresinde ‘Left Click To Close$’ ifadesi yer alıyor
011F:	MOV	DX,0350	; Bu string ifadeyi kurzörün konumlandığı yere basıyoruz.
0122:	INT	21
0124:	MOV	AH,02		; Kursör 09,05 koordinatlarına konumlandırıldı
0126:	MOV	DH,09
0128:	MOV	DL,05
012A:	INT	10
012C:	MOV	AH,09		; 0400 adresindeki ‘Right Click To Exit$’ ifadesi ekrana basıldı
012E:	MOV	DX,0400
0131:	INT	21
0133:	MOV	DX,0025	; INT 10,0C fonksiyonu DX ve CX ile belirtilen koordinattaki
don1:	0136:	MOV	CX,0020	; pixeli yakmak için kullanılır. Al: Renk Bilgisi yeşil için 22
0139:	MOV	AH,0C		; DX:row number	CX:column number
013B:	MOV	AL,22		
yatay1 013D:	INC	CX		; Yatayda bir sonraki pixele geç
013E:	INT	10		
0140:	CMP	CX,00D0	; yatayda 00D0 a kadar çizgi çizilecek
0144:	JNZ	013D		
0146:	MOV	CX,0180	; yatayda ilk çizgi çizildikten sonra bir sonraki yatay çizginin
yatay2	0149:	INC	CX		; başlangıç koordinatı girildi ve sırayla 0230 a kadar bir çizgi
014A:	INT	10		; daha çizilecek
014C:	CMP	CX,0230
0150:	JNZ	0149
0152:	ADD	DX,60		; Üstteki yatay çizgiler çizildikten sonra alttaki yatay çizgiler 
0155:	INC	BX		; için satır koordinatını belirliyoruz ve pixelleri sırayla yakıyoruz
0156:	CMP	BX,02		; 
0159:	JB	0136
015B:	XOR	BX,BX	
015D:	MOV	CX,0020	; Dikey çizgiler çizdiriliyor.
don2:	0160:	MOV	DX,0025	
dikey:	0163:	INT	10
0165:	INC	DX
0166:	CMP	DX,0086
016A:	JNZ	0163
016C:	ADD	CX,00B0	; Her dikey çizgi arasında B0 kadar boşluk var. Bunun için her
0170:	INC	BX		; çizilen dikey çizgiden sonra sütün koordinatını B0 kadar arttır
0171:	CMP	BX,04		; Dikeyde 4 tane çizgi çizildiyse çizim işlemi bitiyor.
0174:	JB	0160
0176:	MOV	AX,0001	; INT 33,01 show mouse cursor 
0179:	INT	33
017B:	XOR	BX,BX	; 0500 adresinde 1 varsa kapı açık 0 varsa kapı kapalı demek
017D:	MOV	[0500],BX	; kapı programın başında kapalı kabul ediliyor. 
don3:	0181:	XOR	BX,BX	
0183:	MOV	AX,0003	; INT 33,03 farenin buton ve koordinat durumunu kontrol eder.
0186:	INT	33		; bx:2 ise sağ butona, 1 ise sol butona basılmış, 0 ise basılmamış 
0188:	CMP	BX,02		; eğer sağ butona basılmış ise programdan çıkıyoruz.
018B:	JZ	01E5		; CX:horizontal mouse position  DX: Vertical mouse position
018D:	CMP	BX,01		; sol tuşa basılmış ise hangi koordinatlar içinde basıldığını
0190:	JNZ	0181		; kontrol edeceğiz. Buna göre kapı açılacak ya da kapanacak
0192:	CMP	CX,20		
0195:	JB	0181
0197:	CMP	CX,0230
019B:	JA	0181
019D:	CMP	DX,25
01A0:	JB	0181
01A2:	CMP	DX,0086
01A6:	JA	0181
01A8:	CMP	CX,00D0	; birinci kutunun içinde sol tıklanmış ise 01B6 adresine
01AC:	JB	01B6		; dallanıyoruz. Bu adreste kapı açılıyor
01AE:	CMP	CX,0180	
01B2:	JA	01E7		; ikinci kutunun içinde sol tıklanmış ise 01e7 adresine dallan
01B4:	JMP	0181		; değil ise 0181 adresine dönüp butonları tekrar kontrol et.
open:   01B6:	MOV	BX,0001	
01B9:	CMP	[0500],BX	; 0500 adresi 1 ise kapı daha önceden açık demektir.Bu durumda
01BD:	JZ	0216		; 0216 adresine dallanıp bu durumu bildiren bir mesaj yazıyoruz.
01BF:	MOV	DX,0378	; eğer daha önceden açık değilse porta motoru döndürmek için
01C2:	MOV	CX,00A0	; gereken sinyalleri gönderiyoruz.CX’in içeriği tur sayısıdır
don5:	01C5:	MOV	AL,03
01C7:	OUT	DX,AL
01C8:	CALL	023A
01CB:	MOV	AL,09
01CD:	OUT	DX,AL
01CE:	CALL	023A
01D1:	MOV	AL,0C
01D3:	OUT	DX,AL
01D4:	CALL	023A
01D7:	MOV	AL,06
01D9:	OUT	DX,AL
01DA:	CALL	023A
01DD:	LOOP	01C5
01DF:	MOV	[0500],BX	;kapı açıldıktan sonra 0500 adresini 1 yapıyoruz.
01E3:	JMP	0181		; daha sonra tekrar fare butonu okumak için 0181 adresine dön
end:	01E5:	INT	20		; bu komut programı sonlandırıyor
close:	01E7:	XOR	BX,BX
01E9:	CMP	[0500],BX	; 500 de 0 varsa kapı daha önceden kapalı demektir.Bu durumda
01ED:	JZ	0228		; 0228 adresinde gidip ekrana bu mesajı yazıyoruz. Daha sonra 
01EF:	MOV	DX,0378	; porta motoru döndürmek için sinyalleri gönderiyoruz. Ancak
01F2:	MOV	CX,00A0	; bu kez sinyalleri ters sırada göndereceğiz ki motor ters dönsün
don6:	01F5:	MOV	AL,06             ;  CX’in içeriği tur sayısıdır
01F7:	OUT	DX,AL
01F8:	CALL	023A
01FB:	MOV	AL,0C
01FD:	OUT	DX,AL
01FE:	CALL	023A
0201:	MOV	AL,09
0203:	OUT	DX,AL
0204:	CALL	023A
0207:	MOV	AL,03
0209:	OUT	DX,AL
020A:	CALL	023A
020D:	LOOP	01F5
020F:	MOV	[0500],BX	; kapı kapandıktan sonra 0500 adresi sıfırlanır
0213:	JMP	0181		; daha sonra tekrar buton okuma işlemi yapılır.
don4:	0216:	MOV	AH,02
0218:	MOV	DH,0A
021A:	MOV	DL,28
021C:	INT	10
021E:	MOV	AH,09
0220:	MOV	DX,0450	; 0450 adresinde ‘The door has already opened$’
0223:	INT	21
0225:	JMP	0181
don7:	0228:	MOV	AH,02
022A:	MOV	DH,0A
022C:	MOV	DL,28
022E:	INT	10
0230:	MOV	AH,09
0232:	MOV	DX,0550	; 0550 adresinde ‘The door has already closed$’
0235:	INT	21
0237:	JMP	0181
delay:	023A:	PUSH	CX
023B:	PUSH	DX
023C:	MOV	CX,007F        ; CX’in içeriği step motorun hızınıdeğiştirir.
023F:	MOV	DX,00F5
0242:	DEC	DX
0243:	CMP	DX,00
0246:	JNZ	0242
0248:	DEC	CX
0249:	CMP	CX,00
024C:	JNZ	023F
024E:	POP	DX
024F:	POP	CX
0250:	RET


strong>Devre Şeması

step-motor-kontrol-uln2004

Step motorun ( Crouzet Servo 41/86 ) bağlantı uçları

step-motor-uc-Crouzet-Servo-41-86

Yayım tarihi: 2011/06/21 Etiketler: , , , ,



Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir