KENDALI LENGAN ROBOT MENGGUNAKAN MIKROKONTROLLER AT89S51 Eko Patra Teguh Wibowo Departemen Elektronika, Akademi Angkatan Udara Jalan Laksda Adi Sutjipto Yogyakarta
[email protected]
ABSTRACT A robot arm can be consists of several joints. A motor is needed for each joint as actuator. One kind of familiar actuator is servo motor, since can rotates the arm and lock on a position according to the given Pulse Width Modulation (PWM) signal. In this paper, a 6-servo motor robot arm controlling method by using an AT89S51 microcontroller is proposed. The mechanism that is used in this method is by controlling the time frame of PWM signals serially. Total input of AT89S51 is 12-bit signal since 2-bit signal for every servo motor. The AT89S51 produces 6 different PWM signals for 6 motor servo. By using this method, robot arm controlling become simple since need only 1 microcontroller. Key words : Microcontroller, PWM, Servo Motor. INTISARI Sebuah lengan robot dapat terdiri atas beberapa sambungan (joint). Untuk setiap sambungan diperlukan sebuah motor sebagai penggeraknya. Salah satu motor penggerak yang sering digunakan pada lengan robot adalah motor servo yang mampu menggerakkan lengan dan terkunci pada posisi tertentu sesuai dengan sinyal Pulse Width Modulation (PWM) yang diberikan. Pada paper ini diajukan sebuah metode untuk mengendalikan lengan robot yang terdiri atas 6 motor servo, menggunakan sebuah mikrokontroller AT89S51. Metode yang digunakan adalah dengan mengatur time frame sinyal PWM untuk tiap-tiap motor servo secara serial. Input yang diberikan kepada mikrokontroller AT89S51 adalah sinyal 2 bit untuk tiap motor servo, sehingga input seluruhnya adalah 12 bit. Output yang dihasilkan oleh mikrokontroller AT89S51 berupa sinyal PWM untuk tiap motor servo, sehingga output seluruhnya adalah 6 sinyal PWM yang berbeda untuk 6 motor servo. Dengan menggunakan metoda ini, pengendalian lengan robot menjadi sangat sederhana karena hanya menggunakan sebuah mikrokontroller. Kata kunci : Mikrokontroller, Motor Servo, PWM. PENDAHULUAN Pengontrolan lengan robot pada dasarnya adalah sama dengan pengontrolan motor servo sebagai penggeraknya. Untuk sebuah motor servo membutuhkan sebuah sinyal kontrol berupa sinyal PWM. Apabila pada lengan robot terdapat 6 motor servo, maka dibutuhkan 6 sinyal kontrol dan berarti juga dibutuhkan 6 sistem pengontrol. Hal ini menjadi semakin rumit dan tidak efisien apabila motor servo yang digunakan semakin banyak. Dengan menggunakan mikrokontroller AT89S51, pengontrolan 6 motor servo dapat dilakukan hanya dengan menggunakan sebuah mikrokontroller sehingga menjadi sederhana dan compact. AT89S51 adalah mikrokontroller 8 bit dengan Flash Programmable and Erasable Read Only Memory (PEROM) 4KByte. Divais ini diproduksi oleh Atmel dan compatible dengan set instruksi standar MCS-51. AT89S51 memiliki spesifikasi standar sebagai berikut : • RAM 128 byte • Port Input / Output 32 port • 16 bit counter / timer 2 buah • Serial port 1 port (full duplex) Berdasarkan blok diagram pada gambar 2, AT89S51 memiliki beberapa bagian penting dengan masing-masing fungsi sebagai berikut : • ACC (Akumulator) ACC atau akumulator yang menempati lokasi memori E0h digunakan sebagai register untuk penyimpanan data sementara. Dalam program, instruksi mengacunya sebagai register A. • Register B Register B (lokasi F0h) digunakan selama operasi perkalian dan pembagian.
391
•
Port 0 Port 0 adalah port input / output 8 bit open drain. Jika digunakan sebagai output maka harus ditambahkan eksternal pull up. Port 0 menempati lokasi memori 80h.
Gambar 1. Konfigurasi pin pada AT89S51 •
• •
Port 1 Port 1 adalah port input / output 8 bit dengan internal pull up. Port 1 menempati lokasi 90h.
Gambar 2. Blok diagram mikrokontroller AT89S51 Port 2 Port 2 adalah port input / output 8 bit dengan internal pull up. Port 2 menempati lokasi A0h. Port 3 Port 3 adalah port input / output 8 bit dengan internal pull up. Port 3 menempati lokasi B0h. Port 3 juga dapat difungsikan sebagai beberapa fungsi khusus di bawah ini :
392
Tabel 1. Fungsi khusus port 3
• •
Timer Register Pasangan register (TH0, TL0) di lokasi 8Ch dan 8Ah, (TH1, TL1) di lokasi 8Dh dan 8Bh merupakan register-register pencacah 16 bit untuk masing-masing Timer 0 dan Timer 1. Control Register Register-register IP, IE, TMOD, TCON, SCON dan PCON berisi bit-bit kontrol dan status untuk sistem interupsi, pencacah/timer dan port serial.
Mikrokontroller AT89S51 memiliki oscillator on-chip yang dapat digunakan sebagai clock ke CPU. Untuk menggunakannya perlu ditambahkan sebuah resonator kristal di antara kaki-kaki XTAL1 dan XTAL2. Selain itu juga bisa menggunakan oscillator eksternal yang langsung dihubungkan ke kaki XTAL1. (Putra, 2004)
Gambar 3. Hubungan ke kristal
Gambar 4. Pemberian Clock Eksternal
Salah satu cara yang paling mudah untuk membangkitkan sebuah tegangan analog dari sebuah nilai digital adalah dengan menggunakan pulse-width modulation (PWM). Untuk contoh, sebuah port bit secara kontinyu melakukan kegiatan saklar on dan off pada frekuensi yang relatif tinggi. Selanjutnya, bila sinyal diumpankan pada LPF low pass filter, tegangan pada output filter akan sama dengan Root Mean Squere ( RMS ) dari sinyal gelombang kotak. Selanjutnya tegangan RMS dapat divariasi dengan mengubah duty cycle dari sinyal.
393
Gambar 5. Sinyal PWM Dari gambar 5 terlihat bahwa sinyal PWM adalah sinyal digital yang amplitudonya tetap, namun lebar pulsa yang aktif (duty cycle) per periodenya dapat diubah-ubah. Periode adalah waktu pulsa high (1) atau Ton ditambah waktu pulsa low (0) atau Toff. (1) Duty cycle menyatakan fraksi waktu sinyal pada keadaan logika high dalam satu siklus. Satu siklus diawali oleh transisi low to high dari sinyal dan berakhir pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high sama dengan low maka dikatakan sinyal mempunyai duty cycle 50 %. Duty cycle 20 % menyatakan sinyal berada pada logika 1 selama 1/5 dari waktu total 1 periode. Persamaan untuk duty cycle dapat ditulis sebagai
(2) Pada grafik PWM (gambar 6) paling atas terlihat bahwa sinyal high per periodanya sangat kecil yaitu hanya 10%. Pada grafik PWM tengah terlihat sinyal high hampir sama dengan sinyal low (50%). Sedangkan pada gambar grafik PWM paling bawah terlihat bahwa sinyal high lebih besar dari sinyal low (90%).
Gambar 6. Grafik sinyal PWM untuk duty cycle 10%, 50% dan 90%. Motor servo merupakan sebuah motor dc kecil yang diberi sistim gear dan potensio meter sehingga dapat menempatkan “horn” servo pada posisi yang dikehendaki. Motor servo ini menggunakan sistim close loop sehingga posisi “horn” yang dikehendaki bisa dipertahanakan. Secara umum terdapat 2 jenis motor servo, yaitu motor servo standard dan motor servo continous. Motor servo standard sering dipakai pada sistim robotika misalnya untuk membuat “Robot Arm” (Lengan Robot) sedangkan motor servo continous sering dipakai untuk “Mobile Robot”. Pada badan servo
394
tertulis tipe servo yang bersangkutan. “horn” pada servo ada dua jenis, yaitu horn “ X” ( seperti pada gambar dibawah ) dan horn berbentuk bulat.
Gambar 7. Bentuk motor servo Penggunaan motor servo untuk bidang robotika didasarkan pada beberapa alasan. Pertama adalah motor servo memiliki putaran yang lambat dan torsi yang kuat ( berkat adanya sistim gear ). Hal ini sesuai dengan bidang robotika jika dibandingkan dengan motor dc biasa yang memiliki putaran cepat namun torsi rendah. Poros Motor dc yang dihubungkan langsung dengan roda, tidak akan kuat untuk menggerakkan robot, demikian juga dengan motor stepper. Kedua jenis motor ini harus dihubungkan terlebih dulu dengan sistim gear agar dapat dipergunakan. Namun poros servo dapat dihubungkan langsung dengan roda. Kedua, sistim kontrol untuk motor servo relatif sedikit ( diperlukan hanya 1 jalur data saja ). Hal ini tentu berbeda misalnya jika kita menggunakan motor stepper yang memerlukan jalur kontrol lebih dari 1 jalur. Oleh karena itu tantangannya adalah bagaimana mengontrol motor servo yang hanya menggunakan 1 jalur tersebut. Oleh karena hanya digunakan 1 jalur data untuk mengontrol motor servo, maka digunakan teknik PWM ( Pulse Width Modulation = Modulasi Lebar Pulsa ).
Gambar 8. Sinyal PWM 2ms menggerakkan horn ke kiri 90o
Gambar 9. Sinyal PWM 1,5ms menggerakkan horn tepat ke atas (tengah)
395
Gambar 10. Sinyal PWM 1ms menggerakkan horn ke kanan 90o
HASIL DAN PEMBAHASAN Pada sebuah lengan robot yang terdiri atas 6 joint (main joint, joint 1, joint 2, joint 3,wrist dan gripper) membutuhkan 6 motor servo sebagai penggeraknya.
Gambar 11. Posisi motor servo pada lengan robot Pemilihan motor servo sebagai penggerak, karena motor servo mempunyai kemampuan untuk menahan beban pada posisi tertentu dan mudah untuk dikontrol yaitu dengan memberikan sinyal PWM. Pulsa PWM mempunyai perioda 20ms dengan lebar pulsa maksimum 2ms atau maksimum duty cycle PWM adalah 10%. Hal ini berarti pada durasi 18ms, sinyal PWM dalam kondisi “off”.
Gambar 12. Bentuk sinyal PWM Kondisi “off” ini dimanfaatkan untuk mengaktifkan PWM lain, sehingga ke-6 motor servo mendapatkan sinyal PWM yang berbeda. Secara time frame, grafik ke-6 PWM tersebut seperti pada gambar 13.
396
Gambar 13. Grafik time frame ke-6 PWM Dengan demikian flow chart program untuk mikrokontroller adalah sebagaimana dikutip pada gambar 14.
397
Gambar 14. Flow chart program pada mikrokontroller Program di dalam mikrokontroller dirancang untuk mengaktifkan ke-6 PWM secara bergantian. Langkah pertama yaitu inisialisasi simbol. Pada langkah ini, mikrokontroller akan mengenali nama-nama atau istilah-istilah yang diberikan atau digunakan dalam program. Langkah selanjutnya ialah pemberian bobot nilai awal. Bobot nilai awal ini diberikan agar motor servo selalu berada pada posisi awal yang dikehendaki. Misalnya untuk main joint, posisi awal tepat di tengah,
398
maka lebar pulsa PWM adalah 1,5ms. Sedangkan untuk gripper, posisi awal adalah menutup sehingga lebar pulsa yang diberikan adalah 2ms atau 1ms tergantung rancangan posisi motor servo. Setelah pemberian bobot nilai awal, mikrokontroller akan mengaktifkan Timer 0 dan Timer 1. Timer 0 diatur untuk menghitung sampai 10µs sedangkan Timer 1 diatur untuk menghitung sampai 2ms. Timer 0 digunakan untuk mengaktifkan lebar pulsa tiap-tiap PWM, sedangkan Timer 1 digunakan untuk alokasi lebar pulsa PWM maksimum. Misalkan bobot nilai untuk PWM 1 adalah 150, maka output PWM 1 akan aktif selama 150x10µs = 1500µs = 1,5ms. Untuk PWM 2 akan aktif setelah alokasi waktu maksimum untuk PWM 1 selesai atau seletah Timer 1 overflow (selesai menghitung, 2ms). Demikian juga seterusnya, PWM 3, 4, 5 dan 6 akan aktif setelah alokasi waktu maksimum PWM sebelumnya telah selasai. Sehingga total waktu yang dibutuhkan untuk mengaktifkan ke-6 PWM dalam 1 periode adalah 6 x 2ms = 12ms. Sementara periode sebuah PWM adalah 20ms, maka masih tersisa waktu 8ms. Waktu yang tersisa ini dipergunakan oleh mikrokontroller untuk membaca kondisi data input untuk kemudian memperbarui (update) bobot nilai tiap-tiap PWM sesuai data input yang diterima. Input yang diberikan kepada mikrokontroller adalah data paralel 12 bit, dimana tiap bobot nilai PWM berkorespondensi dengan 2 bit data input. Untuk input 00 dan 01 tidak mempengaruhi bobot nilai atau dengan kata lain bobot nilai tetap. Untuk input 10, bobot nilai akan dikurangi 1 untuk setiap pembacaannya dan untuk input 11, bobot nilai akan ditambah 1 untuk setiap pembacaannya. Tabel 2. Pengaruh data input terhadap bobot nilai PWM
Data Input
Bobot Nilai
00 01 10 11
tetap tetap kurangi 1 tambah 1
Dengan menggunakan metoda ini, pengontrolan motor servo yang berjumlah lebih dari 1 menjadi lebih mudah, sederhana dan compact. Setiap perubahan data input akan langsung direspon oleh mikrokontroller sehingga langsung memberikan perubahan posisi horn pada motor servo yang berkaitan. Ke-6 motor servo dapat dikontrol sekaligus secara bersamaan dengan cara memberikan data input yang berbeda pada masing-masing PWM sehingga dihasilkan pergerakan yang berbeda untuk ke-6 motor servo secara bersamaan. KESIMPULAN Motor servo merupakan salah satu komponen penggerak dalam robotika. Dengan menggunakan mikrokontroller AT89S51 dan metoda pengendalian motor servo secara serial, maka dimungkinkan untuk mengontrol lebih dari 1 motor servo secara bersamaan. Pembuatan program yang ringkas akan memperpendek waktu yang digunakan untuk membaca data input dan memperbarui bobot nilai PWM. Dengan demikian mikrokontroller akan mampu mengontrol motor servo lebih banyak. DAFTAR PUSTAKA Putra, A.E,2004, Belajar Mikrokontroller AT89C51/52/55 Teori dan Aplikasi , Edisi 2, Gava Media, Yogyakarta. Setiawan, R, 2006, Mikrokontroller MCS-51, Graha Ilmu, Yogyakarta. http://insansainsprojects.wordpress.com/2008/06/06/pwm-pengatur-kecepatan-mobile-robot
399