Ccs pic programı ile encoder açı bilgisi.

Başlatan Beginner1616, 13 Kasım 2014, 09:44:48

Beginner1616

Öncelikle merhabalar herkese kolay gelsin. Forumda bir takım araştırmalar yaptım fakat aradığım bilgiyi bulamadım gözden kaçırdıysam kusura bakmayın.Bir projemde ana hareketi veren 360 derece servo kullandım ve mekanik kısma kayış kasnak ile güç iletiyorum.Derdim şudur:
Bu servodan aynı şekilde bir diğer tarafına encoder bağlayarak yine kayış kasnak ile çevirerek açı bilgisi almak istiyorum. 5 v 360 pulselik bir encoder buldum (360 pulselik encoderi 1 derece 1 derece 360 a kadar teker teker görmek için istiyorum). Projemde tekrar 0 noktasına geldiğimin bilgisi ve ters yöne döndüğümde - ile görmek istiyorum.Örn: -260 derece. Meslek yüksek okulunda bir takım ccs programlaması dersi aldım. Fakat XOR olaylarını hiç görmedim.Nasıl yapabileceğim hakkında bilgi verirseniz çok sevinirim.Biraz uzun oldu kusura bakmayın :)
Saygılarımla,
Eren

ete

Servo motor demek zaten konumlandırılabilir motor demektir. Ya servo kelimesini yanlış kullanıyorsun yada servo motorun özelliklerini bilmiyorsun.
Kullandığın motor normal bir dc motor ise düşündüğün sistem doğru. Ancak gerçekten bir servo kotor kullanıyorsan encodere ihtiyacın yok yada olmaması gerekir.
Önce kullandığın motorun özelliklerini inceleyip buraya yaz sonrasını sonuca göre düşünelim.
Ete

Beginner1616

Evet servo motorda açı bilgisinin kullanıldığını biliyorum. Fakat araştırmama göre bizim verdiğimiz bir açı bilgisi doğrultusunda servonun o kadar döndüğünü varsayıyoruz.Ben servoyu tx rx alıcı verici ile ileri geri hareket ettiriyorum uzaktan kumanda ile sanki sizin söylediğinizle benim yapmak istediğim biraz farklı :)

ete

Benim bildiğim servo puls ile çalışır ve 180 derecilk bir açısal yolda 1 derecelik hassasiyetle o servo istenilen yerde durur. Zaten verdiğiniz palsin genişliği servonun duracağı açıyı belirler.
Sende motor 360 derece döndüğüne göre farklı bir motor diye düşünüyorum yada farklı bir mekanizma var. Birde motoru nasıl döndürdüğünü (nasıl sürüyorsun) söylersen bu aşamayı atlarız.

Ete

Beginner1616

6 kanallı rc model araç alıcı vericisi ile sürüyorum servoyu.Servo sürekli dönen cinsten olduğundan kendinden açı bilgisi almak imkansız gibi.Şöyle anlatayım servo motoru ileri geri pwmli şekilde ileri geri sürebiliyorum.Tek amacım bu servodan dönüş açısı almak.Sizin söylediğiniz gibi 90 derecelik bir servo gibi değil bu servo motor

ete

Ortada bir yanlış bilgi var ama ben pes ediyorum. Tamam motor bildiğim servolardan değil diyorum.
O motora nasıl encoder bağlayacaksın? Böyle bir olasılık varmıdır? Var ise, encoder okumanın prensibini amcak tekrar anlatabilirim. Zira CCS den uzağım.
A ve B diye iki çıkışı vardır encoderin. Her ikisinden , encoder döndükçe puls çıkar. Bu palsler aynı olmakla birlikte biri diğerinden 90 derece faz farkına sahiptir. Bu fark dönüş yönünü bulmaya yarar.
Bu iki uç genelde kesmeye bağlanır. Encoder dönerse kesme oluşur. Kesme oluşmadan önce eski=%BA şeklinde encoder çıkışları okunur. Kesme oluşunca yeniden okunur buda yeni=%BA olacaktır. Eski=Yeni olduğu müddetçe encoder dönmemiş demektir.
  Değilse yon=Eski.A xor Yeni.B  şeklinde belirlenir. Yon=0 ise saat yönünde  Yon=1 ise tersi yönde dönüyor kabul edilir.
Sonrasında acı=acı+1 (yön sıfır ise ) veya acı=acı-1(yon=1) ise yapılır.
Burada önemli olan motor sıfır noktasında iken acı=0 olarak bu işe başlamak ve hangi yöne nekadar puls dönülüyor ise onu kayıt altında tutmaktır.

Ete




Beginner1616

Ete bey,öncelikle size yardımlarınız için teşekkür ederim fakat anlatmadan içim rahat etmeyecek.Aşağıdaki videoya bakmanızı rica edeceğim.

360 degree servo

Servoyu aynen bu şekilde sürüyorum. Bağlamak derken elektriksel bir bağlantıdan mı söz ediyorsunuz yoksa encoder mili ile servo milini nasıl birbirine bağlayacağımdan mı bahsediyorsunuz anlayamadım. Onun için de aşağıda ki resme bakmanızı rica edeceğim.

ete

Kullandığın motorlardan birinin data sheet'ini bulursan link ver bakayım.
Bu motor servo da yine puls ile dönüyor olması gerekir. Sürekli dönen servo görmemiştim. Görmüş oldum.
Ama dönüş mantığını bilirsek pozisyon meselesine belki daha kolay bir çözüm bulabiliriz.
Kumada kolunu sola aldığın zaman motora nasıl bir emir gidiyor bilmemiz gerekiyor. Buna göre çözüm yolu düşünülür. Değilse tarif ettiğim şekilde encoder sistemi kullanman gerekiyor.

Ete

Beginner1616

https://www.sparkfun.com/datasheets/Robotics/SM23-33%20Servo%20_E.pdf

Buradan bakabilirsiniz.Şimdi motoru kullanma mantığını şöyle anlatayım;
6 kanallı alıcının 6 kanalına da bu servoyu takabilirsiniz.Fakat kumandanın üzerinde gördüğünüz her joystiğin veya benzeri şeylerin alıcı kanalları üzerinde bir karşılığı var.Örnek vermem gerekirse,atıyorum sol joystiğin sağ solunu motoru ileri geri olarak kontrol etsin istiyorsunuz ve bunun alıcıdaki karşılığı ch 2,o zaman servoyu ch 2 ye takarsınız ve öyle kontrol edersiniz. Yani ben her türlü bu servoyu kumandanın istediğim kısmından ileri geri kumanda edebiliyorum. Benim tek sorunum derleyiciye yazacağım yazılım.Çok araştırma yapıyorum fakat algoritmasını henüz kavrayamadım.

Mucit23

Ben daha önce açı ölçmek için bir çalışma yapmıştım.
http://arectron.com/microchip/pic16f628_ile_aci_olcer.html
Yazıyı okuyun fikir verecektir.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Beginner1616

İnanır mısınız bu konuyu inceliyordum ben de.Sizin verdiğiniz pcb devre şeması ve ccs yazılımını indirdim. Bayadır araştırıyorum yazdığınız kodları ne sebepten yazdığınızı anlamam zaman alacak :)
Simulasyonda da devreyi çalıştırdım.Çalışıyor fakat sizin yaptığınız açı ölçme sisteminde encoderin 360 dereceyi göstermesi için yaklaşık 4 5 tur dönmesi gerekiyor.Bunu ne kullanarak yapıyorsunuz ? Benim tam bir dönüş sonunda 360 dereceyi görmeye ihtiyacım var ilk etapta.

Mucit23

İsis teki motor enkoder biraz farklı. Bir turda verdiği puls sayısı benim yazilimda ayarladiginiz değerler farklıdır.  Isisteki enkoder in kaç puls verdiğini bilmiyorum
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Beginner1616

Ferhat bey(isminizi araştırma yaptığım siteden gördüm değilse kusura bakmayın) devreyi isiste inceliyorum ancak pin b6 pinini programlamada göremedim.Onun amacı nedir ?

Mucit23

B6 pini ile bizim doğrudan bir işimiz yok. O pin ile timer1 ilgileniyor. Enkoderden gelen puls'ları portb.6 dan sayıyor. Dikkat ederseniz PortB6 nın timer1'in harici clock girişidir. 
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Beginner1616

Anladım,yani 16f628 in datasheetinde b6 zaten timer olduğu için bunu yazılımda belirtmediniz öyle mi ?

Powered by EzPortal