Servo motor sapıtması...

Başlatan mcguiverali, 27 Kasım 2008, 12:01:34

mcguiverali

Herkese yeniden merhabalar...

Servo motor ile yön kontrolü yapacağım bi devrede 2 buton bulunmakta basit olarak yazdığım programda ise bi tuş bir yöne diğer tuş ise diğer yöne dogru servoyu konumlandırıyor eğer hiçbir tuşa basılmaz ise servo orta konumda kilitlenip kalması gerek..

Sorunum ise ;
Devreye güç verdiğimde hiçbir tuşa basılmaz halde servo ortada kilitli kalması gerekirken bazen sapıtıp başka yöne gidiyor...acaba sorun servodamıdır yoksa koddamı bi hata var?



OPTION_REG.7=0
TRISB=%00000110      

i var byte
ii var byte
i=0
ii=0
pause 500

KONTROL:
IF(PORTB.1=1)AND(PORTB.2=1)THEN ORTADON 
IF PORTB.1=0 THEN SOLDON
IF PORTB.2=0 THEN SAGDON
GOTO KONTROL

SOLDON:

pulsout portb.5,60
pauseus 19940

GOTO KONTROL

ORTADON:

pulsout portb.5,110
PAUSEus 19890

GOTO KONTROL

SAGDON:

pulsout portb.5,170
PAUSEus 19830

GOTO KONTROL

END
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

cuneytsezmis1

sorun programında gözüküyor.programında butonlara basılmadığı sürece ortadon etiketine sürekli dallanıyor.eğer hiçbir butona basılmamışsa ortadon etiketine bir kereye mahsus git.butonlara basılana kadar bir daha gitme.kolay gelsin.

mcguiverali

o satırı bilerek yazdım yani servonun o konumda kilitli kalmasını istiyorum boşta değil...program oraya bir kere dallanırsa servo o konuma gelir ve boşta kalır yük bindiğinde ise konumu sapar..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

ete

Lojik operatörlerin kullanımında bit veya Byte bazında işlemlerde komutta farklılık vardır.

Bit bazında kullanıyorsanız AND yazmak yerine  & işaretini , Byte bazında kullanıyorsanız AND yazmanız gerekir.

Ortada kalma ile ilgili komut bit bazında olup oradaki AND yazısını çıkartıp yerine & yazın.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mcguiverali

AND yerine & işaretini kullandım fakat aşağıdaki hatayı verdi ;



& işaretini 2 defa kullanınca(&&) hata düzeldi fakat AND işaretiyle aynı manaya geldi sanırım..

bu arada güç verdiğimde yine bazen sapıtıp ortada durmak yerine bi yöne doğru dönüyör..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

mcguiverali

Sorun;

pulsout portb.5,110
PAUSEus 19890


buradaki kodda üretilen işaretin periyodu 20000us(20ms) değilde 20990us olmuş yanlış yapma nedenim ise pulsout komutunda 110 sayısını 110us olarak almam halbuki 110x10us yani 1100us high 18900us low konumlu bi işaret vermeliydim... Ufak bi çarpma ve çıkarma hatası böyle bi soruna mal oldu..

herkese teşekkürler..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....

ete

Bildiğim kadar servo motorlar genellikle 500 ile 2000us lik palslar ile çalışırlar.
Seninkinde ise 20.000 us yani 20 ms görüyorum. Acaba kullandığın motor özel bir şeymidir?.

Değilse sola dön için PULSOUT portb.5,50

Ortada Kal için PULSOUT portb.5,125

Sağa Dön için PULSOUT portb.5,200

komutları verilmesi gerekir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mcguiverali

yo hayır özel bi motor değil..

palsim 20ms değil dalganın periyodu 20 ms palsim ise min 550us ile max 2.2ms..
Düşünmeden öğrenmek beyhude, öğrenmeden düşünmek, tehlikelidir.....