LabVIEW Team Indonesia

cancel
Showing results for 
Search instead for 
Did you mean: 

[HELP!] ROTARY ENCODER

salam kenal,

saya idris.

mau tanya untuk penggunaan rotary encoder di sbRIO-9631, bagaimana mendapatkan counter yang tepat untuk mengukur jarak dengan kecepatan yang berbeda"?

karena saya telah membuat program tetapi counter pada kecepatan lambat dan cepat berbeda hasilnya, tolong dibantu. terima kasih

Message 1 of 8
(6,518 Views)

sebelumnya, mohon diberikan informasi lebih jelas:

1. program VI nya termasuk project filenya. karena ini sbRIO, pasti harus pakai project. di zip aja biar gampang

2. di jelaskan dulu datasheet rotary encodernya seperti apa? ada datasheet? signal nya apa? A, B, Z? single-ended atau diff?

Certified LabVIEW Developer (CLD)
Certified TestStand Developer (CTD)
Using LabVIEW 8.5.1 (2008) to LabVIEW 2021
0 Kudos
Message 2 of 8
(4,425 Views)

Terima Kasih mas, berikut saya kirimkan program dan datasheet nya, sampai saat ini saya hanya menggunakan output A nya saja, Mohon bantuannya ya mas.

Terima kasih.

0 Kudos
Message 3 of 8
(4,425 Views)

Halo Idris,

Saya kurang mengerti maksud pertanyaannya, perbedaan apa yang terilhat dan apa ekspektasinya? Soalnya keluaran counter saat low-speed dan high-speed dalam durasi yang sama pasti berbeda.

Bagaimanapun juga, setelah melihat-lihat VI di atas, saya melihat ada dua bagian yang bisa menyebabkan hasil jadi tidak benar:

1. Transfer data dari FPGA ke Host

FPGA - Front Panel Communication.jpg

Di dalam FPGA VI-nya, data Rotary_Left & Rotary_Right dikirim lewat front panel yang kemudian dibaca Host (istilah resminya Programmatic Front Panel Communication). Jadi setiap update dari FPGA, data di Host ikut update. Masalahnya untuk aplikasi anda, ini tidak ada buffer jadi kalau FPGA update-nya terlalu cepat atau Host-nya lambat, maka datanya hilang sehingga bacaannya salah. Untuk transfer data yang jumlahnya besar dan tidak boleh terlewat (seperti data rotary encoder), sebaiknya pakai DMA (Direct Memory Access) karena ini ada buffer sehingga tidak ada data yang hilang. Dari input Loop Timer di VI anda, bisa dilihat bahwa FPGA update setiap 10 ms tapi Host hanya setiap 100 ms, jadi pasti data yang di tengah-tengah hilang.

2. Transfer data encoder dari loop pembaca ke loop analisa di Host VI

Host - Race Condition.jpg

Di Host VI, data encoder dari FPGA diambil oleh satu loop (sebutlah pembaca) kemudian ditransfer ke loop lain (sebutlah analisa) lewat Local Variable. Desain seperti ini dapat menyebabkan Race Condition jika kedua loop tidak sinkron. Ini konsepnya mirip seperti di atas tapi ranahnya antara beberapa loop di dalam satu VI. Silahkan coba contoh Race Condition di sini. Untuk koreksi, proses analisanya bisa digabung ke loop pembaca atau jika loop-nya harus terpisah bisa pakai Real-Time FIFO (yang memiliki buffer seperti DMA di atas).

Setelah koreksi yang di atas, coba dicek dulu waveform dari encoder output untuk memastikan transfernya sudah benar. Selain itu, saran saya, sebaiknya dibaca lagi konsep-konsep fundamental LabVIEW Real-Time dan FPGA. Yang paling lengkap bisa dilihat di LabVIEW Help lalu akses Real-Time Module dan FPGA Module dari Contents. Referensi lainnya dari NI juga ada.


Setelah itu, coba implementasi best practice berikut:

- Analisa encoder dilakukan di FPGA dan Host hanya menampilkan data. Ini mengurangi beban proses di Host.

- Pakai Single-Cycle Timed-Loop di FPGA (bukan While Loop) untuk dapat performace yang jauh lebih optimal.

- Selalu tutup Refnum ke FPGA di Host dengan menjalankan Close FPGA VI Reference. Di Host VI yang sekarang, loop pembaca tidak pernah berhenti jadi Refnum tidak terhapus dari memori dan dia pakai lokasi memori baru saat jalan lagi. Ini istilahnya Memory Leak. Jika sbRIO-nya dipakai berkali-kali, bisa jadi lokasi memorinya habis dan dia hang (harus manual reset).

Semoga info ini membantu ya. Sukses untuk TA-nya.

Salam,

Yodha

NI Singapore

0 Kudos
Message 4 of 8
(4,425 Views)

Terima Kasih ya pak, ini sangat membantu.

mungkin ada referensi atau contoh untuk pemrograman rotary encoder pak?

mohon bantuannya pak.

terima kasih.

Message 5 of 8
(4,425 Views)

Kalau cari contoh langsung saja ke ni.com. Ini contoh cara nyarinya:

http://search.ni.com/nisearch/app/main/p/bot/no/ap/tech/lang/en/pg/1/sn/catnav:ex/q/encoder%20rio/

Silahkan dicoba.

0 Kudos
Message 6 of 8
(4,425 Views)

terima kasih banyak ya pak Yodha, ini sangat bermanfaat. lain waktu boleh tanya lagi ya pak. hehehheee

0 Kudos
Message 7 of 8
(4,425 Views)

Ya boleh, silahkan aja tanya di sini. Tapi sebelum tanya, baiknya coba cari sendiri dulu solusinya ya, jadi gak lama nunggu jawaban dari sini.

0 Kudos
Message 8 of 8
(4,425 Views)