Smart Peripheral Controller Servo Motor Controller Trademarks & Copyright AT, IBM, and PC are trademarks of International Business Machines Corp. Pentium is a registered trademark of Intel Corporation. Windows is a registered trademark of Microsoft Corporation. HyperTerminal is copyright by Microsoft Corporation and Hilgraeve Inc. CodeVisionAVR is copyright by Pavel Haiduc, HP InfoTech s.r.l.
Daftar Isi 1 Pendahuluan... 3 1.1 Spesifikasi SPC SERVO MOTOR CONTROLLER... 3 1.2 Sistem yang Dianjurkan... 3 2 Perangkat Keras SPC SERVO MOTOR CONTROLLER... 4 2.1 Tata Letak Komponen SPC SERVO MOTOR CONTROLLER... 4 2.2 Konektor dan Pengaturan Jumper... 4 3 Perangkat Lunak SPC SERVO MOTOR CONTROLLER... 6 3.1 Antarmuka UART... 6 3.2 Antarmuka I 2 C... 6 3.3 Command Set... 7 3.3.1. Ping... 8 3.3.2. Get Version... 8 3.3.3. Run Servo... 9 3.3.4. Set Home... 10 3.3.5. Go To Home... 11 3.3.6. Start Sequence... 12 3.3.7. Read Sequence Status... 13 3.3.8. Read Servo Status & Position... 14 3.3.9. Enable/Disable Servo... 15 4 Perangkat Lunak SPC SERVO MOTOR CONTROLLER... 15 4.1. Sequence(s) Editor... 16 4.2. Command Tester... 18 5 Prosedur Pengujian... 19 6 Contoh Aplikasi dan Program... 19 Lampiran A. Skematik SPC SERVO MOTOR CONTROLLER... 22 2
1. PENDAHULUAN Smart Peripheral Controller / SPC SERVO MOTOR CONTROLLER merupakan sebuah modul pengendali motor servo yang mampu digunakan untuk mengendalikan 20 buah motor servo secara serentak maupun sekuensial. Modul ini dilengkapi dengan jalur komunikasi UART RS-232, UART TTL, dan I 2 C. Jika menggunakan jalur komunikasi I 2 C, maka beberapa SPC SERVO MOTOR CONTROLLER dapat digunakan untuk mengontrol sampai dengan maksimum 160 buah motor servo. SPC SERVO MOTOR CONTROLLER dapat digunakan untuk mengendalikan motor servo standar maupun kontinu serta dilengkapi dengan fasilitas untuk menyimpan sekuen gerakan sehingga sesuai untuk aplikasi-aplikasi robotik atau aplikasi yang menggunakan motor servo lainnya. 1.1. SPESIFIKASI SPC SERVO MOTOR CONTROLLER Spesifikasi SPC SERVO MOTOR CONTROLLER sebagai berikut: Catu daya untuk SPC SERVO MOTOR CONTROLLER terpisah dengan catu daya untuk motor servo. Catu daya untuk SPC SERVO MOTOR CONTROLLER dapat diperoleh dari sumber catu daya dengan tegangan 6,5 12 Volt. Tiap modul SPC mampu mengendalikan 20 motor servo. Resolusi pulsa kontrol servo sebesar 1 µs. Dilengkapi dengan kemampuan servo ramping. Dilengkapi dengan kemampuan membaca pulsa kontrol (posisi) servo. Dilengkapi dengan kemampuan Enable dan Disable servo. Dilengkapi dengan kemampuan menyimpan dan menjalankan sampai dengan maksimal 32 sekuen gerakan. Dilengkapi dengan kemampuan menyimpan dan kembali ke posisi home (default). Tersedia antarmuka UART RS-232, UART TTL, dan I 2 C. Jika menggunakan I 2 C, SPC SERVO MOTOR CONTROLLER dapat dicascade hingga 8 modul. 1.2. SISTEM YANG DIANJURKAN Sistem yang dianjurkan untuk penggunaan SPC SERVO MOTOR CONTROLLER adalah: Perangkat keras: PC AT Pentium IBM Compatible dengan port USB. DT-AVR Low Cost Series. DVD-ROM Drive dan Hard disk. Perangkat lunak: Sistem operasi Windows XP. CodeVisionAVR. File yang ada pada CD/DVD program: TESTSERVO.C, TESTSERVO.HEX, SERVOCON.EXE, MANUAL SPC SERVO MOTOR CONTROLLER.PDF dan QUICK START SPC SERVO MOTOR CONTROLLER.PDF. 3
2. PERANGKAT KERAS SPC SERVO MOTOR CONTROLLER 2.1. TATA LETAK KOMPONEN SPC SERVO MOTOR CONTROLLER 2.2. KONEKTOR DAN PENGATURAN JUMPER Konektor J23 berfungsi sebagai konektor untuk catu daya modul. Pin Nama Fungsi 1 GND Titik referensi untuk catu daya input 2 6,5-12VDC Terhubung ke catu daya untuk input (6,5 12 Volt) Konektor J24 berfungsi sebagai konektor untuk catu daya motor servo. Pin Nama Fungsi 1 GND Titik referensi untuk catu daya input 2 VEXT Terhubung ke catu daya untuk motor servo. Lihat spesifikasi motor servo yang digunakan untuk memastikan nilai tegangan yang diberikan. Konektor RJ11 UART RS232 (J25) berfungsi sebagai konektor untuk antarmuka UART RS-232. Pin Nama Fungsi 2 NC Tidak terhubung kemana-mana 3 GND Titik referensi 4 TX Jalur data serial keluar dari modul 5 RX Jalur data serial masuk ke modul J25 Tampak Depan 5 4 3 2 RX GND TX 4
Konektor UART TTL (J26) berfungsi sebagai konektor untuk antarmuka UART TTL. Pin Nama Fungsi 1 GND Titik referensi 2 TX Jalur data serial (TTL) keluar dari modul SPC 3 RX Jalur data serial (TTL) masuk ke modul SPC Konektor I2C PORT (J27) berfungsi sebagai konektor untuk antarmuka I 2 C. Pin Nama Fungsi 1 GND Titik referensi 2 SDA I 2 C-bus data input / output 3 SCL I 2 C-bus clock input Jumper PULL-UP (J28) berfungsi untuk mengaktifkan resistor pull-up untuk pin SDA dan SCL pada antarmuka I 2 C. Jumper PULL-UP J28 SCL SDA Fungsi Pull-up tidak aktif (jumper terlepas) SCL SDA Pull-up aktif (jumper terpasang) Penting! Apabila lebih dari satu modul dihubungkan pada I 2 C-bus maka jumper PULL- UP (SCL/SDA) salah satu modul saja yang perlu dipasang. Jumper ADDR (J2) berfungsi untuk mengatur alamat I 2 C dari modul SPC SERVO MOTOR CONTROLLER. J2 (A2) Pin 1-2 J2 (A1) Pin 3-4 J2(A0) Pin 5-6 Alamat Tulis I 2 C Alamat I 2 C Alamat Baca I 2 C 0xE0 0xE1 0xE2 0xE3 0xE4 0xE5 0xE6 0xE7 Keterangan: : jumper terpasang 0xE8 0xE9 0xEA 0xEB 0xEC 0xED 0xEE 0xEF 5
Penting! Perubahan alamat I 2 C harus dilakukan saat modul SPC tidak terhubung ke catu daya. Konektor SERVO1 - SERVO20 (J3 - J22) sebagai konektor untuk motor servo. Pin Nama Fungsi 1 SRV-GND Titik referensi catu daya ke motor servo 2 S-PWR Tegangan catu daya ke motor servo 3 SERVOx Output pulsa ke motor servo 3. PERANGKAT LUNAK SPC SERVO MOTOR CONTROLLER SPC SERVO MOTOR CONTROLLER memiliki antarmuka UART (RS-232/TTL) dan I 2 C yang dapat digunakan untuk menerima perintah atau mengirim data. 3.1. ANTARMUKA UART Parameter komunikasi UART adalah sebagai berikut: 38400 bps 8 data bit 1 stop bit tanpa parity bit tanpa flow control Semua perintah dikirim menggunakan karakter ASCII (angka 123 dikirim dalam bentuk 3 karakter "123" atau byte ASCII 0x31 0x32 0x33). Spasi kosong (0x20) digunakan sebagai separator antar parameter perintah. Karakter \r (bilangan desimal 13 atau bilangan hexadesimal 0x0D) digunakan sebagai akhir perintah beserta parameternya. Jika transmisi perintah berserta parameternya berhasil, maka SPC SERVO MOTOR CONTROLLER akan mengirimkan string ACK. Jika perintah tidak dikenal, maka SPC SERVO MOTOR CONTROLLER akan mengirimkan string NCK. Sedangkan jika perintah dikenal tetapi parameter perintah salah, maka SPC SERVO MOTOR CONTROLLER tidak akan mengirimkan balasan. Baik ACK ataupun NCK akan selalu diikuti dengan karakter \r. Perintah dan parameter yang bisa digunakan dapat dilihat pada bagian 3.3. 3.2. ANTARMUKA I 2 C Modul SPC SERVO MOTOR CONTROLLER memiliki antarmuka I 2 C. Pada antarmuka I 2 C ini, modul SPC SERVO MOTOR CONTROLLER bertindak sebagai slave dengan alamat sesuai dengan telah ditentukan sebelumnya melalui pengaturan jumper (lihat bagian 2.2). Antarmuka I 2 C pada modul SPC SERVO MOTOR CONTROLLER mendukung bit rate sampai dengan maksimum 100 khz. Semua perintah yang dikirim melalui antarmuka I 2 C diawali dengan start condition dan kemudian diikuti dengan pengiriman 1 byte alamat modul SPC SERVO MOTOR CONTROLLER. Setelah pengiriman alamat, selanjutnya master harus mengirim 1 byte data yang berisi <nomor perintah> dan (jika diperlukan) n-byte data parameter perintah. Selanjutnya, setelah seluruh parameter perintah telah dikirim, urutan perintah diakhiri dengan stop condition. 6
Berikut urutan yang harus dilakukan untuk mengirimkan perintah melalui antarmuka I 2 C. Start + 1 1 1 0 X X X 0 + Alamat Tulis X X X X X X X X + X X X X X X X X + Command Parameter 1 (jika ada)... + X X X X X X X X + Stop Parameter n (jika ada) Jika transmisi perintah berserta parameternya berhasil, maka SPC SERVO MOTOR CONTROLLER akan menulis respon hexadesimal 0x06 (Acknowledged/ACK) pada buffer I 2 C-nya. Sebaliknya jika perintah tidak dikenal atau parameter perintah salah, maka SPC SERVO MOTOR CONTROLLER akan menulis respon hexadesimal 0x15 (Not Acknowledged/NCK) pada buffer I 2 C-nya. Master dapat mengirimkan perintah baca untuk membaca respon <ACK/NCK> tersebut. Jika perintah yang telah dikirimkan merupakan perintah yang meminta data dari modul SPC SERVO MOTOR CONTROLLER, maka data-data tersebut dapat dibaca, setelah membaca respon, dengan menggunakan urutan perintah baca. Berikut urutan yang harus dilakukan untuk membaca respon dan/atau data dari SPC SERVO MOTOR CONTROLLER. Start + 1 1 1 0 X X X 1 + Alamat Baca 0 0 0 X 0 1 X X + X X X X X X X X + ACK / NCK Data 1 (jika ada)... + X X X X X X X X + Stop Data n (jika ada) Sebuah data/parameter yang memiliki range lebih besar dari 255 desimal (lebih besar dari 1 byte) dikirim secara dua tahap. Satu byte data MSB dikirim lebih dahulu kemudian diikuti dengan data LSB. Misalnya parameter <ServoPulse> yang memiliki range 500-2500. Jika <ServoPulse> bernilai 1500 maka byte MSB yang dikirim adalah 5 dan byte LSB yang dikirim adalah 220 (0xDC). Perintah dan parameternya yang bisa digunakan dapat dilihat pada bagian 3.3. 3.3. COMMAND SET Berikut ini daftar lengkap perintah-perintah dalam antarmuka UART dan I 2 C. 7
3.3.1. PING Fungsi Menguji koneksi dan memastikan bahwa SPC SERVO MOTOR CONTROLLER siap menerima perintah Command UART PG\r Command I2C 0x00 Parameter - Respon UART ACK jika perintah dikenali NCK jika perintah tidak dikenali Respon I2C 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali Delay antara Command dan 10 µs Respon Keterangan - Contoh dengan antarmuka UART: User : PG\r SPC : ACK\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x00); delay_us(10); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Ping // delay 10 us i2c_start(); i2c_write(0xe1); // Baca ke modul SPC SERVO CONTROLLER temp = i2c_read(0); // Data Acknowledgement 3.3.2. GET VERSION Fungsi Mengetahui versi firmware yang tertanam pada modul SPC SERVO MOTOR CONTROLLER Command UART VR\r Command I2C 0x01 Parameter - Respon UART ACK jika perintah dikenali NCK jika perintah tidak dikenali String yang menyatakan versi firmware yang tertanam pada modul SPC SERVO MOTOR CONTROLLER Respon I2C 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali <Versi> versi firmware SPC SERVO MOTOR CONTROLLER <Revisi> revisi firmware SPC SERVO MOTOR CONTROLLER Delay antara 10 µs Command dan Respon Keterangan - 8
Contoh dengan antarmuka UART: User : VR\r SPC : ACK\r SPCServoControl v0.1\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x01); delay_us(10); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Get Version Number // delay 10 us i2c_start(); i2c_write(0xe1); temp1 = i2c_read(1);// Data Acknowledgement temp2 = i2c_read(1);// Version Number temp3 = i2c_read(0);// Revision Number // Baca ke modul SPC SERVO CONTROLLER 3.3.3. RUN SERVO Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Memutar motor servo tertentu RN <ServoNum> <ServoPulse> <Rate>\r 0x02 <ServoNum> <ServoPulse> <Rate> <ServoNum> 1-20 nomor motor servo yang akan diperintah. <ServoPulse> 500-2500 lebar pulsa kontrol servo dengan resolusi 1 µs. <Rate> 0 motor servo bergerak ke posisi tujuan sesuai dengan spesifikasi kecepatan motor servo yang digunakan. 1-100 motor servo bergerak ke posisi tujuan dengan kecepatan sesuai dengan nilai rate. Nilai 1 merupakan kecepatan paling rendah. Semakin besar nilai rate, semakin cepat motor servo bergerak ke posisi tujuan. ACK jika perintah dikenali NCK jika perintah tidak dikenali 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali 15 µs Keterangan Jika perintah ini dikirim lagi sebelum motor servo sampai ke posisi tujuan, maka SPC SERVO MOTOR CONTROLLER akan langsung menjalankan perintah terakhir. Perintah ini tidak tersimpan di EEPROM. Saat SPC SERVO MOTOR CONTROLLER dinyalakan, tiap motor servo akan kembali ke posisi Home. 9
Contoh dengan antarmuka UART untuk memerintah motor servo 1 untuk menuju ke posisi lebar pulsa 1500 µs dengan rate 10: User : RN 1 1500 10\r SPC : ACK\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x02); i2c_write(1); i2c_write(0x05); i2c_write(0xdc); i2c_write(10); delay_us(15); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Run Servo Motor // Nomor Motor Servo // Lebar pulsa kontrol (MSB) // Lebar pulsa kontrol (LSB) // Rate // delay 15 us i2c_start(); i2c_write(0xe1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement 3.3.4. SET HOME Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Menentukan posisi Home untuk motor servo tertentu ST <ServoNum> <ServoPulse>\r 0x03 <ServoNum> <ServoPulse> <ServoNum> 1-20 nomor motor servo yang akan diperintah <ServoPulse> 500-2500 lebar pulsa kontrol servo dengan resolusi 1 µs. ACK jika perintah dikenali NCK jika perintah tidak dikenali 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali 100 µs Keterangan Perintah ini berfungsi untuk menentukan posisi lebar pulsa kontrol tertentu menjadi posisi default untuk motor servo tersebut saat SPC SERVO MOTOR CONTROLLER baru dinyalakan. Perintah ini akan tersimpan di EEPROM. Saat SPC SERVO MOTOR CONTROLLER dinyalakan, tiap motor servo akan kembali ke posisi Home. Contoh dengan antarmuka UART untuk mengatur agar motor servo 2 memiliki posisi lebar pulsa Home 1250 µs: User : ST 2 1250\r SPC : ACK\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): 10
i2c_start(); i2c_write(0xe0); i2c_write(0x03); i2c_write(2); i2c_write(0x04); i2c_write(0xe2); delay_us(100); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Set Home // Nomor Motor Servo // Lebar pulsa kontrol (MSB) // Lebar pulsa kontrol (LSB) // delay 100 us i2c_start(); i2c_write(0xe1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement 3.3.5. GO TO HOME Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Keterangan - Memerintahkan motor servo untuk kembali ke posisi Home HM <ServoNum> <Rate>\r 0x04 <ServoNum> <Rate> <ServoNum> 0 semua motor servo diperintahkan berputar ke posisi Home masing-masing. 1-20 nomor motor servo yang diperintahkan untuk bergerak ke posisi Home-nya. <Rate> 0 motor servo bergerak ke posisi Home masingmasing sesuai dengan spesifikasi kecepatan masing-masing motor servo. 1-100 motor servo bergerak ke posisi Home dengan kecepatan sesuai dengan nilai rate. Nilai 1 merupakan kecepatan paling rendah. Semakin besar nilai rate, semakin cepat motor servo bergerak ke posisi Home. ACK jika perintah dikenali NCK jika perintah tidak dikenali 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali 10 µs Contoh dengan antarmuka UART untuk memerintah motor servo 3 untuk menuju ke posisi Home-nya dengan rate 50: User : HM 3 50\r SPC : ACK\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x04); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Go to Home 11
i2c_write(3); i2c_write(50); delay_us(10); // Nomor Motor Servo // Rate // delay 10 us i2c_start(); i2c_write(0xe1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement 3.3.6. START SEQUENCE Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Menjalankan sekuen gerakan yang tersimpan di EEPROM SS <SeqNum>\r 0x05 <SeqNum> <SeqNum> 1-32 nomor sekuen gerakan yang akan dijalankan ACK jika perintah dikenali NCK jika perintah tidak dikenali 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali 10 µs Keterangan Jika tidak ada nomor sekuen yang dimaksud pada EEPROM, maka modul SPC SERVO MOTOR CONTROLLER akan tetap memberikan ACK tetapi tidak akan menjalankan sekuen apapun. Jika perintah ini dikirim lagi dengan nomor sekuen berbeda sebelum sekuen selesai, maka motor servo yang terlibat di kedua sekuen akan langsung menjalankan perintah di sekuen terakhir. Sedangkan untuk motor servo yang hanya terlibat di sekuen sebelumnya, akan menyelesaikan step yang sedang dijalankan. Untuk membuat, mengubah, atau menghapus sekuen akan dijelaskan pada bagian 4. Contoh dengan antarmuka UART untuk menjalankan sekuen gerakan servo yang ke-2: User : SS 2\r SPC : ACK\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x05); i2c_write(2); delay_us(10); i2c_start(); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Start Sequence // Nomor Sekuen // delay 10 us 12
i2c_write(0xe1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement 3.3.7. READ SEQUENCE STATUS Fungsi Memeriksa apakah modul SPC sedang menjalankan sebuah sekuen Command UART RS\r Command I2C 0x06 Parameter - Respon UART ACK jika perintah dikenali NCK jika perintah tidak dikenali <SeqStatus> 0 modul SPC SERVO MOTOR CONTROLLER sedang dalam proses menjalankan sebuah sekuen. 1 modul SPC SPC SERVO MOTOR CONTROLLER tidak dalam proses menjalankan sebuah sekuen atau sekuen telah selesai dijalankan. Respon I2C 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali <SeqStatus> 0 modul SPC sedang dalam proses menjalankan sebuah sekuen. 1 modul SPC tidak dalam proses menjalankan sebuah sekuen atau sekuen telah selesai dijalankan. Delay antara 10 µs Command dan Respon Keterangan - Contoh dengan antarmuka UART: User : RS\r SPC : ACK\r 1\r Pada contoh tersebut, hasil pembacaan adalah '1' yang berarti modul SPC dalam keadaan idle atau sekuen telah selesai dijalankan. Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x06); delay_us(10); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Read Sequence Status // delay 10 us i2c_start(); i2c_write(0xe1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(1);// Data Acknowledgement temp2 = i2c_read(0);// Data status sekuen 13
3.3.8. READ SERVO STATUS & POSITION Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Keterangan - Memeriksa status aktifnya dan posisi lebar pulsa kontrol motor servo tertentu RD <ServoNum>\r 0x07 <ServoNum> <ServoNum> 1-20 nomor motor servo yang akan dibaca posisinya ACK jika perintah dikenali NCK jika perintah tidak dikenali <ServoStatus> 0 motor servo non-aktif (Disable) 1 motor servo aktif (Enable) <ServoPulse> 500-2500 lebar pulsa kontrol servo dengan resolusi 1 µs. 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali <ServoStatus> 0 motor servo non-aktif (Disable) 1 motor servo aktif (Enable) <ServoPulse> 500-2500 lebar pulsa kontrol servo dengan resolusi 1 µs. 25 µs Contoh dengan antarmuka UART untuk mengetahui status aktifnya servo ke-10 dan posisi lebar pulsa kontrolnya sekarang: User : RD 10\r SPC : ACK\r 1 2000\r Pada contoh tersebut, berarti motor servo 10 dalam keadaan aktif (1) dan lebar pulsa kontrolnya adalah 2000 µs. Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x07); i2c_write(10); delay_us(25); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Read Servo Position // Nomor Motor Servo // delay 25 us i2c_start(); i2c_write(0xe1); temp1 = i2c_read(1);// Data Acknowledgement temp2 = i2c_read(1);// Enable/Disable temp3 = i2c_read(1);// Pulsa Kontrol (MSB) // Baca ke modul SPC SERVO CONTROLLER temp4 = i2c_read(0);// Pulsa Kontrol (LSB) 14
lebar pulsa kontrol = ( temp3 x 256 ) + temp4 (dalam satuan µs) 3.3.9. ENABLE/DISABLE SERVO Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Mengaktifkan atau menon-aktifkan motor servo tertentu EN <ServoNum> <En/Dis>\r 0x08 <ServoNum> <En/Dis> <ServoNum> 1-20 nomor servo yang diatur <En/Dis> 0 menon-aktifkan (Disable) motor servo 1 mengaktifkan (Enable) motor servo ACK jika perintah dikenali NCK jika perintah tidak dikenali 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali 10 µs Keterangan Perintah ini akan tersimpan di EEPROM. Saat modul SPC SERVO MOTOR CONTROLLER dinyalakan, status tiap motor servo pada saat power on tersebut akan kembali ke kondisi sesuai dengan yang tersimpan di EEPROM. Contoh dengan antarmuka UART untuk menon-aktifkan motor servo 5: User : EN 5 0\r SPC : ACK\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I 2 C (misalkan alamat I 2 C = 0xE0): i2c_start(); i2c_write(0xe0); i2c_write(0x08); i2c_write(5); i2c_write(0); delay_us(10); // Tulis ke modul SPC SERVO CONTROLLER // Perintah Set Enable/Disable Servo // Nomor Motor Servo // Enable/Disable // delay 10 us i2c_start(); i2c_write(0xe1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement 4. MEMBUAT DAN MENGEDIT SEKUEN PADA SPC SERVO MOTOR CONTROLLER SPC SERVO MOTOR CONTROLLER memiliki kemampuan untuk menyimpan beberapa sekuen gerakan motor servo dan menjalankan masing-masing sekuen dengan 1 perintah saja. Misalkan saja jika modul SPC SERVO MOTOR CONTROLLER digunakan untuk sebuah robot berkaki yang berpenggerak utama motor servo dan robot tersebut memiliki beberapa sekuen gerakan yaitu sekuen gerakan untuk menggerakkan robot maju ke depan, sekuen gerakan untuk menggerakkan robot agar belok ke kiri, sekuen gerakan untuk 15
menggerakkan robot agar belok ke kanan, dan juga sekuen gerakan untuk menggerakkan robot berputar. Maka tiap sekuen gerakan tersebut dapat disimpan pada EEPROM SPC SERVO MOTOR CONTROLLER. Sehingga jika kita ingin menggerakkan robot maju, kita cukup mengirimkan 1 perintah untuk memulai sekuen saja tanpa mengirimkan banyak perintah ke setiap motor servo. Membuat dan merubah sekuen gerakan dapat dilakukan dengan menggunakan perangkat lunak "SPC SERVO MOTOR CONTROLLER GUI" yaitu servocon.exe yang disertakan pada CD/DVD. Secara umum, terdapat 2 bagian utama pada perangkat lunak "SPC SERVO MOTOR CONTROLLER GUI" yaitu "Sequence(s) Editor" dan "Command Tester". 4.1. SEQUENCE(s) EDITOR Tampilan tab "Sequence(s) Editor" dapat dilihat pada gambar berikut ini. Sebagai ilustrasi awal, pada gambar contoh tampilan "Sequence(s) Editor" tersebut terdapat 2 buah sekuen yaitu sekuen 1 dan sekuen 2 yang ditunjukan oleh kolom SeqNum. Pada sekuen ke-1 terdapat 4 buah step yang ditunjukan pada kolom StepNum. Pada saat sekuen ke-1 dijalakan maka pada StepNum ke-1, motor servo 1, 2, dan 3 diperintahkan untuk bergerak ke posisi pulsa 1000 µs dengan rate masing-masing 50, 10, dan 1. Selama salah satu dari ketiga motor servo tersebut (motor servo 1, 2, dan 3) belum mencapai posisi tujuannya, maka StepNum ke-2 tidak akan dijalankan. Setelah semua motor servo sampai pada posisi tujuannya, maka step selanjutnya (StepNum ke-2) akan dijalankan yaitu memerintahkan motor servo 16
1 untuk bergerak ke posisi 2000 µs dengan rate 10. Demikian seterusnya sampai seluruh step pada sekuen ke-1 selesai dijalankan. Sebagai catatan, selama sebuah atau beberapa motor servo sedang dalam proses sekuen, motor servo yang lain tetap dapat diperintah seperti biasa (menggunakan perintah Run Servo atau Go To Home ). Tetapi jika yang diperintah adalah motor servo yang sedang dalam sekuen, maka perintah baru tersebut akan diabaikan (kecuali perintah Start Sequence dan Enable/Disable Servo ). Untuk memulai membuat sebuah sekuen gerakan baru, dapat dilakukan dengan melakukan klik ganda pada kolom SeqNum di baris terbawah yang kosong sehingga muncul kursor yang berkedip. Isikan nomor sekuen pada field tersebut. Nomor sekuen pada dasarnya mewakili sebuah sekuen gerakan (misalkan sekuen gerakan maju robot) sehingga untuk seluruh perintah motor servo pada sekuen tersebut, nomor sekuen selalu sama. Nilai yang bisa diisikan pada kolom ini adalah antara 1-32. Selanjutnya adalah mengisikan nomor langkah atau StepNum dengan melakukan klik ganda (atau tekan Enter pada keyboard) pada kolom disamping SeqNum yang baru saja diisi. Setiap baris dari sekuen yang memiliki StepNum yang sama akan dijalankan oleh modul SPC secara bersamaan. Setelah setiap motor servo yang memiliki StepNum yang sama (misalnya StepNum = 1) telah sampai ke posisinya masing-masing, baru StepNum berikut (misalnya StepNum = 2) pada sekuen yang sama akan dijalankan. Nilai yang bisa diisikan pada kolom ini adalah antara 1-64. Kolom ServoNum harus diisi nomor motor servo yang diperintah. Kolom PulseWidth harus diisi nilai pulsa kontrol tujuan yang diinginkan. Sedangkan kolom Rate harus diisi kecepatan yang digunakan untuk mencapai nilai pulsa kontrol tujuan yang diinginkan tersebut. Penjelasan lebih lengkap tentang batasan nilai-nilai yang bisa diisikan pada ServoNum, PulseWidth, dan Rate dapat dilihat pada bagian 3.3. Untuk mengubah field yang telah terisi sebelumnya dapat dilakukan dengan melakukan klik ganda pada field yang dimaksud. Untuk menghapus baris, harus dilakukan mulai dari baris paling bawah dengan cara mengosongkan isi kolom SeqNum pada baris tersebut. Jumlah sekuen yang dapat disimpan dibatasi pula oleh kapasitas EEPROM SPC SERVO MOTOR CONTROLLER yang ditunjukkan melalui indikator memori di sisi kanan, seperti yang ditunjukan pada gambar Sequence(s) Editor tersebut. Agar perangkat lunak dapat berkomunikasi dengan SPC SERVO MOTOR CONTROLLER, hubungkan kabel serial ke konektor RJ11 UART RS232 (J25) dan ke Serial/COM port pada PC. Pengaturan Serial/COM port yang digunakan dilakukan melalui tombol COM Settings (parameter komunikasi UART dapat dilihat pada bagian 3.1). Lalu hubungkan catu daya ke SPC SERVO MOTOR CONTROLLER. Jika sekuen-sekuen gerakan sudah selesai dibuat, tekanlah tombol Write To SPC untuk mengirim dan menyimpannya ke SPC SERVO MOTOR CONTROLLER. 17
Pembacaan sekuen-sekuen gerakan yang telah tersimpan pada SPC SERVO MOTOR CONTROLLER dapat dilakukan dengan menekan tombol Read From SPC. Jika tidak ada masalah komunikasi, maka akan tampil sekuen-sekuen yang telah tersimpan (sekuen yang sebelumnya tampil di layar akan dihapus). Jika tidak ada sekuen yang tersimpan, maka akan muncul pesan Could not read sequence(s). No Sequence(s) in memory!. Sedangkan jika komunikasi dengan SPC SERVO MOTOR CONTROLLER tidak berhasil, maka akan muncul pesan Connection error. Please check connection cable from PC to SPC!. Jika pembacaan sekuen berhasil dan terdapat sekuen pada SPC SERVO MOTOR CONTROLLER, maka pada ComboBox Test Sequence No akan terdapat daftar sekuen yang dapat dijalankan. Untuk menguji sebuah sekuen dapat dilakukan dengan menekan tanda panah pada ComboBox, kemudian memilih nomor sekuen yang ingin dijalankan. Proses ini sama dengan mengirimkan perintah Start Sequence (lihat bagian 3.3.6). 4.2. COMMAND TESTER Tampilan tab "Command Tester" dapat dilihat pada gambar berikut ini. Melalui tab "Command Tester" ini, kita dapat menguji perintah-perintah untuk modul SPC SERVO MOTOR CONTROLLER melalui jalur komunikasi UART RS- 232. Pengaturan Serial/COM port yang digunakan dilakukan melalui tombol COM Settings pada tab "Sequence(s) Editior" (parameter komunikasi UART dapat dilihat pada bagian 3.1). 18
Tombol Command Viewer berfungsi untuk menampilkan jendela baru. Jendela tersebut akan menampilkan perintah yang dikirimkan ke SPC SERVO MOTOR CONTROLLER saat ada tombol yang ditekan (misalnya tombol Go Home ) atau opsi yang diubah (misalnya centang pada Enabled ). 5. PROSEDUR PENGUJIAN 1. Hubungkan sumber catu daya ke SPC SERVO MOTOR CONTROLLER. 2. Jika catu daya telah terhubung dengan baik, maka LED IND PWR akan menyala. 3. Hubungkan konektor RJ11 UART RS232 (J25) ke Serial/COM port pada PC dengan menggunakan kabel serial yang disertakan pada saat pembelian SPC SERVO MOTOR CONTROLLER. 4. Jalankan perangkat lunak komunikasi serial pada PC (misalnya: HyperTerminal). Lalu sesuaikan parameter komunikasinya (lihat bagian 3.1). 5. Untuk menguji koneksi UART kirimkan perintah PING (PG\r). Jika koneksi antarmuka UART bekerja dengan baik, maka SPC SERVO MOTOR CONTROLLER akan membalas dengan memberikan respon ACK\r (lihat bagian 3.3.1). 6. Hubungkan sebuah motor servo ke konektor SERVO1. Kemudian kirimkan perintah untuk menggerakkan motor servo ke posisi lebar pulsa 1000 µs dengan rate 100 (RN 1 1000 100\r). Jika motor servo dan SPC SERVO MOTOR CONTROLLER bekerja dengan baik, maka motor servo akan bergerak ke posisi 1000 µs. 7. Hubungkan sebuah motor servo ke konektor SERVO1. Kemudian kirimkan perintah untuk menggerakkan motor servo ke posisi lebar pulsa 2000 µs dengan rate 10 (RN 1 2000 10\r). Jika motor servo dan SPC SERVO MOTOR CONTROLLER bekerja dengan baik, maka motor servo akan bergerak ke posisi 2000 µs. 8. Pengujian juga dapat dilakukan menggunakan perangkat lunak SPC SERVO MOTOR CONTROLLER - GUI melalui tab "Command Tester". 6. CONTOH APLIKASI DAN PROGRAM Sebagai contoh program, misalkan SPC SERVO MOTOR CONTROLLER digunakan untuk mengendalikan 3 buah motor servo standar dengan antarmuka I 2 C dan antarmuka UART-TTL. DT-AVR Low Cost Micro System (LCMS) berfungsi sebagai master yang bertugas untuk mengirimkan perintah ke SPC SERVO MOTOR CONTROLLER. Berikut koneksi antara modul-modul yang digunakan: SPC SERVO MOTOR CONTROLLER DT-AVR LCMS GND (Terminal Biru J27 Pin 1) GND (J13 Pin 1) SDA (Terminal Biru J27 Pin 2) PORTD.2 (J13 Pin 5) SCL (Terminal Biru J27 Pin 3) PORTD.3 (J13 Pin 6) TX (Terminal Biru J26 Pin 2) PORTD.0 (J13 Pin 3) RX (Terminal Biru J26 Pin 3) PORTD.1 (J13 Pin 4) 19
J3 SERVO1 MOTOR SERVO J4 SERVO2 MOTOR SERVO J5 SPC Servo Motor Controller (alamat I 2 C = 0xE0) SERVO3 MOTOR SERVO DT-AVR LCMS Sebagai contoh program untuk aplikasi tersebut, pada CD/DVD yang disertakan pada saat pembelian SPC SERVO MOTOR CONTROLLER terdapat program testservo.c (pada folder Contoh Program) yang ditulis dengan menggunakan CodeVisionAVR versi evaluasi. Pada program tersebut, DT-AVR LCMS akan mengirimkan perintah RUN Servo melalui jalur I 2 C ke SPC SERVO MOTOR CONTROLLER (alamat I 2 C = 0xE0) agar motor servo 1, 2, dan 3 menuju ke posisi 2 ms dengan rate masingmasing motor servo secara berurutan adalah 100, 25, dan 10. DT-AVR LCMS akan menunggu selama 5 detik. Lalu DT-AVR LCMS akan mengirimkan perintah RUN Servo melalui jalur UART-TTL ke SPC SERVO MOTOR CONTROLLER agar motor servo 1, 2, dan 3 menuju ke posisi 1 ms dengan rate masing- masing motor servo secara berurutan adalah 10, 25, dan 100. DT-AVR LCMS akan kembali menunggu selama 5 detik sebelum kembali mengulangi perintah melalui I 2 C. Contoh aplikasi lain, misalkan SPC SERVO MOTOR CONTROLLER akan dihubungkan ke PC dan akan dikendalikan menggunakan perangkat lunak SPC SERVO MOTOR CONTROLLER - GUI. Jalur komunikasi yang digunakan adalah jalur komunikasi UART RS-232. Berikut koneksi antara modul-modul yang digunakan: 20
J3 SERVO1 MOTOR SERVO J4 SERVO2 MOTOR SERVO J5 SPC Servo Motor Controller (alamat I 2 C = 0xE0) J25 SERVO3 (UART RS232) SERIAL PORT PC MOTOR SERVO Setelah modul SPC SERVO MOTOR CONTROLLER terhubung ke PC serta catu daya telah menyala, jalankan perangkat lunak servocon.exe pada PC. Pengaturan Serial/COM port yang digunakan dilakukan melalui tombol COM Settings pada tab "Sequence(s) Editior" (parameter komunikasi UART dapat dilihat pada bagian 3.1). Untuk menguji fungsi pengaturan motor servo, dapat dilakukan melalui tab "Command Tester". Terima Kasih atas kepercayaan Anda menggunakan produk kami, bila ada kesulitan, pertanyaan atau saran mengenai produk ini silahkan menghubungi technical support kami : support@innovativeelectronics.com 21
LAMPIRAN A. Skematik SPC SERVO MOTOR CONTROLLER 22