Z

10 tane servo motor kontrolü problemi!

Başlatan zengar, 08 Mart 2013, 15:53:01

zengar

Merhaba arkadaşlar,
yaklaşık 10 tane servo motor kontrol etmek istiyorum. bunların 2 tanesini bile tek işlemciden kontrol etmek biraz problemli oluyor bildiğim kadarıyla.
şöyle birşey yapmayı düşünüyorum, tabi bunu yapmadan sizlere danışıyım dedim,
Her biri için ayrı ayrı 8 bacaklı pic ler alacağım(tabi varsa öyle birşey).
Bir pic ten (tabi bu ana kontrolcü olacak ve aynı zamanda başka işlemlerlede uğraşıyor olacak) serri iletişimle ayrı ayrı pwm değeri göndereceğim.
İşlemler karışıyor diye böyle bir yöntem seçtim
yapacağım mantık çerçevesinde mi, tavsiyelerinizi bekliyorum.
Selametle.

İlyas KAYA

Sayın Zengar;

Tek bir işlemci ile  ve tek bir PWM ile 10 tane servo motoruda kontrol edebilirsiniz diye düşünüyorum.

Yalnız servo motorların tepkime süresi önemli.

Eğer tepki süreleri uzun ise led tarama gibi servo motorlarıda sırası ile kontrol edebilirsiniz.
Eğer arka planda başka işlerde yapmak istiyorsanız 1 Pic'i sadece servolar için
diğer pic'i de diğer işlemler için kullanabilirsiniz.

Servoları kontrol eden pic sadece 4 bitlik bir giriş ile 1 tane de yön bilgisini portlardan alır.

Örnek verelim;

A portunun tüm bitlerini kullandığımızı var sayalım ve ilk bit hangi yöne döneceğini söylesin.

A portu değeri = 000011  olduğunda 1nci motor yön 1 de
A portu değeri = 001000 olduğunda 3 ncü motor yön 0 da
..
...
gibi.

Çıkışlarda da sırası ile kontrol bilgileri gönderilir ve 74HC08 ile PWM leri ortaklanır.


Diğer tüm işlemleri 2nci pic yapabilir.

Bilmiyorum belkide yanlış düşünüyorum. Var ise bir hatam uyarabilirsiniz.

Saygılarımla
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

zengar

tepkime süresini biraz açıklayabilirmisiniz. Ayrıca herbir servonun başını  istediğim zaman gereken dereceye getirebileyim diyorum.

İlyas KAYA

Sayın zengar ; Tepkime süresi dediğim atıyorum motora palsi verdik.pals ile aynı anda mı motor hareket ediyor yoksa arada milisaniyeler derecesinde gecikme yaşanıyormu ?

Eğer gecikme yaşanıyorsa biz tarama hızı ile istediğimiz motora istediğimiz gibi ayrı ayrı tek bir pic ile yol verebiliriz.

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

#4
RC servolardan bahsediyor isek 20 ms lik peryot içinde yer almak kaydı ile 0,5-2 ms lik puls lar ile çalışıyorlar. Üreticiye göre farklılıklar olabilir. Bu durumda sizin işlemci bacağından 10 adet PWM sinyali çıakrtıp her birinin frekansını 50 hz olarak ayarlayıp HIGH süresini ise pozisyon değiştireceğiniz motora göre 0,5ms ile 2 ms arasında değiştirmeniz gerekecektir.
Normalde kesme ile bu iş yapılabilir.
Ancak işin kontrolü nasılyapılacak belirtilmediği için daha fazla detay veremiyorum. Nasıl yapılacaktan kastım,  örnek ile açıklayayım 2 nolu motoru 90 derece konuma getireceğim 5 nolu motoru sıfır konumuna getireceğim gibi komutları kim nasıl verecek. Bu tür emirler bir giriş ünitesi ile yapılır. Diyelimki 10 adet buton da bağlarsak bu sistem 1 nolu butona basılınca motor sıfır konumundan diyelimki 90 derece konumuna gelir bir daha basarsam 180 derece konumuna gelir tekrar basarsam 0 konumuna gelir şeklinde bir emir dizisi ayarlarsam bu kontrolü yapabilirim. Ama muhtemelen daha fazla çözünürlüğe sahip bir kontrol yapmak isteyeceksin. O zaman bir motor seçim butonu birde artır birde azalt butonu kullanılarak bu iş yapılabillir.
Buton seçimi 10 adet led eşliğinde hangi motora kumanda edeceğini seçer. Artır ve azalt butonlarıda pozisyon değiştirir. Bastıkça motor döner bırakınca durur. Birisi bir yöne diğer diğer yöne (tersine) çalıştırır.
Bu işi kesme kullanarak yapmak için önce bir hesap yapalım.
20 ms lik bir peryodumuz olacak. Bu 20.000us eder. O halde ben her 100us de bir kesme oluşturursam 200 kesme sonunda 20 ms geçmiş olur.  Peki 0,5ms yani 500us için benim 5 kesme saymam gerekiyor. 2 ms yani 2000 us için ise 20 kesme saymam gerekecektir. O halde sistem şöyle çalışacaktır. Toplam kesme sayısı her bir motor için 200 olacaktır. Puls süresi ne bağlı olarak bu rakamdan HIGH süresi kadar kesme sayısını çıkartarak LOW süresi için gerekli kesme adedini bulmam gerekir.
Örnekle açıklayalım. Diyelimki 1 nolu motor için =0,5ms lik puls süresi , 2 nolu motor için ise 1,5ms lik puls süresi kullanacağım.
Bu durumda 1 nolu motor için bağlı olduğu pin 500us/100=5 kesme HIGH 195 kesme LOW da kalacaktır.
2 nolu motor pini ise 1500us(1,5ms)/100=15 kesme süresince HIGH da kalacak ve 200-15=185 kesme süresince LOW da kalacaktır.
Benzer mantıkla diğer motor süreleride hesaplanarak bu değişiklikler kesme oluştuğunda kesme sayıları her bir pin için ayırı sayılarak yapılabilir. Yada bir sayac olur sürekli 1-200 arası sayar. Bu sayac ile her bir pinin olması gereken sayac değerleri karşılaştırılarak konum değiştirilir.

Ete


zengar

Ete hocam, her bir rc servo için ayrı değerler olacak joytistik gibi düşünün ve bunun konumuna göre servo başlıkları gereken pozisyona gelecek.

ete

Yine cevap eksik. Bu joystick gibi olan alet den her bir servo için pic e kaç giriş yapılacak?
Servonun istediği bilgi 500us ile 2000 us arasında süre bilgisidir. Bu joystick gibi alet bu bilgiyi nasıl oluşturacak yada joystic gii düşünürsek en azından 2 girişi olması gerekir biri süre artırır diğeri düşürür gibi. Bu ise pic de 20 adet giriş pini gerektirir. 10 tanede motor çıkışı var etti 30 adet pin.
Zor iş.
Ete

zengar

ete hocam joytistik olsa neden 2 pin gereksin ki. Aslında şöyle desem daha doğru olur.10 tane  Potansiyometrem olsun herbiri bir servoyu kontrol eder ve potun konumuna göre de servo hasas bir şekilde derecelenir. Tabi  biri çalışırken diğeride çalışabilecek.

Powered by EzPortal