Anda di halaman 1dari 5

PROGRAM MOTOR SERVO

DENGAN CODEVISIONAVR
Sebelum ke program ada baiknya kita mengetahui terlebih dahulu tentang Motor servo, motor servo adalah
motor yang mampu bekerja dua arah (CW dan CCW) dimana arah dan sudut pergerakan rotornya dapat
dikendalikan hanya dengan memberikan pengaturan duty cycle sinyal PWM pada bagian pin kontrolnya.

Gambar Motor Servo


Motor sevo merupakan sebuah motor DC yang memiliki rangkaian control elektronik dan internal gear untuk
mengendalikan pergerakan dan sudut angularnya. Motor servo adalah motor yang berputar lambat, dimana
biasanya ditunjukkan oleh rate putarannya yang lambat, namun demikian motor servo memiliki torsi yang kuat
karena internal gearnya.
Bicara lebih jauh lagi motor servo memiliki :
· 3 jalur kabel : power, ground dan control
· Sinyal control mengendalikan posisi
· Operasional dari servo motor dikendalikan oleh sebuah pulsa selebar kira-kira 20 ms dimana lebar pulsa
antara 0,5 ms dan 2ms menyatakan akhir dari range sudut maksimum.
· Konstruksi di dalamnya meliputi internal gear, potensiometer dan feedback control
Motor servo mempunyai dua jenis motor servo standard 180 derajat dan motor servo continuous dan
kebanyakan motor ini dipakai untuk robot lengan, penggerak kamera dan lain-lain.
Berikut program mengerakkan motor servo dengan codevisionavr :

/*****************************************************
Project :
Version :
Date : 7/27/2012
Author :
Company :
Comments:

Chip type : ATmega8535


Program type : Application
AVR Core Clock frequency: 11.059200 MHz
Memory model : Small
External RAM size :0
Data Stack size : 128
*****************************************************/

#include <mega8535.h>
#include <stdlib.h>
#include <stdio.h>
#include <delay.h>

#define servo1 PORTA.0

signed int y,data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12;


unsigned char j,k,SENS_DEPAN,buffer[33];
unsigned char a,b,pwmka,pwmki,pwmka2,pwmki2,kp,kecepatan,limit;
int mka,mki,error,error_lalu,prop,deriv,diff;
unsigned int i,kd,ping1,ping2,ping3,ping4,ping;
unsigned long ping_belakang,ping_depan,ping_kanan,ping_kiri;
bit x;

// Alphanumeric LCD Module functions


#include <alcd.h>

// 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 <=data1){ servo1=1;}
else{ servo1=0;}

if (y <=data2){ servo2=1;}
else{ servo2=0;}
}

// Declare your global variables here


void main(void)
{
// Declare your local variables here

PORTA=0x00;DDRA=0xFF;//servo
PORTB=0xFF;DDRB=0x00;//tombol
PORTC=0x00;DDRC=0x7F;//servo2
PORTD=0x00;DDRD=0xFF;//lcd

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11059.200 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x01;
TCNT0=0x00;
OCR0=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
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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


TIMSK=0x01;
UCSRB=0x00;
ACSR=0x80;SFIOR=0x00;
ADCSRA=0x00;//adc
SPCR=0x00;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);

// Global enable interrupts


#asm(“sei”)

while (1)
{
//Place your code here

PORTA.0=0;
data1=64;
delay_ms(10);

PORTA.0=0;
data1=20;
delay_ms(10);

}
}

Share this:

Anda mungkin juga menyukai