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:

absolut

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.

incremental2

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:

gray code

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 :

init-timer1

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___

  1. No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.