
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.

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 motorun ( Crouzet Servo 41/86 ) bağlantı uçları
