avatar_furkan41

Servo kontrol programı calışmıyor

Başlatan furkan41, 16 Haziran 2017, 00:57:17

furkan41

Arkadaşlar ekte yüklediğim rarda .bas dosyası ve isis şeması mevcuttur.
Sorunum nedir derseniz
Program isis üzerinde güzel calışıyor sıkıntısız ama gercek hayatta servo kendini 90 dereceye alıp duruyor butonlara bassamda hiç bir işlem yapmıyor
LCD ekranda servo derece filan cıkıyor ve butonlara basınca lcd ekrandaki derecede değişmiyor picin 17.ve 18. pinine baktım lojik sıfır butona basınca 4.8 volt geliyor yani butondan değer geliyor servonun besleme ucları 4.8 volt görüyorum  signal ucu ile mikro denetleyicinin rb7 Portuna kısa devre kontrolünde iletim var mı diye baktım oda var donanımsal bir sorunum yok fakat yazılımsal bir sorunum var isis bir şeye göz yumuyor gibi ama anlam veremedim

onurinci

Port A ilk açıldığında Pin'ler fabrikasyon Komparator olarak açılıyor..üst tanımlalar arasına sıkıştırıver..
CMCON= 7

furkan41

Onurinci sağolasın bugün işteyken aklıma geldi dedim kesin o yüzden calışmadı :D cok sağol teşekkür ederim

furkan41

Arkadaşlar kullandığım servo Tower Pro micro servo SG90 kataloğundaki değerlere göre puls üretiyorum kodda görmüşssünüzdür fakat 180 derece acıda gidip gelmiyor 0 dan 90 dereceye kadar getirebiliyorum 0 dan başlattıp en yüksek değere butonla arttırarak gönderdim bu seferde ayn şeyi yaptı nerde hata yapıyorum ?

ete

#4
Belliki o servo ya yalnızca 90 derece çalışıyor (pek çok servo gibi) yada 180 derece için gerekli olan puls'i veremiyorsun.
Öncelikle yapılması gereken şey o servonun data sheet'ini okuyup hangi aralıkta çalıştığını öğrenmek ve o aralık için ne gibi bir puls gerekiyor görüp ona göre uygulama yapmak olmalı.

Servonun açaıklamasına bakılırsa 180 derece dönebiliyor.
Peryot 1-2 ms aralığında olmalı.
1,5 ms verdiğin zaman orta nokta yani sıfır noktasında duruyor.
2 ms puls verdiğin zaman sağa doğru 90 derece dönüyor.
Sıfır noktasında iken 1 ms puls verirsen de sola doğru 90 derece dönüyor.
Bu durumda tam 180 derecelik bir pozisyon için önce 1 ms verip sol taraf sıfır noktasına getirecek ardından 2 ms verip 180 derece dönmesini sağlayacaksın.
Puls genişliği daima 20 ms olmalı. 1msHIGH+19msLOW  veya 2msHIGH+18msLOW şeklinde olmalı pulslerin.
Sonuçta bu motor 1-2ms aralığında pulsler istiyor. Pek çoğu gibi 0,5ms ile 2 ma saralığında değil.
Ete

furkan41


BASLA:
for I=0 TO   20
derece = derece + 10
PULSOUT PORTB.7,derece
PAUSE 500
NEXT I
PAUSE 500
For I=0 TO 20
derece = derece -10
PAUSE 500
NEXT I
goto basla
END

Hocam ya ben cidden salak bir insanım yada benim servoda bir bozukluk var ben anlamıyorum kafayı yedirtcek bana
şuan 0 derece ile +90 derece arasında gitmesini başardım gidip geliyor 0 gidince biraz bekliyor
hocam bu benim servoya göre bir program yazsanızda incelesem biraz salağın anlayacağı bicimden olursa lütfen...

furkan41


BASLA:
for I=20 TO  400

PULSOUT PORTB.7,I
PAUSE 5

NEXT I
PAUSE 5

For I=400 TO 20 STEP -1

PULSOUT PORTB.7,I
PAUSE 5


NEXT I
goto basla
END


Sonunda deneme yanılma diye diye başardım  araştırma sonucu oldu cok şükür artıkk uyuya bilirim

ete

Anlatılanları ya takip etmiyorsun yada anlamıyorsun. Her ne kadar başardım desende yaptıklarında bazı yanlışlıklar olduğunu görebiliyorum.
Öncelikle ne söylemişim ona bir göz atalım. Bu motora 1ms (1000us) ile 2ms (2000us) arasında puls vereceksin demiştim.
İkincisi ise sinyal verme sıklığın (işin frekansı) 20ms lik peryotlarla olacak demiştim. Hatta kolaylıkla anlayasın diye örnek de verdim. Sinyal 1 ms ise bekleme 20-1=19 ms olacak demiştim.
Şimdi yapıklarına bakalım.
for I=20 TO  400
PULSOUT PORTB.7,I
PAUSE 5
NEXT I

Pulsout komutu puls üretirken verilen parametreyi 10 ile çarparak bir puls üretir. Bu komut dizisinde 20 ile 400 arasında döngü kurduğuna göre 200 us ile 4000 us arasında puls üreteceksin demektir. Bu ise verdiğim sınırların dışında gözüküyor.
Doğru döngü 100 ile 200 arasında olmalı idi.
Döngü içindeki bekleme standart Pause 5 şeklinde değil Pauseus ((20000-(I*10)) şeklinde olmalı idi. Böylece puls süresi 20000 den çıkartılarak kalan süre kadar bir loW beklemesi oluşturulabilirdi.

Aynı şeylerin motorun ters yöne dönmesi kısmında da uygulanması gerekir.
Ete

furkan41

Ete hocam ama bu kodla 180 dereceye gidiyor sonra 180 dereden aynı şekilde derece dereceye düşümeye başlıyor yani -90 ile +90 arasında 180 derecelik o acıyı yapıyor ama bende dediğiniz gibi niye böyle oldu anlamadım 200 verdiğimde +90 ile 0 noktasında gidip geliyor idi mantıksal olarak 400 verdiğimde bu 180 derecelik acıyı yapıyor ne hikmet ise

ete

Verdiğin geniş bir aralık. İstediği süreler bu aralık içinde olduğu için sen o aralık uydu sanıyorsun bence. Döngüyü verdiğim aralıkta kur ve izle.
Ete

Powered by EzPortal