Isi kandungan:

Cara Mentafsirkan Arah Putaran Dari Suis Putar Digital Dengan PIC: 5 Langkah
Cara Mentafsirkan Arah Putaran Dari Suis Putar Digital Dengan PIC: 5 Langkah

Video: Cara Mentafsirkan Arah Putaran Dari Suis Putar Digital Dengan PIC: 5 Langkah

Video: Cara Mentafsirkan Arah Putaran Dari Suis Putar Digital Dengan PIC: 5 Langkah
Video: SULTAN MEDAN INDRAKENZ NAIK JET PRIBADI KE PULAU PRIBADI!! 2024, Julai
Anonim
Cara Mentafsirkan Arah Putaran Dari Suis Putar Digital Dengan PIC
Cara Mentafsirkan Arah Putaran Dari Suis Putar Digital Dengan PIC

Objektif untuk Instructable ini adalah untuk menggambarkan bagaimana menghubungkan suis putar digital (quadrature coded) dengan mikrokontroler. Jangan bimbang, saya akan menerangkan maksud kod kuadrat bagi kami. Antaramuka ini dan perisian yang menyertainya akan membolehkan mikrokontroler mengenali arah putaran untuk setiap pergerakan dari satu tahanan ke yang lain. Saya baru-baru ini menggunakan suis jenis ini dalam projek mikrokontroler yang memerlukan titik set tekanan dimasukkan menggunakan tombol dengan 16 menahan diri daripada butang atas / bawah. Ideanya adalah untuk membolehkan pengguna "memanggil" tekanan yang diinginkan. Akibatnya, kami harus mengembangkan rutin perisian untuk mendapatkan maklumat kedudukan dari suis dan menyimpulkan arah putaran untuk meningkatkan atau menurunkan titik set tekanan untuk sistem utama. Dalam Instruktif ini, saya akan merangkumi antara muka fizikal kepada mikrokontroler, teori operasi untuk suis putar, teori operasi untuk perisian dan juga rutin pemotongan. Akhirnya, saya akan menunjukkan kepada anda aplikasi pemotongan rutin saya. Semasa kita maju, saya akan berusaha memastikan sesuatu menjadi umum sehingga idea itu dapat diterapkan pada seberapa banyak platform yang mungkin tetapi saya juga akan berkongsi apa yang saya buat sehingga anda dapat melihat aplikasi tertentu.

Langkah 1: Bahagian

Bahagian
Bahagian

Untuk melaksanakannya, anda memerlukan: Suis putar (berkod kuadratur) Tarik perintang Pelantar mikrokontroler yang sesuai Untuk projek saya, saya menggunakan pengekod optik Grayhill 61C22-01-04-02. Lembaran data untuk suis putar memerlukan perintang penarik 8.2k ohm pada dua baris data yang berasal dari suis. Anda ingin memeriksa lembaran data untuk pengekod yang anda pilih untuk digunakan. Suis putar yang saya gunakan juga boleh dipesan dengan suis butang tekan paksi. Ini adalah ciri yang berguna untuk melakukan pilihan yang telah didail, dll. Tetapi saya tidak akan membincangkan antara muka di sini. Saya mempunyai "platform mikrokontroler yang sesuai" yang disenaraikan kerana (saya rasa) ini dapat dilaksanakan di lebih dari satu platform. Saya telah melihat banyak orang menggunakan pengawal mikro lain untuk Instructables jadi saya ingin menunjukkan pendekatan umum juga. Saya menulis semua kod dalam PIC Basic Pro untuk digunakan dengan Microchip PIC16F877A. Sungguh, perkara utama yang anda perlukan pada mikrokontroler adalah kemampuan untuk mengganggu apabila terdapat perubahan logik pada salah satu daripada dua pin. Pada PIC16F877A, ini dipanggil gangguan PORTB. Mungkin ada nama lain untuknya pada pengawal lain. Ciri gangguan mikrokontroler ini adalah sebahagian daripada apa yang menjadikan pelaksanaan ini begitu elegan.

Langkah 2: Antara Muka Perkakasan

Antara Muka Perkakasan
Antara Muka Perkakasan

Penyelesaian "sederhana" ialah dengan menukar suis "tiang tunggal-16" dengan 16 sambungan ke mikrokontroler. Setiap output suis kemudian akan diikat pada pin pada mikrokontroler sehingga setiap posisi dail dapat diperiksa oleh mikrokontroler. Ini adalah penggunaan pin I / O yang berlebihan. Segala-galanya menjadi lebih buruk lagi jika kita mahu lebih daripada 16 kedudukan (penahanan) tersedia untuk kita pada suis. Setiap kedudukan tambahan pada suis memerlukan input tambahan ke mikrokontroler. Ini dengan cepat menjadi penggunaan input yang tidak cekap pada mikrokontroler. Masukkan keindahan suis putar. Suis putar hanya mempunyai dua output ke mikrokontroler yang disenaraikan sebagai A dan B pada lembaran data. Hanya ada empat tahap logik yang mungkin diambil oleh garis-garis ini: AB = 00, 01, 10 dan 11. Ini sangat mengurangkan bilangan baris input yang mesti anda gunakan untuk menyambungkan suis ke mikrokontroler. Oleh itu, kami telah mengurangkan bilangan baris input menjadi hanya dua. Bagaimana sekarang? Nampaknya kita benar-benar memerlukan 16 keadaan yang berbeza tetapi suis baru ini hanya mempunyai empat. Adakah kita telah menembak kaki kita sendiri? Tidak. Teruskan membaca. Kami akan membahas sedikit teori di sebalik operasi suis putar untuk menjelaskan.

Langkah 3: Teori Operasi Perkakasan

Teori Operasi Perkakasan
Teori Operasi Perkakasan
Teori Operasi Perkakasan
Teori Operasi Perkakasan
Teori Operasi Perkakasan
Teori Operasi Perkakasan

Penginderaan arah putaran mungkin dilakukan dengan menggunakan suis "tiang tunggal-16" yang disebutkan di atas tetapi ia menggunakan banyak input pada mikrokontroler. Menggunakan suis putar mengurangkan bilangan input ke mikrokontroler tetapi sekarang kita perlu mentafsirkan isyarat yang datang dari suis dan menerjemahkannya ke arah putaran. Saya telah menyebutkan sebelumnya bahawa suis itu dikodkan kuadratur. Ini juga merupakan salah satu keutamaan utama dalam penyelesaian ini. Ini bermaksud bahawa ada kod 2-bit yang diberikan oleh suis yang sesuai dengan kedudukan suis. Anda mungkin berfikir: "Sekiranya terdapat input dua bit ke mikrokontroler, bagaimana kita mewakili semua 16 kedudukan?" Itu soalan yang baik. Kami tidak mewakili mereka semua. Kita hanya perlu mengetahui kedudukan relatif tombol sehingga kita dapat menentukan arah putaran. Kedudukan kenop mutlak tidak relevan. Untuk putaran mengikut arah jam, kod yang diberikan oleh suis berulang setiap empat penahanan dan dikodkan kelabu. Berkod kelabu bermaksud bahawa hanya ada satu perubahan bit untuk setiap perubahan kedudukan. Daripada input AB yang dihitung untuk putaran mengikut arah jam dalam binari seperti ini: 00, 01, 10, 11, ia berubah seperti ini: 00, 10, 11, 01. Perhatikan bahawa untuk corak yang terakhir, hanya ada satu input yang berubah antara set. Nilai berlawanan arah jam untuk input AB ke mikrokontroler akan kelihatan seperti ini: 00, 01, 11, 10. Ini hanyalah kebalikan dari pola arah jam dengan AB = 00 disenaraikan terlebih dahulu. Lihat rajah untuk penjelasan yang lebih visual.

Langkah 4: Teori Operasi Perisian

Teori Operasi Perisian
Teori Operasi Perisian

Rutin yang menyimpulkan arah putaran didorong oleh gangguan. Mikrokontroler yang anda pilih perlu dapat mengganggu bila-bila masa terdapat perubahan pada salah satu (sekurang-kurangnya) dua pin semasa gangguan diaktifkan. Ini dipanggil gangguan PORTB pada PIC16F877A. Bila-bila masa suis diputar, mikrokontroler akan terganggu dan pelaksanaan program akan dihantar ke Interrupt Service Routine (ISR). ISR dengan cepat akan mengetahui cara suis diputar, menetapkan bendera dengan tepat dan cepat kembali ke program utama. Kami memerlukan ini berlaku dengan cepat sekiranya pengguna memutar suis dengan sangat pantas. Kita tahu corak AB berkod kelabu mengulang setiap empat kedudukan jadi jika kita membuat rutin berfungsi untuk peralihan antara keempat kedudukan itu, ia akan berfungsi untuk semua yang lain. Perhatikan bahawa dalam satu pusingan empat kedudukan, terdapat empat sisi. Tepi naik dan tepi jatuh untuk input A serta input B. Mikroprosesor akan terganggu setiap kali terdapat sisi yang bermaksud bahawa mikrokontroler akan terganggu setiap kali tombol dipusingkan. Hasilnya, ISR perlu mengetahui cara tombol dipusingkan. Untuk membantu kami mengetahui cara melakukan ini, kami beralih ke bentuk gelombang untuk putaran mengikut arah jam. Perhatikan bahawa bila-bila masa A mempunyai kelebihan, nilai barunya selalu berbeza dengan nilai B. Apabila tombol beralih dari kedudukan 1 hingga 2, A beralih dari logik-0 ke logik-1. B masih 0 untuk peralihan ini dan tidak sepadan dengan nilai baru A. Apabila tombol beralih dari kedudukan 3 hingga 4, A mempunyai kelebihan jatuh sementara B tetap berada pada logik-1. Perhatikan lagi, bahawa B dan nilai baru A berbeza. Sekarang, kita dapat melihat bahawa bila-bila masa A menyebabkan gangguan semasa putaran mengikut arah jam, nilai barunya berbeza dengan nilai B. Mari periksa B untuk melihat apa yang berlaku. B mempunyai kelebihan yang meningkat apabila suis beralih dari kedudukan 2 ke 3. Di sini, nilai B yang baru sama dengan A. Melihat tepi yang terakhir untuk putaran mengikut arah jam, B mempunyai tepi jatuh yang bergerak dari kedudukan 4 ke 5. (Kedudukan 5 sama dengan kedudukan 1.) Nilai B yang baru sama dengan A di sini juga! Kami kini boleh membuat beberapa potongan! Sekiranya A menyebabkan gangguan dan nilai baru A berbeza dari nilai B, putarannya mengikut arah jam. Selain itu, jika B menyebabkan gangguan dan nilai baru B sama dengan A, maka putarannya mengikut arah jam. Mari kita periksa dengan cepat kes putaran berlawanan arah jam. Sama seperti putaran mengikut arah jam, putaran berlawanan arah jarum jam akan menyebabkan empat gangguan dalam satu kitaran: dua untuk input A dan dua untuk input B. Input A mempunyai tepi yang meningkat apabila tombol bergerak dari kedudukan 4 hingga 3 dan tepi jatuh bergerak dari kedudukan 2 ke 1 Apabila tombol bergerak dari kedudukan 4 ke 3, nilai A yang baru sama dengan nilai B. Perhatikan bahawa apabila A bergerak dari kedudukan 2 ke 1 nilai barunya sama dengan nilai B juga. Sekarang, kita dapat melihat bahawa ketika A menyebabkan gangguan dan nilai barunya sepadan dengan nilai B, putaran berlawanan arah jam. Dengan pantas, kita akan melihat input B untuk mengesahkan semuanya. B akan menyebabkan gangguan ketika tombol bergerak dari kedudukan 5 (yang sama dengan 1) ke 4 dan ketika tombol bergerak dari kedudukan 3 ke 2. Dalam kedua kes ini, nilai B yang baru tidak sepadan dengan nilai yang ada dari A yang berlawanan dengan kes apabila B menyebabkan gangguan untuk putaran mengikut arah jam. Ini adalah berita baik. Semuanya diperiksa sebagaimana mestinya. Untuk meringkaskan, jika A menyebabkan gangguan dan nilai barunya tidak sepadan dengan nilai B atau jika B menyebabkan gangguan dan nilai baru B sepadan dengan nilai A kita tahu ada putaran searah jarum jam. Kita boleh memeriksa kes lain untuk putaran berlawanan arah jarum jam dalam perisian atau kita dapat menganggap bahawa kerana bukan putaran searah jarum jam, ia berlawanan arah jarum jam. Rutin saya hanya membuat andaian.

Langkah 5: Perisian

Perisian
Perisian
Perisian
Perisian

Saya tidak menggunakan interupsi bawaan dalam PIC Basic Pro. Saya menggunakan beberapa fail yang saya sertakan dalam kod saya dari Darrel Taylor untuk memacu rutin. Di sinilah kepujian besar kepada Darrel! Failnya percuma. Cukup lawati laman webnya untuk maklumat lebih lanjut, aplikasi lain dan memuat turun fail. Anda boleh melewatkan bahagian ini jika anda tidak menggunakan PIC dengan gangguan Darrel Taylor. Cukup atur gangguan yang diperlukan pada platform yang anda gunakan. Untuk mengatur gangguan Darrel Taylor (DT) terdapat dua perkara yang perlu dilakukan: 1.) Sertakan fail DT_INTS-14.bas dan ReEnterPBP.bas di kod.2.) Salin dan tampal ini ke dalam kod anda. ASMINT_LIST makro; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _ISR, PBP, yes endm INT_CREATEENDASMMasukkan tab dan ruang seperti grafik pada akhir Instructable supaya anda dapat melihat perkara yang lebih mudah dalam kod anda. Anda perlu mengubahnya sedikit agar sesuai dengan keperluan anda. Di bawah Label, ganti ISR dengan nama subrutin yang merupakan ISR anda. Jangan lupa garis bawah! Anda memerlukannya! Untuk menghentikan gangguan, terdapat dua perkara lagi yang perlu dilakukan: 1.) Tulis ISR. Anda akan menulisnya seperti anda akan menulis subrutin PBP kecuali anda perlu memasukkan @ INT_RETURN pada akhir subrutin dan bukan KEMBALI. Ini akan mengakui pelaksanaan program interrupt dan return ke tempat yang berhenti dalam loop utama. Di dalam ISR, anda perlu membersihkan bendera interrupt supaya program anda tidak terjebak dalam gangguan berulang. Cukup membaca PORTB adalah yang perlu dilakukan untuk membersihkan bendera gangguan pada PIC16F877A. Setiap mikrokontroler yang berbeza mempunyai cara yang berbeza untuk membersihkan bendera gangguan. Periksa lembaran data untuk mikrokontroler anda. 2.) Apabila anda mencapai titik dalam kod anda bahawa anda ingin mengaktifkan gangguan, gunakan baris kod ini: @ INT_ENABLE RBC_INTJika anda ingin melumpuhkan gangguan hanya gunakan: @ INT_DISABLE RBC_INTAda banyak barang yang dimasukkan ke dalam perkara yang baru saya bahas jadi saya akan membuat kesimpulan dengan cepat. Setakat ini, program anda semestinya kelihatan seperti ini:; Apa-apa persediaan yang diperlukan atau kodINCLUDE "DT_INTS-14.bas" INCLUDE "ReEnterPBP.bas" makro ASMINT_LIST; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _myISR, PBP, ya endm INT_CREATEENDASM; Sebarang persediaan atau kod lain yang diperlukan @ INT_ENABLE RBC_INT; Kod yang perlu diketahui dengan cara memutar tombol @ INT_DISABLE RBC_INT; Kod lainEND; Akhir programmyISR:; Kod ISR di sini @ INT_RETURN (Jadual Penyediaan Pengendali Gangguan) Saya rasa di sinilah sesiapa sahaja yang tidak menggunakan gangguan PIC atau DT boleh bergabung lagi. Sekarang, kita perlu benar-benar menulis ISR supaya pengawal mikro tahu ke mana tombol berputar. Ingat dari bahagian teori perisian bahawa kita dapat menyimpulkan arah putaran jika kita mengetahui input yang menyebabkan gangguan, nilai barunya dan nilai input lain. Inilah pseudocode: Baca PORTB menjadi pemboleh ubah calar untuk membersihkan bendera interrupt. Periksa sama ada A menyebabkan gangguan. Sekiranya benar, Bandingkan A dan B. Periksa sama ada berbeza, jika berlainan, Itu adalah putaran mengikut arah jam Lain, Ia adalah EndifCheck berlawanan arah jam jika B menyebabkan gangguan. Sekiranya benar, Bandingkan A dan B Periksa jika berbeza, jika sama, Itu adalah putaran mengikut arah jam Lain, Itu berlawanan arah jam EndifKembali dari gangguanBagaimana kita tahu jika perubahan pada A atau B menyebabkan gangguan itu? Mencari nilai baru input yang diubah dan input lain (tidak berubah) adalah mudah kerana kita dapat membacanya di dalam ISR. Kita perlu mengetahui keadaan masing-masing sebelum pelaksanaan dihantar ke ISR. Ini berlaku dalam rutin utama. Rutin utama duduk dan menunggu pemboleh ubah byte yang kita panggil CWflag ditetapkan ke 1 atau dibersihkan ke 0 oleh ISR. Setelah setiap perubahan tombol diakui atau jika tidak ada aktiviti tombol, pemboleh ubah diatur ke 5 untuk menunjukkan keadaan terbiar. Sekiranya bendera disetel atau dibersihkan, rutin utama segera menambah atau menurunkan tekanan titik set dengan tepat berdasarkan putaran dan kemudian menetapkan pemboleh ubah CWflag kembali ke 5 kerana tombol sekarang tidak lagi aktif. Oleh kerana rutin utama adalah memeriksa CWflag, ia juga mendokumentasikan keadaan nilai suis putar A dan B. Ini sangat mudah dan kelihatan seperti ini: oldA = AoldB = BTidak ada yang sangat mewah di sini. Cukup sertakan dua baris di awal gelung yang memeriksa putaran CWflag. Kami hanya mengemas kini nilai logik input dari kenop putar di dalam gelung kenaikan / penurunan dalam rutin utama sehingga kita dapat melihat input apa yang menyebabkan gangguan ketika ISR dijalankan. Inilah kod ISR: ABchange: scratch = PORTB 'Baca PORTB untuk membersihkan bendera gangguan' Sekiranya A menyebabkan gangguan, periksa B untuk arah putaran JIKA lamaA A! = B KEMUDIAN GOTO CW 'Jika tidak, ia adalah putaran berlawanan arah jam adalah putaran mengikut arah jam JIKA A == B KEMUDIAN COTO 'Jika tidak, ia adalah putaran berlawanan arah jam ELSE GOTO CCW ENDIF ENDIFCW: CWflag = 1 @ INT_RETURNCCW: CWflag = 0 @ INT_RETURNSaya telah memasukkan kod ISR dalam fail AB_ISR.bas kerana tab dalam kod tidak muncul sebagaimana mestinya. Sekarang, kerana ISR mempunyai nilai lama untuk input A dan B, ia dapat menentukan input mana yang menyebabkan gangguan, bandingkan dengan input lain (tidak berubah) dan tentukan arah putaran. Semua rutin utama yang harus dilakukan adalah memeriksa CWflag untuk melihat arah tombol yang telah dipusingkan (jika ada) dan menambah atau menurunkan pembilang, set point atau apa sahaja yang anda suka atau perlukan. Saya harap ini dapat membantu dan belum terlalu mengelirukan. Jenis antara muka ini sangat berguna jika sistem anda sudah menggunakan gangguan kerana ini hanya satu gangguan lagi untuk ditambahkan. Selamat mencuba!

Disyorkan: