Daftar Isi:

Bagian 3: GPIO: Perakitan ARM: Pengikut Garis: TI-RSLK: 6 Langkah
Bagian 3: GPIO: Perakitan ARM: Pengikut Garis: TI-RSLK: 6 Langkah

Video: Bagian 3: GPIO: Perakitan ARM: Pengikut Garis: TI-RSLK: 6 Langkah

Video: Bagian 3: GPIO: Perakitan ARM: Pengikut Garis: TI-RSLK: 6 Langkah
Video: Tutorial Cara Merakit DIY KIT Robot Line Tracer Follower Cocok Untuk Pemula Belajar Solder Edukasi 2024, Juli
Anonim
Image
Image
Perangkat Keras
Perangkat Keras

Halo. Ini adalah angsuran berikutnya di mana kami terus menggunakan perakitan ARM (bukan bahasa tingkat yang lebih tinggi). Inspirasi untuk Instructable ini adalah Lab 6 dari Texas Instruments Robotics System Learning Kit, atau TI-RSLK.

Kami akan menggunakan mikrokontroler dari kit, papan pengembangan LaunchPad MSP432, tetapi mungkin Anda akan menemukan sesuatu yang berguna untuk mengekstrak dari Instructable ini bahkan jika Anda tidak menggunakan LaunchPad, atau mengikuti T. I. kurikulum.

Kami mulai dengan Instructable memperkenalkan ARM Assembly, lingkungan pengembangan, dan cara membuat proyek.

Instruksi berikutnya pada Majelis ARM memperkenalkan cara berinteraksi dengan input/output (GPIO).

Kemudian kami memperluas pengetahuan kami, dan memperkenalkan fungsi, mengontrol LED dan sakelar.

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

Ini bisa membantu kita nanti ketika kita membangun robot pengikut garis.

Dalam kurikulum, sebagian besar pemrograman dilakukan dalam C atau C++, tetapi akan sangat membantu jika kita terbiasa dengan perakitan, sebelum kita mulai bergantung pada bahasa tingkat yang lebih tinggi, dan perpustakaan.

Langkah 1: Perangkat Keras

Perangkat Keras
Perangkat Keras
Perangkat Keras
Perangkat Keras
Perangkat Keras
Perangkat Keras

Saya tidak ingin mengulangi perangkat keras secara rinci, karena sudah ada sumbernya, tetapi kami akan menambahkan penjelasan jika diperlukan.

Untuk Instruksi ini, kami akan menggunakan Array Sensor Reflektansi dari Pololu, karena ini merupakan bagian dari TI-RSLK (perangkat robot). Ini adalah yang digunakan dalam kursus, dan di Lab 6 kurikulum.

Jika Anda tidak memilikinya, Anda dapat menggunakan detektor IR apa pun (atau rangkaiannya) yang mengeluarkan sinyal digital, TINGGI atau RENDAH, untuk kehadiran dan ketidakhadiran.

Sensor array adalah yang terbaik karena dapat membantu mendeteksi apakah kita berada tepat di tengah garis, atau menyimpang ke satu sisi. Plus, seperti yang akan kita lihat nanti, ini dapat membantu kita mendeteksi sudut robot terhadap garis.

Array reflektansi memiliki detektor yang sangat dekat satu sama lain. Itu berarti kita harus mendapatkan beberapa sinyal deteksi, tentu saja tergantung pada ketebalan garis.

Jika demikian, maka jika robot tidak langsung sejajar dengan garis, maka harus mengembalikan output bahwa garis lebih lebar dari yang seharusnya (karena kita berada di sudut).

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

Untuk bantuan dalam memasang kabel / menghubungkan sensor ke papan pengembangan LaunchPad MSP432, berikut adalah beberapa petunjuk yang berguna.

Saya juga telah menambahkan instruksi pdf yang sama (mirip?) ke Langkah ini.

Jika Anda hati-hati membaca dokumen Pololu, mereka menjelaskan alasan "3.3V bypass", bahwa Anda akan ingin jumper jika Anda menggunakan 3.3V bukan 5V.

Karena kita belum membuat robot tetapi kita hanya belajar tentang perakitan ARM dan juga bagaimana berinteraksi dengan bagian (subsistem) dari robot, kita tidak harus mengikuti instruksi di atas untuk surat itu.

Untuk saat ini, menghubungkan array sensor garis hanya bermuara/berkurang sebagai berikut:

  • sambungkan 3.3V dan GND dari papan MSP432 ke rangkaian sensor.
  • sambungkan pin port (saya sarankan P5.3) dari MSP432 ke pin enable LED pada line sensor array. Pin pada sensor itu antara 3.3V dan GND.
  • sambungkan semua delapan pin/bit dari satu port (saya sarankan P7.0 hingga P7.7) ke delapan pin array sensor berlabel "1" hingga "8". Ini adalah garis yang akan menjadi TINGGI atau RENDAH tergantung pada apa yang mereka rasakan.

Seperti yang Anda lihat pada gambar langkah ini, dan dalam video, saya tidak memasang sensor ke sasis robot, karena saya ingin kemudahan pemrograman, debugging, pengujian, pembelajaran.

Jadi dengan semua yang terhubung, kami siap untuk masuk ke perangkat lunak.

Langkah 2: Baris Mengikuti

Baris Mengikuti
Baris Mengikuti
Baris Mengikuti
Baris Mengikuti

Sensor array reflektansi cukup bagus karena dapat membantu setidaknya dalam dua cara.

  • Tentukan apakah robot berpusat pada garis atau melayang ke satu sisi.
  • Apakah robot sejajar dengan arah garis, atau miring.

Masing-masing detektor array pada dasarnya memberikan satu bit informasi, baik TINGGI atau RENDAH.

Idenya adalah untuk menggabungkan semua bit itu menjadi satu angka atau pola bit tunggal, dan menggunakan pola itu untuk membuat keputusan (agar bergerak dengan benar).

Langkah 3: Sebelum Kita Benar-Benar Memulai…

.. kita perlu mempelajari sesuatu yang baru tentang pemrograman perakitan ARM. Dan maksud saya bukan hanya instruksi lain. Mereka cenderung kecil.

Sampai sekarang kami belum menggunakan "tumpukan" dalam program kami.

Kami mengandalkan penggunaan sebagian besar register cpu inti secara global di berbagai subrutin.

Satu hal yang kami lakukan adalah menyimpan dan mengembalikan alamat LR (link register) untuk satu fungsi - yang memanggil beberapa fungsi lainnya. (Saya menggunakan "fungsi" dan "subrutin" secara bergantian di sini).

Apa yang kita lakukan tidak baik. Bagaimana jika kita ingin menyarangkan fungsi lain? Bagaimana jika kita memiliki lebih dari satu tingkat bersarang?

Dalam contoh sebelumnya, kami memilih untuk menggunakan register R6 sebagai penyimpanan untuk LR atau alamat pengirim. Tapi jika kita ingin melakukan nesting lebih jauh/lebih dalam, kita tidak bisa terus mengubah nilai R6. Kami harus memilih register lain. Dan satu lagi. Dan kemudian menjadi berat untuk melacak register cpu inti mana yang memegang LR mana yang akan dikembalikan ke fungsi mana.

Jadi sekarang kita melihat "tumpukan".

Langkah 4: Tumpukan

Berikut adalah beberapa bahan bacaan yang menjelaskan stack.

Saya pendukung yang lebih besar dari beberapa ide:

  • hanya teori sebanyak yang diperlukan, lakukan praktik dengan cepat
  • belajar sesuai kebutuhan, fokus untuk benar-benar melakukan sesuatu dan bukan hanya latihan atau contoh tanpa tujuan.

Ada banyak dokumentasi ARM dan MSP432 online yang berbicara tentang stack, jadi tidak akan mengulangi semua itu. Saya juga akan menjaga penggunaan tumpukan di sini seminimal mungkin - menyimpan alamat pengirim (Daftar Tautan).

Pada dasarnya, kita hanya perlu instruksi:

PUSH {daftar daftar}

POP{daftar daftar}

Atau, dalam kasus kami, khususnya:

dorong {LR}

POP {LR}

Jadi, fungsi/subrutin Majelis akan terlihat seperti ini:

funcLabel:.asmfunc

PUSH{LR};ini mungkin harus menjadi salah satu instruksi pertama saat masuk.; lakukan lebih banyak kode di sini..; bla bla bla…; ok, kita selesai dengan fungsi, siap untuk kembali ke fungsi pemanggilan POP{LR};ini mengembalikan alamat pengirim yang benar kembali ke pemanggilan; fungsi. BX LR; kembali.endasmfunc

Video melewati contoh langsung dari beberapa fungsi bersarang.

Langkah 5: Perangkat Lunak

File terlampir berlabel "MSP432_Chapter…" memiliki banyak informasi bagus tentang port MSP432, dan dari dokumen itu kita mendapatkan port, register, alamat, dll. Namun, saya tidak melihat alamat terperinci yang tercantum untuk Port 5 dan lebih tinggi. (hanya "fungsi alternatif"). Tapi itu masih berguna.

Kita akan menggunakan dua Port. P5, P7, P1, dan P2.

P5.3 (satu bit) output akan mengontrol IR LED-enable pada sensor. Kami menggunakan P5.3 karena ini adalah pin yang terbuka pada header yang sama dengan koneksi MSP432 lainnya yang menuju ke array sensor.

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

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

P2.0, P2.1, P2.2 adalah LED RGB dan kita dapat menggunakannya juga, dengan kemungkinan warna yang berbeda, untuk memberi kita indikasi data sensor.

Jika Anda telah melalui Instruksi sebelumnya yang terkait dengan semua ini, maka Anda sudah tahu cara mengatur program.

Hanya memiliki bagian deklarasi untuk port dan bit, dll.

Anda akan memiliki bagian "utama".

Harus ada loop, di mana kita terus-menerus membaca data dari P7, membuat keputusan dari data itu, dan menyalakan dua LED yang sesuai.

Berikut lagi adalah alamat Port Register:

  • 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 dicetak tebal adalah apa yang akan kita gunakan untuk Instructable ini.

Langkah-Langkah Program Untuk Membaca Detektor IR

Berikut ini adalah kode psuedo untuk menulis program dalam C, tetapi masih berguna, dan kami akan mengikutinya dengan cermat dalam versi perakitan program.

main program0) Inisialisasi //ports while(1) { 1) Set P5.3 high (nyalakan IR LED) 2) Jadikan P7.0 sebagai output, dan set high (mengisi kapasitor) 3) Tunggu 10 us, Clock_Delay1us (10); 4) Jadikan P7.0 sebagai input 5) Jalankan loop ini 10.000 kali a) Baca P7.0 (mengubah tegangan pada P7.0 menjadi biner) b) Output biner ke P1.0 (memungkinkan Anda melihat biner secara real time) 6) Atur P5.3 rendah (matikan LED IR, hemat daya) 7) Tunggu 10 ms, Clock_Delay1ms(10); } // ulangi (kembali ke while())

Langkah 6: Mari Tingkatkan Kode

Tujuan atau penggunaan larik LED IR Pololu adalah untuk mendeteksi garis, dan untuk mengetahui apakah robot (masa depan) langsung dipusatkan pada garis, atau miring ke satu sisi. Juga, karena garis memiliki ketebalan tertentu, jika larik sensor tegak lurus dengan garis, N jumlah sensor akan memiliki pembacaan yang berbeda dari yang lain, sedangkan jika larik LED IR berada pada beberapa sudut (tidak tegak lurus), maka Pasangan LED/detektor N+1 atau N+2 sekarang seharusnya memberikan pembacaan yang berbeda.

Jadi, tergantung pada berapa banyak sensor yang menunjukkan keberadaan garis, kita harus tahu apakah kita berada di tengah, dan apakah kita miring atau tidak.

Untuk percobaan terakhir ini, mari kita lihat apakah kita bisa mendapatkan LED merah dan LED RGB untuk memberi kita lebih banyak informasi tentang apa yang dikatakan array sensor kepada kita.

Video masuk ke semua detail. Kode terakhir juga dilampirkan.

Ini melengkapi rangkaian ARM Assembly yang terkait dengan GPIO. Kami berharap untuk kembali dengan lebih banyak ARM Assembly di lain waktu.

Terima kasih.

Direkomendasikan: