- Apa itu Motor Servo?
- Menghubungkan Motor Servo dengan Mikrokontroler:
- Pemrograman Motor Servo dengan Mikrokontroler PICF877A PIC:
- Diagram Sirkuit:
- Simulasi dan Pengaturan Perangkat Keras:
Ini adalah tutorial ke-11 kami tentang Mempelajari mikrokontroler PIC menggunakan MPLAB dan XC8. Dalam tutorial ini kita akan mempelajari Cara Mengontrol Motor Servo dengan Mikrokontroler PIC. Jika Anda telah bekerja dengan motor Servo, Anda dapat melewati paruh pertama tutorial ini tetapi jika Anda baru mengenal motor servo itu sendiri, lanjutkan membaca.
Sampai sekarang, kami telah membahas banyak tutorial dasar seperti LED berkedip dengan PIC, Timer di PIC, antarmuka LCD, antarmuka 7-segmen, ADC menggunakan PIC dll. Jika Anda seorang pemula absolut, silakan kunjungi daftar lengkap tutorial PIC di sini dan mulai belajar.
Pada tutorial sebelumnya kita telah mempelajari cara membangkitkan sinyal PWM menggunakan Mikrokontroler PIC, sinyal tersebut dihasilkan berdasarkan nilai yang dibaca dari potensiometer. Jika Anda telah memahami semua program maka, Selamat Anda telah membuat kode untuk motor Servo juga. YA, Motor servo merespons sinyal PWM (yang kami buat menggunakan pengatur waktu di sini), kami akan mempelajari mengapa dan caranya dalam tutorial ini. Kami akan mensimulasikan dan membangun pengaturan perangkat keras untuk proyek ini dan Anda dapat menemukan Video terperinci di akhir Tutorial ini.
Apa itu Motor Servo?
Motor Servo adalah jenis aktuator (kebanyakan melingkar) yang memungkinkan kontrol sudut. Ada banyak jenis motor servo yang tersedia tetapi dalam tutorial ini mari kita berkonsentrasi pada hobi motor servo yang ditunjukkan di bawah ini.
Hobi servos sangat populer karena merupakan metode kontrol gerak yang murah. Mereka memberikan solusi off-the-shelf untuk sebagian besar R / C dan kebutuhan penghobi robotik. Mereka juga menghilangkan kebutuhan untuk merancang sistem kontrol khusus untuk setiap aplikasi.
Sebagian besar motor servo hobi memiliki sudut rotasi 0-180 ° tetapi Anda juga bisa mendapatkan motor servo 360 ° jika Anda tertarik. Tutorial ini menggunakan motor servo 0-180 °. Ada dua jenis motor Servo berdasarkan roda gigi, yang satu adalah Motor Servo Roda Gigi Plastik dan yang lainnya adalah Motor Servo Roda Gigi Logam. Roda gigi logam digunakan di tempat-tempat di mana motor mengalami lebih banyak keausan, tetapi harganya hanya mahal.
Motor servo dinilai dalam kg / cm (kilogram per sentimeter) kebanyakan motor servo hobi dinilai pada 3kg / cm atau 6kg / cm atau 12kg / cm. Kg / cm ini memberi tahu Anda berapa berat motor servo Anda dapat mengangkat pada jarak tertentu. Contoh: Sebuah motor servo 6kg / cm harus mampu mengangkat beban 6kg jika beban digantung sejauh 1cm dari poros motor, semakin besar jarak maka semakin kecil daya dukungnya. Pelajari di sini Dasar-dasar motor Servo.
Menghubungkan Motor Servo dengan Mikrokontroler:
Hobi menghubungkan motor Servo dengan MCU sangat mudah. Servos memiliki tiga kabel yang keluar darinya. Dua darinya akan digunakan untuk Pasokan (positif dan negatif) dan satu lagi akan digunakan untuk sinyal yang akan dikirim dari MCU. Dalam tutorial ini kita akan menggunakan MG995 Metal Gear Servo Motor yang paling umum digunakan untuk RC mobil humanoid bot dll. Gambar MG995 ditunjukkan di bawah ini:
Kode warna motor servo Anda mungkin berbeda, maka periksa lembar data Anda masing-masing.
Semua motor servo bekerja langsung dengan rel suplai + 5V Anda tetapi kita harus berhati-hati dengan jumlah arus yang akan dikonsumsi motor, jika Anda berencana untuk menggunakan lebih dari dua motor servo, pelindung servo yang tepat harus dirancang. Dalam tutorial ini kita hanya akan menggunakan satu motor servo untuk menunjukkan bagaimana memprogram PIC MCU kita untuk mengontrol motor. Periksa tautan di bawah ini untuk menghubungkan Servo Motor dengan Mikrokontroler lain:
- Motor servo berinteraksi dengan mikrokontroler 8.051
- Pengendalian motor servo menggunakan Arduino
- Tutorial Motor Raspberry Pi Servo
- Motor Servo dengan Mikrokontroler AVR
Pemrograman Motor Servo dengan Mikrokontroler PICF877A PIC:
Sebelum kita dapat memulai pemrograman untuk motor Servo, kita harus mengetahui jenis sinyal yang akan dikirim untuk mengendalikan motor Servo. Kita harus memprogram MCU untuk mengirim sinyal PWM ke kabel sinyal motor Servo. Terdapat rangkaian kontrol di dalam motor servo yang membaca duty cycle dari sinyal PWM dan memposisikan poros motor servo di tempatnya masing-masing seperti yang ditunjukkan pada gambar di bawah ini.
Setiap motor servo beroperasi pada frekuensi PWM yang berbeda (frekuensi paling umum adalah 50HZ yang digunakan dalam tutorial ini) jadi dapatkan lembar data motor Anda untuk memeriksa periode PWM mana motor Servo Anda bekerja.
Detail tentang sinyal PWM untuk Tower pro MG995 kami ditunjukkan di bawah ini.
Dari sini kita dapat menyimpulkan bahwa motor kita bekerja dengan PWM Periode 20ms (50Hz). Jadi frekuensi sinyal PWM kita harus diatur ke 50Hz. Frekuensi PWM yang telah kami atur di tutorial sebelumnya adalah 5 KHz, menggunakan yang sama tidak akan membantu kami di sini.
Tapi, kami punya masalah di sini. The PIC16F877A tidak dapat menghasilkan sinyal frekuensi PWM rendah menggunakan modul PKC. Menurut lembar data nilai serendah mungkin yang dapat diatur untuk frekuensi PWM adalah 1,2 KHz. Jadi kita harus membuang ide menggunakan modul CCP dan mencari cara untuk membuat sinyal PWM kita sendiri.
Karenanya, dalam tutorial ini kita akan menggunakan modul timer untuk menghasilkan sinyal PWM dengan frekuensi 50Hz dan memvariasikan siklus tugasnya untuk mengontrol malaikat motor servo. Jika Anda baru mengenal pengatur waktu atau ADC dengan PIC, silakan kembali ke tutorial ini, karena saya akan melewatkan sebagian besar hal karena kita telah membahasnya di sana.
Kami menginisialisasi modul Timer kami dengan prescaler 32 dan membuatnya meluap untuk setiap 1us. Menurut lembar data kami, PWM harus memiliki jangka waktu hanya 20ms. Jadi waktu on time dan off kita bersama harus sama persis dengan 20ms.
OPTION_REG = 0b00000100; // Timer0 dengan freq eksternal dan 32 sebagai prescaler TMR0 = 251; // Muat nilai waktu untuk 1us delayValue bisa antara 0-256 saja TMR0IE = 1; // Aktifkan bit interupsi pengatur waktu dalam register PIE1 GIE = 1; // Aktifkan Global Interrupt PEIE = 1; // Aktifkan Peripheral Interrupt
Jadi di dalam fungsi rutin interupsi kami, kami mengaktifkan pin RB0 untuk waktu yang ditentukan dan mematikannya untuk waktu reaming (20ms - on_time). Nilai on time dapat ditentukan dengan menggunakan modul Potentiometer dan ADC. Interupsi ditampilkan di bawah ini.
oid interrupt timer_isr () {if (TMR0IF == 1) // Timer telah meluap {TMR0 = 252; / * Muat Nilai pengatur waktu, (Catatan: Nilai waktu 101 dibuat dari 100 karena TImer0 memerlukan dua siklus instruksi untuk mulai menambahkan TMR0 * / TMR0IF = 0; // Hapus penghitungan bendera interupsi pengatur waktu ++;} if (count> = on_time) { RB0 = 1; // melengkapi nilai untuk mengedipkan LED} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Di dalam loop sementara kita baru saja membaca nilai potensiometer dengan menggunakan modul ADC dan memperbarui waktu PWM menggunakan nilai baca.
sementara (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Dengan cara ini kami telah membuat sinyal PWM yang Periode 20ms dan memiliki siklus tugas variabel yang dapat diatur menggunakan Potensiometer. Kode Lengkap telah diberikan di bawah ini di bagian kode.
Sekarang, mari verifikasi output menggunakan simulasi proteus dan lanjutkan ke perangkat keras kita.
Diagram Sirkuit:
Jika Anda sudah menemukan tutorial PWM maka skema dari tutorial ini akan sama kecuali kita akan menambahkan motor servo sebagai pengganti lampu LED.
Simulasi dan Pengaturan Perangkat Keras:
Dengan bantuan simulasi Proteus kita dapat memverifikasi sinyal PWM menggunakan osiloskop dan juga memeriksa malaikat berputar dari motor Servo. Beberapa snapshot dari simulasi ditunjukkan di bawah ini, di mana sudut putar motor servo dan duty cycle PWM dapat diperhatikan untuk diubah berdasarkan potensiometer. Selanjutnya periksa Video Penuh, rotasi pada PWM yang berbeda, di bagian akhir.
Seperti yang bisa kita lihat, malaikat rotasi servo berubah berdasarkan nilai potensiometer. Sekarang mari kita lanjutkan ke pengaturan perangkat keras kita.
Dalam pengaturan perangkat keras kami baru saja melepas papan LED dan menambahkan motor Servo seperti yang ditunjukkan pada skema di atas.
Perangkat keras ditunjukkan pada gambar di bawah ini:
The video di bawah ini menunjukkan bagaimana motor servo bereaksi terhadap berbagai posisi potensiometer.
Hanya itu saja!! Kami telah menghubungkan motor servo dengan Mikrokontroler PIC, sekarang Anda dapat menggunakan kreativitas Anda sendiri dan mencari tahu aplikasi untuk ini. Ada banyak proyek di luar sana yang menggunakan motor servo.