Isi kandungan:

Bahagian 3: GPIO: Pemasangan ARM: Pengikut Talian: TI-RSLK: 6 Langkah
Bahagian 3: GPIO: Pemasangan ARM: Pengikut Talian: TI-RSLK: 6 Langkah

Video: Bahagian 3: GPIO: Pemasangan ARM: Pengikut Talian: TI-RSLK: 6 Langkah

Video: Bahagian 3: GPIO: Pemasangan ARM: Pengikut Talian: TI-RSLK: 6 Langkah
Video: Pemrograman STM32 - Bab 3 - General Purpose Input Output (GPIO) 2024, November
Anonim
Image
Image
Perkakasan
Perkakasan

Helo. Ini adalah ansuran seterusnya di mana kami terus menggunakan pemasangan ARM (bukannya bahasa peringkat tinggi). Inspirasi untuk Instructable ini adalah Makmal 6 Kit Pembelajaran Sistem Robotik Instrumen Texas, atau TI-RSLK.

Kami akan menggunakan mikrokontroler dari kit, papan pengembangan MSP432 LaunchPad, tetapi mungkin anda akan dapati sesuatu yang berguna untuk diambil dari Instructable ini walaupun anda tidak menggunakan LaunchPad, atau mengikuti T. I. kurikulum.

Kami bermula dengan Instructionable memperkenalkan ARM Assembly, persekitaran pembangunan, dan bagaimana membuat projek.

Instructable on ARM Assembly seterusnya memperkenalkan cara berinteraksi dengan input / output (GPIO).

Kemudian kami meluaskan pengetahuan kami, dan memperkenalkan fungsi, mengawal LED dan suis.

Sekarang dengan Instructable ini, kita dapat menggunakan apa yang telah kita pelajari untuk melakukan sesuatu yang lebih menyeronokkan, lebih berguna: mengesan garis.

Ini dapat membantu kita di kemudian hari ketika kita membina robot pengikut baris.

Dalam kurikulum, kebanyakan pengaturcaraan dilakukan dalam C atau C ++, tetapi sangat berguna untuk membiasakan diri dengan perakitan, sebelum kita mulai bergantung pada bahasa dan perpustakaan tingkat tinggi.

Langkah 1: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan

Saya tidak mahu mengemas semula perkakasan secara terperinci, kerana sudah ada sumber, tetapi kami akan menambahkan penjelasan di mana diperlukan.

Untuk Instructable ini, kami akan menggunakan Susunan Sensor Refleksi dari Pololu, kerana ia merupakan sebahagian dari TI-RSLK (kit robot). Ini adalah yang digunakan dalam kursus, dan di Makmal 6 kurikulum.

Sekiranya anda tidak memilikinya, anda boleh menggunakan pengesan IR (atau rangkaiannya) yang mengeluarkan isyarat digital, TINGGI atau RENDAH, untuk kehadiran dan ketiadaan.

Sensor array adalah yang terbaik kerana dapat membantu mengesan sama ada kita berada tepat di tengah garisan, atau ke satu sisi. Selain itu, seperti yang akan kita lihat nanti, ia dapat membantu kita mengesan sudut robot berkenaan dengan garis.

Susunan pantulan mempunyai pengesan yang sangat berdekatan satu sama lain. Itu bermaksud kita harus mendapat banyak isyarat pengesanan, bergantung pada ketebalan garis.

Sekiranya demikian, maka jika robot tidak langsung sesuai dengan garis, maka ia harus mengembalikan output yang garisnya lebih lebar daripada yang seharusnya (kerana kita berada pada sudut).

Untuk penjelasan yang lebih baik mengenai perkara di atas, lihat dokumen Lab 6.

Untuk mendapatkan bantuan dalam memasang / menyambungkan sensor ke papan pengembangan MSP432 LaunchPad, berikut adalah beberapa arahan yang berguna.

Saya juga telah menambahkan arahan pdf yang sama (serupa?) Pada Langkah ini.

Sekiranya anda membaca dokumen Pololu dengan teliti, mereka menjelaskan alasan "pintasan 3.3V", bahawa anda pasti ingin melompat jika anda menggunakan 3.3V dan bukannya 5V.

Oleh kerana kita belum membuat robot, tetapi kita baru belajar mengenai pemasangan ARM dan juga cara berinteraksi dengan kepingan (subsistem) robot, kita tidak perlu mengikuti arahan di atas untuk surat tersebut.

Buat masa ini, menyambung array sensor talian hanya mendidih / mengurangkan menjadi berikut:

  • sambungkan 3.3V dan GND dari papan MSP432 ke array sensor.
  • sambungkan pin port (saya cadangkan P5.3) dari MSP432 ke pin aktif LED pada array sensor baris. Pin pada sensor adalah antara 3.3V dan GND.
  • sambungkan semua lapan pin / bit satu port (saya cadangkan P7.0 hingga P7.7) ke lapan pin dari array sensor berlabel "1" hingga "8". Ini adalah garis yang akan menjadi TINGGI atau RENDAH bergantung pada apa yang mereka rasa.

Seperti yang anda lihat dalam gambar langkah ini, dan dalam video, saya tidak memasang sensor ke casis robot, kerana saya mahukan kemudahan pengaturcaraan, penyahpepijatan, pengujian, pembelajaran.

Oleh itu, dengan semua yang berkaitan, kami bersedia masuk ke dalam perisian.

Langkah 2: Mengikuti Garis

Garis Mengikuti
Garis Mengikuti
Garis Mengikuti
Garis Mengikuti

Sensor array pantulan cukup bagus kerana dapat membantu sekurang-kurangnya dengan dua cara.

  • Tentukan adalah robot yang berpusat di talian atau melayang ke satu sisi.
  • Adakah robot sejajar ke arah garis, atau pada sudut.

Setiap pengesan array pada asasnya memberikan sedikit maklumat, sama ada TINGGI atau RENDAH.

Ideanya adalah untuk menggabungkan semua bit ke dalam satu nombor atau corak bit tunggal, dan menggunakan corak itu untuk membuat keputusan (untuk bergerak dengan betul).

Langkah 3: Sebelum Kita Boleh Memulakan …

.. kita perlu mempelajari sesuatu yang baru mengenai pengaturcaraan pemasangan ARM. Dan saya tidak bermaksud arahan lain. Mereka cenderung kecil.

Hingga kini kami belum menggunakan "stack" dalam program kami.

Kami bergantung pada penggunaan sebahagian besar register cpu teras di seluruh subrutin berbeza.

Satu perkara yang kami lakukan ialah menyimpan dan memulihkan alamat LR (link register) untuk satu fungsi - fungsi yang memanggil beberapa fungsi lain. (Saya menggunakan "fungsi" dan "subrutin" secara bergantian di sini).

Apa yang kami buat tidak baik. Bagaimana jika kita mahu meletakkan fungsi lain? Bagaimana jika kita mempunyai lebih dari satu tahap bersarang?

Dalam contoh sebelumnya, kami memilih untuk menggunakan register R6 sebagai penyimpanan untuk LR atau alamat pengembalian. Tetapi jika kita ingin melakukan sarang lebih jauh / lebih dalam, kita tidak boleh terus mengubah nilai R6. Kita mesti memilih daftar yang lain. Dan lain. Dan kemudian menjadi membebankan untuk melacak daftar inti cpu yang memegang LR mana yang akan dikembalikan ke fungsi mana.

Jadi sekarang kita melihat "tumpukan".

Langkah 4: Tumpukan

Berikut adalah beberapa bahan bacaan yang menerangkan timbunan.

Saya penyokong idea yang lebih besar:

  • hanya sebanyak teori yang diperlukan, jalankan praktikal dengan cepat
  • belajar mengikut keperluan, fokus untuk benar-benar melakukan sesuatu dan bukan hanya latihan atau contoh tanpa tujuan.

Terdapat banyak dokumentasi ARM dan MSP432 dalam talian yang membincangkan mengenai timbunan, jadi tidak akan mengulangi semua itu. Saya juga akan memastikan penggunaan tumpukan di sini minimum - menyimpan alamat pengembalian (Daftar Pautan).

Pada dasarnya, kita hanya perlu arahan:

PUSH {daftar daftar}

POP {daftar daftar}

Atau, dalam kes kami, khususnya:

TUKAR {LR}

POP {LR}

Oleh itu, fungsi pemasangan / subrutin akan kelihatan seperti:

funcLabel:.asmfunc

PUSH {LR}; ini mungkin merupakan salah satu arahan pertama mengenai kemasukan.; buat lebih banyak kod di sini..; blah blah Blah…; ok, kita sudah selesai dengan fungsi, siap untuk kembali ke fungsi panggilan POP {LR}; ini mengembalikan alamat pengembalian yang betul kembali ke panggilan; fungsi. BX LR; kembali.endasmfunc

Video tersebut melalui contoh langsung dari beberapa fungsi bersarang.

Langkah 5: Perisian

Fail yang dilampirkan berlabel "MSP432_Chapter…" mempunyai banyak maklumat yang baik mengenai port MSP432, dan dari dokumen tersebut kami mendapat port, register, alamat, dan lain-lain berikut. Namun, saya tidak melihat alamat terperinci yang disenaraikan untuk Port 5 dan ke atas. (hanya "fungsi gantian"). Tetapi ia tetap berguna.

Kami akan menggunakan dua Pelabuhan. P5, P7, P1, dan P2.

Output P5.3 (satu bit) adalah untuk mengawal IR-enabled pada sensor. Kami menggunakan P5.3 kerana pin yang terdedah pada header yang sama dengan sambungan MSP432 yang lain menuju ke array sensor.

P7.0 hingga P7.7 akan menjadi lapan input yang mengumpulkan data dari sensor; apa yang "dilihat".

P1.0 adalah LED merah tunggal dan kami dapat menggunakannya untuk memberi kami beberapa petunjuk data.

P2.0, P2.1, P2.2 adalah LED RGB dan kita dapat menggunakannya juga, dengan kemungkinan warnanya yang berbeza, untuk memberi kita petunjuk mengenai data sensor.

Sekiranya anda telah mengikuti Instructables sebelumnya yang berkaitan dengan semua ini, maka anda sudah tahu cara mengatur program.

Cukup mempunyai bahagian deklarasi untuk port dan bit, dll.

Anda akan mempunyai bahagian "utama".

Harus ada gelung, di mana kita terus menerus membaca data dari P7, membuat keputusan data tersebut, dan menyalakan kedua LED dengan tepat.

Berikut adalah alamat Port Port:

  • GPIO P1: 0x4000 4C00 + 0 (alamat genap)
  • GPIO P2: 0x4000 4C00 + 1 (alamat ganjil)
  • GPIO P3: 0x4000 4C00 + 20 (alamat genap)
  • GPIO P4: 0x4000 4C00 + 21 (alamat ganjil)
  • GPIO P5: 0x4000 4C00 + 40 (alamat genap)
  • GPIO P6: 0x4000 4C00 + 41 (alamat ganjil)
  • GPIO P7: 0x4000 4C00 + 60 (alamat genap)
  • GPIO P8: 0x4000 4C00 + 61 (alamat ganjil)
  • GPIO P9: 0x4000 4C00 + 80 (alamat genap)
  • GPIO P10: 0x4000 4C00 + 81 (alamat ganjil)

Yang berani adalah apa yang akan kita gunakan untuk Instructable ini.

Langkah Program Untuk Membaca Pengesan IR

Berikut adalah kod psuedo untuk menulis program dalam C, tetapi masih berguna, dan kami akan mengikutinya dengan cukup dekat dalam versi pemasangan program.

program utama0) Memulakan // port sementara (1) {1) Tetapkan tinggi P5.3 (nyalakan LED IR) 2) Jadikan P7.0 sebagai output, dan atur tinggi (mengecas kapasitor) 3) Tunggu 10 kami, Jam_Delay1us (10); 4) Jadikan P7.0 sebagai input 5) Jalankan gelung ini 10, 000 kali a) Baca P7.0 (menukar voltan pada P7.0 menjadi binari) b) Keluaran binari ke P1.0 (membolehkan anda melihat binari dalam masa nyata) 6) Tetapkan rendah P5.3 (matikan LED IR, jimat kuasa) 7) Tunggu 10 ms, Jam_Delay1ms (10); } // ulangi (kembali ke sementara ())

Langkah 6: Mari Tingkatkan Kod

Tujuan atau penggunaan array LED Pololu IR adalah untuk mengesan garis, dan untuk mengetahui apakah robot (masa depan) langsung berpusat pada garis, atau ke satu sisi. Juga, kerana garis mempunyai ketebalan tertentu, jika susunan sensor secara langsung tegak lurus ke garis, bilangan sensor N akan mempunyai bacaan yang berbeza daripada yang lain, sedangkan jika susunan LED IR berada pada sudut tertentu (tidak tegak lurus), maka Pasangan LED / detektor N + 1 atau N + 2 IR sekarang seharusnya memberikan bacaan yang berbeza.

Oleh itu, bergantung pada berapa banyak sensor yang menunjukkan kehadiran garis, kita harus tahu sama ada kita berpusat, dan jika kita bersudut atau tidak.

Untuk eksperimen terakhir ini, mari kita lihat sama ada kita boleh mendapatkan LED merah dan LED RGB untuk memberi kita lebih banyak maklumat mengenai apa yang diberitahu oleh array sensor.

Video ini merangkumi semua butiran. Kod akhir juga dilampirkan.

Ini melengkapkan siri ARM Assembly yang berkaitan dengan GPIO. Kami berharap dapat kembali dengan lebih banyak Perhimpunan ARM di lain waktu.

Terima kasih.

Disyorkan: