You are on page 1of 36

BAB VI PERCOBAAN 5 AVR MOTOR DC, STEPPER DAN SERVO

6.1 Tujuan 1. Memahami prinsip dan cara kerja Motor Stepper Unipolar. 2. Mengetahui logika dan pengendalian putaran Motor Stepper Unipolar. 3. Memahami logika dan pengendalian motor DC. 4. Mengetahui penggunaan timer dan PWM sebagai pengendali

kecepatan motor DC. 5. Memahami logika dan pengendalian motor servo.

6.2 Dasar Teori 6.2.1 Motor DC Motor DC adalah perangkat mesin pertama yang mengkonversi besaran listrik menjadi besaran mekanik. Putaran dan torsi pada motor DC dihasilkan dari gaya tarik-menarik dan gaya dorong yang dihasilkan oleh medan magnetik pada motor DC tersebut. Berdasarkan pada gambar 6, motor DC terdiri dari 6 bagian utama antara lain : Axis atau poros motor DC, bagian yang berputar yang disebut rotor, bagian yang tetap yang di sebut stator, komuntator, Field Magnets, dan brushes.

Gambar 6.1 motor DC.

Perancangan motor DC berbeda-beda, ada motor DC dengan bagian rotor merupakan kumparan kawat dan bagian stator adalah magnet permanen motor jenis ini disebut motor magnet permanen (permanent magnet motor). Adapula motor DC dengan bagian rotor merupakan magnet permanen dan bagian stator adalah terdiri dari kumparan kawat, motor jenis ini disebut wound-field motor. Mengendalikan kecepatan putaran motor DC ada 3 cara antara lain : Metode On Off. Menggunakan Variabel tegangan. Menggunakan PWM (Pulse Width Modulation).

6.2.2

PWM (Pulse Width Modulation) PWM modulator menghasilkan sinyal DC yang terpotong-potong,

sehingga nampak seperti sinyal square (kotak) dengan duty cycle yang proporsional dengan tegangan input yang diberikan.Putaran motor DC dapat diatur dengan mengatur tegangan DC input atau dengan cara PWM (Pulse Width Modulator). Voltage driver akan menghasilkan tegangan yang sama dengan inputnya, PWM akan menghasilkan pulsa denga duty cycle yang sesuai dengan sinyal DC inputnya.

PWM (Pulse width modulator) adalah suatu cara modulasi, dimana gelombang pembawa yang digunakan terdiri dari pulsa-pulsa segi empat yang berulang-ulang, dengan lebar pulsa yang dapat diubah-ubah oleh amplitudo dari sinyal informasi. PWM dipergunakan dalam pengaturan tegangan, tegangan beban diatur dengan cara mengatur duty cycle dari gelombang kotak yang disupplykan ke basis dari switching transistor.
Untuk mengukur duty cycle dapat digunakan rumus :

DutyCycle

SiklusAkti f x100% SiklusTota l

Hal ini dapat diamati dari tampilan osiloskop sebagai berikut:

Siklus Aktif Siklus total

Gambar 6.2 Duty Cycle

e(t) em 0

+V0

-V0

Gambar 6.3Output PWM

PWM diperoleh dengan mengumpankan sinyal segitiga e(t) dan sinyal modulasi em(t) kesebuah komparator. Lebar pulsa dari sinyal menggambarkan informasi atau besar sinyal dari modulasi.

Bila sinyal segitiga e(t) lebih besar dari em(t) maka keluaran komparator e0=Vo yang merupakan nilai dari saturasi komparator. Bula e(t) kurang dari em(t) maka keluarannya e0=-Vo. Bila em(t)=0, lebar pulsa sama dengan siklus kerja yang berubah secara linear terhadap em(t) dan besarnya akan mencapai 50%. Besarnya siklus kerja dirumuskan :
D V0 em x100 % 2V0

6.2.2.1 Pengaturan PWM pada CodeWizardAVR

Gambar 6.Pin Timer / Counter Pada Atmega2560

Komponen utama Timer/Counter adalah sebuah register yg tugasnya hanya berhitung dari 0 sampai batas maximumnya, register ini pada AVR disebut register TCNT . Misalnya sebuah register TCNT maka nilai maksimunya adalah 255. Register yang digunakan untuk mendukung operasi Timer Counter pada AVR : pada AVR adalah 8 bit,

Register TCNT = register pencacah dari 0 sampai nilai maximum yg kita tentukan.

Register TCCR =Untuk pengaturan mode operasi Timer/Counter Register TIMSK =Untuk memilih Timer Counter mana yg aktif. Register TIFR = Untuk mengetahui adanya interupsi akibat operasi Counter Timer .

Register OC (output compare) = untuk menyimpan nilai pembanding dgn nilai pd register TCNT. Jadi kalau kita ingin melakukan pengaturan (men set up ) Timer/Counter

kita fokuskan ke register TCCRn . n adalah no timer , misal jika kita ingin menggunakan Timer 0 maka yg kita atur adalah TCCR0.

Gambar 6. Susunan Register Timer

Gambar 6. Sumber clock dalam MCU

Ketika sumber clock dari system clock (kristal) maka ia berfungsi sbg timer.Ketika sumber clock dari external / pin T maka ia berlaku sebagai counter.pemilihan sumber clock ada pada bit CS pada register TCCR. 6.2.2.1.1 MODE TIMER O Untuk menentukan mode timer O di lakukan pd bit WGM-OO dan WGMOI pada register control (TCCRO) seperti pada tabel dibawah ini.

Gambar 6. Mode Timer dalam Atmega

4. Mode PWM , Pulsa Wide Modulation. Mode PWM ada dua yaitu PWM phase correct dan Fast PWM. perbedananya yaitu pada PWM phase corect counter (TCNT) bergulir/mencacah naik dan turun . sedangkan pada Fast PWM counter (TCNT) hanya bergulir naik saja . Untuk menjadikan Timer counter mode PWM phase corect yaitu dgn Cara men set bit WGM01=1 dan bit WGM0 =0 , pada register TCCR.

Salah satu kegunaan sinyal PWM antara lain untuk mengendalikan Kecepatan putaran Motor DC. Gambar berikut ini menunjukan berbagai bentuk PWM dan efek terhadap kecepatan Motor DC yang berbeda sesuai bentuk pulsa PWM.

Pulsa Wide Modulation

Cara pembentukan sinyal Fast PWM Nilai pada register Counter TCNT akan terus menerus naik sampai nilai maximum, lalu kembali ke 0. begitu seterusnya selama sinyal clock diberikan kepada timer. Nilai OCR diset untuk mengatur pembentukan PWM. saat nilai TCNT > nilai OCR maka pin OC mengeluarkan sinyal HIGH ,

saat nilai TCNT < nilai OCR maka pin OC mengeluarkan sinyal LOW. Gambar berikut menunjukan tiga buah nilai OCR yang berbeda ,yg menghasilkan sinyal output PWM berbeda pula pada pin OC.

Cara Membuat PWM pada CodeWizard di Codevision spt pada gambar berikut:

membuat pwm 25% pada output OC0 dgn Timer0

PWM phase corect

Timer Mode CTC (clear timer on compare match)

Pada mode ini counter TCNT akan bergulir/mencacah naikkemudian akan kembali 0 saat nilai TCNT = OCR0. Untuk menghasilkan gelombang kotak pd pin OC kita set OC0 toggle yaitu dgn memberi nilai COM1 =0 dan COM0 =1 di register TCCR.

6.2.3Motor Stepper Unipolar

Gambar 6.4 Motor Stepper

Motor Stepper adalah motor listrik sinkron yang mengubah data pulsa digital ke rotasi mekanik dan 1 putaran penuhnya terbagi dalam banyak langkah (step). Banyaknya rotasi yang dilakukan sebanding dengan pulsa digital yang diberikan dan kecepatan putaran sebanding dengan frekuensi pulsa digital tersebut. Motor stepper dapat diatur posisi sudutnya dengan teliti tanpa perlu ada mekanime umpan balik (open-loop controller) selama motor stepper tersebut dikendalikan dengan hati-hati. Beberapa karakteristik motor stepper antara lain : Motor stepper adalah perangkat dengan tenaga tetap (constant power device). Kecepatan motor stepper berbanding terbalik dengan torsi yang dihasilkan, semakin cepat putarannya maka semakin kecil torsinya. Kurva torsi motor stepper bisa diperluas dengan menggunakan perangkat pembatas arus dan meningkatkan tegangan kendalinya. Motor stepper menghasilkan getaran lebih besar dibandingkan tipe motor lainnya. Getaran yang dihasilkan bisa buruk untuk kecepatan tertentu dan menyebabkan kehilangan torsi atau kehilangan arah (posisi) sehingga membutuhkan metode tertentu untuk mengurangi getaran tersebut. Motor stepper dengan banyak phase menghasilkan pergerakan yang lebih halus dibandingkan dengan motor stepper sedikit phase.

Berdasarkan karakteristik tersebut maka beberapa motor stepper dalam suatu sistem tertentu ditambahkan umpan balik berupa encoder atau resolver, hal ini bertujuan agar motor stepper dapat dikendalikan dengan kecepatan dan torsi maksimal serta mengetahui posisi motor stepper dengan tepat. Ada 3 tipe utama motor stepper, yaitu : Variable Reluctance Stepper (VR) : terdiri dari rotor dan stator yang memiliki gerigi dengan jumlah yang berbeda dan saling terhubung. Rotor tidak memiliki magnet permanen sehingga dapat berputar dengan bebas jika statornya tidak dialiri arus. VR memiliki torsi yang kecil sehingga

biasanya digunakan pada perangkat dengan beban ringan dan jarang digunakan pada industri. Permanent Magnet Stepper (PM) : Motor stepper yang menggunakan magnet permanen sebagai rotornya dan statornya serupa dengan VR stepper. Hybrid Synchronous Stepper : merupakan kombinasi dari teknik PM dan VR, metode ini mendapatkan kekuatan maksimum dengan ukuran motor yang kecil.

Motor stepper ada 2 jenis berdasarkan lilitan kumparannya yaitu motor stepper unipolar dan motor stepper bipolar. Motor stepper unipolar memiliki 2 pengawatan setiap phasenya, dengan total 2 phase dan memiliki common. Jika kedua common pada setiap phasenya terhubung secara internal maka hanya terdapat 5 buah terminal.Unipolar menggunakan logika kontrol yang sederhana.

Gambar 6.5 Motor Stepper unipolar 5 terminal.

Motor stepper bipolar memiliki 1 pengawatan setiap phasenya, dengan total dua buah phase dan tidak memiliki common. Bipolar menggunakan logika kontrol dan rangkaian pengendalian yang lebih rumit, biasanya menggunakan rangkaian H-Bridge. Pengawatan pada Bipolar lebih baik dibandingkan Unipolar untuk berat yang sama, karena bentuk fisik pengawatannya. Dibandingkan Bipolar, Unipolar menggunakan banyak kabel 2 kali lipat untuk luas bidang yang

sama tetapi hanya digunakan separuhnya saja pada satu waktu dan menghasilkan efisiensi 50% (kira-kira mencapai 70% pada torsi output yang ada).

Gambar 6.6 Motor Steper bipolar.

Terdapat 4 cara untuk mengendalikan motor stepper unipolar yaitu : Full Step Drive (2 phase ON) Metode ini menggunakan Full Step dengan 2 phase selalu ON dan 2 phase selalu OFF sehingga torsi yang dihasilkan maksimal. Wave Drive Metode ini menggunakan Full Step dengan hanya 1 phase selalu ON dan 3 phase selalu OFF sehingga torsi yang dihasilkan kecil. Half Stepping Metode dengan 1 phase ON kemudian 2 phase ON secara bergantian sehingga torsi yang dihasilkan sekitar 70%. Kelebihan metode ini yaitu sudut pergerakan yang lebih kecil (setengahnya full step) sehingga untuk aplikasi tertentu lebih presisi. Microstepping Microstepping adalah mengendalikan motor stepper dengan memberikan setengah gelombang sinyal sinus. Dengan cara ini langkah motor stepper lebih kecil dan halus pergerakannya, mengurangi resonansi pada motor stepper.

Gambar 6.7 Sinyal kontrol pengendalian motor stepper.

Gambar 6.8 Pergerakan motor stepper Unipolar pada FullStep 2 phase.

6.2.4

Motor Servo Motor servo adalah sebuah motor dengan sistem umpan balik tertutup di

mana posisi dari motor akan diinformasikan kembali ke rangkaian kontrol yang

ada di dalam motor servo. Motor ini terdiri dari sebuah motor DC, serangkaian gear, potensiometer dan rangkaian kontrol. Potensiometer berfungsi untuk menentukan batas sudut dari putaran servo. Sedangkan sudut dari sumbu motor servo diatur berdasarkan lebar pulsa yang dikirim melalui kaki sinyal dari kabel motor.

Gambar 6.9 Motor Servo

Karena motor DC servo merupakan alat untuk mengubah energi listrik menjadi energy mekanik, maka magnit permanent motor DC servolah yang mengubah energi listrik ke dalam energi mekanik melalui interaksi dari dua medan magnit. Salah satu medan dihasilkan oleh magnit permanent dan yang satunya dihasilkan oleh arus yang mengalir dalam kumparan motor. Resultan dari dua medan magnit tersebut menghasilkan torsi yang membangkitkan putaran motor tersebut. Saat motor berputar, arus pada kumparan motor menghasilkan torsi yang nilainya konstan. Secara umum terdapat 2 jenis motor servo. Yaitu motor servo standard dan motor servo Continous. Servo motor tipe standar hanya mampu berputar 180 derajat. Motor servo standard sering dipakai pada sistim robotika misalnya untuk membuat Robot Arm ( Robot Lengan ). sedangkan Servo motor continuous dapat berputar sebesar 360 derajat. motor servo Continous sering dipakai untuk Mobile Robot. Pada badan servo tertulis tipe servo yang bersangkutan. Motor servo merupakan sebuah motor dc kecil yang diberi sistim gear dan potensiometer sehingga dia dapat menempatkan horn servo pada posisi yang dikehendaki. Karena motor ini menggunakan sistim close loop sehingga posisi horn yang dikehendaki bisa dipertahanakan. Horn pada servo ada dua jenis. Yaitu Horn X dan Horn berbentuk bulat.

Pengendalian gerakan batang motor servo dapat dilakukan dengan menggunakan metode PWM. (Pulse Width Modulation).Teknik ini menggunakan system lebar pulsa untuk mengemudikan putaran motor. Sudut dari sumbu motor servo diatur berdasarkan lebar pulsa yang dikirim melalui kaki sinyal dari kabel motor. Tampak pada gambar dengan pulsa 1.5 mS pada periode selebar 2 mS maka sudut dari sumbu motor akan berada pada posisi tengah. Semakin lebar pulsa OFF maka akan semakin besar gerakan sumbu ke arah jarum jam dan semakin kecil pulsa OFF maka akan semakin besar gerakan sumbu ke arah yang berlawanan dengan jarum jam.

Gambar 6.10 Kontrol Servo dengan PWM

Untuk menggerakkan motor servo ke kanan atau ke kiri, tergantung dari nilai delay yang kita berikan. Untuk membuat servo pada posisi center, berikan pulsa 1.5ms. Untuk memutar servo ke kanan, berikan pulsa <=1.3ms, dan pulsa >= 1.7ms untuk berputar ke kiri dengan delay 20ms, seperti ilustrasi berikut:

Gambar 6.11 Kontrol Servo dengan delay

6.3 Alat dan Bahan 1. Modul MCU Eduboard v3.0 0-3912 2. PC dan CVAVR v2.05 (atau yang terbaru) 3. Motor DC 4. Motor Stepper 5. Motor Servo

6.4 Langkah Percobaan 6.4.1 Percobaan 1 : Motor DC 1. 2. Membuka CVAVR dan membuat project baru. Mengaktifkan Receiver dan Transmitter pada USART0 dengan baud Rate 115200. 3. Memberikan Clock 10,800kHz, Mode Ph correct PWM top=00FFh dan mengganti out A, B serta C menjadi Non-inv. 4. Mengganti PORTH.2 dan PORTH.7 menjadi output untuk sinyal motor dan juga mengganti PORTH.3, PORTH.4 dan PORTH.5 menjadi output karena digunakan sebagai enable. 5. 6. 7. Membuat listing program sesuai yang diberikan asisten. Memrogram MCU dan memasang Motor DC pada Modul. Mencatat hasil percobaan.

6.4.2

Percobaan 1 : Motor DC 1. 2. Membuka CVAVR dan membuat project baru. Mengaktifkan Receiver dan Transmitter pada USART0 dengan baud Rate 115200. 3. 4. 5. 6. Mengganti PORTL menjadi output. Membuat listing program sesuai yang diberikan asisten. Memrogram MCU dan memasang Motor Stepper pada Modul. Mencatat hasil percobaan.

6.4.3

Percobaan 1 : Motor DC 1. 2. Membuka CVAVR dan membuat project baru. Mengaktifkan Receiver dan Transmitter pada USART0 dengan baud Rate 115200. 3. 4. 5. 6. Mengganti PORTH menjadi output. Membuat listing program sesuai yang diberikan asisten. Memrogram MCU dan memasang Motor Servo pada Modul. Mencatat hasil percobaan.

6.5 Data Percobaan 6.5.1 Percobaan 1 : Motor DC Tabel 6.1 Data percobaan motor DC Variasi 1. 2. 3. Kecepatan Cepat Lambat Mati PWM 200 60 0

6.5.2 Percobaan 2 : Motor Stepper Tabel 6.2 Data percobaan motor Stepper Putaran 90 180 Waktu(detik) 16 32

6.5.3 Percobaan 3 : Motor Servo Tabel 6.3 Data percobaan motor Servo No 1. 2. 3. Variasi (us) 500-1500 1000-1000 1500-500 Sudut 0 45 90

6.6 Analisa dan Pembahasan 6.6.1 Percobaan 1 : Motor DC 6.6.1.1 Listing Program Motor DC
#include <mega2560.h>//menambahkan library mega2560 #include <delay.h>//menambahkan library delay #include <stdio.h>// Standard Input/Output functions void main(void)// fungsi utama { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsizeCLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif //........initialisasi MCU // Timer/Counter 4 initialization // Clock source: System Clock // Clock value: 10,748 kHz // Mode: Ph. correct PWM top=0x00FF // OC4A output: Non-Inv. // OC4B output: Non-Inv. // OC4C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer4 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR4A=0xA1; TCCR4B=0x05; TCNT4H=0x00; TCNT4L=0x00; ICR4H=0x00; ICR4L=0x00; OCR4AH=0x00; OCR4AL=0x00;

OCR4BH=0x00; OCR4BL=0x00; OCR4CH=0x00; OCR4CL=0x00; while (1)//infinite loop { // Place your code here OCR4AL=200;//memberikan nilai OCR4AL menjadi 200 delay_ms(5000);//memberi jeda 5 detik OCR4AL=70;//memberikan nilai OCR4AL menjadi 70 delay_ms(5000);//memberi jeda 5 detik OCR4AL=0;//memberikan nilai OCR4AL menjadi 0 delay_ms(5000);//memberi jeda 5 detik };//akhir dari while(1) }//akhir dari void main()

6.6.1.2 Flowchart Percobaan 1


Start

#include <mega2560.h> #include <delay.h> #incluce <stdio.h>

TCCR4A=0xA1; TCCR4B=0x05; TCNT4H=0x00; TCNT4L=0x00; ICR4H=0x00; ICR4L=0x00; OCR4AH=0x00; OCR4AL=0x00; OCR4BH=0x00; OCR4BL=0x00; OCR4CH=0x00;

OCR4A = 200; OCR4CL=0x00; Delay_ms(5000);

OCR4A = 60; Delay_ms(5000);

OCR4A = 0; Delay_ms(5000);

Gambar 6.12 Flowchart Percobaan 1 Motor DC

6.6.1.3 Analisa dan Penjelasan Listing Program Program ini digunakan sebagai kontrol pergerakan motor DC yang dimulai dengan menambahkan beberapa library yang akan digunakan dalam program. Pada program ini di tambahkan 3 library yaitu mega2560.h, karena MCU yang digunakan adalah Atmega2560, stdio.h karena digunakan standart I/O, dan delay.h karena program ini menggunakan waktu jeda. Dapat dilihat pada listing program berikut :

#include <mega2560.h>//menambahkan library mega2560 #include <delay.h>//menambahkan library delay #include <stdio.h>// Standard Input/Output functions

Selanjutnya pada fungsi utama akan muncul listing program seperti dibawah ini :
void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsizeCLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif //........initialisasi MCU // Timer/Counter 4 initialization // Clock source: System Clock // Clock value: 10,748 kHz // Mode: Ph. correct PWM top=0x00FF // OC4A output: Non-Inv. // OC4B output: Non-Inv. // OC4C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer4 Overflow Interrupt: Off // Input Capture Interrupt: Off

// Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR4A=0xA1; TCCR4B=0x05; TCNT4H=0x00; TCNT4L=0x00; ICR4H=0x00; ICR4L=0x00; OCR4AH=0x00; OCR4AL=0x00; OCR4BH=0x00; OCR4BL=0x00; OCR4CH=0x00; OCR4CL=0x00;

Listing diatas adalah hasil dari pengaturan pada CodeWizardAVR bagian Timer4. Dengan mengatur Clock 10,800kHz, Mode Ph correct PWM top=00FFh dan mengganti out A, B serta C menjadi Non-inv dihasilkan listing diatas. Selanjutnya program memasuki program utama seperti dibawah ini :
while (1) { // Place your code here OCR4AL=200; ;//memberikan nilai OCR4AL menjadi 200 delay_ms(5000); );//memberi jeda 5 detik OCR4AL=60; ;//memberikan nilai OCR4AL menjadi 60 delay_ms(5000); //memberi jeda 5 detik OCR4AL=0; ;//memberikan nilai OCR4AL menjadi 0 delay_ms(5000); //memberi jeda 5 detik };//akhir dari while(1) }//akhir dari void main()

Pada listing diatas dapat diketahui nilai OCR4AL=200, kemudian jeda 5 detik, dilanjutkan OCR4AL=60, jeda 5 detik dan terakhir OCR4AL=0 jeda 5 detik, kemudian kembali ke state awal. Berikut ini adalah hasil percobaan dari listing diatas:

Tabel 6.4 Data percobaan motor DC Variasi 1. 2. 3. Kecepatan Cepat Lambat Mati PWM(OCR4AL) 200 60 0

Berdasarkan data diatas, semakin besar nilai OCR4AL yang diberikan, motor akan semakin cepat berputar. Hal ini dikarenakan siklus aktif pada sinyal semakin lebar, sehingga tegangan rata-rata yang dihasilkan lebih besar. Sedangkan jika nilai OCR4AL=0, maka motor akan berhenti berputar karena tidak terdapat pulsa aktif pada sinyal.

6.6.1 Percobaan 2 : Motor Stepper 6.6.1.1 Listing Program Motor Stepper


#include <mega2560.h>//menambahkan library mega2560 #include <delay.h>//menambahkan library delay #define stepper PORTL//PORTL = stepper #define DDR_stepper DDRL//DDRL = DDR_stepper #include <stdio.h>// Standard Input/Output functions // Declare your global variables here unsigned int x; void main(void){//fungsi utama //.........initialisasi MCU DDR_stepper=0xff;//setting DDR_stepper/DDRL sebagai output while (1)//infinite loop {// Place your code here for(x=0;x<50;x++)//fungsi for untuk loop 50 kali stepper=0b00010000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms stepper=0b00100000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms stepper=0b01000000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms stepper=0b10000000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms }; //akhir dari while(1) }//akhir dari void main()

6.6.1.2 Flowchart Percobaan 2

Gambar 6.13 Flowchart Percobaan 2: Motor Stepper

6.6.1.3 Analisa dan Penjelasan Listing Program Program ini digunakan sebagai kontrol pergerakan motor stepper yang dimulai dengan menambahkan beberapa library yang akan digunakan dalam program. Pada program ini di tambahkan 3 library yaitu mega2560.h, karena MCU yang digunakan adalah Atmega2560, stdio.h karena digunakan standart I/O, dan delay.h karena program ini menggunakan waktu jeda.
#include <mega2560.h>//menambahkan library mega2560 #include <delay.h>//menambahkan library delay #define stepper PORTL//PORTL = stepper #define DDR_stepper DDRL//DDRL = DDR_stepper #include <stdio.h>// Standard Input/Output functions unsigned int x;

Selanjutnya, program dilanjutkan dengan deklarasi variabel seperti listing diatas. PORTL dinamakan stepper, dan DDRL dinamakan DDR_stepper. Kemudian program memasuki fungsi utama seperti dibawah ini:
void main(void) { //.........initialisasi MCU DDR_stepper=0xff;//setting DDR_stepper/DDRL sebagai output while (1)//infinite loop {// Place your code here for(x=0;x<50;x++)//fungsi for untuk loop 50 kali stepper=0b00010000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms stepper=0b00100000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms stepper=0b01000000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms stepper=0b10000000;//memberikan logika pada stepper delay_ms(10);//memberikan jeda 10 ms }; //akhir dari while(1) }//akhir dari void main()

Setelah initialisasi MCU, DDR_stepper/DDRL harus difungsikan sebagai output dengan cara memberikan nilai 0xFF. Selanjutnya adalah perintah step-step

yang akan diberikan pada motor. Fungsi for digunakan sebagai perulangan sejumlah nilai x. Sehingga pada program diatas, motor stepper akan berhenti jika sudah menjalankan pernyataan pada fungsi for sebanyak 50 kali.Motor stepper ini digerakan dengan pulsa 1 per 1, terlihat dari listing program diatas. Metode ini disebut dengan Wave Drive.

Gambar 6.14 Input pada metode Wave Drive

Berikut ini adalah data yang diperoleh dari listing program diatas :

Tabel 6.5 Data percobaan motor Stepper Putaran 90 180 Waktu(detik) 16 32

Berdasarkan tabel diatas, dapat dihitung besar sudut tiap 1 detiknya, yaitu 5.625 per detik. Sedangkan pada listing program yang digunakan, sinyal diberikan tiap 10 ms atau 0,01 detik. Sehingga tiap state sinyal pada program hanya memutar motor sejauh 0,05625, dengan demikian dalam 1 siklus fungsi for terdapat 4x0,05625= 0,225 kemudian loop 50 kali menghasilkan

50x0,225=11,25. Pada dasarnya, perintah looping for pada listing diatas tidak memberikan efek pada pengontrolan karena pada akhirnya, akan di loop terus menerus oleh while(1), yang menyebabkan motor berputar lebih dari jangkauan fungsi for.

6.6.1 Percobaan 3 : Motor Servo 6.6.1.1 Listing Program Motor Servo


#include <mega2560.h>//menambahkan library mega2560 #define #define servo_high servo_low PORTH=0b00100000;//deklarasi PORTH=0b00000000;//deklarasi servo_high servo_low adalah PORTH dengan biner 00100000 adalah PORTH dengan biner 00000000 #include <stdio.h>// Standard Input/Output functions #include <delay.h>//menambahkan library delay // Declare your global variables here unsigned int x; void main(void)//fungsi utama { //.........initialisasi MCU PORTH=0x00; //semua logika pada PORTH adalah 0 DDRH=0xFF; //PORTH sebagai output // Declare your local variables here while (1)//infinite loop { // Place your code here for(x=0;x<25;x++){//looping 25 kali servo_high;//memberikan nilai 00100000 pada PORTH delay_us(500);//memberi jeda 0,5ms servo_low;//memberikan nilai 00000000 pada PORTH delay_us(1500);//memberi jeda 1,5ms delay_us(18000); //memberi jeda 18ms }//akhir fungsi for(x=0;x<25;x++) for(x=0;x<25;x++){ servo_high;//memberikan nilai 00100000 pada PORTH delay_us(1000);//memberi jeda 1 ms servo_low;//memberikan nilai 00000000 pada PORTH delay_us(1000);//memberi jeda 1 ms delay_us(18000);//memberi jeda 18 ms }//akhir fungsi for(x=0;x<25;x++) for(x=0;x<25;x++){ servo_high;//memberikan nilai 00100000 pada PORTH delay_us(1500);//memberi jeda 1,5ms servo_low;//memberikan nilai 00000000 pada PORTH

delay_us(500);//memberi jeda 0,5ms delay_us(18000); //memberi jeda 18 ms }//akhir fungsi for(x=0;x<25;x++) };//akhir fungsi while(1) }//akhir fungsi void main()

6.6.1.2 Flowchart Percobaan 3

Gambar 6.15 Flowchart Percobaan 3 Motor Servo

6.6.1.3 Analisa dan Penjelasan Listing Program Program ini digunakan sebagai kontrol pergerakan motor servo yang dimulai dengan menambahkan beberapa library yang akan digunakan dalam program. Pada program ini di tambahkan 3 library yaitu mega2560.h, karena MCU yang digunakan adalah Atmega2560, stdio.h karena digunakan standart I/O, dan delay.h karena program ini menggunakan waktu jeda.
#include <mega2560.h>//menambahkan library mega2560 #define servo_high PORTH = 0b00100000; #define servo_low PORTH = 0b00000000; #include <stdio.h>// Standard Input/Output functions #include <delay.h>//menambahkan library delay // Declare your global variables here unsigned int x;

Selanjutnya, program dilanjutkan dengan deklarasi variabel seperti listing diatas. PORTH=0b00100000 dinamakan servo_high, yang berarti nilai dari servo_high adalah biner 00100000, dan PORTH=0b00000000 dinamakan servo_lowyang berarti nilai dari servo_high adalah biner 00000000. Kemudian program memasuki fungsi utama seperti dibawah ini:
void main(void)//fungsi utama { //.........initialisasi MCU PORTH=0x00; //semua logika pada PORTH adalah 0 DDRH=0xFF; //PORTH sebagai output // Declare your local variables here while (1)//infinite loop { // Place your code here for(x=0;x<25;x++){//looping 25 kali servo_high;//memberikan nilai 00100000 pada PORTH delay_us(500);//memberi jeda 0,5ms servo_low;//memberikan nilai 00000000 pada PORTH delay_us(1500);//memberi jeda 1,5ms delay_us(18000); //memberi jeda 18 ms }//akhir fungsi for(x=0;x<25;x++)

for(x=0;x<25;x++){ servo_high;//memberikan nilai 00100000 pada PORTH delay_us(1000);//memberi jeda 1 ms servo_low;//memberikan nilai 00000000 pada PORTH delay_us(1000);//memberi jeda 1 ms delay_us(18000);//memberi jeda 18 ms }//akhir fungsi for(x=0;x<25;x++) for(x=0;x<25;x++){ servo_high;//memberikan nilai 00100000 pada PORTH delay_us(1500);//memberi jeda 1,5ms servo_low;//memberikan nilai 00000000 pada PORTH delay_us(500);//memberi jeda 0,5ms delay_us(18000); //memberi jeda 18 ms }//akhir fungsi for(x=0;x<25;x++) };//akhir fungsi while(1) }//akhir fungsi void main()

Setelah initialisasi MCU, DDRH harus difungsikan sebagai output dengan cara memberikan nilai 0xFF. Selanjutnya adalah perintah yang akan diberikan pada motor. Fungsi for digunakan sebagai perulangan sejumlah nilai x. Sehingga pada program diatas, motor servo akan bergerak dari kondisi awal selama 0,5ms kemudian sinyal servo_low akan masuk ke servo, sehingga servo kembali ke kondisi awal, jeda 1,5ms. Kemudian delay selama 18ms sebelum memasuki loop for. Jika sudah menjalankan pernyataan pada fungsi for sebanyak 25 kali, servo menuju fungsi for selanjutnya. Hingga diperoleh tabel dibawah ini: Tabel 6.6 Data percobaan motor Servo No Percobaan Variasi (us) 1. 2. 3. 500-1500 1000-1000 1500-500 Sudut 0 45 90

Berdasarkan tabel diatas, dapat disimpulkan bahwa motor servo pada percobaan harus diberikan sinyal selama 0,5 ms untuk kondisi awal (0). Kemudian mencapai 45 dengan 1ms dan 90 dengan 1,5ms.

Tabel 6.7 Data percobaan motor Servo dan datasheet Sumber(V) Jenis sinyal Min Max 5V Med Refresh Lebar sinyal (us) 544 2400 1500 20000 Sudut 0 180 90 Kembali ke 0

6.7 Kesimpulan 1. PWM (Pulse Width Modulation) adalah teknik untuk mengatur duty cycle sinyal. Sehingga PWM dapat memanipulasi besar kecilnya tegangan rata-rata sinyal. 2. Untuk mengaktifkan PWM pada MCU, Timer harus diaktifkan dan disetting terlebih dahulu pada CodeWizardAVR. 3. Terdapat 4 mode timer, yaitu Normal, Fast PWM, CTC dan PWM Phase Correct. 4. Nilai PWM (OCR4AL pada percobaan) berbanding lurus dengan kecepatan motor, semakin besar nilai PWM, semakin cepat putaran motor. 5. Motor Stepper unipolar memiliki 5 terminal, dimana 4 terminal digunakan sebagai input dan 1 terminal sebagai ground. 6. Motor stepper dapat dikendalikan dengan Wave Drive,

denganmemberikan sinyal high salah satunya secara berurutan untuk ke 4 terminal. 7. Motor Servo dikendalikan dengan lamanya siklus aktif pada pulsa. Sehingga memungkinkan pengendalian dengan delay dan PWM. 8. Motor Servo memerlukan Refresh Interval kurang lebih 20 ms agar horn kembali pada posisi awal.

You might also like