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ı
Yayım tarihi: 2011/06/21 Etiketler: maus motor, motor program, motor sağ sol, step motor bilgisayar, uln2004 step motor