Servo Motoru CCS kodlari ile nasil kontrol edebilirim?

Başlatan Digimensch, 01 Ekim 2006, 22:36:49

Digimensch

Alıntı yapılan: "bunalmis"Asagidaki kirmizi renkli satirlarin sirasinda hata yapmis olmayasin.
Kodu oldugu gibi copy -paste yöntemi ile alip derledim hata olmadi.
Yanliz benim elimdeki bu Servo Motor'un elektriksel olarak dönmesi ortadan saga 45° ve sola dogru 45° olmasin?
Olabilirmi?
Cünkü ne yaptiysam Servo Motor orta kisimdan saga  dogru yaklasik  45° sola dogru 45° ikisinin toplami 90° lik hareket yapiyor.
Ama el ile denedigimde ortadan saga dogru 90° blok noktasina kadar, sola dogru 90° blok noktasina kadar hareket ediyor.Ama elektriksel oldugunda bu derece 45° oluyor.
Aynen suraya yükledigim FILM deki gibi
SERVO MOTOR
Oysa ben aynen bu yukarda picustanin animasyonundaki gibi hareket ettirmek istiyorum servoyu.

Ve tara funksiyonu olarak verdigin su kod
void tara() 
{ 
int x,t; 

for(t=0;t<=20000;t=t+100) 
{ 
for(x=0;x<=20;x++) 
{ 
output_high(PIN_B0); 
delay_us(t); 
output_low(PIN_B0); 
delay_us(20000-t); 
} 
}


Motoru sola dogru en son kademeye kadar dönderiyor ve motoru hala dönmesi icin zorluyor.

picusta

Video gördüğüm kadarı ile servoyu biraz fazla hızlı komut veriyorsun.
Yani darbe süresini arttırman biraz hızlı. Bu  yüzden PICten komut gidiyor ama servo mekanik olarak yetişemiyor.
Her yeni değer arası (döngüde bir kere) delay_ms(10) koy.
Bu da olmazsa servoya 0,8ms (800 mikro sn.) ile 2,5 ms arası darbe genişliği gönder.

kurumahmut

picusta dün servoyu while döngüsüyle bi tarafa devamlı dönmesi için komut yollamıştı arkadaş ama gene olmamıştı. 45derece kadar dönebildi her iki tarafa da...

20ms nin dağılımıyla alakalı bir sorun mu acaba. tam sağ yapması için 2ms değilde biraz daha uzun mu kısa mı süre vermeli.?

Digimensch

Arkadaslar olayi su sekilde hallettim.
Yani sag dönüs icin 2,5ms lik sinyali 30 kere
sola dönüs icin 0,5ms lik sinyali 30 kere veLow  bekleme icin 30ms'lik zaman verdim.
Simdi Motor sağoldan saga 180° dönüyor.Yani kisacasi standart servo ayarlari ile ilgisi yok.
VOID saga()
{
   INT x;
   FOR(x=0;x<=30;x++)
   {
      output_high(PIN_B0);
      delay_us(2500);      // servoya 2,5ms'lik sinyal gönderiliyor saga dönmesi icin
      output_low(PIN_B0);
      delay_ms( 30 );
      CONTINUE;
}
}

VOID sola()
{
   INT x;
   FOR(x=0;x<=30;x++)
   {
      output_high(PIN_B0);
      delay_us(500);     // servoya 0,5ms'lik sinyal gönderiliyor saga dönmesi icin
      output_low(PIN_B0);
      delay_ms( 30 );
      CONTINUE;
}
}

rosberg

arkadaşlar bu yazmış olduğunuz kod C dilimi?
Ben bu işlerde yeniyim de.Bunu uygulamada denediniz mi?Çalışıyor mu acaba?Bir de bu kodu hex dosyasına nasıl çevirebilirim?

povver

merhaba , servomotorlarda  birkaç derecelik (1,2,3....derece gibi) hassas konumlandırmayı nasıl gerçekleyebiliriz..tam anlayamadım servo kontrolünü.. yardımcı olabilir misiniz?