Notlar..

320volt / Analog Dijital Devreler/

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

Analog Dijital Devreler, blog arşivinde BILGISAYARLI STEP MOTOR KONTROLÜ MAUS ILE MOTORU SAĞA SOLA DÖNDÜRME konusu "maus motor* motor program* motor sağ sol* step motor bilgisayar* uln2004 step motor* " ile etiketlendi

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