step motou microstep adımlarla kontrol etmek

Başlatan eozkantar, 18 Ekim 2010, 22:37:33

eozkantar

arkadaşlar elimde 4 ve 6 uçlu step motorlar var .bunları microstep adımlarla kullanmak istiyorum . buradaki  linklerin çoğu ölmüş ...elinde step motoru   mikro adımlarla yöneten şema ve  yazılım örneği olan varmı? tşk    ( proton yada picbasic tercih )

Tagli

#1
Ben de uzunca bir süredir bunu yapabilmek için uğraşıyorum. Bir devre kurmayı başardım ama arada bazı adımları yutuyor, iki bobindeki akımlar aynı tepe değerlerini görmüyor gibi. Kafayı yeme noktasına yaklaştığımı söyleyebilirim.

Başarılı bir sonuca ulaşamasam da bu konuda baya fikir verebileceğime inanıyorum. Öncelikle kullanmayı düşündüğün entegreleri belirlemelisin. Ben bu iş için hazır olarak yapılmış entegreleri kullanmadan kendi sürücümü yapmak istediğimden 14 civarında entegre kullanmak durumunda kaldım.

Malesef elimdeki tek şey 3 adet breadboard üzerine kurulmuş karışık bir devre. Henüz şema çıkarmakla uğraşmadım, çünkü kurcalamaya devam ediyorum. Ama sanırım sözle anlatırsam da kafanda birşeyler oluşacaktır.

Mikrostepin temeli iki bobindeki akımları kontrol edebilmektir. Bunun için de bu bobinlere seri bağlı dirençler kullanılarak akım bilgisi elde edilir (voltaj olarak) ve bu senin ürettiğin bir referans voltajı ile karşılaştırılır. Akımın istediğinden yüksek çıkması durumunda elektriği kesersin, ve bir süre sonra tekrar kontrol edip, akım istediğin kadar düşmüşse geri verirsin elektriği. Bu işleme de chopping deniyor.

Devrede H köprüsü olarak L298 kullandım. 0.47 ohmluk dirençler üzerinden ölçtüğüm voltajı LM358 ile yaklaşık 5 kat yükselterek karşılaştırma için LM393'e girdim. LM393'ün ihtiyaç duyduğu referans voltajlarını ise 2 adet DAC0808 ile elde ettim. Bunları da PIC16F627A ve 2 adet 74HC595 ile kontrol ediyorum. Chopping işlemini ise LM393'ün çıkışını kullanan 74HC74 (flip flop) ile yapıyorum, ki bunun çıkışları da L298'in enable bacaklarına gidiyor. 74HC74 için gerekli olan clock'u da 555 ile ürettim. Devrede bir diğer 555 de negatif voltaj üretmek için kullanılıyor ki bu DAC0808'ler için gerekli. Beslemeyi LM2574 (12 volt versiyonu) ile yapıyorum ve çıkışında 78L05 var. Ayrıca 555'in ürettiği negatif voltajı da kullanmadan önce 79L05'e sokuyorum.

Devre kabaca böyle. Bir de resim koyarsam belki daha rahat gözünde canlanır.
[IMG]http://img97.imageshack.us/img97/6166/devre.jpg[/img]


[IMG]http://img201.imageshack.us/img201/9886/devre2.jpg[/img]

Ama dediğim gibi, henüz tatmin edici bir sonuç alamadım.  :(
Gökçe Tağlıoğlu

OG

#2
@Tagli,

Çalışacak bile olsa o halde iken çalışmaz sanıyorum. Step motorlar iyi enterferans üretir. O kablolar çok parazit kapar.

http://www.fromorbit.com/projects/picstep/
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

Tagli

OG hocam sorunun büyük oranda breadboard üzerinde devrenin özensiz kurulmasından kaynaklandığını sanıyorum. Örnek vermek gerekirse, 3. breadboard'un (resimde sağdaki) sağdaki ve soldaki toprak hatları arasında 0.15 volt fark var.

Arada atladığı bir adım var, ki bu sebeple 3 adım boyunca aynı yerde kalıyor. Sorun bobinlerden birindeki akımın 0'a çekilememesi, yani sinüs eğrisinin 0'a değmesi gereken yerde değmemesi. Değerler x-0-x olması gerekirken (x 0'a yakın bir sayı olmak üzere), x-x-x şeklinde oluyor, haliyle motor 3 adım boyunca hareketsiz duruyor gibi oluyor. Vsens'in bağlı olduğu opamp çıkışında 0 ölçmem gereken değeri 0.5 volt olarak ölçüyorum, ki komşu adımlarda da bu değer 0.54 volt olunca haliyle arada bir fark olmuyor (bu sırada diğer bobinin eğrisinin eğiminin de 0 civarında dolaşması sebebiyle o da durumu kurtaramıyor).

İşin garibi bu sorunun sadece bir bobinde olması, diğerinde herşey normal. Yani 1/8 adım kullanan sistemde (ki adımları 0'dan 31'e numaralandırırsak) sorun 31, 0, 1 ve 15, 16, 17 numaralı üçlülerde durma olarak gözleniyor. Sanırım bu devreyi adam gibi basıp denemem gerekecek, yoksa bir yere varamayacağım.

Hocam bu gösterdiğin devreye internette dolaşırken ben de daha önce rastlamıştım. Ancak buradaki LMD18245'in bulunabilirliğinin fazla olduğunu sanmıyorum. Gerçi INT-EL'in sitesinde var gözüküyor ama 18,43 TL'lik fiyatı (özellikle de 2 tane gerektiği düşünülürse) oldukça caydırıcı nitelikte. Benim amacım hem işi öğrenmek, hem de mümkün olduğunca ucuz ve rahat bulunur parçalar kullanmak. Hatta bu sebeple L6506 kullanımından bile kaçınarak onun yerine L393 - 555 - 74HC74 üçlüsünü tercih ettim.
Gökçe Tağlıoğlu

KAZIMUGUR

Öğrenmek için uğraşıyorsanız sözüm yok.
Ama kullanayım diyorsanız 3 eksenler ebayda 50 liraya kadar düştü.
TB6560AHQ çok kullanılıyor, bir motora bir tane yetiyor , chopperi içinde....

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

KAZIMUGUR

İnternette paylaşılmış tek microstep linistep .
Onunda chopperi yok.
Copper , en az microstep kadar önemli bence .

Turbocnc forumlarından bir asm örneği var.
Bir 16f84 ve ya 628 ile iki motora full/half step yollayabilir .
Half step yetiyorsa çok iyi bir yazılım.

; File HALFSTEP.ASM
; ... for PIC16F84 microcontroller
; Program to use F84 as a step and direction controller for a unipolar
; step motor.  Step and direction pins are RA0, RA1; RA2, RA3; RB0-3 and RB4-7 are the windings
; in order (driven by NPN small sig transistors or MOSFETS). RA4 selects full or half-step.
; Steps on negative going edge of step pulse.

; CPU configuration
; 	(It's a 16F84, RC oscillator,
; 	watchdog timer off, power-up timer on)

	processor 16f84
	include	  <p16f84.inc>
	__config  _XT_OSC & _WDT_OFF & _PWRTE_ON

; Declare variables

pattA	equ	H'0D'	;Current step pattern number (0-7) for axis A
lastA	equ	H'0E'   ;Last state of step pin on axis A (1 is high, 0 is low)
pattB	equ	H'0F'	;Current step pattern number (0-7) for axis B
lastB	equ	H'10'   ;Last state of step pin on axis B (1 is high, 0 is low)
inport	equ	H'11'	;Value of port A when read (stored for later access)
temp	equ	H'12'

; Program

	org	0	  ; start at address 0

;***************************************************
;
;	START OF PIC 16F84 CODE FOR STEP;
;
;***************************************************
;

;------------------------------------------
;****Power on reset startpoint
;------------------------------------------

;***Initialization of program	

; Set port B as output and port A as input (except bit 4)

	movlw	B'00011111'
	tris    PORTA		
	movlw	B'00000000'
	tris	PORTB		

;Clear ports and zero motors

	clrf	PORTA
	movlw	B'00010001'
	movwf	PORTB
	clrf	lastA
	clrf	lastB
	clrf	pattA
	clrf	pattB

;Loop around for a while to let everything stabilize

	movlw	d'255'
	movwf	inport
loop:	decfsz	inport, f
;	goto loop

;***Basic program loop

;Main routine - check pin states and step on negative edge
;Get port data and store, then check axis A
;A10 checks if old is 0, new is 1 (update register)
;A01 checks if old is 1, new is 0 (step and update register)
;Similarly for axis B

main:	movf	PORTA, w
	movwf	inport
A10:	btfsc	lastA, 0
	goto A01
	btfss	inport, 2
	goto A01
	bsf	lastA, 0
A01:	btfss	lastA, 0
	goto B10
	btfsc	inport, 2
	goto B10
	bcf	lastA, 0
	call stepA

B10:	btfsc	lastB, 0
	goto B01
	btfss	inport, 0
	goto B01
	bsf	lastB, 0
B01:	btfss	lastB, 0
	goto main
	btfsc	inport, 0
	goto main
	bcf	lastB, 0
	call stepB
	goto main

;------------------------------------------
;***stepA - sub to cycle axis A one half step
;  Dir of 1 is increase, else decrease

stepA:	btfss	inport, 3
	decf	pattA, f
	btfsc	inport, 3
	incf	pattA, f

;Check for pattern overflow and fix

	movf	pattA, w
	sublw	D'255'
	movlw	D'07'
	btfsc	STATUS, 2
	movwf	pattA

	movf	pattA, w
	sublw	D'08'
	btfsc	STATUS, 2
	clrf	pattA	

;Get step pattern and send to port B on bits 0-3

	movf	PORTB, w
	andlw	B'11110000'
	movwf	temp
	movf	pattA, w
	btfsc   PORTA , 4
	call dcode
	btfss	PORTA , 4
	call dfcode
	iorwf	temp, w
	movwf	PORTB

	return

;------------------------------------------
;***stepB - sub to cycle axis B one half step
;  Dir of 1 is increase, else decrease

stepB:	btfss	inport, 1
	decf	pattB, f
	btfsc	inport, 1
	incf	pattB, f

;Check for pattern overflow and fix

	movf	pattB, w
	sublw	D'255'
	movlw	D'07'
	btfsc	STATUS, 2
	movwf	pattB

	movf	pattB, w
	sublw	D'08'
	btfsc	STATUS, 2
	clrf	pattB	

;Get step pattern and send to port B on bits 4-7

	movf	PORTB, w
	andlw	B'00001111'
	movwf	temp
	swapf	temp, f
	movf	pattB, w
	btfsc   PORTA , 4
	call dcode
	btfss	PORTA , 4
	call dfcode
	iorwf	temp, f
	swapf	temp, w
	movwf	PORTB

	return

;------------------------------------------
;***stepcode - sub to generate bit pattern for number in w (!!MUST BE 0-7!!)
;  pattern is stored in w register (lower four bits) for half step pattern

dcode:	addwf	PCL, f
	retlw	B'00000001'	;0
	retlw	B'00000011'	;1
	retlw	B'00000010'	;2
	retlw	B'00000110'	;3
	retlw	B'00000100'	;4
	retlw	B'00001100'	;5
	retlw	B'00001000'	;6
	retlw	B'00001001'	;7
dfcode:	addwf	PCL, f
	retlw	B'00000001'	;0
	retlw	B'00000010'	;1
	retlw	B'00000100'	;2
	retlw	B'00001000'	;3
	retlw	B'00000001'	;4
	retlw	B'00000010'	;5
	retlw	B'00000100'	;6
	retlw	B'00001000'	;7


;Mandatory end of program command

	end

Tagli

Half step iş görüyorsa L297 de yeterli olacaktır. Ama bu sürücülerde, boşta iken akımı kısma gibi özellikler de aranıyor bazen, bu durumda L297 yetersiz kalır.

Şu benim sürücüyü bir bitirebilirsem iyi bir paylaşım olacak. Sorunu breadboard üzerinde çözemeyeceğimi düşündüğümden baskı devre çalışmalarına başlıyorum...
Gökçe Tağlıoğlu

KAZIMUGUR

Pic+mos , L297 ile kıyas edilemez.
Dediğim gibi  tek eksiği chopper.
Aslında bunları hep tartışmış ve paylaşmıştık önceleri.
Yarım adım +5mm somun,  hassas kalıp kalıp işleri gibi şeyler haricinde , mesela pcb de fazlasıyla yeterli olur.
5/400=0,0125 gibi....

Tagli

L297'nin tercih edilmemesinin sebebi nedir? PIC'e fazladan ne iş yaptırılıyor?
Gökçe Tağlıoğlu

KAZIMUGUR

L297 ye ne yapabilirsin ?
Değiştirebileceğin bir şey değil.
Çıkışında onun dilinden anlayacak bir sürücü lazım L298 gibi .

Pic çıkışında moslarla , akım yetti yetmedi derdin olmaz...

Ve tabii kendi yapmış zevki alırsın.  ::)



muratti_70

Merhaba, arkadaşlar.
Geç olmadı umarım, size DRV 8811 i tavsi ederim, ben kullanıyorum (half step modunda) çok da memnunum.Devreyi paylaşan amerikalı arkadaş 2.5A e kadar sorun yok der.
Linki:http://robot.avayanex.com/?cat=4
bir bakın bütün bilgiler sitesinde mevcut: şema, pcb.
Saygılar.
dijital elektroniğe aşığım :)

erkan614

ben biraz rahatlayınca bu kiti alıcam öğretme konusunda çok faydalı olabilir
https://estore.ti.com/Search.aspx?detail=1&k=RDK-Stepper

muratti_70

Güzel bir kitmiş, ben hala pic lerle stepleri sürmeye çalışıyorum, daha pc ye geçemedim  :)
dijital elektroniğe aşığım :)