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............................................................................................. 1.1 Spesifikasi SPC SERVO MOTOR CONTROLLER.................................. 1.2 Sistem yang Dianjurkan............................................................................
3 3 3
2
Perangkat Keras SPC SERVO MOTOR CONTROLLER............................... 2.1 Tata Letak Komponen SPC SERVO MOTOR CONTROLLER.............. 2.2 Konektor dan Pengaturan Jumper..........................................................
4 4 4
3
Perangkat Lunak SPC SERVO MOTOR CONTROLLER.............................. 3.1 Antarmuka UART........................................................................................ 3.2 Antarmuka I2C............................................................................................. 3.3 Command Set.............................................................................................. 3.3.1. Ping............................................................................................... 3.3.2. Get Version................................................................................. 3.3.3. Run Servo..................................................................................... 3.3.4. Set Home..................................................................................... 3.3.5. Go To Home................................................................................ 3.3.6. Start Sequence........................................................................... 3.3.7. Read Sequence Status.............................................................. 3.3.8. Read Servo Status & Position.................................................. 3.3.9. Enable/Disable Servo...............................................................
6 6 6 7 8 8 9 10 11 12 13 14 15
4
Perangkat Lunak SPC SERVO MOTOR CONTROLLER.............................. 4.1. Sequence(s) Editor...................................................................................... 4.2. Command Tester.........................................................................................
15 16 18
5
Prosedur Pengujian..................................................................................
19
6
Contoh Aplikasi dan Program..................................................................
19
Lampiran A.
Skematik SPC SERVO MOTOR CONTROLLER.....................................
2
22
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 2C. Jika menggunakan jalur komunikasi I2C, 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 I2C. • Jika menggunakan I2C, 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 1 2
Nama Fungsi GND Titik referensi untuk catu daya input 6,5-12VDC Terhubung ke catu daya untuk input (6,5 – 12 Volt)
Konektor J24 berfungsi sebagai konektor untuk catu daya motor servo. Pin 1
Nama GND
2
VEXT
Fungsi Titik referensi untuk catu daya input 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 2 3 4 5
Nama NC GND TX RX
Fungsi Tidak terhubung kemana-mana Titik referensi Jalur data serial keluar dari modul Jalur data serial masuk ke modul
4
J25 Tampak Depan
5 4 3 2
RX GND TX
Konektor UART TTL (J26) berfungsi sebagai konektor untuk antarmuka UART TTL. Pin 1 2 3
Nama GND TX RX
Fungsi Titik referensi Jalur data serial (TTL) keluar dari modul SPC Jalur data serial (TTL) masuk ke modul SPC
Konektor I2C PORT (J27) berfungsi sebagai konektor untuk antarmuka I2C. Pin 1 2 3
Nama GND SDA SCL
Fungsi Titik referensi I2C-bus data input / output I2C-bus clock input
Jumper PULL-UP (J28) berfungsi untuk mengaktifkan resistor pull-up untuk pin SDA dan SCL pada antarmuka I2C. Jumper PULL-UP J28
Fungsi Pull-up tidak aktif (jumper terlepas)
SCL SDA
Pull-up aktif (jumper terpasang) SCL SDA Penting ! Apabila lebih dari satu modul dihubungkan pada I 2C-bus maka jumper PULLUP (SCL/SDA) salah satu modul saja yang perlu dipasang. Jumper ADDR (J2) berfungsi untuk mengatur alamat I2C dari modul SPC SERVO MOTOR CONTROLLER. Alamat I2C
J2 (A2) Pin 1-2
J2 (A1) Pin 3-4
J2(A0) Pin 5-6
Alamat Tulis I2C
Alamat Baca I2C
■
■
■
0xE0
0xE1
■
■
0xE2
0xE3
0xE4
0xE5
0xE6
0xE7
0xE8
0xE9
0xEA
0xEB
0xEC
0xED
0xEE
0xEF
■
■
■ ■
■
■ ■ Keterangan: ■ : jumper terpasang 5
Penting! Perubahan alamat I2C harus dilakukan saat modul SPC tidak terhubung ke catu daya. Konektor SERVO1 - SERVO20 (J3 - J22) sebagai konektor untuk motor servo. Pin 1 2 3
Nama SRV-GND S-PWR SERVOx
Fungsi Titik referensi catu daya ke motor servo Tegangan catu daya ke motor servo Output pulsa ke motor servo
3.
PERANGKAT LUNAK SPC SERVO MOTOR CONTROLLER SPC SERVO MOTOR CONTROLLER memiliki antarmuka UART (RS-232/TTL) dan I2C 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 I2C Modul SPC SERVO MOTOR CONTROLLER memiliki antarmuka I 2C. Pada antarmuka I2C ini, modul SPC SERVO MOTOR CONTROLLER bertindak sebagai slave dengan alamat sesuai dengan telah ditentukan sebelumnya melalui pengaturan jumper (lihat bagian 2.2). Antarmuka I2C pada modul SPC SERVO MOTOR CONTROLLER mendukung bit rate sampai dengan maksimum 100 kHz. Semua perintah yang dikirim melalui antarmuka I 2C 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 I2C. Start
1
+
1
1
0
X
X
X
0
+
X
X
X
Alamat Tulis X
X
X
X
X
X
X
X
+
Command X
... +
X
X
X
X
X
X
X
+
Parameter 1 (jika ada)
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 I2C-nya. Sebaliknya jika perintah tidak dikenal atau parameter perintah salah, maka SPC SERVO MOTOR CONTROLLER akan menulis respon hexadesimal 0x15 (Not 2 Acknowledged/NCK) pada buffer I C-nya. Master dapat mengirimkan perintah baca untuk membaca respon
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
+
X
X
X
Alamat Baca 0
0
0
X
0
1
X
X
+
ACK / NCK ... +
X
X
X
X
X
X
X
X
X
+
Data 1 (jika ada) 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 I2C. 7
3.3.1. PING Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Keterangan
Menguji koneksi dan memastikan bahwa SPC SERVO MOTOR CONTROLLER siap menerima perintah PG\r 0x00 ACK jika perintah dikenali NCK jika perintah tidak dikenali 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali 10 µs -
Contoh dengan antarmuka UART: User : PG\r SPC : ACK\r Berikut ini contoh pseudo code C untuk menggunakan perintah ini dengan antarmuka I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x00); i2c_stop();
// // // //
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Ping” Stop Condition
delay_us(10);
// delay 10 us
i2c_start(); i2c_write(0xE1); temp = i2c_read(0); i2c_stop();
// // // //
Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Stop Condition
3.3.2. GET VERSION Fungsi Command UART Command I2C Parameter Respon UART
Respon I2C
Delay antara Command dan Respon Keterangan
Mengetahui versi firmware yang tertanam pada modul SPC SERVO MOTOR CONTROLLER VR\r 0x01 ACK jika perintah dikenali NCK jika perintah tidak dikenali String yang menyatakan versi firmware yang tertanam pada modul SPC SERVO MOTOR CONTROLLER 0x06 jika perintah dikenali 0x15 jika perintah tidak dikenali versi firmware SPC SERVO MOTOR CONTROLLER revisi firmware SPC SERVO MOTOR CONTROLLER 10 µs 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 I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x01); i2c_stop();
// // // //
delay_us(10);
// delay 10 us
i2c_start(); // i2c_write(0xE1); // temp1 = i2c_read(1);// temp2 = i2c_read(1);// temp3 = i2c_read(0);// i2c_stop(); //
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Get Version Number” Stop Condition Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Version Number Revision Number Stop Condition
3.3.3. RUN SERVO Fungsi Command UART Command I2C Parameter
Respon UART Respon I2C Delay antara Command dan Respon Keterangan
Memutar motor servo tertentu RN <ServoNum> <ServoPulse> \r 0x02 <ServoNum> <ServoPulse> <ServoNum> 1 - 20 nomor motor servo yang akan diperintah. <ServoPulse> 500 - 2500 lebar pulsa kontrol servo dengan resolusi 1 µs. 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 •
•
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 I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x02); i2c_write(1); i2c_write(0x05); i2c_write(0xDC); i2c_write(10); i2c_stop();
// // // // // // // //
delay_us(15);
// delay 15 us
i2c_start(); // i2c_write(0xE1); // temp1 = i2c_read(0);// i2c_stop(); //
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Run Servo Motor” Nomor Motor Servo Lebar pulsa kontrol (MSB) Lebar pulsa kontrol (LSB) Rate Stop Condition Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Stop Condition
3.3.4. SET HOME Fungsi Command UART Command I2C Parameter
Respon UART Respon I2C Delay antara Command dan Respon Keterangan
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 •
•
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 I2C (misalkan alamat I2C = 0xE0): 10
i2c_start(); i2c_write(0xE0); i2c_write(0x03); i2c_write(2); i2c_write(0x04); i2c_write(0xE2); i2c_stop();
// // // // // // //
delay_us(100);
// delay 100 us
i2c_start(); // i2c_write(0xE1); // temp1 = i2c_read(0);// i2c_stop(); //
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Set Home” Nomor Motor Servo Lebar pulsa kontrol (MSB) Lebar pulsa kontrol (LSB) Stop Condition Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Stop Condition
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> \r 0x04 <ServoNum> <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. 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 I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x04);
// Start Condition // Tulis ke modul SPC SERVO CONTROLLER // Perintah “Go to Home”
11
i2c_write(3); i2c_write(50); i2c_stop();
// Nomor Motor Servo // Rate // Stop Condition
delay_us(10);
// delay 10 us
i2c_start(); // i2c_write(0xE1); // temp1 = i2c_read(0);// i2c_stop(); //
Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Stop Condition
3.3.6. START SEQUENCE Fungsi Command UART Command I2C Parameter Respon UART Respon I2C Delay antara Command dan Respon Keterangan
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 •
•
•
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 I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x05); i2c_write(2); i2c_stop();
// // // // //
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Start Sequence” Nomor Sekuen Stop Condition
delay_us(10);
// delay 10 us
i2c_start();
// Start Condition
12
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement i2c_stop(); // Stop Condition
3.3.7. READ SEQUENCE STATUS Fungsi Command UART Command I2C Parameter Respon UART
Respon I2C
Delay antara Command dan Respon Keterangan
Memeriksa apakah modul SPC sedang menjalankan sebuah sekuen RS\r 0x06 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. 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. 10 µs -
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 I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x06); i2c_stop();
// // // //
delay_us(10);
// delay 10 us
i2c_start(); // i2c_write(0xE1); // temp1 = i2c_read(1);// temp2 = i2c_read(0);// i2c_stop(); //
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Read Sequence Status” Stop Condition Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Data status sekuen Stop Condition
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 I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x07); i2c_write(10); i2c_stop();
// // // // //
delay_us(25);
// delay 25 us
i2c_start(); // i2c_write(0xE1); // temp1 = i2c_read(1);// temp2 = i2c_read(1);// temp3 = i2c_read(1);// temp4 = i2c_read(0);// i2c_stop(); //
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Read Servo Position” Nomor Motor Servo Stop Condition Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Enable/Disable Pulsa Kontrol (MSB) Pulsa Kontrol (LSB) Stop Condition
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 Keterangan
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 •
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 I2C (misalkan alamat I2C = 0xE0): i2c_start(); i2c_write(0xE0); i2c_write(0x08); i2c_write(5); i2c_write(0); i2c_stop();
// // // // // //
delay_us(10);
// delay 10 us
i2c_start(); // i2c_write(0xE1); // temp1 = i2c_read(0);// i2c_stop(); //
4.
Start Condition Tulis ke modul SPC SERVO CONTROLLER Perintah “Set Enable/Disable Servo” Nomor Motor Servo Enable/Disable Stop Condition Start Condition Baca ke modul SPC SERVO CONTROLLER Data Acknowledgement Stop Condition
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 RS232. 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 I2C 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 J4 J5
SERVO1 SERVO2 SERVO3
SPC Servo Motor Controller
MOTOR SERVO
MOTOR SERVO
MOTOR SERVO
DT-AVR LCMS
(alamat I2C = 0xE0)
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 I2C ke SPC SERVO MOTOR CONTROLLER (alamat I 2C = 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 I2C. 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 J4 J5
MOTOR SERVO
SERVO1
MOTOR SERVO
SERVO2
MOTOR SERVO
SERVO3
SERIAL PORT PC
SPC Servo Motor Controller (UART RS232)
(alamat I2C = 0xE0)
J25
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 : [email protected] 21
LAMPIRAN A. Skematik SPC SERVO MOTOR CONTROLLER
22