Motor servo sangat berguna dalam elektronik dan sistem tertanam. Anda dapat menemukan penggunaan motor Servo dimana-mana di sekitar Anda, digunakan pada mainan, robot, CD tray komputer, mobil, pesawat terbang dll. Alasan dari cakupan yang luas ini adalah, motor servo sangat handal dan presisi. Kita bisa memutarnya ke sudut tertentu. Mereka tersedia dalam berbagai macam, dari motor torsi tinggi hingga motor torsi rendah. Dalam tutorial ini kita akan menghubungkan motor servo ke mikrokontroler 8051 (AT89S52).
Pertama kita perlu memahami prinsip kerja motor servo. Motor servo bekerja pada prinsip PWM (Pulse width modulation), artinya sudut putarnya dikontrol oleh durasi pulsa yang diberikan ke Control PIN-nya. Pada dasarnya motor servo terdiri dari motor DC yang dikendalikan oleh resistor variabel (potensiometer) dan beberapa roda gigi. Gaya kecepatan tinggi motor DC diubah menjadi torsi oleh Gears. Kita tahu bahwa BEKERJA = GAYA X JARAK, pada motor DC Gaya kurang dan jarak (kecepatan) tinggi dan di Servo gaya Tinggi dan jarak kurang. Potensiometer dihubungkan ke poros keluaran Servo, untuk menghitung sudut dan menghentikan motor DC pada sudut yang diperlukan.
Motor servo bisa diputar dari 0 sampai 180 derajat, tapi bisa naik sampai 210 derajat, tergantung pabrikannya. Derajat rotasi ini dapat dikontrol dengan menerapkan pulsa LOGIC level 1 untuk durasi antara 1ms hingga 2ms. Sebuah 1 ms dapat memutar servo hingga 0 derajat, 1.5ms dapat memutar hingga 90 derajat dan pulsa 2 ms dapat memutarnya hingga 180 derajat. Durasi antara 1 hingga 2 ms dapat memutar motor Servo ke sudut mana pun antara 0 hingga 180 derajat.
Diagram Sirkuit dan Penjelasan Kerja
Motor servo memiliki tiga kabel Merah untuk Vcc (catu daya), Coklat untuk Ground, dan Orange untuk kabel kontrol. Kabel kontrol dapat dihubungkan ke 8051, kita telah menghubungkannya ke Pin 2.1 dari 8051. Sekarang kita harus menyimpan pin ini ke Logic 1 selama 1ms untuk memutarnya 0 derajat, 1,5ms untuk 90 derajat, 2 ms untuk 180 derajat. Kami telah menggunakan Timer chip 8051 untuk membuat penundaan. Kami telah membuat penundaan 50us melalui fungsi "servo_delay", dan menggunakan loop "untuk" untuk membuat penundaan di kelipatan 50us.
Kami menggunakan Timer 0 dan Mode 1, jadi kami telah menempatkan 01H di register TMOD. Mode 1 adalah mode timer 16 bit dan TH0 berisi byte Tinggi dan TL0 berisi byte rendah timer 16 bit. Kami telah menempatkan FFD2 di register timer 16 bit, FF di TH0 dan D2 di TL0. Menempatkan FFD2 akan membuat penundaan sekitar. 50 us dengan kristal 11,0592MHz. TR0 dan TF0 adalah bit register TCON, pin TR digunakan untuk memulai timer saat disetel dan berhenti saat reset (0). TF adalah flag overflow, diatur oleh hardware saat overflow dan perlu diatur ulang oleh software. Pada dasarnya TF memberitahu penyelesaian Timer, dan diatur oleh hardware ketika 16 timer transit dari FFFFH ke 0000H. Anda dapat membaca tentang "8051 Timer" untuk memahami kalkulasi nilai dalam register timer, untuk membuat penundaan 50 us.
Sekarang jika diukur dari CRO, 13 loop dari fungsi servo_delay akan memberikan penundaan 1ms, jadi kita mulai dari 1ms (13 loop) dan pergi ke 2 ms (26 loop) untuk memutar servo dari 0 hingga 180 derajat. Tapi kami perlahan meningkatkan penundaan dari 1ms, kami telah membagi jendela 1ms menjadi 2 ms menjadi 7 bagian seperti 1.14ms, 1.28 ms, 1.42ms dan seterusnya, sehingga servo akan berputar dalam kelipatan kira-kira. 26 derajat (180/7). Setelah 180 derajat akan otomatis kembali ke 0 derajat.