- Komponen Diperlukan
- Huraian Pin Motor Servo
- Rajah Litar
- Mengendalikan Motor Servo dengan AVR ATmega16
- Pengaturcaraan Atmega16 Menggunakan USBasp
Servo Motor digunakan secara meluas di mana kawalan tepat diperlukan seperti robot, Mesin Automatik, lengan robot dan lain-lain. Walau bagaimanapun, ruang lingkup motor servo tidak terhad kepada jumlah ini dan dapat digunakan dalam banyak aplikasi. Untuk mengetahui lebih lanjut mengenai asas, teori dan prinsip kerja motor servo ikuti pautan.
Kami sebelum ini menghubungkan Servo Motor dengan banyak Pengawal Mikro:
- Interfacing Servo Motor dengan ARM7-LPC2148
- Interfacing Servo Motor dengan MSP430G2
- Interfacing Servo Motor dengan STM32F103C8
- Interfacing Servo Motor dengan PIC Microcontroller menggunakan MPLAB dan XC8
- Memadankan Motor Servo dengan Arduino Uno
- Servo Motor Interfacing dengan Mikrokontroler 8051
Dalam tutorial ini, kita akan menghubungkan Mikro Servo Motor dengan Atmega16 AVR Microcontroller menggunakan Atmel Studio 7.0. Motor servo dinilai berfungsi dalam 4.8-6V. Kita dapat mengawal sudut putaran dan arahnya dengan menggunakan isyarat nadi atau isyarat PWM. Perhatikan bahawa motor servo tidak dapat bergerak untuk putaran 360 darjah penuh, jadi mereka digunakan di mana putaran berterusan tidak diperlukan. Sudut putaran ialah 0 -180 darjah atau (-90) - (+90) darjah.
Komponen Diperlukan
- Motor Servo Mikro SG90 Tower Pro
- IC Mikrokontroler Atmega16
- Pengayun Kristal 16Mhz
- Dua Kapasitor 100nF
- Dua Kapasitor 22pF
- Tekan butang
- Wayar Pelompat
- Papan roti
- USBASP v2.0
- Led (Sebarang Warna)
Huraian Pin Motor Servo
- Merah = Bekalan Kuasa Positif (4.8V hingga 6V)
- Coklat = Tanah
- Jingga = Isyarat Kawalan (Pin PWM)
Rajah Litar
Sambungkan semua komponen seperti yang ditunjukkan dalam rajah di bawah untuk memutar motor Servo menggunakan AVR Microcontroller. Terdapat empat PWM Pin, kita boleh menggunakan pin PWM Atmega16. Dalam tutorial ini kita menggunakan Pin PD5 (OC1A) untuk menghasilkan PWM. PD5 dihubungkan terus ke wayar oren servo motor yang merupakan pin isyarat input. Sambungkan sebarang warna yang dipimpin untuk penunjuk kuasa. Juga, sambungkan satu butang tekan di Reset pin untuk menetapkan semula Atmega16 bila diperlukan. Sambungkan Atmega16 dengan litar pengayun kristal yang betul. Semua sistem akan dikuasakan oleh bekalan 5V.
Persiapan yang lengkap akan kelihatan seperti di bawah:
Mengendalikan Motor Servo dengan AVR ATmega16
Seperti Motor Stepper, motor Servo tidak memerlukan pemandu luaran seperti pemandu motor ULN2003 atau L293D. Cukup PWM yang cukup untuk menggerakkan motor servo dan sangat mudah untuk menghasilkan PWM dari mikrokontroler. Tork motor servo ini ialah 2.5kg / cm, jadi jika anda memerlukan tork yang lebih besar maka servo ini tidak sesuai.
Seperti yang kita ketahui bahawa motor servo mencari nadi setiap 20ms dan panjang nadi positif akan menentukan sudut putaran motor servo.
Frekuensi yang diperlukan untuk mendapatkan nadi 20ms ialah 50Hz (f = 1 / T). Jadi untuk motor servo ini, spesifikasi mengatakan bahawa untuk 0 darjah kita memerlukan 0.388ms, untuk 90 darjah kita memerlukan 1.264ms dan untuk 180 darjah kita memerlukan nadi 2.14ms.
Untuk menghasilkan denyutan yang ditentukan, kita akan menggunakan Timer1 of Atmega16. Frekuensi CPU adalah 16Mz tetapi kita hanya akan menggunakan 1Mhz kerana kita tidak mempunyai banyak periferal yang disambungkan ke mikrokontroler dan tidak ada banyak beban pada mikrokontroler, jadi 1Mhz akan melakukan pekerjaan itu. Prescaler ditetapkan ke 1. Oleh itu jam dibahagikan kepada 1Mhz / 1 = 1Mhz (1uS) yang hebat. Timer1 akan digunakan sebagai Mode PWM Cepat iaitu Mode 14. Anda boleh menggunakan mod pemasa yang berbeza untuk menghasilkan pulse train yang diinginkan. Rujukan diberikan di bawah dan anda boleh mendapatkan lebih banyak keterangan dalam Lembar Data Rasmi Atmega16
Untuk menggunakan Timer1 sebagai mod PWM yang cepat, kita memerlukan nilai TOP ICR1 (Input Capture Register1). Untuk mencari formula penggunaan nilai TOP yang diberikan di bawah:
f pwm = f cpu / nx (1 + TOP)
Ini dapat dipermudahkan untuk, TOP = ( f cpu / ( f pwm xn)) - 1
Di mana, N = Nilai set Prescaler
f cpu = Kekerapan CPU
f pwm = Lebar nadi motor servo iaitu 50Hz
Sekarang hitung nilai ICR1 kerana kita mempunyai semua nilai yang diperlukan, N = 1, f cpu = 1MHz, f pwm = 50Hz
Masukkan nilai dalam formula di atas dan kita akan dapat
ICR1 = 1999
Ini bermaksud untuk mencapai tahap maksimum iaitu 180 0 ICR1 seharusnya 1999.
Untuk kristal 16MHz dan Prescaler ditetapkan ke 16, kita akan mempunyai
ICR1 = 4999
Sekarang mari kita teruskan untuk membincangkan lakaran tersebut.
Pengaturcaraan Atmega16 Menggunakan USBasp
Kod AVR lengkap untuk mengawal Motor Servo diberikan di bawah. Kodnya ringkas dan dapat difahami dengan mudah.
Di sini kita telah mengkod Atmega16 untuk memutar motor servo dari 0 0 hingga 180 0 dan kembali lagi dari 180 0 hingga 0 0. Peralihan ini akan selesai Dalam 9 langkah iaitu 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Untuk kelewatan, kami akan menggunakan perpustakaan dalaman Atmel Studio iaitu
Sambungkan USBASP v2.0 anda dan ikuti petunjuk dalam pautan ini untuk memprogram Atmega16 AVR Microcontroller menggunakan USBASP dan Atmel Studio 7.0. Cukup buat lakaran dan muat naik menggunakan rantai alat luaran.
Kod lengkap dengan Video Demonstrasi diberikan di bawah. Ketahui lebih lanjut mengenai motor servo dengan mengetahui kepentingannya dalam Robotik.