S
mart
P
eripheral
C
ontroller
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 I2C... 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
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 I2C. 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
di-cascade 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.
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
TX
5 4 3 2
J25 Tampak Depan
GND RX
SCL SDA
SCL SDA
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 I2C.
Pin Nama Fungsi
1 GND Titik referensi
2 SDA I2C-bus data input / output 3 SCL 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)
Pull-up aktif
(jumper terpasang)
Penting !
Apabila lebih dari satu modul dihubungkan pada I2C-bus maka jumper PULL-UP (SCL/SDA) salah satu modul saja yang perlu dipasang.
Jumper ADDR (J2) berfungsi untuk mengatur alamat I2C dari modul SPC SERVO MOTOR CONTROLLER.
J2 (A2)
Pin 1-2 J2 (A1)Pin 3-4 Pin 5-6J2(A0)
Alamat I2C
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
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 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 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 I2C. 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 I2C 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
Berikut urutan yang harus dilakukan untuk mengirimkan perintah melalui
antarmuka I2C.
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 Acknowledged/NCK) pada buffer I2C-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.
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.
+ + + + 1 1 1 0 X X X 0 Alamat Tulis X X X X X X X X Command X X X X X X X X
Parameter 1 (jika ada) Start
Stop +
+ X X X X X X X X
Parameter n (jika ada) ... + 1 1 1 0 X X X 1 + Alamat Baca Start + + 0 0 0 X 0 1 X X ACK / NCK X X X X X X X X
Data 1 (jika ada) Stop
+
+ X X X X X X X X
Data n (jika ada) ...
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 Respon
10 µs
Keterangan
-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(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x00); // Perintah “Ping”
i2c_stop(); // Stop Condition delay_us(10); // delay 10 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp = i2c_read(0); // Data Acknowledgement
i2c_stop(); // Stop Condition
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 Command dan Respon 10 µs Keterangan
-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(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x01); // Perintah “Get Version Number”
i2c_stop(); // Stop Condition delay_us(10); // delay 10 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(1);// Data Acknowledgement
temp2 = i2c_read(1);// Version Number temp3 = i2c_read(0);// Revision Number i2c_stop(); // Stop Condition
3.3.3. RUN SERVO
Fungsi Memutar motor servo tertentu
Command UART RN <ServoNum> <ServoPulse> <Rate>\r Command I2C 0x02 <ServoNum> <ServoPulse> <Rate> Parameter <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. 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 Respon
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.
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(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x02); // Perintah “Run Servo Motor”
i2c_write(1); // Nomor Motor Servo
i2c_write(0x05); // Lebar pulsa kontrol (MSB) i2c_write(0xDC); // Lebar pulsa kontrol (LSB) i2c_write(10); // Rate
i2c_stop(); // Stop Condition delay_us(15); // delay 15 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement
i2c_stop(); // Stop Condition
3.3.4. SET HOME
Fungsi Menentukan posisi Home untuk motor servo tertentu Command UART ST <ServoNum> <ServoPulse>\r
Command I2C 0x03 <ServoNum> <ServoPulse> Parameter <ServoNum>
1 - 20 nomor motor servo yang akan diperintah <ServoPulse>
500 - 2500 lebar pulsa kontrol servo dengan resolusi 1 µs.
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 Respon
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 I2C (misalkan alamat I2C = 0xE0):
i2c_start(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x03); // Perintah “Set Home”
i2c_write(2); // Nomor Motor Servo
i2c_write(0x04); // Lebar pulsa kontrol (MSB) i2c_write(0xE2); // Lebar pulsa kontrol (LSB) i2c_stop(); // Stop Condition
delay_us(100); // delay 100 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement
i2c_stop(); // Stop Condition
3.3.5. GO TO HOME
Fungsi Memerintahkan motor servo untuk kembali ke posisi Home
Command UART HM <ServoNum> <Rate>\r Command I2C 0x04 <ServoNum> <Rate> Parameter <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 masing-masing 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. 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 Respon
10 µs
Keterangan
-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(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x04); // Perintah “Go to Home”
i2c_write(3); // Nomor Motor Servo i2c_write(50); // Rate
i2c_stop(); // Stop Condition delay_us(10); // delay 10 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement
i2c_stop(); // Stop Condition
3.3.6. START SEQUENCE
Fungsi Menjalankan sekuen gerakan yang tersimpan di EEPROM
Command UART SS <SeqNum>\r Command I2C 0x05 <SeqNum> Parameter <SeqNum>
1 - 32 nomor sekuen gerakan yang akan dijalankan
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 Respon
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 I2C (misalkan alamat I2C = 0xE0):
i2c_start(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x05); // Perintah “Start Sequence”
i2c_write(2); // Nomor Sekuen i2c_stop(); // Stop Condition delay_us(10); // delay 10 us i2c_start(); // Start Condition
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 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 Command dan Respon 10 µs 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 I2C (misalkan alamat I2C = 0xE0):
i2c_start(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x06); // Perintah “Read Sequence Status” i2c_stop(); // Stop Condition
delay_us(10); // delay 10 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(1);// Data Acknowledgement
temp2 = i2c_read(0);// Data status sekuen i2c_stop(); // Stop Condition
3.3.8. READ SERVO STATUS & POSITION
Fungsi Memeriksa status aktifnya dan posisi lebar pulsa kontrol motor servo tertentu
Command UART RD <ServoNum>\r Command I2C 0x07 <ServoNum> Parameter <ServoNum>
1 - 20 nomor motor servo yang akan dibaca posisinya
Respon UART 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.
Respon I2C 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. Delay antara Command dan Respon 25 µs Keterangan
-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(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x07); // Perintah “Read Servo Position” i2c_write(10); // Nomor Motor Servo
i2c_stop(); // Stop Condition delay_us(25); // delay 25 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(1);// Data Acknowledgement
temp2 = i2c_read(1);// Enable/Disable temp3 = i2c_read(1);// Pulsa Kontrol (MSB) temp4 = i2c_read(0);// Pulsa Kontrol (LSB) i2c_stop(); // Stop Condition
lebar pulsa kontrol = ( temp3 x 256 ) + temp4 (dalam satuan µs) 3.3.9. ENABLE/DISABLE SERVO
Fungsi Mengaktifkan atau menon-aktifkan motor servo tertentu Command UART EN <ServoNum> <En/Dis>\r
Command I2C 0x08 <ServoNum> <En/Dis> Parameter <ServoNum>
1 - 20 nomor servo yang diatur <En/Dis>
0 menon-aktifkan (Disable) motor servo 1 mengaktifkan (Enable) motor servo 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 Respon
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 I2C (misalkan alamat I2C = 0xE0):
i2c_start(); // Start Condition
i2c_write(0xE0); // Tulis ke modul SPC SERVO CONTROLLER i2c_write(0x08); // Perintah “Set Enable/Disable Servo” i2c_write(5); // Nomor Motor Servo
i2c_write(0); // Enable/Disable i2c_stop(); // Stop Condition delay_us(10); // delay 10 us i2c_start(); // Start Condition
i2c_write(0xE1); // Baca ke modul SPC SERVO CONTROLLER temp1 = i2c_read(0);// Data Acknowledgement
i2c_stop(); // Stop Condition
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
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
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.
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).
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)
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 I2C = 0xE0) agar motor servo 1, 2, dan 3 menuju ke posisi 2 ms dengan rate masing- masing 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: SPC Servo Motor Controller (alamat I2C = 0xE0) MOTOR SERVO
DT-AVR
LCMS
SERVO1 J4 J3 J5 MOTOR SERVO SERVO2 MOTOR SERVO SERVO3Setelah 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] SPC Servo Motor Controller (alamat I2C = 0xE0) J25 (U A R T R S 2 3 2 )
S
E
R
IA
L
P
O
R
T
P
C
MOTOR SERVO SERVO1 J4 J3 J5 MOTOR SERVO SERVO2 MOTOR SERVO SERVO3LAMPIRAN A.