servo standar
servo mini
konfigurasi pin pada tiap merk servo
berikut merupakan gambar pemberian pulse pada data sheet servo Hitec-HS 311:
pertanyaan yang muncul:
bagai mana menggerakan servo ke posisi 81 derajat?,33 derajat, 10 derajat?.
kita ganti saja logika berfikirnya, misal saya ubah menjadi :
- -90 derajat (90 derajat kekiri) = 0 derajat
- 0 derajat (tengah-tengah) = 90 derajat
- +90 derajat (90 derajat kekanan) = 180 derajat
- lebar high pulse 600us = 0 derajat
- lebar high pulse 1500us= 90 derajat
- lebar high pulse 2400us= 180 derajat
ini bukan merubah servo tetapi merubah pola berfikir untuk mempermudah pemrograman.
selisih lebar pulse high tiap derajat adalah (2400us - 600us) /180 = 10us.
maka untuk menggerakan servo sebesar 1 derajat maka lebar pulsa logic 1 adalah 600us + 1 x 10us.
kesimpulan :
contoh program dalam bahasa C:
- lebar pulse high (logic 1) = 600us + derajat yng diinginkan x 10us
- lebar pulse low nya (logic 0) saya gunakan 10 milisecon
contoh program dalam bahasa C:
#include <mega16.h> // microcontroller ATmega 16
#include <delay.h>
#define servo PORTC.0 // servo connected with PORTC.0
typedef unsigned char unchar; // unsigned char = unchar
void set_servo(unchar derajat) // function to control servo 1
{
unchar n;
servo=1; // berikan output logic 1
delay_us(600); // selama 600us
for(n=0; n < derajat; n++){ // ditambah 10us X derajat yg diinginkan
delay_us(10);
};
servo=0; // keluarkan output logic 0
delay_ms(10); // tunda selama 10 ms
};
void main(void){
DDRC = 0x01;
PORTC= 0x00;
while(1){
set_servo(100); //menggerakan servo ke sudut 100 derajat
delay_ms(1000);
set_servo(30); // menggerakan servo ke sudut 30 derajat
delay_ms(1000);
}
}
Salah satu logika cara untuk mengatur speed servo:
jika servo kita perintahkan untuk bergerak menuju ke sudut tertentu maka servo akan bergerak ke sudut tersebut dengan kecepatan penuh , jika kita gerakan servo tiap step maka servo akan bergerak lambat.
misal :
dari posisi awal servo 0 derajat kemudian kita perintah untuk bergerak ke 30 derajat maka servo akan langsung bergerak dengan kecepatan penuh ke sudut 30 derajat. utuk memperlambat kita gerakan tiap 1 derajat. maka servo akan bergerak dari 0 ke 1 derajat dulu, 2 derajat, 3 ,4.... dst sampai ke 30 derajat (tujuan), jika step kita perbesar maka gerakan akan semakin cepat , misal menggunakan 5 step, maka servo akan bergerak dari 0 derajat , 5 derajat , 10 derajat.. dst sampai 30 derajat (tujuan).
jangan lupa untuk menunda beberapa mili secon tiap step.
lihat video 24 serial servo controller buatan saya:
komunikasi menggunakan USART
yang paling kiri adalah servo hitec HS-322
yang lainya servo towerpro MG945R
yang lainya servo towerpro MG945R
source code dan simulasi proteus download disini !!
setingan crystal yang saya gunakan external crystal 16MHZ (sesuaikan dengan milik anda), jika crystal tidak sama dengan program maka servo tidak akan bergerak sesuai keinginan,
password to open zip file : microku.blogspot.com
setingan crystal yang saya gunakan external crystal 16MHZ (sesuaikan dengan milik anda), jika crystal tidak sama dengan program maka servo tidak akan bergerak sesuai keinginan,
password to open zip file : microku.blogspot.com




