servo sürmek

Başlatan sovalye, 16 Ekim 2009, 20:49:21

sovalye

merhaba sorum size garip gelecek ama ben servo konusunda bişey bilmiyorum.  bu yüzden bir servo nasıl kullanılır bu konuda bana biraz yardımcı olabilirseniz çok sevinirim.nereden nasıl başlayacağım önce ne yapmam gereklidir ?amacım 3 tane servo ile bir altı bacaklı robot yapmak .

yardımda bulunup,yol gösteren herkese teşekkür ederim..

fractal

hocam sen sanırım şu kücük çaplı servolardan bahsediyorsun sanırım rc motor diye geciyor.ama sana anlataym biraz servo motor nedemek nasıl kullanılır.sevo motorlar pozisyon kontrolünde kullanılır.motorun miline bağlı bir enkoder ile motorun ne kadar gittiği puls bilgisi olarak geri besleme olarak verilir.bazı servolarda resolver da bulunur buda milin hangi açıda kaldığı hakkında bilgi verir.bununda değişik kullanım alanları vardır.servo motorlar servo sürücüler ile sürülür.servo sürücülerde hareket kontrolörlerle sürülür.basit işlemler için sadece sürücülerde kullanılabilir.servo motorlar puls yada 0-10v gibi iki şekilde sürüle bilir.puls ile sürüldüğünde her pozisyon için hata denetimi yaplır.yani motora 1000 puls ileri git dediğinde enkoder gerçekte motorun ne kadar gettiğini geri besleme olarak bildirir...
Restantum cogniscutur Quantum deligutur


sovalye

çalışma mantığını anladım  sürücü devresi nasıl olmalı ve kalibrasyon ayarı nasıl yapılabilecek bunu merak ediyorum.  servolar için esc kullanmamız zorunlumu?   ben   15-20 liralık servo olmasını düşünüyorum

mihri hocam  servoların içinde fırçasız motor mu var?

Cenk_Unur

Arkadaşım bende bir ara heveslendim hatta bir bacağını yaptım ama maddi nedenlerle projeyi askıya aldım. Videosu linkde..

http://www.youtube.com/watch?v=SToKctcaWCg

Bu iş için kulanılan Rc servo motorları pic ile çok rahat sürebilirsiniz. Pic programlamada hangi dili kullanıyorsunuz?

https://www.picproje.org/index.php/topic,21124&highlight=

sovalye

cenkun hocam senin denediğin benim kinin bayağı gelişmişi benim planım 1 ayağa 3 servo değil tüm robota 3 servo koymak .yapmak istediğim böcük

en altta 9mb lık yapım klavuzu ve videolarıda  var.

ben aslında çok fazla dil bilmiyorum. basicproyu öğreniyorum.

gtekdemir

Bildiğim kadarıyla servolarda fırçalı motor kullanılıyor, fırçasız motorlu bir RC servoya hiç rastlamadım.mihri hocamın verdiği linki incelediyseniz T1 süresinin 1000us(1ms) ile 2000us(2ms) arasında değişmesi gerektiği görülmektedir, T2 süresi zaten sabit 20ms. Piyasadaki RC servolargenelde bu şekilde çalışıyor. Kontrolü pic ile yapacaksan herhangi bir porttan high süresi 1000-2000us olan low süresi ise 20ms olan bir sinyal gönderdiğinde servonun kontrolünü sağlayabilirsin. T1 süresi 1500us olduğunda servo 0 ' pozisyonunda olur T1 1000us' ye kaydırdığında servo açısı -90' olur aynı mantıkla T1 2000us olduğunda  servo açısı +90' olur. Yani -90' ile +90' arasında kontol için T1 süresini 1000us ile 2000us arasında değiştirmen gerek.T1 süresini program içinde bir değişken olarak belirleyerek bu işi yapabilirsin. Mesela;

TRISB=0 'portb çıkış olarak ayarlandı

Dim T1 as WORD             'T1 için değişken
Dim T2 as WORD             'T2 için değişken
Symbol servo = Portb.0   'Portb.0 servo ile ifade edilsin

T2=20000    'T2 süresi 20000us olsun
T1=1500      'T2 süresi 1000us

basla:

servo = 1      'portb.0 high
Delayus T1    'T1 süresi kadar high gönderiliyor
servo = 0      'portb.0 low
Delayus T2    'T2 süresi kadar low gönderiliyor

goto basla
End


Bu programda T1 değişkenini 1000-2000 arasında değiştirerek
servo açısını istediğin gibi değiştirebilirsin. Kolaygelsin

XX_CİHAN_XX

Merhabalar,
Elimde GWS S666 N serisi bir servo var.
Bunu bir türlü sağlıklı çalıştıramadım.
Deneme yanılmayla yukarıda bahsedilen T1 süresi için min, centre ve max değerlerini 770uS, 1400uS ve 2170uS olarak tespit ettim. T2 süresinide 20mS ye sabitleyerek pals göndermeye başladığımda, bu palsi kesintisiz 50hZ lik periyotlarla gönderdiğimde motor durması gereken yeri kaçırıyor 0 dan 180 e gidiyor durması gereken yerde hafif yavaşlayp durur gibi oluyor ama duramıyor ve bir tam tur attıktan sonra geri geliyor.
Geri dönüşte yine aynı yavaşlama ve duramama durumu oluyor ve motor bu şekilde bir sağa bir sola tam tur atıp duruyor. Pals sürelerinde bir şaşma olmadığına eminim. Yukarıdaki 3 timingi palsi kesip kesip vererek tespit ettim. 20ms aralıklarla değil atıyorum 1000mS aralıklarla vererek motorun olması gereken yerde durmasını sağlamaya çalıştım ve bu şekilde ancak motor durabildi. Motrun durması gereken yerde durabildiği andaki timingler uS cinsinden yukarıda yazdığım şekilde çıktı.
Ancak 20mS aralıklarla bu palsleri vermeye kalkıtığımda bu 3 zamanlama için yaptığım testlerde hep bu duramama problemi çıktı.
Sebebini bir türlü kestiremedim.
Daha önce başına böle birşey gelen oldu mu merak ettim ?
Kodlar aşağıdaki gibi gayet basit
Servoyu ortaya konumlamak için denediğim kod
   while(1){
   MOTOR = 1;
   __delay_ms(1);
   __delay_us(250);
   __delay_us(150);
   MOTOR = 0;
   __delay_ms( 18 );
   __delay_us(200);
   __delay_us(200);
   __delay_us(200);
               }
Burada 18.6mS yerine direk 20mS koysamda sonuç aynı oluyor.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

XX_CİHAN_XX

Hataya sebebiyet veren 2 şey varmış.
1. sorun:  4,8v luk bu servoyu tek 7805 ten beslediğim için oluyormuş. Bu servo tahminimden daha fazla akım çektiği için zavallı 7805 kaldıramıyordu.
Çözümü 2 adet 7806 yı diyotlarla toplayarak buldum.
2. sorun: motorun beslemesi ile picin beslemesini ortak kullandığım için çıkmıştı. Dediğim gibi ebatına göre baya güçlü bir servo çıktı. Pici motoru besleyen regülatörlerden ayırıp küçük boy 78l05 ile ayrı besledim.
Şuan hiç bir sorun kalmadı. Daha önce bu 2 sorunun olduğu donanımda tespit ettiğim duty cycle değerleri sağlam donanımda azcık daha farklı çıktı onlarıda söyleyim burada aynı marka bir servo kullanmak isteyen olursa işine yarar.
Tam sağ için T1 2.15mS, T2 17.85mS toplamda 20mS lik bir periyot oluyor
Orta için T1 1.35mS, T2 18.65mS toplamda 20mS lik bir periyot oluyor
Tam sol için T1 0.65mS, T2 19.35mS toplamda 20mS lik bir periyot oluyor

Bu 50Hzlik sinyallerin motora sürekli uygulanması gerektiğinide not düşeyim.
Basitçe aşağıdaki koduda vereyim isteyenler deneyebilr.  Ek olarak bu duty cycle değerleri (T1 süreleri) Motordan motora değişiklik gösterirken T2 süresi yani toplam periyot her zaman 20mS olarak sabit kalmaktadır.
T1 süresi ile açı değiştirilir. Kolay gelsin
while(1)
	{
		if(!SOL)
		{
			while(!SOL)
			{
				MOTOR = 1;
				__delay_ms(0.65);
				MOTOR = 0;
				__delay_ms(19.35);
			}
		}

		if(!ORTA)
		{
			while(!ORTA)
			{
				MOTOR = 1;
				__delay_ms(1.35);
				MOTOR = 0;
				__delay_ms(18.65);
			}
		}

		if(!SAG)
		{
			while(!SAG)
			{
				MOTOR = 1;
				__delay_ms(2.15);
				MOTOR = 0;
				__delay_ms(17.85);
			}
		}
	}

Not Burada sinyali sürekli göndermek için butonlara basılı tutmak gerekmektedir!
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

bbs2006

merhaba
açılı olarak servo motoru kontrol etmek için c dilinde yazılmış program varsa verbilirmisiniz.

aliusak

90 derece açı yapaca servoyu nasıl programlaya bilirim. servo normalde 45 derece açı yapacak yani 45 derece sola 45 derece sağa dönecek dönüş yaptıktan 4 sn. sonra eski konumuna dönecek bi servo düşünüyorum ama nasıl yapabilirim bi fikrim yok yardımcı olabilirseniz sevinirim.

ete

Önce servoların nasıl çalıştığı konusunda biraz bilgi edinmenizde yarar var.
Düzenek olarak bir DC motor , pozisyon kontrolü için bir pot ve dişli düzeneği ile sürücü devreden oluşur servo sistemi.
Puls ile çalışır. Genelde 0,5ms (minimum) ile 2 ms (maksimum) arası pulslar ile çalışırlar.
Aşağıdaki linkte bazı örnekler verdim. Bunları inceleyin isterseniz bilginiz artar ve nasıl kontrol edildiklerinide anlarsınız.
Programlar Basicde yazılmıştır açık kodları da dosyada yer almaktadır.

http://dl.dropbox.com/u/25364674/SERVO_ETE.rar

Bu arada kullanacağını zservonun puls aalığını mutlaka ya üreticisinden yada data sheetinden öğrenip puls sürelerini ona göre vermeniz gerekir.

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