Motor stepper sering mahal untuk motor besar. Namun, dengan motor DC standar yang kuat dan rotary encoder, Anda dapat "mensimulasikan" motor stepper. Seberapa akuratkah rotary encoders dengan Arduino hanya dengan loop dasar dan tidak banyak kode lainnya? Apakah akan "kehilangan pulsa" dan tidak cukup sering merekam rotasi? Bagaimana saya bisa menangani ini dengan lebih banyak kode? Apakah ada cara yang lebih baik untuk melakukan ini? Apakah interupsi membantu? Apakah ada semacam rangkaian yang akan membantu dengan masalah ini?
Catatan: Ini mungkin tidak akan melebihi 4 rotasi per detik ... (Itu mungkin banyak tetapi jika Anda melakukan mekanisme jenis sekrup timah yang hanya 24 inci per menit jika ada 10 rotasi per inci dari gerakan linear. )
sumber
Jawaban:
Interupsi adalah apa yang akan Anda gunakan dalam situasi ini.
Tingkat yang telah Anda sebutkan cukup lambat di mana Anda mungkin akan dapat menghitungnya di dalam sebuah loop, namun ini tidak disarankan, karena loop tipikal akan membutuhkan banyak siklus clock untuk diselesaikan, dan tergantung pada jumlah instrumen per loop , Anda mungkin kehilangan beberapa hitungan.
Interupsi dibuat untuk tujuan ini, karena mereka dapat dipicu kapan saja, terlepas dari keadaan loop.
Ada fungsi bernama
attachInterrupt()
yang akan mengambil tiga argumen.Di bawah ini adalah contoh untuk menghitung interupsi
Mode adalah sebagai berikut:
Informasi lebih lanjut tentang menggunakan interupsi dapat ditemukan di sini .
Bergantung pada pembuat enkode yang Anda gunakan, Anda perlu menyesuaikan kode kebutuhan Anda, dan melakukan beberapa perhitungan lagi untuk menentukan posisi Anda, tetapi ini harus menjadi titik awal yang baik.
Sunting Berikut ini adalah beberapa contoh kode dari Arduino Sandbox untuk menggunakan rotary encoder.
sumber
ISR_NAKED()
), Anda dapat melewati penyimpanan konteks C otomatis, dan menarik laju interupsi 100-500 Khz tanpa masalah, tetapi pada dasarnya Anda menulis assembly dalam C pada saat itu.ISR()
secara langsung.Menambahkan beberapa referensi ke perpustakaan dan contoh yang sudah ditulis, untuk memungkinkan perbandingan antara pendekatan yang berbeda, dan pengalaman dengan kecepatan versus kerentanan terhadap langkah-langkah yang hilang.
Membaca rotary encoders: http://playground.arduino.cc/Main/RotaryEncoders
Quadrature Encoder terlalu cepat untuk Arduino (dengan Solusi): http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/
Perpustakaan Encoder Teensy: https://www.pjrc.com/teensy/td_libs_Encoder.html
Membaca rotary encoder di Arduino: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/
sumber