- Komponen Diperlukan
- Pin Deskripsi Servo Motor
- Diagram Sirkuit
- Mengontrol Motor Servo dengan AVR ATmega16
- Pemrograman Atmega16 Menggunakan USBasp
Motor Servo banyak digunakan di mana diperlukan kontrol yang tepat seperti robot, Mesin Otomatis, lengan robotik dll. Namun, ruang lingkup motor servo tidak terbatas sebanyak ini dan dapat digunakan dalam banyak aplikasi. Untuk mengetahui lebih lanjut tentang dasar-dasar, teori dan prinsip kerja motor servo ikuti tautannya.
Kami sebelumnya menghubungkan Servo Motor dengan banyak Mikrokontroler:
- Interfacing Servo Motor dengan ARM7-LPC2148
- Interfacing Servo Motor dengan MSP430G2
- Interfacing Servo Motor dengan STM32F103C8
- Interfacing Servo Motor dengan Mikrokontroler PIC menggunakan MPLAB dan XC8
- Menghadapi Servo Motor dengan Arduino Uno
- Antarmuka Motor Servo dengan Mikrokontroler 8051
Dalam tutorial ini, kita akan menghubungkan Micro Servo Motor dengan Mikrokontroler AVR Atmega16 menggunakan Atmel Studio 7.0. Motor servo dinilai bekerja di 4.8-6V. Kita dapat mengontrol sudut rotasi dan arahnya dengan menerapkan rangkaian pulsa atau sinyal PWM. Perhatikan bahwa motor servo tidak dapat bergerak untuk putaran 360 derajat penuh, jadi mereka digunakan di mana putaran kontinu tidak diperlukan. Sudut rotasi adalah 0 -180 derajat atau (-90) - (+90) derajat.
Komponen Diperlukan
- SG90 Tower Pro Micro Servo Motor
- IC Mikrokontroler Atmega16
- Osilator Kristal 16Mhz
- Dua Kapasitor 100nF
- Dua Kapasitor 22pF
- Tekan tombol
- Kabel Jumper
- Papan tempat memotong roti
- USBASP v2.0
- Led (Warna Apa Pun)
Pin Deskripsi Servo Motor
- Merah = Catu Daya Positif (4,8V hingga 6V)
- Brown = Tanah
- Oranye = Sinyal Kontrol (Pin PWM)
Diagram Sirkuit
Hubungkan semua komponen seperti yang ditunjukkan pada diagram di bawah ini untuk memutar motor Servo menggunakan Mikrokontroler AVR. Ada empat Pin PWM, kita dapat menggunakan pin PWM apa pun dari Atmega16. Dalam tutorial ini kami menggunakan Pin PD5 (OC1A) untuk menghasilkan PWM. PD5 terhubung langsung ke kabel oranye dari motor servo yang merupakan pin sinyal input. Hubungkan semua warna led untuk indikator daya. Juga, sambungkan satu tombol tekan di pin Reset untuk mengatur ulang Atmega16 kapan pun diperlukan. Hubungkan Atmega16 dengan rangkaian osilator kristal yang tepat. Semua sistem akan didukung oleh pasokan 5V.
Setup lengkap akan terlihat seperti di bawah ini:
Mengontrol Motor Servo dengan AVR ATmega16
Seperti Stepper Motor, motor Servo tidak membutuhkan driver eksternal seperti driver motor ULN2003 atau L293D. PWM saja sudah cukup untuk menggerakkan motor servo dan sangat mudah untuk menghasilkan PWM dari mikrokontroler. Torsi dari motor servo ini adalah 2.5kg / cm, jadi jika anda membutuhkan torsi yang lebih besar maka servo ini tidak cocok.
Seperti yang kita ketahui bahwa motor servo mencari pulsa setiap 20ms dan panjang pulsa positif akan menentukan sudut putar dari motor servo.
Frekuensi yang dibutuhkan untuk mendapatkan pulsa 20ms adalah 50Hz (f = 1 / T). Jadi untuk motor servo ini, spesifikasinya mengatakan bahwa untuk 0 derajat kita membutuhkan 0.388ms, untuk 90 derajat kita membutuhkan 1.264ms dan untuk 180 derajat kita membutuhkan pulsa 2.14ms.
Untuk menghasilkan pulsa tertentu kita akan menggunakan Timer1 dari Atmega16. Frekuensi CPU adalah 16Mz tetapi kami hanya akan menggunakan 1Mhz karena kami tidak memiliki banyak periferal yang terhubung ke mikrokontroler dan tidak banyak beban pada mikrokontroler, jadi 1Mhz akan melakukan pekerjaan itu. Prescaler diatur ke 1. Jadi jam dibagi sebagai 1Mhz / 1 = 1Mhz (1uS) yang bagus. Timer1 akan digunakan sebagai Mode PWM Cepat yaitu Mode 14. Anda dapat menggunakan berbagai mode timer untuk menghasilkan rangkaian pulsa yang diinginkan. Referensi diberikan di bawah ini dan Anda dapat menemukan deskripsi lebih lanjut di Lembar Data Resmi Atmega16.
Untuk menggunakan Timer1 sebagai mode PWM cepat kita akan membutuhkan nilai TOP dari ICR1 (Input Capture Register1). Untuk menemukan nilai TOP gunakan rumus yang diberikan di bawah ini:
f pwm = f cpu / nx (1 + ATAS)
Ini dapat disederhanakan menjadi, ATAS = ( f cpu / ( f pwm xn)) - 1
Dimana, N = Nilai set Prescaler
f cpu = Frekuensi CPU
f pwm = Lebar pulsa motor servo yaitu 50Hz
Sekarang hitung nilai ICR1 karena kita memiliki semua nilai yang dibutuhkan, N = 1, f cpu = 1MHz, f pwm = 50Hz
Masukkan saja nilai-nilai dalam rumus di atas dan kita akan mendapatkan
ICR1 = 1999
Artinya untuk mencapai derajat maksimal yaitu 180 0 ICR1 harus 1999.
Untuk kristal 16MHz dan Prescaler diatur ke 16, kami akan memilikinya
ICR1 = 4999
Sekarang mari kita lanjutkan untuk membahas sketsa.
Pemrograman Atmega16 Menggunakan USBasp
Kode AVR lengkap untuk mengendalikan Servo Motor diberikan di bawah ini. Kode itu sederhana dan dapat dipahami dengan mudah.
Di sini kami telah mengkodekan Atmega16 untuk memutar motor servo dari 0 0 ke 180 0 dan kembali lagi dari 180 0 ke 0 0. Transisi ini akan selesai dalam 9 langkah yaitu 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Untuk penundaan, kami akan menggunakan perpustakaan internal Atmel Studio yaitu
Hubungkan USBASP v2.0 Anda dan ikuti petunjuk di tautan ini untuk memprogram Mikrokontroler AVR Atmega16 menggunakan USBASP dan Atmel Studio 7.0. Cukup buat sketsa dan unggah menggunakan toolchain eksternal.
Kode lengkap dengan Video Demonstrasi diberikan di bawah ini. Pelajari juga lebih lanjut tentang motor servo dengan mengetahui kepentingannya dalam Robotika.