Selasa, 20 Desember 2011

Cara Mengontrol Servo

Belakangan ini saya sering di tanya tentang bagaimana cara mengendalikan servo oleh seorang dari negeri yang jauh. Oleh karena itu saya tuliskan saja disini untuk di share ke pembaca blog ini atau yang sedang mencari bagaimana cara mengendalikan servo.

Perlu di ketahui bahwa jenis servo ada dua jenis yaitu servo pertama saya menyebutnya servo continues yaitu servo yang dapat berputar 360 derajat , kedua adalah servo non continues yaitu servo yang hanya dapat berputar 180 derajat. Prinsip pensinyalan untuk mengontrol kedua jenis servo tadi tidak jauh berbeda atau mirip.



Servo akan bekerja jika pada pin kontrolnya diberi sinyal pulsa / PWM dengan periode 20ms.



 Setelah diberi sinyal pulsa 20ms maka untuk mengatur arah gerak motor servo yaitu dengan mengubah TON duty cycle nya



Berikut ini adalah contoh program dalam bahasa C untuk control servo

#include <mega8535.h>
#include <delay.h>
#define mot_servo PORTA.0 //

signed int y,servo_data;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
y++;
if(y==900){y=0;}
if(y <=servo_data){mot_servo=1;}
else{mot_servo=0;}
}

Program diatas adalah program untuk memberikan sinyal pulsa dengan periode 20ms.  Fungsi program diatas adalah fungsi interup, jadi setiap saat (tanpa di panggil) akan berjalan terus. Coba perhatikan nilai 900, nilai itu berasal dari rumus

Misalnya kita menggunakan frek 8Mhz maka nilai counter untuk menciptakan periode pulsa 20ms adalah sekitar 627.45 atau dibulatkan 627.

Kemudian perhatikan variable servo_data, servo_data adalah variable yang menentukan waktu TON duty cycle. Yang fungsinya untuk mengatur arah dan sudut kerja servo. Untuk menetukannya juga sama dengan cara menentukan counter. Hanya 20ms pada rumus diatas diisi dengan dengan TON duty cycle yang diinginkan misalnya untuk posisi servo neutral 1.5ms kemudian akan didapat variable servo_datanya
Untuk merubah/ memasukkan nilai variable servo_data dilakukan di fungsi main berikut

Void main(void)
{
while (1)
{
// Place your code here
delay_ms(100);
for(i=0;i<1;i++)
{
servo_data=30;
delay_ms(200);
servo_data=18;
delay_ms(200);
servo_data=10;
delay_ms(200);
servo_data=18;
delay_ms(200);
}
delay_ms(300);
};
}

selamat mencoba...

3 komentar:

  1. mas kl untuk mengatur kecepatan servo gmn???

    BalasHapus
    Balasan
    1. maaf mas baru saya balas, saya tidak tahu cara mengatur kecepatan servo, tapi coba mas ubah-ubah frekuensinya jadi lebih tinggi atau lebih rendah. dulu saya pernah coba untuk menambah kecepatan putar motor servo, tapi saya lupa bagaimana, sudah lama sekali.

      Hapus
  2. Setahu saya untk mengubah kecepatannya dapat menggunakan delay yg diatur sesuai yg diinginkan. Semakin besar delaynya maka semakin lambat, dan semakin kecil delaynya maka akan semakin cepat.

    BalasHapus