Professional Documents
Culture Documents
motor servo adalah sebuah aktuator yang bergerak dalam poros yang mempunyai spesifikasi untuk control posisi sudut yang presisi.
Banyak jenis motor servo. Ada yang dikontrol secara serial ataupun dengan PWM. Kali ini kita akan mencoba megatur posisi dari
sebuah motor servo dengan menggunakan PWM yang dibangkitkan dari timer1. PWM harus diatur agar memenuhi standar sinyal input
untuk motor servo sehingga motor servo dapat bergerak sesuai dengan perintah yang kita kirimkan lewat PWM.
Nilai input PWM pada setiap servo terkadang berbeda sesuai merek. Misalnya saja Servo Futaba tipe Futaba S3003 Standard Servo.
0.388ms = 0 degree.
1.264ms = 90 degrees. (neutral position)
2.14ms = 180 degrees.
Akan tetapi kita coba dengan setting pada proteus seperti berikut.
Mari kita mulai.Buat sebuah folder untuk project yang akan kita buat. Semua file project akan disimpan di folder ini. Buat folder dengan
nama motor servo.
Pertama buat new project, lalu masukan chip ATMega8535, ambil dari library.
masukan juga komponen motor servo
Lalu rangkai seperti gambar sirkuit di bawah ini.
Untuk komponen VCC dan Ground bisa di drag dari Terminals mode.
Sekarang kita beralih ke codevisionAVR. Buat new project. Klik File, lalu New.
Kemudian pilih Project, lalu klik OK.
y = 1.388x + 375
dan kita ganti nilai x dan y sehingga menjadi.
OCR1A = (unsigned int)((1.388*(float)sudut) + 375);
Sekarang kita masukan ke program.
1 /*****************************************************
2 Chip type : ATmega8535
Program type : Application
3 Clock frequency : 16.000000 MHz
4 Memory model : Small
5 External SRAM size : 0
6 Data Stack size : 128
7 *****************************************************/
8
#include <mega8535.h>
9 #include <delay.h>
10
11 // Declare your global variables here
12 void set_servo(int sudut)
13 {
OCR1A= (((sudut + 90)/90)*1000)/4;
14 //OCR1A = (unsigned int)((1.388*(float)sudut) + 375);
15 }
16
17 void main(void)
18 {
19 // Declare your local variables here
20
// Input/Output Ports initialization
21 // Port A initialization
22 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In
23 Func1=In Func0=In
24 // State7=T State6=T State5=T State4=T State3=T State2=T
State1=T State0=T
25 PORTA=0x00;
26 DDRA=0x00;
27
28 // Port B initialization
29 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In
30 Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T
31 State1=T State0=T
32 PORTB=0x00;
33 DDRB=0x00;
34
35 // Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In
36
Func1=In Func0=In
37 // State7=T State6=T State5=T State4=T State3=T State2=T
38 State1=T State0=T
39 PORTC=0x00;
40 DDRC=0x00;
41
// Port D initialization
42 // Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In
43 Func1=In Func0=In
44 // State7=T State6=T State5=0 State4=T State3=T State2=T
45 State1=T State0=T
46 PORTD=0x00;
DDRD=0x20;
47
48 // Timer/Counter 0 initialization
49 // Clock source: System Clock
50 // Clock value: Timer 0 Stopped
51 // Mode: Normal top=FFh
52 // OC0 output: Disconnected
TCCR0=0x00;
53 TCNT0=0x00;
54 OCR0=0x00;
55
56 // Timer/Counter 1 initialization
57 // Clock source: System Clock
// Clock value: 250.000 kHz
58 // Mode: Fast PWM top=ICR1
59 // OC1A output: Non-Inv.
60 // OC1B output: Discon.
61 // Noise Canceler: Off
62 // Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
63 // Input Capture Interrupt: Off
64 // Compare A Match Interrupt: Off
65 // Compare B Match Interrupt: Off
66 TCCR1A=0x82;
TCCR1B=0x1B;
67 TCNT1H=0x00;
68 TCNT1L=0x00;
69 ICR1H=0x13;
70 ICR1L=0x87;
71 OCR1AH=0x00;
OCR1AL=0x00;
72 OCR1BH=0x00;
73 OCR1BL=0x00;
74
75 // Timer/Counter 2 initialization
76 // Clock source: System Clock
77 // Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
78 // OC2 output: Disconnected
79 ASSR=0x00;
80 TCCR2=0x00;
81 TCNT2=0x00;
OCR2=0x00;
82
83 // External Interrupt(s) initialization
84 // INT0: Off
85 // INT1: Off
86 // INT2: Off
87 MCUCR=0x00;
MCUCSR=0x00;
88
89 // Timer(s)/Counter(s) Interrupt(s) initialization
90 TIMSK=0x00;
91
92 // Analog Comparator initialization
93 // Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
94 ACSR=0x80;
95 SFIOR=0x00;
96
97 while (1)
98 {
99 // Place your code here
set_servo(-90); //set servo ke -90 derajat
100 delay_ms(1000); //tahan posisi servo selama 1000ms
101
102 set_servo(90); //set servo ke 90 derajat
103 delay_ms(1000); //tahan posisi servo selama 1000ms
};
104 }
105
106
107
108
109
110
111
112
113
114
115
116
Lalu klik Make the project.
Klik OK, maka akan ter-generate file .hex. File inilah yang akan diupload ke dalam mikrokontroler.
Seperti biasa jangan lupa lakukan pengaturan di chip ATMEGA8535.
Klik pada ikon folder Program File. Browse file .hex yang sudah kita generate tadi di codevisionAVR.
Atur CKSEL Fuses menjadi Ext. Clock dan Clock Frequency dengan nilai clock 16MHz yang sudah kita atur juga pada codevisionAVR.
Klik OK.
Setelah proses setting selesai, maka langsung saja klik Play.
Untuk melihat sinyal yang mengatur motor servo bisa kita tambahkan osiloskop pada rangkaian proteus yang sudah kita buat.
Kita capture di jalur input servo.
Maka bisa dilihat sinyal PWM-nya.