Mengakses motor Servo

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…

1.jpg

Pada dasarnya motor servo tersusun dari motor DC, rangkaian kontrol, gearbox dan potensiometer. Berikut gambar motor servo beserta komponen internal motor servo.

2

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 ;

3.png

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 :

4.png


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 :

5

……

2 respons untuk ‘Mengakses motor Servo

Tinggalkan komentar