Halaman

SELAMAT DATANG DI BLOG SEPRIADI KOTO

Senin, 04 Juli 2011

Bermain dengan Servo Controller Devantech SD21 dan ATMega32

Gambar : SD21
SD21 adalah Servo Controller buatan Devantech yang memiliki interfaca I2C (Inter Integrated Circuit). Sesuai namanya, SD21 mampu mengontrol 21 buah RC-Servo (merk HiTec, Futaba, Tower Pro, dsb) secara individu baik posisi dan kecepatannya. Secara personal, saya suka make SD21 karena dia make komunikasi I2C dan Power Supply untuk Servo dan untuk controllernya bisa dibikin TERPISAH.. :D
Untuk spesifikasi lengkapnya, bisa langsung kunjungi :
http://www.robot-electronics.co.uk/htm/sd21tech.htm
Sekedar share pengalaman saya menggunakan SD21, kalo menggunakan SD21 untuk mode “Group Move” (menggerakkan beberapa servo secara bersamaan dengan sudut yg berbeda tetapi waktu yang diberikan sama) kita harus menghitung kecepatan dan delay dari masing – masing servo tersebut secara manual. Nah, untuk mempermudah menghitungnya, bisa menggunakan aplikasi “SD21 Speed and Delay Counter” yang dibikin oleh temen saya (Credit to : Mas Tiara Bagus S.P.A.) dan bisa di download disini :
http://www.mediafire.com/?etcxro8op78cyr5 
Cukup untuk perkenalan SD21 nya. Yang akan saya bahas kali ini adalah gimana cara make SD21 ini untuk mengontrol 10 buah RC-Servo (Hitec HS-7955TG). Disini saya menggunakan Channel Servo 1 – 10 pada SD21 nya dan untuk Power Supply ke servonya saya memakai Batre LiPo 11,1V/1300mAH + UBEC (Ultimate Battery Eliminator Circuit) 6V/8A dan saya pisahkan dari Power Supply untuk controller dan Mikro masternya..
Berikut hasilnya :

Listing Programnya :
'Oleh : Pramudita J.I.  (joe4cva)
'Elektronika Dan Instrumentasi
'Universitas Gadjah Mada

$regfile = "m32def.dat"
$framesize = 42
$swstack = 42
$hwstack = 42
$crystal = 16000000
$baud = 9600

Const Sd21_slaveid = &HC2
Declare Function Sd21_version() As Byte
Declare Sub Posisi(byval Servo As Byte , Byval Position As Word)
Declare Sub Kecepatan(byval Servo As Byte , Byval Speed As Byte)

Config Scl = Portc.0
Config Sda = Portc.1
Dim I As Byte

I2cinit
Print "SD21 Testprogramm "
Print "SD21 Firmware Version:" ; Sd21_version()

Wait 2

Do
'Kecepatan Channel_Servo , Nilai_Kecepatan   (Nilai Kecepatan antara 0 - 255)
Kecepatan 1 , 80
Kecepatan 2 , 80
Kecepatan 3 , 80
Kecepatan 4 , 80
Kecepatan 5 , 80
Kecepatan 6 , 80
Kecepatan 7 , 80
Kecepatan 8 , 80
Kecepatan 9 , 80
Kecepatan 10 , 80

For I = 0 To 2
'Posisi Channel_Servo , Sudut_Servo   (Sudut servo dalam lebar pulsa dg satuan uS antara 800 - 2200)
Posisi 1 , 800
Posisi 2 , 800
Posisi 3 , 800
Posisi 4 , 800
Posisi 5 , 800
Posisi 6 , 800
Posisi 7 , 800
Posisi 8 , 800
Posisi 9 , 800
Posisi 10 , 800
Waitms 500

Posisi 10 , 2200
Posisi 9 , 2200
Posisi 8 , 2200
Posisi 7 , 2200
Posisi 6 , 2200
Posisi 5 , 2200
Posisi 4 , 2200
Posisi 3 , 2200
Posisi 2 , 2200
Posisi 1 , 2200
Waitms 500
Next I

Kecepatan 1 , 60
Kecepatan 2 , 60
Kecepatan 3 , 60
Kecepatan 4 , 60
Kecepatan 5 , 60
Kecepatan 6 , 60
Kecepatan 7 , 60
Kecepatan 8 , 60
Kecepatan 9 , 60
Kecepatan 10 , 60

Posisi 1 , 1500
Posisi 2 , 1500
Posisi 3 , 1500
Posisi 4 , 1500
Posisi 5 , 1500
Posisi 6 , 1500
Posisi 7 , 1500
Posisi 8 , 1500
Posisi 9 , 1500
Posisi 10 , 1500
Waitms 700

Posisi 3 , 800
Posisi 8 , 800
Waitms 500
Posisi 3 , 2200
Posisi 8 , 2200
Waitms 700
Posisi 3 , 1500
Posisi 8 , 1500
Waitms 700

Posisi 1 , 800
Posisi 6 , 800
Posisi 2 , 800
Posisi 7 , 800
Posisi 4 , 2200
Posisi 9 , 2200
Posisi 5 , 2200
Posisi 10 , 2200
Waitms 700

Posisi 1 , 2200
Posisi 6 , 2200
Posisi 5 , 800
Posisi 10 , 800
Waitms 600

Posisi 1 , 800
Posisi 2 , 2200
Posisi 4 , 800
Posisi 5 , 2200
Posisi 6 , 800
Posisi 10 , 2200
Posisi 7 , 2200
Posisi 9 , 800
Waitms 700

Posisi 1 , 1500
Posisi 2 , 1500
Posisi 4 , 1500
Posisi 5 , 1500
Posisi 6 , 1500
Posisi 7 , 1500
Posisi 9 , 1500
Posisi 10 , 1500
Waitms 700

Loop
End

Function Sd21_version() As Byte
Local Firmware As Byte
Local I2cread As Byte
I2cread = Sd21_slaveid + 1
I2cstart
I2cwbyte Sd21_slaveid
I2cwbyte 64
I2cstop
I2cstart
I2cwbyte I2cread
I2crbyte Firmware , Nack
I2cstop
Sd21_version = Firmware
End Function
Return

Sub Posisi(byval Servo As Byte , Byval Position As Word)
Local Register As Byte
Local Lowpos As Byte
Local Highpos As Byte
Register = Servo - 1
Register = Register * 3
Register = Register + 1
Lowpos = Low(position)
Highpos = High(position)
I2cstart
I2cwbyte Sd21_slaveid
I2cwbyte Register
I2cwbyte Lowpos
I2cwbyte Highpos
I2cstop
End Sub
Return

Sub Kecepatan(byval Servo As Byte , Byval Speed As Byte)
Local Register As Byte
Register = Servo - 1
Register = Register * 3
I2cstart
I2cwbyte Sd21_slaveid
I2cwbyte Register
I2cwbyte Speed
I2cstop
End Sub
Return

Tidak ada komentar:

Posting Komentar