step motor hız problemi

Başlatan murats123, 06 Aralık 2005, 09:45:24

murats123

Arkadaşlar pic16f84  ve 4 tane tıp120  transistor kullanarak unipolar bir step motor sürücüsü yaptım, programı picbasicproda yazdım  programdaki PAUSE   gecikmelerini  en az 3 e kadar düşürebildim, 2 yapınca motor dönmüyor  vızıldama yapıyor ,fakat hızı daha artırmam lazım motor 1,8 derece  üzerinde dişli sistemi  var.program aşağıda teşekkürler.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2005 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 24.08.2005                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
kontrol:
If PORTB.0 = 0 Then ileri

If PORTB.1 = 0 Then geri

Goto kontrol


ileri: High 8  ' turn on Q1
pause 3 ' wait 25 ms
Low 8  ' turn off Q1
High 9  ' turn on Q2
pause 3  ' wait 25 ms
Low 9  ' turn off Q2
High 10  ' turn on Q3
pause 3 ' wait 25 ms
Low 10  ' turn off Q3
High 11  ' turn on Q4
pause 3  ' wait 25 ms
Low 11  ' turn off Q4
Goto kontrol  ' forever


geri: High 11  ' turn on Q1
pause 3  ' wait 25 ms
Low 11  ' turn off Q1
High 10  ' turn on Q2
pause 3  ' wait 25 ms
Low 10  ' turn off Q2
High 9  ' turn on Q3
pause 3  ' wait 25 ms
Low 9  ' turn off Q3
High 8  ' turn on Q4
pause 3  ' wait 25 ms
Low 8  ' turn off Q4
Goto kontrol  ' forever

Mnemonic

Selam arkadaşım
Programını inceledim
belki yardımı olmaz ama ben sana farklı bir yöndem onereceğim satır sayın azaldığı için sonuca ulaşabilirsin diye dusunuyorum
her pini tek tek kontrol etmek yerine butun pinleri ortak kontrol et derim port bazında.
Örneğin motor portc ye bağlı olsun
q1 = portc.0
q2 = portc.1
q3 = portc.2
q4 = portc.3

ileri:
portc = %00000001
portc = %00000011
portc = %00000010
portc = %00000110
portc = %00000100
portc = %00001100
portc = %00001000
portc = %00001001

aralara gene istedigin olcude beklemelerı koy
ayrıca bu sekılde half step elde etmis olursun cozunurlugun artar
geri içinde bunun tam tersini yapıcaksın
kolay gelsin

ete

1,8 derecelik adım açısına sahip bir step motor tur başına 200 adet (tam adım sürmede) pals ister. Yarım adım sürerseniz tur başına 400 pals vermeniz gerekir.
Şimdi buna göre 1 hesap yapalım.
Motoru 1 tur/saniye hızla döndürebilmek için komutlar arasına koymanız gereken pause süresi;
1000/200= 5 ms dir.(Tam adımda)
1000/400=2,5 ms (yarım adımda)
Buna göre 2 tur/sn döndürmek için 1000/(2x200)= 2,5 ms (tam adımda)

Buradan şu anlaşılıyor. Hızı artırmak için süreyi kısaltmak gerekiyor.
Hesap mantığı ;
ms cinsinden;
1000/tur x 200

us (mikrosecond) cinsinden hesap yapmak için
1.000.000/tur x 200
tabiiki us kullanmak için komut  "pauseus  xxx " olacaktır.

Aşağıdaki programda step motorun tek-çift ve yarım adım çalıştırma modları gösterilmekte ayrıca yön değiştirme ile hızlandırma ve yavaşlatılma işi tuşlar yardımı ile yapılmaktadır. İncele istersen.
Bu programı isis de simule de edebilirsin. İstersen dosyası hazırda da var.
ETE




'****************************************************************
'*  Name    : STEPMOTOR.BAS                                      *
'*  Author  : [EROLEC]                                           *
'*  Notice  : Copyright (c) 2004 [ETE]                          *
'*          : All Rights Reserved                               *
'*  Date    : 08.09.2004                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
SAG VAR PORTA.0
SOL VAR PORTA.1
ARTI VAR PORTA.2
EKSI VAR PORTA.3
DUR VAR PORTA.4
TRISA=%11111111
TRISB=%11100000
A VAR BYTE(8)
SURE VAR WORD
B VAR BYTE
C VAR BYTE
I VAR BYTE					' BU PROGRAM FREKANS İLE ÇALIŞMAKTADIR 
D VAR BYTE
TEK VAR PORTB.5
CIFT VAR PORTB.6
YARIM VAR PORTB.7
FREKANS VAR WORD
EKLE VAR WORD

A(0)=3: A(1)=2: A(2)=6: A(3)=4: A(4)=12: A(5)=8: A(6)=9: A(7)=1 'YARIM ADIM

	C = 0 : PORTB = 0 :	FREKANS=200:EKLE=5
		
DEVAM: 	SURE=10000/(FREKANS/100)
		IF TEK=0 Then
		GoSub YEK:GoTo BAS:EndIF
		IF CIFT=0 Then
		GoSub DUBLE:GoTo BAS:EndIF
		IF YARIM=0 Then 
		GoSub ADIM:GoTo BAS:EndIF
		GoTo DEVAM	
BAS:	IF PORTA=31 Then
		D=0:EndIF
		IF D=1 Then ARA
		IF SAG = 0 Then DONSAG
        IF SOL = 0 Then DONSOL
        IF DUR = 0 Then SON
        IF ARTI = 0 Then 
        D=1:FREKANS = FREKANS + EKLE:EndIF
        IF FREKANS > 1000 Then 
        FREKANS = 1000:EndIF
        IF EKSI = 0 Then 
        D=1:FREKANS = FREKANS - EKLE:EndIF
        IF FREKANS <5 Then 
        FREKANS = 5:EndIF
		        
ARA:	IF C = 0 Then DEVAM
        IF C = 1 Then DONSAG
        IF C = 2 Then DONSOL
        IF C = 3 Then SON
DONSAG: IF C <> 1 Then
		GoSub DOR:I=0:EndIF
		PORTB = A(I) : PauseUs (SURE)
		I = I + 1 : C = 1 : IF YARIM=0 Then BIR
		IF I = 4 Then  'ÇİFT FAZ ÇALIŞMA
		I=0:GoTo DEVAM:EndIF
BIR:	IF I = 8 Then  'YARIM ADIM ÇALIŞMA
		I = 0 :EndIF
        GoTo DEVAM    

DONSOL:	IF C <> 2 Then 
		GoSub DOR:IF YARIM=0 Then
			I=7:GoTo IKI:EndIF 'YARIM ADIM ÇALIŞMA
		GoSub DOR:I=3:EndIF ' ÇİFT FAZ ÇALIŞMA
IKI:	PORTB = A(I): PauseUs (SURE)
		I = I - 1:IF I = 255 Then 
		  IF YARIM=0 Then
			I = 7 :GoTo UC:EndIF 'YARIM ADIM ÇALIŞMA
		  I = 3 : EndIF  'ÇİFT FAZ ÇALIŞMA
UC:       IF C = 2 Then ILK
				
ILK:	C = 2  
		
        GoTo DEVAM     
SON:	C = 3 : PORTB = 0 : PauseUs (SURE) : I = 0
	GoTo DEVAM         

DOR:	PORTB = 0: PauseUs 50
		Return
 
DUBLE: '	A(0) = 3 : A(1) = 6 : A(2) = 12 : A(3) = 9 : A(4) = 0  'ÇİFT FAZ
    	A(0) = 6 : A(1) = 5 : A(2) = 9 : A(3) = 10 : A(4) = 0  'ÇİFT FAZ
		Return
		
YEK:   	A(0) = 1 : A(1) = 2 : A(2) = 4 : A(3) = 8  : A(4) = 0   'TEK FAZ
		Return
		
ADIM:	A(0) = 3 : A(1) = 2 : A(2) = 6 : A(3) = 4  : A(4) = 12: A(5)=8:A(6)=9:A(7)=1 'YARIM ADIM
		Return

ZAMAN: 	IF SURE <=1000 Then 
		EKLE = 200:EndIF
		IF SURE > 999 AND SURE <10000 Then
		EKLE = 500:EndIF
		IF SURE >=10000 Then
		EKLE = 1000:EndIF
		Return
End
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

murats123

Ete arkadaşım senin de dediğin gibi hızı arttırmak için süreyi kısaltmak lazım ben en az 3ms. yeye kadar düşürdüm 2 ms.de çalışmadı, burda mikro saniye kullanırsam da değişen bir şey olmayacak gibi geliyor bana. Benim program motoru full step modunda  çalıştırıyor, yarım step veya full step  çift fazda sürersem hız üzerinde nasıl bir etkisi olur,senin programı ben devremde kullanabilirmiyim veya şeması varmı ona göre devreyi değiştireyim.Birde şunu sorayım ben sürücüye 18 volt veriyordum  voltajı arttırırsam hız artarmı.teşekkürler.

Erol YILMAZ

@murats123
Bu konu hakkında http://picproje.com/index.php/topic,6484 başlığı altında bilgi bulabilirsin.

murats123

Erol hocam verdiğin linkte genellikle bipolar step motor üzerine tartışmıssınız bana unipolar step motor sürücüsü lazım ,birde şunu soracam L297+L298 entegreleri ile unipolar motor sürücüsü yapabilirmiyim.Teşekkürler.