جدول المحتويات:

مركب ليزر هارب على لوح Zybo: 10 خطوات (بالصور)
مركب ليزر هارب على لوح Zybo: 10 خطوات (بالصور)

فيديو: مركب ليزر هارب على لوح Zybo: 10 خطوات (بالصور)

فيديو: مركب ليزر هارب على لوح Zybo: 10 خطوات (بالصور)
فيديو: اشخاص قامو بل صعود على أعلى قمة في برج خليفة 🧗‍♂️😱 #shorts 2024, يوليو
Anonim
مركب ليزر هارب على لوح Zybo
مركب ليزر هارب على لوح Zybo

في هذا البرنامج التعليمي ، سننشئ قيثارة ليزر تعمل بكامل طاقتها باستخدام مستشعرات الأشعة تحت الحمراء بواجهة تسلسلية تتيح للمستخدم تغيير ضبط ونغمة الأداة. ستكون هذه القيثارة إعادة صنع القرن الحادي والعشرين للأداة القديمة. تم إنشاء النظام باستخدام لوحة تطوير Xilinx Zybo جنبًا إلى جنب مع Vivado Design Suites. ما سوف تحتاجه لإكمال المشروع:

  • 12 مستشعرًا وبواعثًا بالأشعة تحت الحمراء (يمكن استخدام أكثر أو أقل اعتمادًا على عدد السلاسل)
  • مجلس التنمية Zybo Zynq-7000
  • RTOS مجاني
  • جناح تصميم فيفادو
  • سلك (لتوصيل المستشعرات باللوحة)
  • 3 قطع من الأنابيب البلاستيكية ((2) 18 بوصة و (1) 8 بوصة)
  • 2 أكواع PVC

الخطوة 1: احصل على العرض التوضيحي الصوتي Zybo DMA من Digilent

يعتمد جانب FPGA لهذا المشروع بشكل كبير على المشروع التجريبي الموجود هنا. يستخدم الوصول المباشر إلى الذاكرة لإرسال البيانات مباشرة من الذاكرة التي يمكن للمعالج الكتابة إليها عبر AXI Stream إلى كتلة صوت I2S. ستساعدك الخطوات التالية في تشغيل مشروع DMA التوضيحي الصوتي:

  1. قد يكون من الضروري وجود نسخة جديدة من ملف اللوحة للوحة Zybo. اتبع هذه التعليمات للحصول على ملفات لوحة جديدة لـ Vivado.
  2. اتبع الخطوتين 1 و 2 في التعليمات الموجودة على هذه الصفحة لفتح المشروع التجريبي في Vivado. استخدم طريقة Vivado ، وليس تسليم أجهزة SDK.
  3. قد تتلقى رسالة تفيد بأنه يجب تحديث بعض كتل IP الخاصة بك. إذا كان الأمر كذلك ، حدد "إظهار حالة IP" ثم في علامة تبويب حالة IP ، حدد كل عنوان IP القديم وانقر فوق "ترقية المحدد". عندما ينتهي وينبثق نافذة تسألك عما إذا كنت تريد إنشاء منتج الإخراج ، امض قدمًا وانقر على "إنشاء". إذا تلقيت رسالة تحذير حرجة ، فتجاهلها.
  4. قم بالتبديل من التصميم إلى علامة تبويب المصادر في Vivado لرؤية الملفات المصدر. انقر بزر الماوس الأيمن فوق تصميم الكتلة "design_1" وحدد "إنشاء غلاف HDL". عند المطالبة ، حدد "نسخ الغلاف الذي تم إنشاؤه للسماح للمستخدم بالتحرير". سيتم إنشاء ملف مجمّع للمشروع.
  5. الآن وبعد اكتمال تلك الخطوات المهمة التي تم استبعادها بطريقة ما في البرنامج التعليمي الآخر ، يمكنك العودة إلى البرنامج التعليمي المرتبط مسبقًا والمتابعة من الخطوة 4 حتى النهاية والتأكد من تشغيل المشروع التجريبي بشكل صحيح. إذا لم يكن لديك طريقة لإدخال الصوت لتسجيله ، فما عليك سوى التسجيل باستخدام سماعات الرأس الخاصة بك والاستماع إلى صوت ضبابي مدته 5-10 ثوانٍ عند الضغط على زر التشغيل. طالما يخرج شيء ما من مقبس سماعة الرأس عند الضغط على زر التشغيل ، فمن المحتمل أنه يعمل بشكل صحيح.

الخطوة 2: قم بإجراء بعض التغييرات في Vivado

قم بإجراء بعض التغييرات في Vivado
قم بإجراء بعض التغييرات في Vivado

الآن لديك عرض صوتي لـ Digilent's DMA يعمل ، لكن هذا ليس الهدف النهائي على الإطلاق هنا. لذلك علينا العودة إلى Vivado وإجراء بعض التغييرات حتى يمكن توصيل مستشعراتنا برؤوس PMOD ويمكننا استخدام قيمتها في جانب البرنامج.

  1. افتح مخطط الكتلة في Vivado
  2. قم بإنشاء كتلة GPIO بالنقر بزر الماوس الأيمن في مساحة فارغة في مخطط الكتلة واختيار "إضافة IP" من القائمة. ابحث عن "AXI GPIO" واختره.
  3. انقر نقرًا مزدوجًا فوق كتلة IP الجديدة وفي نافذة إعادة تخصيص IP ، انتقل إلى علامة تبويب تكوين IP. حدد جميع المدخلات واضبط العرض على اثني عشر ، حيث سيكون لدينا 12 "سلسلة" على القيثارة ، وبالتالي نحتاج إلى 12 مستشعرًا. إذا كنت تريد استخدام مستشعرات أقل أو أكثر ، فاضبط هذا الرقم بشكل مناسب. أيضا تعيين تمكين المقاطعة.
  4. انقر بزر الماوس الأيمن فوق كتلة GPIO IP الجديدة وحدد "تشغيل أتمتة الاتصال". تحقق من مربع AXI واضغط على موافق. يجب أن يقوم هذا بتوصيل واجهة AXI تلقائيًا ، مع ترك مخرجات الكتلة غير متصلة.
  5. من أجل إفساح المجال للمقاطعة الإضافية ، انقر نقرًا مزدوجًا فوق xlconcat_0 IP block وقم بتغيير عدد المنافذ من 4 إلى 5. ثم يمكنك توصيل دبوس ip2intc_irpt من كتلة GPIO الجديدة بالمنفذ الجديد غير المستخدم في كتلة xlconcat.
  6. انقر بزر الماوس الأيمن على خرج "GPIO" الخاص بمجموعة GPIO IP الجديدة وحدد "make external". ابحث عن المكان الذي يذهب إليه الخط وانقر على البنتاغون الصغير الجانبي وعلى اليسار يجب أن تفتح نافذة حيث يمكنك تغيير الاسم. قم بتغيير الاسم إلى "أجهزة الاستشعار". من المهم استخدام نفس الاسم إذا كنت تريد أن يعمل ملف القيود الذي نقدمه ، وإلا فسيتعين عليك تغيير الاسم في ملف القيود.
  7. مرة أخرى في علامة تبويب المصادر ، ابحث عن ملف القيود واستبدله بالملف الذي نقدمه. يمكنك اختيار إما استبدال الملف أو نسخ محتويات ملف القيود الخاص بنا ولصقه فوق محتويات الملف القديم. أحد الأشياء المهمة التي يقوم بها ملف القيود الخاص بنا هو تمكين مقاومات السحب على رؤوس PMOD. هذا ضروري لأجهزة الاستشعار المعينة التي استخدمناها ، ولكن ليست كل المستشعرات متشابهة. إذا كانت المستشعرات تتطلب مقاومات منسدلة ، فيمكنك تغيير كل حالة من "set_property PULLUP true" باستخدام "set_property PULLDOWN true". إذا كانت تتطلب قيمة مقاومة مختلفة عن تلك الموجودة على السبورة ، فيمكنك إزالة هذه الخطوط واستخدام مقاومات خارجية. توجد أسماء الدبوس في التعليقات في ملف القيود ، وهي تتوافق مع الملصقات الموجودة في الرسم التخطيطي الأول في Zybo Schematics الصفحة التي يمكن العثور عليها هنا. إذا كنت تريد استخدام دبابيس pmod مختلفة ، فقم فقط بمطابقة الأسماء الموجودة في ملف القيد بالتسميات في التخطيطي. نحن نستخدم رأس PMOD JE و JD ، ونستخدم ستة دبابيس بيانات على كل منهما ، مع حذف الدبابيس 1 و 7. هذه المعلومات مهمة عند توصيل أجهزة الاستشعار الخاصة بك. كما هو مبين في التخطيطي ، فإن الدبابيس 6 و 12 على PMODS هي VCC والدبابيس 5 و 11 على الأرض.
  8. قم بإعادة إنشاء غلاف HDL كما كان من قبل ، وانسخ واكتب الغلاف القديم. عند الانتهاء من ذلك ، قم بإنشاء دفق بتات وتصدير الأجهزة كما كان من قبل ، وأعد تشغيل SDK. إذا تم سؤالك عما إذا كنت تريد استبدال ملف الجهاز القديم ، فإن الإجابة هي نعم. ربما يكون من الأفضل إغلاق SDK عند تصدير الأجهزة بحيث يتم استبدالها بشكل صحيح.
  9. قم بتشغيل SDK.

الخطوة 3: احصل على FreeRTOS قيد التشغيل

الخطوة التالية هي تشغيل FreeRTOS على لوحة Zybo.

  1. إذا لم يكن لديك نسخة بالفعل ، فقم بتنزيل FreeRTOS هنا واستخرج الملفات.
  2. قم باستيراد العرض التوضيحي FreeRTOS Zynq الموجود في FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo. تشبه عملية الاستيراد إلى حد كبير ما كانت عليه بالنسبة للمشروع التجريبي الآخر ، ولكن نظرًا لأن العرض التوضيحي FreeRTOS Zynq يعتمد على ملفات أخرى في مجلد FreeRTOS ، فلا يجب نسخ الملفات إلى مساحة العمل الخاصة بك. بدلاً من ذلك ، يجب عليك وضع مجلد FreeRTOS بالكامل داخل مجلد مشروعك.
  3. أنشئ حزمة دعم جديدة للوحة بالانتقال إلى "ملف" -> "جديد" -> "حزمة دعم اللوحة". تأكد من تحديد قائمة بذاتها وانقر فوق إنهاء. بعد لحظة ستظهر نافذة ، حدد المربع المجاور لـ lwip141 (هذا يمنع أحد عروض FreeRTOS التوضيحية من الفشل في الترجمة) واضغط على موافق. بعد اكتمال ذلك ، انقر بزر الماوس الأيمن على مشروع RTOSdemo وانتقل إلى "الخصائص" ، وانتقل إلى علامة التبويب "مراجع المشروع" ، وحدد المربع بجوار bsp الجديد الذي قمت بإنشائه. نأمل أن يتم التعرف عليه ولكن في بعض الأحيان يمكن أن يكون Xilinx SDK غريبًا بشأن هذا النوع من الأشياء. إذا استمر ظهور خطأ بعد هذه الخطوة يفيد بأن xparameters.h مفقود أو شيء من هذا القبيل ، فحاول تكرار هذه الخطوة وربما الخروج من SDK وإعادة تشغيله.

الخطوة 4: أضف رمز Laser Harp

الآن بعد أن تم استيراد FreeRTOS ، يمكنك إحضار الملفات من مشروع الليزر harp إلى العرض التوضيحي لـ FreeRTOS

  1. أنشئ مجلدًا جديدًا ضمن مجلد src في العرض التوضيحي لـ FreeRTOS وانسخ والصق جميع ملفات c المتوفرة باستثناء main.c في هذا المجلد.
  2. استبدل RTOSDemo main.c بـ main.c.
  3. إذا تم كل شيء بشكل صحيح ، يجب أن تكون قادرًا على تشغيل كود الليزر القيثاري في هذه المرحلة. لأغراض الاختبار ، يتم الآن استخدام إدخال الزر الذي تم استخدامه في مشروع DMA التجريبي لتشغيل الأصوات دون إرفاق أجهزة استشعار (سيعمل أي من الأزرار الأربعة الرئيسية). ستلعب سلسلة في كل مرة تضغط عليها وتتنقل عبر جميع الأوتار في النظام عبر ضغطات متعددة. قم بتوصيل بعض سماعات الرأس أو مكبرات الصوت بمقبس سماعة الرأس على لوحة Zybo وتأكد من أنه يمكنك سماع أصوات الأوتار القادمة عند الضغط على زر.

الخطوة 5: حول المدونة

من المحتمل أن يتعلم الكثير منكم الذين يقرؤون هذا البرنامج التعليمي كيفية إعداد الصوت أو استخدام DMA للقيام بشيء مختلف ، أو لإنشاء آلة موسيقية مختلفة. لهذا السبب ، يتم تخصيص الأقسام القليلة التالية لوصف كيفية عمل الكود المقدم جنبًا إلى جنب مع الأجهزة الموصوفة سابقًا للحصول على إخراج صوتي يعمل باستخدام DMA. إذا فهمت سبب وجود أجزاء التعليمات البرمجية ، فيجب أن تكون قادرًا على تعديلها لأي شيء تريد إنشاءه.

المقاطعات

سأذكر أولاً كيف يتم إنشاء المقاطعات في هذا المشروع. كانت الطريقة التي قمنا بها هي إنشاء هيكل جدول متجه للمقاطعة يتتبع المعرف ومعالج المقاطعة ومرجع للجهاز لكل مقاطعة. تأتي معرفات المقاطعة من xparameters.h. معالج المقاطعة هو وظيفة كتبناها لـ DMA و GPIO ، وتأتي مقاطعة I2C من برنامج تشغيل Xlic I2C. يشير مرجع الجهاز إلى مثيلات كل جهاز نقوم بتهيئته في مكان آخر. بالقرب من نهاية دالة _init_audio ، تمر حلقة عبر كل عنصر في جدول متجه المقاطعة وتستدعي وظيفتين ، XScuGic_Connect () و XScuGic_Enable () للاتصال وتمكين المقاطعات. وهي تشير إلى xInterruptController ، وهي وحدة تحكم بالمقاطعة تم إنشاؤها في FreeRTOS main.c افتراضيًا. لذلك ، نربط كل مقاطعة من المقاطعات الخاصة بنا بوحدة التحكم في المقاطعة هذه والتي تم إنشاؤها بالفعل لنا بواسطة FreeRTOS.

DMA

يبدأ رمز تهيئة DMA في lh_main.c. أولاً تم التصريح عن مثيل ثابت لبنية XAxiDma. ثم في وظيفة _init_audio () يتم تكوينها. أولاً ، يتم استدعاء وظيفة التكوين من المشروع التجريبي ، وهي موجودة في dma.c. إنه موثق جيدًا ويأتي مباشرة من العرض التوضيحي. ثم يتم توصيل المقاطعة وتمكينها. بالنسبة لهذا المشروع ، لا يلزم سوى مقاطعة السيد إلى التابع ، لأنه يتم إرسال جميع البيانات بواسطة DMA إلى وحدة تحكم I2S. إذا كنت ترغب في تسجيل الصوت ، فستحتاج أيضًا إلى مقاطعة التابع إلى الرئيسي. يتم استدعاء مقاطعة السيد إلى التابع عندما ينتهي DMA من إرسال أي بيانات طلبت منه إرسالها. تعد هذه المقاطعة مهمة للغاية بالنسبة لمشروعنا لأنه في كل مرة ينتهي فيها DMA من إرسال مخزن مؤقت واحد من عينات الصوت ، يجب أن يبدأ فورًا في إرسال المخزن المؤقت التالي ، وإلا فسيحدث تأخير مسموع بين عمليات الإرسال. داخل وظيفة dma_mm2s_ISR () يمكنك أن ترى كيف نتعامل مع المقاطعة. يقع الجزء المهم بالقرب من النهاية حيث نستخدم xSemaphoreGiveFromISR () و portYIELD_FROM_ISR () لإخطار _audio_task () بأنه يمكنه بدء نقل DMA التالي. الطريقة التي نرسل بها بيانات صوتية ثابتة هي بالتناوب بين مخازن مؤقتة. عندما يتم إرسال مخزن مؤقت واحد إلى كتلة I2C ، يتم حساب قيم المخزن المؤقت الآخر وتخزينه. ثم عندما تأتي المقاطعة من DMA ، يتم تبديل المخزن المؤقت النشط ويبدأ نقل المخزن المؤقت المكتوب حديثًا بينما يبدأ المخزن المؤقت الذي تم نقله مسبقًا في الكتابة فوقه ببيانات جديدة. الجزء الرئيسي من وظيفة _audio_task هو المكان الذي يتم فيه استدعاء fnAudioPlay (). تأخذ fnAudioPlay () مثيل DMA وطول المخزن المؤقت ومؤشرًا إلى المخزن المؤقت الذي سيتم نقل البيانات منه. يتم إرسال بعض القيم إلى سجلات I2S لإعلامها بالمزيد من العينات القادمة. ثم يتم استدعاء XAxiDma_SimpleTransfer () لبدء النقل.

صوت I2S

audio.c و audio.h حيث تتم تهيئة I2S. رمز تهيئة I2S هو جزء شائع جدًا من التعليمات البرمجية التي تطفو في عدد من الأماكن ، قد تجد اختلافات طفيفة من مصادر أخرى ولكن هذا واحد يجب أن يعمل. إنه موثق جيدًا ولا يلزم تغييره كثيرًا لمشروع القيثارة. يحتوي العرض التوضيحي الصوتي DMA الذي جاء منه على وظائف للتبديل إلى مدخلات الميكروفون أو الخط حتى تتمكن من استخدامها إذا كنت بحاجة إلى هذه الوظيفة.

توليف الصوت

لوصف كيفية عمل توليف الصوت ، سأقوم بإدراج كل من نماذج الصوت المستخدمة في التطوير والتي أدت إلى الطريقة النهائية ، حيث ستعطيك فكرة عن سبب إجرائها بالطريقة التي يتم بها.

الطريقة 1: يتم حساب فترة واحدة من قيم الجيب لكل سلسلة عند التردد المقابل للنوتة الموسيقية لتلك السلسلة ويتم تخزينها في مصفوفة. على سبيل المثال ، سيكون طول المصفوفة هو فترة الموجة الجيبية في العينات ، والتي تساوي عدد العينات / الدورة. إذا كان معدل أخذ العينات 48 كيلو هرتز وكان تردد الملاحظة 100 هرتز ، فهناك 48000 عينة / ثانية و 100 دورة / ثانية تؤدي إلى 4800 عينة لكل دورة ، وسيكون طول الصفيف 4800 عينة وسيحتوي على قيم واحدة كاملة فترة موجة جيبية. عند تشغيل السلسلة ، يتم ملء المخزن المؤقت لعينة الصوت بأخذ قيمة من مصفوفة الموجة الجيبية ووضعها في المخزن المؤقت للصوت كعينة ، ثم زيادة الفهرس في مصفوفة الموجة الجيبية بحيث يتم استخدام المثال السابق على الدورة من 4800 عينة يتم وضع دورة موجة جيبية واحدة في المخزن المؤقت للصوت. يتم استخدام عملية modulo في فهرس المصفوفة بحيث يقع دائمًا بين 0 والطول ، وعندما يتجاوز فهرس المصفوفة حدًا معينًا (مثل 2 ثانية من العينات) يتم إيقاف تشغيل السلسلة. لتشغيل سلاسل متعددة في نفس الوقت ، قم بتتبع فهرس مصفوفة كل سلسلة بشكل منفصل وأضف القيمة من كل موجة جيبية للسلاسل معًا للحصول على كل عينة.

الطريقة 2: لإنشاء نغمة موسيقية أكثر ، نبدأ بالنموذج السابق ونضيف التوافقيات إلى كل تردد أساسي. الترددات التوافقية هي ترددات تعد مضاعفات صحيحة للتردد الأساسي. على عكس ما يحدث عندما يتم جمع ترددين غير مرتبطين معًا ، مما ينتج عنه تشغيل صوتين متميزين في وقت واحد ، عند إضافة التوافقيات معًا ، يستمر الصوت كصوت واحد فقط ، ولكن بنبرة مختلفة. لتحقيق ذلك ، في كل مرة نضيف قيمة الموجة الجيبية في الموقع (طول مصفوفة مؤشر الصفيف٪) إلى عينة الصوت ، نضيف أيضًا (2 * فهرس الصفيف٪ طول المصفوفة) ، و (3 * مؤشر صفيف٪ طول الصفيف)) ، وهكذا دواليك على الرغم من أن العديد من التوافقيات مطلوبة. ستجتاز هذه المؤشرات المضاعفة الموجة الجيبية بترددات تعد مضاعفات عددية للتردد الأصلي. للسماح بمزيد من التحكم في النغمة ، يتم ضرب قيم كل توافقي بواسطة متغير يمثل مقدار ذلك التوافقي في الصوت الكلي. على سبيل المثال ، قد تكون قيم الموجة الجيبية الأساسية مضروبة جميعًا في 6 لجعلها عاملًا أكثر في الصوت الكلي ، بينما قد يكون للموجة الجيبية 5 مضاعف 1 ، مما يعني أن قيمها تساهم بشكل أقل في الصوت الكلي.

الطريقة الثالثة: حسنًا ، لدينا الآن نغمة لطيفة جدًا على الملاحظات ، ولكن لا تزال هناك مشكلة بالغة الأهمية: يتم تشغيلها بحجم ثابت لمدة محددة. لكي تبدو على الإطلاق وكأنها آلة حقيقية ، يجب أن يتحلل حجم الوتر الذي يتم عزفه بسلاسة بمرور الوقت. من أجل تحقيق ذلك ، تمتلئ المصفوفة بقيم دالة التدهور الأسي. الآن عندما يتم إنشاء عينات الصوت ، يتم حساب الصوت القادم من كل سلسلة كما في الطريقة السابقة ولكن قبل إضافته إلى عينة الصوت يتم ضربه بالقيمة الموجودة في فهرس مصفوفة السلاسل في مصفوفة دالة الانحلال الأسي. هذا يجعل الصوت يتبدد بسلاسة بمرور الوقت. عندما يصل فهرس الصفيف إلى نهاية صفيف الانحلال ، يتم إيقاف السلسلة.

الطريقة الرابعة: هذه الخطوة الأخيرة هي ما يعطي أصوات السلسلة صوتها الواقعي. قبل أن يبدوا لطيفين ولكن من الواضح أنه تم توليفهم. لمحاولة محاكاة سلسلة قيثارة في العالم الحقيقي بشكل أفضل ، يتم تعيين معدل انحلال مختلف لكل متناسق. في الأوتار الحقيقية ، عندما يتم ضرب السلسلة لأول مرة ، يوجد محتوى عالٍ من التوافقيات عالية التردد التي تخلق نوعًا من صوت النتف الذي نتوقعه من سلسلة. هذه التوافقيات عالية التردد هي لفترة وجيزة الجزء الرئيسي من الصوت ، صوت الوتر الذي يتم ضربه ، لكنها تتحلل بسرعة كبيرة عندما تتولى التوافقيات الأبطأ. يتم إنشاء مصفوفة اضمحلال لكل رقم توافقي مستخدم في تخليق الصوت لكل منها معدل الانحلال الخاص به. الآن يمكن ضرب كل توافقي بشكل مستقل بالقيمة الخاصة بمصفوفة الانحلال المقابلة لها في فهرس مصفوفة السلسلة وإضافتها إلى الصوت.

بشكل عام ، يكون تركيب الصوت بديهيًا ولكن الحساب ثقيل. قد يستغرق تخزين صوت السلسلة بالكامل في الذاكرة دفعة واحدة الكثير من الذاكرة ، ولكن حساب الموجة الجيبية والوظيفة الأسية بين كل إطار قد يستغرق وقتًا طويلاً لمواكبة معدل تشغيل الصوت. يتم استخدام عدد من الحيل في الكود لتسريع الحساب. تتم جميع الرياضيات باستثناء الإنشاء الأولي لجداول الانحلال الجيبي والأسي بتنسيق عدد صحيح ، مما يتطلب نشر المساحة الرقمية المتوفرة في إخراج الصوت 24 بت. على سبيل المثال ، يكون جدول الجيب بسعة 150 بحيث يكون سلسًا ولكنه ليس كبيرًا لدرجة أن العديد من الأوتار التي يتم تشغيلها معًا يمكن أن تزيد عن 24 بت. وبالمثل ، يتم ضرب قيم الجدول الأسي في 80 قبل تقريبها إلى أعداد صحيحة وتخزينها. يمكن أن تأخذ الأوزان التوافقية قيمًا منفصلة بين 0 و 10. كما يتم مضاعفة جميع العينات فعليًا ويتم فهرسة الموجات الجيبية بمقدار 2 ، مما يؤدي إلى خفض معدل أخذ العينات إلى النصف. هذا يحد من الحد الأقصى للتردد الذي يمكن تشغيله ، ولكنه كان ضروريًا لحساب العدد الحالي من السلاسل والتوافقيات بسرعة كافية.

استغرق إنشاء هذا النموذج الصوتي وتشغيله جهدًا كبيرًا من جانب المعالج ، وكان من الصعب جدًا تشغيله على جانب fpga من نقطة الصفر في الإطار الزمني لهذا المشروع (تخيل أنه يتعين عليك إعادة إنشاء تدفق البتات كل مرة تم تغيير قطعة من فيريلوج لاختبار الصوت). ومع ذلك ، من المحتمل أن يكون القيام بذلك على fpga طريقة أفضل للقيام بذلك ، وربما يقضي على مشكلة عدم القدرة على حساب العينات بسرعة كافية والسماح بمزيد من السلاسل والتوافقيات وحتى المؤثرات الصوتية أو المهام الأخرى ليتم تشغيلها على جانب المعالج.

الخطوة 6: توصيل أجهزة الاستشعار

توصيل أجهزة الاستشعار
توصيل أجهزة الاستشعار

لإنشاء السلاسل ، استخدمنا مستشعرات شعاع كسر الأشعة تحت الحمراء التي ستكتشف وقت تشغيل السلسلة. لقد طلبنا أجهزة الاستشعار الخاصة بنا من الرابط التالي. تحتوي المستشعرات على سلك طاقة وأرض وبيانات بينما لا تحتوي أجهزة الاستشعار إلا على سلك طاقة وسلك أرضي. استخدمنا 3.3 فولت ودبابيس أرضية من رؤوس PMOD لتشغيل كل من بواعث وأجهزة الاستشعار. لتشغيل جميع أجهزة الاستشعار والباعث ، من الضروري توصيل جميع المستشعرات والباعث بالتوازي. سيحتاج كل من أسلاك البيانات من المستشعرات إلى الانتقال إلى دبوس pmod الخاص به.

الخطوة السابعة: بناء الهيكل العظمي

بناء الهيكل العظمي
بناء الهيكل العظمي

من أجل إنشاء شكل القيثارة ، يتم استخدام القطع الثلاث كهيكل عظمي لوضع المستشعرات والبواعث عليها. على واحدة من قطعتين من الأنابيب البلاستيكية مقاس 18 بوصة ، قم بمحاذاة المستشعرات والوابعثات بترتيب متناوب 1.5 بوصة من بعضها البعض ثم قم بربطها بالأنبوب. على أنبوب PVC الآخر مقاس 18 بوصة ، قم بمحاذاة المستشعرات والوابعثات بترتيب متناوب ولكن تأكد من موازنة الترتيب (على سبيل المثال ، إذا كان الأنبوب الأول يحتوي على مستشعر أولاً ، فيجب أن يحتوي الأنبوب الثاني على باعث أولاً والعكس صحيح).سيكون من الضروري لحام أسلاك أطول بالبيانات والطاقة والأسلاك الأرضية لضمان قدرتها على الوصول إلى اللوحة.

الخطوة 8: بناء السطح الخارجي للخشب

بناء الخشب الخارجي
بناء الخشب الخارجي

هذه الخطوة اختيارية لكنها موصى بها بشدة. لا يجعل السطح الخارجي الخشبي القيثارة يبدو جميلًا فحسب ، بل يحمي المستشعرات والأسلاك أيضًا من التلف. يمكن إنشاء الإطار الخشبي بواسطة حلقة مستطيلة الشكل من الخشب. يحتاج الجزء الداخلي من المستطيل إلى فتحة لا تقل عن 1-1 / 2 بوصة لتناسب الهيكل العظمي للأنبوب وجهاز الاستشعار. بمجرد إنشاء الإطار ، قم بحفر فتحتين تسمحان للأسلاك من المستشعر والبواعث بالخروج من أجل توصيلها باللوحة.

* ملاحظة: يوصى بإضافة نقاط وصول للتمكن من إزالة هيكل الأنبوب وإدخاله في حالة الحاجة إلى إجراء إصلاحات أو إجراء تعديلات طفيفة.

الخطوة 9: وضع كل القطع معًا

نضع كل القطع معًا
نضع كل القطع معًا

بمجرد الانتهاء من جميع الخطوات السابقة ، حان الوقت لبناء القيثارة. ضع أولاً هيكل الأنبوب داخل الجزء الخارجي الخشبي. ثم قم بتوصيل الأسلاك الخاصة بالمستشعرات والبواعث في الموقع الصحيح على اللوحة. ثم افتح SDK وانقر فوق زر التصحيح لبرمجة اللوحة. بمجرد برمجة اللوحة ، قم بتوصيل زوج من سماعات الرأس أو مكبر صوت. اعتمادًا على المستشعر الذي ينتهي به الأمر في منفذ pmod ، من المحتمل أن تكون سلاسل harp معطلة لتبدأ بها. نظرًا لأنه قد يكون من الصعب تحديد السلك الذي يذهب إلى أي جهاز استشعار عند وجود العديد من الأسلاك ، فقد قمنا بتضمين طريقة لتعيين أرقام السلسلة لمقاطعة مواضع البت في البرنامج. ابحث عن "static int sensor_map [NUM_STRINGS]" واضبط القيم في المصفوفة حتى يتم تشغيل السلاسل من الأدنى إلى الأعلى بالترتيب.

يمكن استخدام القائمة عن طريق فتح محطة تسلسلية (مثل RealTerm) وضبط معدل البث بالباود على 115200 والعرض على ANSI. يمكن التنقل في القائمة باستخدام مفتاحي w و s للتنقل لأعلى ولأسفل ومفاتيح a و d لتغيير القيم.

الخطوة 10: انطلق

بمجرد أن يعمل القيثارة بشكل كامل. إتقان القيثارة والاستماع إلى الصوت الجميل لموسيقاك!

موصى به: