جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
أهلا. هذه هي الدفعة التالية حيث نواصل استخدام تجميع ARM (بدلاً من لغة ذات مستوى أعلى). مصدر الإلهام لهذا Instructable هو Lab 6 من مجموعة أدوات التعلم الخاصة بنظام Texas Instruments Robotics System ، أو TI-RSLK.
سنستخدم وحدة التحكم الدقيقة من المجموعة ، لوحة تطوير MSP432 LaunchPad ، ولكن ربما ستجد شيئًا مفيدًا يمكنك استخراجه من Instructable حتى إذا كنت لا تستخدم LaunchPad ، أو تتبع TI. منهاج دراسي.
بدأنا بـ Instructable تقديم ARM Assembly ، وبيئة التطوير ، وكيفية إنشاء مشروع.
قدم Instructable على ARM Assembly كيفية التفاعل مع الإدخال / الإخراج (GPIO).
ثم قمنا بتوسيع معرفتنا ، وقدمنا وظائف ، والتحكم في المصابيح والمفاتيح.
الآن باستخدام Instructable ، يمكننا استخدام ما تعلمناه لفعل شيء أكثر متعة وفائدة: اكتشاف خط.
يمكن أن يساعدنا هذا لاحقًا عندما نبني روبوتًا تابعًا للسطر.
في المنهج الدراسي ، تتم معظم البرمجة بلغة C أو C ++ ، ولكن من المفيد التعرف على التجميع ، قبل أن نبدأ في الاعتماد على اللغات والمكتبات عالية المستوى.
الخطوة 1: الأجهزة
لا أرغب في إعادة صياغة الجهاز بالتفصيل ، حيث توجد مصادر بالفعل ، لكننا سنضيف تفسيرات عند الحاجة.
بالنسبة إلى Instructable ، سنستخدم أداة استشعار الانعكاس من Pololu ، نظرًا لأنها تأتي كجزء من TI-RSLK (مجموعة الروبوت). هو الذي يستخدم في الدورة ، وفي المختبر 6 من المناهج الدراسية.
إذا لم يكن لديك ذلك ، يمكنك استخدام أي كاشف بالأشعة تحت الحمراء (أو سلسلة منها) التي تخرج إشارة رقمية ، عالية أو منخفضة ، للوجود والغياب.
يعد مستشعر المصفوفة هو الأفضل لأنه يمكن أن يساعد في اكتشاف ما إذا كنا في منتصف الخط أو خارج جانب واحد. بالإضافة إلى ذلك ، كما سنرى لاحقًا ، يمكن أن يساعدنا في اكتشاف زاوية الروبوت بالنسبة للخط.
تحتوي مصفوفة الانعكاس على كاشفات قريبة جدًا من بعضها البعض. هذا يعني أننا يجب أن نحصل على إشارات كشف متعددة ، اعتمادًا بالطبع على سمك الخط.
إذا كان الأمر كذلك ، إذا لم يكن الروبوت مضمنًا بشكل مباشر مع الخط ، فيجب أن يُرجع ناتجًا مفاده أن الخط أعرض مما ينبغي (لأننا بزاوية).
للحصول على شرح أفضل لما سبق ، ألق نظرة على مستند Lab 6.
للمساعدة في توصيل الأسلاك / توصيل المستشعر بلوحة تطوير MSP432 LaunchPad ، إليك بعض الإرشادات المفيدة.
لقد أضفت أيضًا نفس تعليمات pdf (مشابهة؟) إلى هذه الخطوة.
إذا كنت تقرأ مستندات Pololu بعناية ، فإنها تشرح سبب "تجاوز 3.3 فولت" ، الذي ستحتاج إليه إذا كنت تستخدم 3.3 فولت بدلاً من 5 فولت.
نظرًا لأننا لم نبني الروبوت بعد ، لكننا بدلاً من ذلك نتعلم فقط عن تجميع ARM وأيضًا كيفية التفاعل مع القطع (الأنظمة الفرعية) للروبوت ، لا يتعين علينا اتباع التعليمات المذكورة أعلاه بالحرف.
في الوقت الحالي ، فإن توصيل مجموعة مستشعر الخط يغلي / يقلل فقط إلى ما يلي:
- قم بتوصيل 3.3 فولت و GND من لوحة MSP432 إلى مجموعة أجهزة الاستشعار.
- قم بتوصيل دبوس المنفذ (أقترح P5.3) من MSP432 إلى طرف تمكين LED على صفيف مستشعر الخط. هذا الدبوس على المستشعر بين 3.3 فولت و GND.
- قم بتوصيل جميع دبابيس / بتات منفذ واحد (أقترح P7.0 من خلال P7.7) بالمسامير الثمانية لصفيف المستشعر المسمى "1" حتى "8". هذه هي الخطوط التي سترتفع أو تنخفض اعتمادًا على ما تشعر به.
كما ترى في صور هذه الخطوة ، وفي الفيديو ، لم أقم بتوصيل المستشعر بهيكل الروبوت ، لأنني أردت سهولة البرمجة وتصحيح الأخطاء والاختبار والتعلم.
لذلك مع كل شيء متصل ، نحن مستعدون للدخول في البرنامج.
الخطوة 2: السطر التالي
يعد مستشعر صفيف الانعكاس أنيقًا جدًا لأنه يمكن أن يساعد بطريقتين على الأقل.
- التحديد هو أن يتمركز الروبوت على الخط أو ينجرف إلى جانب واحد.
- هل يتم محاذاة الروبوت في اتجاه الخط ، أم أنه بزاوية.
يوفر كل من أجهزة الكشف في المصفوفة بشكل أساسي بتًا واحدًا من المعلومات ، إما HIGH أو LOW.
الفكرة هي دمج كل تلك البتات في رقم واحد أو نمط بت واحد ، واستخدام هذا النمط لاتخاذ القرارات (من أجل التحرك بشكل صحيح).
الخطوة 3: قبل أن نبدأ حقًا…
.. نحن بحاجة إلى تعلم شيء جديد حول برمجة تجميع ARM. وأنا لا أعني فقط تعليمات أخرى. هؤلاء يميلون إلى أن يكونوا قاصرين.
حتى الآن لم نستخدم "المكدس" في برامجنا.
لقد اعتمدنا على استخدام معظم مسجلات وحدة المعالجة المركزية الأساسية على مستوى العالم عبر إجراءات فرعية مختلفة.
كان الشيء الوحيد الذي فعلناه هو حفظ واستعادة عنوان LR (سجل الارتباط) لوظيفة واحدة - تلك التي استدعت عدة وظائف أخرى. (أستخدم "الوظيفة" و "الروتين الفرعي" بالتبادل هنا).
ما كنا نفعله ليس جيدًا. ماذا لو أردنا تداخل وظائف أخرى؟ ماذا لو كان لدينا أكثر من مستوى واحد من التعشيش؟
في الأمثلة السابقة ، اخترنا استخدام السجل R6 كمخزن لـ LR أو عنوان المرسل. ولكن إذا أردنا القيام بمزيد من التداخل / أعمق ، فلا يمكننا الاستمرار في تغيير قيمة R6. سيتعين علينا اختيار سجل آخر. وآخر. ومن ثم يصبح من الصعب تتبع سجل وحدة المعالجة المركزية الأساسية الذي يحمل LR لاستعادة الوظيفة.
حتى الآن نلقي نظرة على "المكدس".
الخطوة 4: المكدس
إليك بعض مواد القراءة التي تشرح المكدس.
أنا من أشد المؤيدين لفكرتين:
- فقط بقدر ما هو مطلوب ، انتقل إلى العملية بسرعة
- تعلم حسب الحاجة ، ركز على فعل شيء ما وليس مجرد تمارين أو أمثلة بلا هدف.
هناك الكثير من وثائق ARM و MSP432 عبر الإنترنت تتحدث عن المكدس ، لذلك لن نعيد صياغة كل ذلك. سأحافظ أيضًا على استخدام المكدس هنا إلى الحد الأدنى - حفظ عنوان المرسل (سجل الارتباط).
بشكل أساسي ، نحتاج فقط إلى التعليمات:
دفع {قائمة التسجيل}
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 هي RGB LED ويمكننا استخدام ذلك أيضًا ، مع إمكانيات الألوان المختلفة ، لإعطائنا إشارة إلى بيانات المستشعر.
إذا كنت قد مررت بـ Instructables السابقة المتعلقة بكل هذا ، فأنت تعرف بالفعل كيفية إعداد البرنامج.
فقط لديك قسم إعلان للموانئ والبتات ، إلخ.
سيكون لديك قسم "رئيسي".
يجب أن تكون هناك حلقة ، حيث نقرأ البيانات من 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 (عناوين فردية)
ما هو بالخط العريض هو ما سنستخدمه لهذا Instructable.
خطوات البرنامج لقراءة كاشفات الأشعة تحت الحمراء
ما يلي هو psuedo-code لكتابة البرنامج بلغة C ، لكنه لا يزال مفيدًا ، وسنتابعه عن كثب في إصدار التجميع من البرنامج.
البرنامج الرئيسي 0) تهيئة // المنافذ بينما (1) {1) اضبط P5.3 مرتفعًا (قم بتشغيل IR LED) 2) اجعل P7.0 مخرجًا ، وقم بتعيينه عاليًا (شحن المكثف) 3) انتظر 10 لنا ، Clock_Delay1us (10) ؛ 4) اجعل P7.0 مدخلاً 5) قم بتشغيل هذه الحلقة 10 ، 000 مرة أ) اقرأ P7.0 (يحول الجهد على P7.0 إلى ثنائي) ب) خرج ثنائي إلى P1.0 (يتيح لك رؤية ثنائي في الوقت الفعلي) 6) ضبط P5.3 منخفض (إيقاف تشغيل IR LED ، توفير الطاقة) 7) انتظر 10 مللي ثانية ، Clock_Delay1ms (10) ؛ } // كرر (العودة إلى حين ())
الخطوة 6: دعنا نحسن الكود
الغرض من مصفوفة Pololu IR LED أو استخدامها هو اكتشاف خط ، ومعرفة ما إذا كان الروبوت (المستقبل) متمركزًا بشكل مباشر على الخط ، أو بعيدًا عن جانب واحد. أيضًا ، نظرًا لأن الخط له سمك معين ، إذا كانت مصفوفة المستشعر متعامدة بشكل مباشر على الخط ، فسيكون لعدد N من المستشعرات قراءة مختلفة عن الباقي ، بينما إذا كانت صفيف IR LED في زاوية معينة (غير متعامدة) ، إذن الآن يجب أن تعطي أزواج N + 1 أو N + 2 IR LED / الكاشف قراءة مختلفة.
وبالتالي ، بناءً على عدد المستشعرات التي تشير إلى وجود الخط ، يجب أن نعرف ما إذا كنا متمركزين ، وما إذا كنا بزاوية أم لا.
بالنسبة لهذه التجربة النهائية ، دعنا نرى فقط ما إذا كان بإمكاننا الحصول على LED الأحمر و RGB LED لتزويدنا بمزيد من المعلومات حول ما تخبرنا به مصفوفة المستشعر.
يدخل الفيديو في كل التفاصيل. تم إرفاق الكود النهائي أيضًا.
هذا يكمل سلسلة تجميع ARM المتعلقة بـ GPIO. نأمل أن نعود مع المزيد من جمعية ARM في وقت لاحق.
شكرا لك.