INTERFACE ROTARY ENCODER
Mesin yang bergerak/berputar pada umumnya memerlukan pengukuran gerakan. Mulai dari peralatan mesin, mesin inspeksi, dan lain sebagainya, mulai dari mesin manual sampai otomatis, memiliki mekanisme pengukuran internal. Saat ini, komponen yang banyak digunakan untuk pengukuran gerakan adalah encoder. Encoder secara umum dapat dikategorikan ke dalam optical (photoelectric), magnetic encoder, dan tipe kontak mekanik. Photoelectric encoder memiliki tingkat akurasi yang tinggi, handal, dan relatif murah, mudah dalam aplikasinya. Ada dua tipe encoder yaitu rotary dan linier. Secara teknis, pada dasarnya sama, yang membedakan pada umumnya di aplikasinya. Rotary encoder Rotary encoder, atau disebut juga Shaft encoder, merupakan perangkat elektro-mekanikal yang digunakan untuk mengkonversi posisi anguler (sudut) dari shaft (lubang) atau roda ke dalam kode digital, menjadikannya semacam tranduser. Perangkat ini biasanya digunakan pada system akuator seperti motor DC dalam bidang robotika, perangkat masukan komputer (seperti optomekanikal mouse dan trackball), serta digunakan dalam kendali putaran radar, dll. Terdapat dua tipe utama rotary encoder, yaitu tipe absolut dan tipe relatif.
Rotary Encoder Absolut
Tipe ini (rotay encoder absolut) menghasilkan kode digital yang unik/khas untuk masing-masing beda sudut poros.Plat baja dipotong dengan bentuk tertentu kemudian ditempelkan ke piringan/cakram dengan penyekat dimana terpasang kuat dengan poros (shaft). Saat piringan berputar, beberapa kontaknya menyentuh plat baja, dan kontak yang lain tak menyentuh plat (yang berlubang). Plat baja tersebut terhubung dengan sumber arus listrik, dan masing-masing kontak terhubung ke sensor elektrik. Bentuk potongan plat baja tersebut dirancang sedemikian rupa sehingga memungkinkan masing-masing posisi poros membentuk kode biner yang unik dimana beberapa kontak terhubung ke sumber arus (switch ON) dan yang lain tak terhubung (switch OFF). Kode tersebut dapat dibaca oleh peraltan kontrol seperti mikroprosesor atau mikrokontroler, untuk menerjemahkan sudut dari poros. Berikut ini konstruksi absolut rotary encoder:
Relative/Incremental rotary encoder
Rotary Encoder Relatif (sering disebut juga Incremental Encoder) digunakan ketika metode pengkodean absolut tidak bisa digunakan (disebabkan ukuran dan bentuk piringan/cakram). Metode ini juga menggunakan piringan yang dipasang pada poros, tetapi ukuran piringan/cakram lebih kecil, dengan jumlah garis radial yang banyak, seperti jeruji roda. Sebuah saklar optik, seperti photodiode, menghasilkan pulsa listrik. Kemudian rangkaian kontrol elektronika menghitung pulsa untuk menerjemahkan sudut putar dari poros.
Sistem ini, dalam bentuk yang paling sederhana, tidak dapat mengukur sudut absolut dari poros. Sistem ini hanya dapat mengukur perubahan sudut relatif menjadi data yang berubah-ubah, seperti posisi poros pada saat power di-ON-kan. Ketidakpastian posisi ini tidak menjadi masalah untuk perangkat input komputer seperti mouse dan trackball. Ketika posisi absolut harus diketahui, maka bisa ditambahkan sensor kedua untuk mendeteksi ketika poros melewati posisi nol (zero).Permasalahan kedua yang bisa muncul di sistem ini adalah tidak dapat menentukan arah putaran poros. Untuk mengatasinya, dengan menambahkan sensor optik menjadi 2 buah sensor yang dipasang pada sudut yang berbeda. Arah putaran dapat diketahui dari hasil pembacaan dua sensor tersebut. Tipe encoder ini dikenal dengan Quadrature Encoder
Standar pengkodean Biner
Di bawah ini contoh kode biner, dimana encoder memiliki 3 kontak:
|
Sector |
Kontak 1 |
Kontak 2 |
Kontak 3 |
Sudut |
|
1 2 3 4 5 6 7 8 |
OFF OFF OFF OFF ON ON ON ON |
OFF OFF ON ON OFF OFF ON ON |
OFF ON OFF ON OFF ON OFF ON |
0o - 45 o 45 o – 90 o 90 o – 135 o 135 o – 180 o 180 o – 225 o 225 o – 270 o 270 o – 315 o 315 o – 360 o |
Secara umum, dimana terdapat n kontak, maka jumlah posisi poros adalah 2n. Misal, n = 3, maka terdapat 8 posisi poros.
Pada contoh di atas, kontak-kontak akan menghasilkan standar hitungan biner sebagai putaran Disk (piringan). Akan tetapi, hal ini memiliki kekurangan, yaitu bila piringan berhenti antara 2 perbatasan sektor, atau kontak-kontaknya tidak lurus secara sempurna, sehingga tidak memungkinkan untuk menerjemahkan sudut poros. Contoh, apa yang terjadi bila sudut poros berubah dari 179,9o sampai 180,1o (dari sektor 4 ke sektor 5). Sesuai dengan tabel di atas, kondisi kontak akan berubah dari OFF-ON-ON ke ON-OFF-OFF. Akan tetapi, hal ini bisa saja tidak sesuai dengan kenyataannya. Dalam prakteknya, kontak tidak pernah lurus sempurna, sehingga masing-masing akan terhubung pada momen(waktu) yang berbeda. Jika kontak 1 tersambung pertama, diikiuti kontak 3 dan kemudian kontak 2, maka sekuen/urutan kode aktualnya sebagai berikut:
OFF-ON-ON (posisi start)
ON-ON-ON (awal, kontak 1 ON)
ON-ON-OFF (selanjutnya, kontak 3 OFF)
ON-OFF-OFF (akhir, kontak 2 OFF)
Sekarang bisa diamati untuk sektor yang beraitan dengan kode-kode ini dalam tabel. Misalnya di sektor 4,8,7 dan 5. Sehingga, dari urutan kode yang dihasilkan, poros tampak seperti meloncat dari sektor 4 ke sektor 8, kemudian kembali ke sektor 7, dan akhirnya kembali ke sektor 5. Kondisi ini tentu saja tidak diinginkan karena bisa merusak sistem. Sebagai contoh, jika encoder digunakan dalam Arm Robot (robot lengan). Kontroler akan berpikir bahwa Arm dalam posisi yang salah, dan mencoba untuk membetulkan kesalahan tersebut dengan memutar lengan sampai 180o, dan mungkin bisa menyebabkan kerusakan lengan robot.
Untuk menghindari permasalahan di atas, maka digunakan Gray Encoding. Metode ini merupakan sistem penghitungan biner dimana dua kode yang berbatasan, dibedakan ke dalam satu posisi saja. Untuk 3 kontak pada contoh di atas, kode versi Gray ditunjukkan sebagai berikut:
Dalam contoh ini, perubahan dari sektor 4 ke sektor 5, dan juga seluruh perubahan/transisi, hanya satu kontak yang mengubah kondisinya dari ON ke OFF atau sebaliknya. Hal ini berarti bahwa sekuen dari kode yang salah seperti yang ditunjukkan dalam tabel sebelumnya, tidak dapat terjadi.
Pemrograman interface rotary encoder dengan software Code Vision AVR
Pada bahasan kali mencoba membaca jumlah putaran motor yang terhubung dengan rotary encoder. Rotary encoder dipasang pada poros motor, sehingga setiap perubahan posisi poros motor maka akan dideteksi melalui perubahan kondisi sinyal output rotary encoder. Pembacaan jumlah putaran motor ini menggunakan fasilitas Timer0 yang mengambil source clock dari sinyal output rotary. Berikut ini gambar inisialisasi Timer :
Pastikan pin output rotary terhubung dengan pin TO mikrokontroller, sehingga TimerO mengambil sumber clock secara eksternal dengan membaca kondisi sinyal pada pin To dan aktif saat kondisi sinyal pada batas low (Falling Edge).
Tambahkan rutin Timer0 overflow interrupt seperti berikut :
unsigned int counter;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
counter++;
}
Nilai hitungan register TCNTO akan terus bertambah bila kondisi falling edge sinyal input tercapai, saat hitungan TCNTO mencapai kondisi overflow terjadi interrupt dan mikrokontroller akan mengeksekusi rutin diatas. Variabel ‘counter’ bertambah setiap kali Timer0 mengalami overflow, sehingga nilai variable ‘counter’ ini dapat merepresentasikan jumlah putaran motor. Pada main function cukup memanggil variabel counter untuk mendapatkan data putaran motor. Berikut tampilan rutin main function :
void main(void)
{
unsigned int putaran_motor;
while(1)
{
putaran_motor=counter; //mengakses nilai counter dari rutin Timer0 interrupt
}
}
___edited with little addition of WOrkshop Robotika ’07___



