Langsung ke konten utama

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...

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

Posting Komentar

Postingan populer dari blog ini

Menggunakan USART / UART di CodeVision AVR

Sudah lama saya tidak menulis di blog, dan kali ini saya akan berbagi sedikit pengalaman saya mengenai USART/UART di mikrokontroler AVR ATMEGA series. Kesempatan kali ini saya akan menggunakan Atmega8 dan mengaktifkan fitur USARTnya dengan CodeVision AVR versi 1.xx.x Jalankan aplikasi Codevision kemudian pada menu file pilih new, nanti akan muncul jendela create new file pilih project dan klik OK, akan muncul jendela confirm klik yes,

Menggunakan ADC Mikrokontroler ATmega 32 dengan CodeVision

Sebenarnya cara ini bisa dipakai untuk mikrokontroler Atmega seri lainnya juga. Saya kali ini akan menggunakan ADC Atmega32 dengan menggunakan CodeVision AVR. Langsung saja buka aplikasi CodeVision AVR kemudian buat project baru setelah itu akan muncul jendela CodeWizard AVR