servo motor sürme

Başlatan shorpy, 03 Nisan 2007, 17:38:55

shorpy

pic 16f877A (CCS ile yazdım kodu)ile servo sürmeye çalışyorum ama tam istediğim gibi çalıştıramadım.servo motor bildiğim kadarıyla +90 ile -90 derece arasında gönderilen pulse e göre dönebiliyormuş.bende bununla ilgili olarak şu kodu yazdım:
_________________________________________________

#include "main.h"
void sol( void )
{
  int x;
  for (x=0;x<=30;x++)
  {
     output_high(PIN_A0);
     delay_us(1250);    
     output_low(PIN_A0);
     delay_us( 18750 );
  }
}

void sag( void )
{
  int x;
  for (x=0;x<=30;x++)
  {
     output_high(PIN_A0);
     delay_us(1750);    
     output_low(PIN_A0);
     delay_us( 18250 );
  }
}

void orta( void )
{
  int x;
  for (x=0;x<=30;x++)
  {
     output_high(PIN_A0);
     delay_us(1500);    
     output_low(PIN_A0);
     delay_us( 18500 );
  }
}
void main()
{

  setup_adc_ports(NO_ANALOGS);
  setup_adc(ADC_OFF);
  setup_psp(PSP_DISABLED);
  setup_spi(FALSE);
  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  setup_timer_1(T1_DISABLED);
  setup_timer_2(T2_DISABLED,0,1);
  setup_comparator(NC_NC_NC_NC);
  setup_vref(FALSE);

while(1)

  {
  sag();
  delay_ms(1000);
  orta();
  delay_ms(1000);
  sol();
  delay_ms(1000);
  orta();
  delay_ms(1000);
 
 
  }

}
__________________________________________________

proteus simülasyonunda devre gayet güzel çalıştı.HS322HD marka servo aldım uygulama için.ama uygulamada servo aşağı yukarı +45 ile -45 dereceye yakın dönüyor.neden böyle olabilir?acaba servoya gönderilen pulse süresi değiştirilerek +90 -90 yerine +60 ile -60 arasında çevirebilir miyiz?şimdiden teşekkürler

fatihsatir

Dostum, HS322HD marka servo motoru bende kullandım, yanlız ben hack ederek kullanmıştım.  Sadece sağa dönüş örneğini atayım sana;

TRISB= 0

saga_don:
             PULSOUT PORTB.0,130
             PAUSE 20
             GOTO saga_don

Dostum gördüğüm gibi 1,3 msde çalıştırdım, diğer tarafa ise 1,7 ms'de ve durması içinde 1,5ms de. Herhangi bir sorun çıkarmamıştı. Belki pulse zamanlarını değişitirsen istediğin dereceye gelecektir.
Dünya güzelliklerine dalıp ahiret hayatını unutma..!

kurumahmut

Servoların dönme hızları vardır. Genelde 60derece için 150ms gerekir. Süreleri arttırmayı dene sorunun çözülebilir...

Servo hakkında daha önce forumda yazılanları araştır...

sag();
delay_ms(1000);
orta();
delay_ms(1000);
sol();
delay_ms(1000);
orta();
delay_ms(1000);


servoya sağa git diyorsun. Servo sağa doğru giderken hatta gitti diyelim. beklemeye başlıyorsun. Servo pulslerini kesiyorsun.

Servoya devamlı bir puls vermek zorundasın. Bu mantıkla kodunu yeniden düzenlemeyi dene...

Servoyu bir timer ile ya da en güzeli iki timer ile sürebilirsiniz. İki timer da heba olmaz yanlarında extra işlerde yaptırabilirsiniz.

Timerlardan biri 20ms iken diğeri 1ms ile 2ms arasında değiştirilebilen tarzda tasarım yapabilirsiniz.

kolay gelsin.

shorpy

sorun sag sol orta fonksiyonlar arasındaki geçikmelerden kaynaklanmıyor.çünkü bu ihtimalin bende olabileceğinin düşündüm ve gecikmeyi 10s kadar artırdım ve değişen sadece beklenen zaman olsu.dönme yönünde değişme olmadı.