Anda di halaman 1dari 8

Mengakses motor Servo

7 Januari 2017 hendril satrian purnama arduino, CV-AVR, learning, microcontroller, robotic,
technologyakses, arduino, control, elektro, hitec, mikrokontroller, programming, pulse, pwm,
robot, servo, teknologi

Motor servo adalah sebuah perangkat atau aktuator putar (motor) yang dirancang dengan sistem
kontrol umpan balik loop tertutup (close loop), sehingga dapat di set-up atau di atur untuk
menentukan dan memastikan posisi sudut dari poros output motor.

Pada umumnya terdapat 2 tipe motor servo yaitu servo standard dan servo rotation (continuous).
Dimana biasanya untuk tipe standar hanya dapat melakukan pergerakan sebesar 180° sedangkan
untuk tipe continuous dapat melakukan rotasi atau 360°.

Pada postingan kali ini sya akan menjelaskan tentang servo standar yang hanya dapat berputar
180°. Salah satu servo standar yang paling sering dipakai adalah servo HITEC dimana servo
hitec sendiri memiliki performa yang cukup baik di kelasya… Lets Cek it out…
Pada dasarnya motor servo tersusun dari motor DC, rangkaian kontrol, gearbox dan
potensiometer. Berikut gambar motor servo beserta komponen internal motor servo.

Prinsip Kerja :
Motor servo dikendalikan dengan memberikan sinyal modulasi lebar pulsa (Pulse Wide
Modulation / PWM) melalui kabel kontrol. Lebar pulsa sinyal kontrol yang diberikan akan
menentukan posisi sudut putaran dari poros motor servo. Sebagai contoh, lebar pulsa dengan
waktu 1,5 ms (mili detik) akan memutar poros motor servo ke posisi sudut 90⁰. Bila pulsa lebih
pendek dari 1,5 ms maka akan berputar ke arah posisi 0⁰ atau ke kiri (berlawanan dengan arah
jarum jam), sedangkan bila pulsa yang diberikan lebih lama dari 1,5 ms maka poros motor servo
akan berputar ke arah posisi 180⁰ atau ke kanan (searah jarum jam). Lebih jelasnya perhatikan
gambar dibawah ini ;
Ketika lebar pulsa kendali telah diberikan, maka poros motor servo akan bergerak atau berputar
ke posisi yang telah diperintahkan, dan berhenti pada posisi tersebut dan akan tetap bertahan
pada posisi tersebut. Jika ada kekuatan eksternal yang mencoba memutar atau mengubah posisi
tersebut, maka motor servo akan mencoba menahan atau melawan dengan besarnya kekuatan
torsi yang dimilikinya (rating torsi servo). Namun motor servo tidak akan mempertahankan
posisinya untuk selamanya, sinyal lebar pulsa kendali harus diulang setiap 20 ms (mili detik)
untuk menginstruksikan agar posisi poros motor servo tetap bertahan pada posisinya.

AKSES MOTOR SERVO


Pada pembahasan ini kita akan belajar untuk mengakses motor servo dengan melakukan coding
mengunakan software CV-AVR dan ARDUINO, dimana kedua software tersebut merupakan
salah satu software yang sangat familiar dikalangan penggemar control elektronis, maupun
hardware programmer. Lets cek it out..

Akses motor servo dengan software CV-AVR :

Listing program pada CV-AVR :

/*****************************************************

Project : TEST SERVO WITH TIMER INTERRUPTS


Version : V0.1
Date : 27/02/2015
Author : Handril satryan purnama
Company : RELiF.Inc

Chip type : ATmega8


Program type : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/

#include
#include
#include
#include

#define sw1 PINC.2


#define sw2 PINC.3
#define servo PORTB.0
#define n 0.0625

unsigned int x=0, sv;


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
if (x>1250)x=0; else x++;
if (x<sv) servo=1; else servo=0; }
// Declare your global variables here
unsigned int data=1500;
char buff[16];
void run()
{
if (!sw1)
{delay_ms(20); data+=150;}
if (!sw2)
{delay_ms(20); data-=150;}

if (data>2400)data=1500;
if (data<500)data=1500;

sv=n*data;
sprintf(buff,"Data : %d ",data);
lcd_gotoxy(0,1);
lcd_puts(buff);
lcd_gotoxy(0,0);
lcd_putsf("--MICRO SERVO--");
}

void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out
Func0=Out
// State7=T State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x3F;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTC=0x7F;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
TCCR0=0x01;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization


// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x01;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization


// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7

// Characters/line: 16
lcd_init(16);
lcd_clear();

// Global enable interrupts

#asm("sei")

while (1)
{
// Place your code here
run();
}
}

Rangkaian simulasi pada Software proteus :


Akses motor servo dengan software ARDUINO :

Listing program arduino :

#include

Servo myservo;
int potpin = 0;
int val;

void setup()
{
myservo.attach(9);
}

void loop()
{
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 180);
myservo.write(val);
delay(15);
}

Rangkaian :

……

Anda mungkin juga menyukai