فهرست مطالب:

قسمت 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Step
قسمت 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Step

تصویری: قسمت 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Step

تصویری: قسمت 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 Step
تصویری: ,GPIO, register,cmsis, HAL,( جلسه بیست و دوم ) ARM آموزش 2024, نوامبر
Anonim
Image
Image
سخت افزار
سخت افزار

سلام. این قسمت بعدی است که در آن ما از مونتاژ ARM (به جای زبان سطح بالاتر) استفاده می کنیم. الهام بخش این دستورالعمل آزمایشگاه 6 کیت آموزش سیستم روباتیک Texas Instruments یا TI-RSLK است.

ما از میکروکنترلر موجود در کیت ، برد توسعه MSP432 LaunchPad استفاده می کنیم ، اما شاید بتوانید چیزی مفید برای استخراج از این دستورالعمل پیدا کنید ، حتی اگر از LaunchPad استفاده نمی کنید یا از T. I. پیروی نمی کنید. برنامه درسی.

ما با یک دستورالعمل معرفی ARM Assembly ، محیط توسعه و نحوه ایجاد یک پروژه شروع کردیم.

دستورالعمل بعدی ARM Assembly نحوه تعامل با ورودی/خروجی (GPIO) را معرفی کرد.

سپس ما دانش خود را گسترش دادیم ، و توابع ، LED ها و سوئیچ ها را کنترل کردیم.

اکنون با استفاده از این دستورالعمل ، می توانیم از آنچه آموخته ایم برای انجام یک کار جالب تر و مفیدتر استفاده کنیم: تشخیص خط.

این می تواند بعداً هنگام ساختن یک ربات دنبال کننده خط به ما کمک کند.

در برنامه درسی ، بیشتر برنامه نویسی به زبان C یا C ++ انجام می شود ، اما آشنایی با اسمبلی ، قبل از شروع به وابستگی به زبانهای سطح بالاتر و کتابخانه ها ، مفید است.

مرحله 1: سخت افزار

سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار

من نمی خواهم سخت افزار را با جزئیات دوباره مرور کنم ، زیرا منابع موجود است ، اما در صورت نیاز توضیحات را اضافه می کنیم.

برای این دستورالعمل ، ما از آرایه حسگر بازتاب Pololu استفاده می کنیم ، زیرا به عنوان بخشی از TI-RSLK (کیت روبات) ارائه می شود. این مورد در دوره و آزمایشگاه 6 برنامه درسی استفاده می شود.

اگر آن را ندارید ، می توانید از هر آشکارساز IR (یا سری آنها) که یک سیگنال دیجیتال ، HIGH یا LOW ، برای حضور و غیاب خارج می کند ، استفاده کنید.

حسگر آرایه بهترین است زیرا می تواند به تشخیص اینکه آیا ما در مرکز خط هستیم یا از یک طرف خارج شده ایم ، کمک کند. بعلاوه ، همانطور که بعداً خواهیم دید ، می تواند به ما در تشخیص زاویه ربات نسبت به خط کمک کند.

آرایه بازتاب دارای آشکارسازهای بسیار نزدیک در کنار یکدیگر است. این بدان معناست که بسته به ضخامت خط ، باید سیگنال های تشخیص متعددی دریافت کنیم.

اگر چنین است ، پس اگر ربات مستقیماً با خط خطی ندارد ، پس باید خروجی را برگرداند که خط وسیع تر از آن چیزی است که باید باشد (زیرا ما در یک زاویه هستیم).

برای توضیح بهتر موارد فوق ، به سند آزمایشگاه 6 نگاهی بیندازید.

برای راهنمایی در سیم کشی / اتصال سنسور به برد توسعه MSP432 LaunchPad ، در اینجا چند دستورالعمل مفید وجود دارد.

من همچنین دستورالعمل pdf مشابه (مشابه؟) را به این مرحله اضافه کرده ام.

اگر اسناد Pololu را با دقت بخوانید ، دلیل "دور زدن 3.3V" را توضیح می دهند ، که اگر به جای 5V از 3.3V استفاده می کنید ، می خواهید جهش کنید.

از آنجا که ما هنوز در حال ساخت ربات نیستیم بلکه در عوض ما فقط در مورد مونتاژ ARM و نحوه تعامل با قطعات (زیر سیستم) ربات یاد می گیریم ، لازم نیست دستورالعمل های فوق را به طور کامل دنبال کنیم.

در حال حاضر ، اتصال آرایه سنسور خط فقط به صورت زیر می جوشد/کاهش می یابد:

  • 3.3V و GND را از برد MSP432 به آرایه سنسور وصل کنید.
  • یک پین پورت (پیشنهاد می کنم P5.3) را از MSP432 به پین فعال LED در آرایه سنسور خط وصل کنید. این پین روی سنسور بین 3.3V و GND است.
  • هر هشت پین/بیت یک پورت واحد (من P7.0 تا P7.7 را پیشنهاد می کنم) را به هشت پین آرایه حسگر با برچسب "1" تا "8" وصل کنید. اینها خطوطی هستند که بسته به حس آنها ، بالا یا پایین می روند.

همانطور که در تصاویر این مرحله و در فیلم مشاهده می کنید ، من سنسور را به شاسی ربات متصل نکردم ، زیرا می خواستم سهولت برنامه نویسی ، اشکال زدایی ، آزمایش ، یادگیری را داشته باشم.

بنابراین با همه چیز متصل ، ما آماده ورود به نرم افزار هستیم.

مرحله 2: دنبال کردن خط

دنبال کردن خط
دنبال کردن خط
دنبال کردن خط
دنبال کردن خط

سنسور آرایه انعکاس بسیار جذاب است زیرا می تواند حداقل از دو جهت کمک کند.

  • تعیین کنید رباتی است که روی خط متمرکز شده یا به یک طرف حرکت می کند.
  • آیا ربات در جهت خط تراز شده است یا زاویه دارد.

هر یک از آشکارسازهای آرایه در اصل یک بیت اطلاعات بالا یا پایین ارائه می دهند.

ایده این است که همه آن بیت ها را در یک عدد یا الگوی بیت واحد ترکیب کنید و از آن الگو برای تصمیم گیری (به منظور حرکت صحیح) استفاده کنید.

مرحله 3: قبل از اینکه بتوانیم واقعاً شروع کنیم…

.. ما باید چیزهای جدیدی در مورد برنامه نویسی اسمبل ARM بیاموزیم. و منظور من فقط دستورالعمل دیگری نیست. آنها معمولاً جزئی هستند.

تا به حال ما از "پشته" در برنامه های خود استفاده نکرده ایم.

ما بر استفاده از اکثر ثبت کننده های اصلی پردازنده در سطح جهانی در زیر روال های مختلف تکیه کرده ایم.

تنها کاری که ما انجام دادیم این بود که آدرس LR (پیوند ثبت) را برای یک تابع ذخیره کنیم و بازیابی کنیم - آن تابع که چندین تابع دیگر را فرا می خواند. (من در اینجا از "تابع" و "زیر روال" به جای یکدیگر استفاده می کنم).

کاری که ما انجام داده ایم خوب نیست اگر بخواهیم توابع دیگر را لانه کنیم ، چه کنیم؟ اگر بیش از یک سطح تودرتو داشته باشیم چطور؟

در مثالهای قبلی ، ما از ثبت R6 به عنوان محل ذخیره LR یا آدرس برگشت استفاده کردیم. اما اگر بخواهیم لانه سازی بیشتر/عمیق تری انجام دهیم ، نمی توانیم مقدار R6 را تغییر دهیم. ما باید ثبت نام دیگری را انتخاب کنیم. و یکی دیگر. و سپس پیگیری این که کدام پردازنده اصلی CPU دارای کدام LR است به کدام عملکرد بازگردانده می شود ، بسیار دشوار می شود.

بنابراین ، اکنون نگاهی به "پشته" می اندازیم.

مرحله 4: پشته

در اینجا برخی از مطالب خواندن توضیح داده شده است.

من طرفدار چند ایده هستم:

  • فقط به اندازه تئوری مورد نیاز ، سریع به سراغ موارد عملی بروید
  • در صورت نیاز یاد بگیرید ، بر انجام کاری تمرکز کنید و نه فقط تمرینات یا مثالهای بی هدف.

بسیاری از اسناد ARM و MSP432 بصورت آنلاین وجود دارد که در مورد پشته صحبت می کند ، بنابراین قرار نیست همه چیز را دوباره تجدید کنید. من همچنین می خواهم استفاده از پشته را در اینجا به حداقل برسانم - ذخیره آدرس بازگشت (ثبت لینک).

در اصل ، ما فقط به دستورالعمل ها نیاز داریم:

PUSH {لیست ثبت نام}

POP {لیست ثبت نام}

یا ، در مورد ما ، به طور خاص:

فشار {LR}

POP {LR}

بنابراین ، یک تابع مونتاژ/زیر روال به شکل زیر است:

funcLabel:.asmfunc

PUSH {LR} ؛ این احتمالاً باید یکی از اولین دستورالعمل های ورود باشد. ؛ در اینجا کد بیشتری انجام دهید..؛ بل.. بل … بلا …؛ بسیار خوب ، ما کار را تمام کردیم ، آماده بازگشت به عملکرد فراخوانی POP {LR} هستیم ؛ این آدرس بازگشت صحیح را به تماس باز می گرداند. عملکرد. BX LR ؛ بازگشت.endasmfunc

این ویدئو یک نمونه زنده از چندین عملکرد تو در تو را نشان می دهد.

مرحله 5: نرم افزار

فایل پیوست با برچسب "MSP432_Chapter …" اطلاعات زیادی در مورد پورت های MSP432 دارد و از آن سند پورت ها ، ثبت ها ، آدرس ها و غیره زیر را دریافت می کنیم ، اما به هر حال کمی تاریخ دار است. با این حال ، آدرس های دقیق ذکر شده برای بندر 5 و بالاتر را ندیدم. (فقط "توابع جایگزین"). اما هنوز مفید است.

ما قصد داریم از دو پورت استفاده کنیم. P5 ، P7 ، P1 و P2.

P5.3 (یک بیت واحد) خروجی برای کنترل IR LED فعال روی سنسور خواهد بود. ما از P5.3 استفاده می کنیم زیرا این یک پین در معرض نمایش در سرآیند مشابه سایر اتصالات MSP432 است که به آرایه سنسور می روند.

P7.0 تا P7.7 هشت ورودی هستند که داده ها را از سنسور جمع آوری می کنند. آنچه "می بیند"

P1.0 تنها LED قرمز است و ما می توانیم از آن برای نشان دادن برخی از داده ها استفاده کنیم.

P2.0 ، P2.1 ، P2.2 LED RGB است و ما همچنین می توانیم از آن ، با رنگ های مختلف ، برای نشان دادن اطلاعات سنسور استفاده کنیم.

اگر دستورالعمل های قبلی مربوط به همه این موارد را گذرانده اید ، می دانید که چگونه برنامه را تنظیم کنید.

فقط قسمت اعلان را برای درگاه ها و بیت ها و غیره داشته باشید.

شما یک بخش "اصلی" خواهید داشت.

باید یک حلقه وجود داشته باشد ، جایی که ما به طور مداوم داده های P7 را می خوانیم ، درباره آن داده ها تصمیم می گیریم و بر این اساس دو LED را روشن می کنیم.

در اینجا دوباره آدرس Port Register را مشاهده می کنید:

  • GPIO P1: 0x4000 4C00 + 0 (حتی آدرس ها)
  • GPIO P2: 0x4000 4C00 + 1 (آدرس های فرد)
  • GPIO P3: 0x4000 4C00 + 20 (حتی آدرس ها)
  • GPIO P4: 0x4000 4C00 + 21 (آدرس های فرد)
  • GPIO P5: 0x4000 4C00 + 40 (حتی آدرس ها)
  • GPIO P6: 0x4000 4C00 + 41 (آدرس های فرد)
  • GPIO P7: 0x4000 4C00 + 60 (حتی آدرس ها)
  • GPIO P8: 0x4000 4C00 + 61 (آدرس های فرد)
  • GPIO P9: 0x4000 4C00 + 80 (حتی آدرس ها)
  • GPIO P10: 0x4000 4C00 + 81 (آدرس های فرد)

آنچه در حالت ضخیم است ، چیزی است که ما برای این دستورالعمل استفاده خواهیم کرد.

مراحل برنامه برای خواندن آشکارسازهای IR

در زیر کد psuedo برای نوشتن برنامه در C وجود دارد ، اما هنوز مفید است ، و ما آن را در نسخه مونتاژ برنامه بسیار دقیق دنبال می کنیم.

برنامه اصلی 0) مقدار دهی // پورتها در حالی که (1) {1) P5.3 را بالا تنظیم کنید (IR IR را روشن کنید) 2) P7.0 را یک خروجی قرار دهید و آن را زیاد تنظیم کنید (خازن را شارژ کنید) 3) 10 ساعت صبر کنید ، Clock_Delay1us (10) ؛ 4) P7.0 را یک ورودی کنید 5) این حلقه را 10 هزار بار اجرا کنید a) P7.0 را بخوانید (ولتاژ P7.0 را به دودویی تبدیل می کند) ب) خروجی فایل دودویی به P1.0 (به شما امکان می دهد باینری را در زمان واقعی مشاهده کنید) 6) P5.3 را کم تنظیم کنید (IR IR را خاموش کنید ، در مصرف برق صرفه جویی کنید) 7) 10 میلی ثانیه صبر کنید ، Clock_Delay1ms (10) ؛ } // تکرار (برگشت به while ())

مرحله 6: بیایید کد را بهبود بخشیم

هدف یا استفاده از آرایه LED Pololu IR این است که یک خط را تشخیص دهد و بداند که آیا ربات (آینده) مستقیماً روی خط متمرکز است یا از یک طرف. همچنین از آنجا که خط دارای ضخامت خاصی است ، اگر آرایه سنسور مستقیماً عمود بر خط باشد ، تعداد N سنسورها نسبت به بقیه خوانش متفاوتی خواهند داشت ، در حالی که اگر آرایه LED IR در زاویه ای (نه عمود بر) باشد ، پس N+1 یا N+2 IR LED/جفت های آشکارساز باید خوانش متفاوتی داشته باشند.

بنابراین ، بسته به تعداد سنسورهایی که وجود خط را نشان می دهند ، باید بدانیم که در مرکز هستیم و آیا زاویه دار هستیم یا نه.

برای آزمایش نهایی ، فقط ببینیم آیا می توانیم LED قرمز و LED RGB را دریافت کنیم تا اطلاعات بیشتری در مورد آنچه که آرایه سنسور به ما می گوید به ما بدهد.

ویدئو به تمام جزئیات می پردازد. کد نهایی نیز ضمیمه شده است.

این مجموعه ARM Assembly مربوط به GPIO را تکمیل می کند. امیدواریم بعداً با مجمع ARM بیشتری بازگردیم.

متشکرم.

توصیه شده: