فهرست مطالب:

دستگاه لیزر هارپ سینت سایزر روی صفحه Zybo: 10 مرحله (همراه با تصاویر)
دستگاه لیزر هارپ سینت سایزر روی صفحه Zybo: 10 مرحله (همراه با تصاویر)

تصویری: دستگاه لیزر هارپ سینت سایزر روی صفحه Zybo: 10 مرحله (همراه با تصاویر)

تصویری: دستگاه لیزر هارپ سینت سایزر روی صفحه Zybo: 10 مرحله (همراه با تصاویر)
تصویری: پاسخ به سوالات پرتکرار در خصوص دستگاه برش لیزری فایبر فلزات در مگاماشین 2024, جولای
Anonim
دستگاه لیزر هارپ سینت سایزر روی Zybo Board
دستگاه لیزر هارپ سینت سایزر روی Zybo Board

در این آموزش ما یک چنگ لیزری کاملاً کاربردی با استفاده از حسگرهای IR با رابط سریال ایجاد می کنیم که به کاربر اجازه می دهد تنظیم و لحن ساز را تغییر دهد. این چنگ بازسازی ساز قدیمی قرن 21 خواهد بود. این سیستم با استفاده از یک تخته توسعه Xilinx Zybo همراه با Vivado Design Suites ایجاد شد. آنچه برای تکمیل پروژه نیاز دارید:

  • 12 سنسور و ساطع کننده مادون قرمز (بسته به تعداد رشته ها می توان بیشتر یا کمتر استفاده کرد)
  • برد توسعه Zybo Zynq-7000
  • RTOS رایگان
  • مجموعه طراحی ویوادو
  • سیم (برای اتصال سنسورها به برد)
  • 3 قطعه لوله PVC ((2) 18 اینچ و (1) 8 اینچ)
  • 2 آرنج PVC

مرحله 1: نسخه نمایشی صوتی Digynt's Zybo DMA را دریافت کنید

سمت FPGA این پروژه تا حد زیادی بر اساس پروژه نمایشی است که در اینجا یافت می شود. از دسترسی مستقیم به حافظه برای ارسال مستقیم داده ها از حافظه استفاده می کند که پردازنده می تواند از طریق AXI Stream به یک بلوک صوتی I2S ارسال کند. مراحل زیر به شما کمک می کند تا پروژه نمایشی صوتی DMA را راه اندازی کنید:

  1. ممکن است نسخه جدیدی از فایل برد برای برد Zybo لازم باشد. این دستورالعمل ها را دنبال کنید تا فایل های هیئت مدیره جدید برای Vivado را بدست آورید.
  2. مراحل 1 و 2 دستورالعمل های این صفحه را دنبال کنید تا پروژه نمایشی در Vivado باز شود. از روش Vivado استفاده کنید ، نه انتقال سخت افزار SDK.
  3. ممکن است پیامی دریافت کنید که می گوید برخی از بلوک های IP شما باید به روز شوند. در این صورت ، "نمایش وضعیت IP" را انتخاب کنید و سپس در برگه وضعیت IP همه IP های قدیمی را انتخاب کرده و روی "Upgrade Selected" کلیک کنید. پس از اتمام کار و پنجره ای ظاهر می شود که می پرسد آیا می خواهید محصول خروجی تولید کنید ، ادامه دهید و روی "ایجاد" کلیک کنید. در صورت دریافت یک پیام هشدار دهنده مهم ، آن را نادیده بگیرید.
  4. برای مشاهده فایل های منبع ، از طراحی به برگه منابع در Vivado تغییر دهید. روی طرح بلوک "design_1" راست کلیک کرده و "Create HDL Wrapper" را انتخاب کنید. هنگامی که از شما خواسته شد "پوشه تولید شده را کپی کنید تا ویرایشات کاربر مجاز شود" را انتخاب کنید. یک فایل بسته بندی برای پروژه ایجاد می شود.
  5. اکنون که مراحل حیاتی که به نحوی در آموزش دیگر کنار گذاشته شده بود ، به پایان رسید ، می توانید به آموزش قبلی پیوند شده بازگردید و از مرحله 4 تا انتها ادامه دهید و مطمئن شوید که پروژه نمایشی به درستی اجرا می شود. اگر راهی برای وارد کردن صدا برای ضبط آن ندارید ، فقط با هدفون ضبط کرده و با فشردن دکمه پخش ، صدای فازی 5-10 ثانیه ای را بشنوید. تا زمانی که دکمه پخش را فشار می دهید چیزی از جک هدفون خارج می شود ، احتمالاً به درستی کار می کند.

مرحله 2: برخی تغییرات را در Vivado ایجاد کنید

برخی تغییرات را در Vivado ایجاد کنید
برخی تغییرات را در Vivado ایجاد کنید

بنابراین اکنون شما نسخه نمایشی صوتی DMA Digilent را کار کرده اید ، اما این در اینجا هدف نهایی نیست. بنابراین ما باید به Vivado برگردیم و برخی تغییرات را ایجاد کنیم تا سنسورهای ما به سرصفحه های PMOD متصل شوند و از ارزش آنها در سمت نرم افزار استفاده کنیم.

  1. نمودار بلوک را در Vivado باز کنید
  2. با کلیک راست روی فضای خالی موجود در نمودار بلوک و انتخاب "افزودن IP" از منو ، یک بلوک GPIO ایجاد کنید. "AXI GPIO" را پیدا کرده و انتخاب کنید.
  3. روی بلوک IP جدید دوبار کلیک کرده و در پنجره IP سفارشی سازی مجدد به برگه پیکربندی IP بروید. همه ورودی ها را انتخاب کرده و عرض را روی دوازده تنظیم کنید ، زیرا ما 12 "رشته" روی چنگ خود داریم و بنابراین به 12 سنسور نیاز داریم. اگر می خواهید از سنسورهای کمتر یا بیشتر استفاده کنید ، این عدد را به درستی تنظیم کنید. همچنین فعال کردن وقفه را تنظیم کنید.
  4. روی بلوک IP GPIO جدید راست کلیک کرده و "اجرای اتوماسیون اتصال" را انتخاب کنید. کادر AXI را علامت زده و okay را بزنید. این باید رابط AXI را به طور خودکار متصل کند ، اما خروجی های بلوک را بدون اتصال رها کند.
  5. به منظور باز کردن فضای اضافی ، روی بلوک IP xlconcat_0 دوبار کلیک کنید و تعداد پورت ها را از 4 به 5 تغییر دهید. سپس می توانید پین ip2intc_irpt را از بلوک GPIO جدید به پورت جدید بلااستفاده در بلوک xlconcat متصل کنید.
  6. روی خروجی "GPIO" بلوک IP GPIO راست کلیک کرده و "make external" را انتخاب کنید. پیدا کنید خط به کجا می رود و روی پنج ضلعی جانبی کوچک کلیک کنید و در سمت چپ پنجره ای باز می شود که می توانید نام آن را تغییر دهید. نام را به "SENSORS" تغییر دهید. اگر می خواهید فایل محدودیت هایی که ارائه می دهیم کار کند ، از یک نام استفاده کنید ، در غیر این صورت مجبور خواهید بود نام را در فایل محدودیت ها تغییر دهید.
  7. در برگه منابع ، فایل محدودیت ها را بیابید و آن را با فایل ارائه شده جایگزین کنید. شما می توانید یا فایل را جایگزین کنید یا فقط محتویات فایل محدودیت های ما را کپی کرده و روی محتویات فایل قدیمی بچسبانید. یکی از کارهای مهمی که فایل محدودیت های ما انجام می دهد فعال کردن مقاومت های کششی در سرصفحه های PMOD است. این برای سنسورهای خاصی که استفاده کردیم ضروری است ، اما همه سنسورها یکسان نیستند. اگر سنسورهای شما به مقاومت های کشویی احتیاج دارند ، می توانید هر نمونه ای از "set_property PULLUP true" را با "set_property PULLDOWN true" تغییر دهید. اگر آنها به مقاومت متفاوتی نسبت به صفحه روی صفحه نیاز دارند ، می توانید این خطوط را حذف کرده و از مقاومت های خارجی استفاده کنید. نام پین ها در نظرات در فایل محدودیت ها آمده است و با برچسب های نمودار اول در Zybo Schematics مطابقت دارد. صفحه ای که در اینجا یافت می شود اگر می خواهید از پین های مختلف pmod استفاده کنید فقط نامهای موجود در فایل محدودیت را با برچسب های شماتیک مطابقت دهید. ما از سرصفحه PMOD JE و JD استفاده می کنیم و در هر کدام از 6 پین داده استفاده می کنیم و پین 1 و 7 را حذف می کنیم. این اطلاعات هنگام اتصال سنسورهای شما مهم است. همانطور که در شماتیک نشان داده شده است ، پین های 6 و 12 در PMODS VCC هستند و پایه های 5 و 11 نیز آسیاب شده اند.
  8. بسته بندی HDL را مانند قبل بازسازی کنید ، و پوشه قدیمی را کپی و رونویسی کنید. پس از اتمام کار ، مانند قبل bitstream ایجاد کنید و سخت افزار را صادر کنید و SDK را دوباره راه اندازی کنید. اگر از شما سال شد که آیا می خواهید فایل سخت افزاری قدیمی را جایگزین کنید ، پاسخ مثبت است. احتمالاً بهتر است هنگام خروج سخت افزار SDK بسته شود تا به درستی تعویض شود.
  9. SDK را راه اندازی کنید.

مرحله 3: FreeRTOS را اجرا کنید

گام بعدی این است که FreeRTOS را روی برد Zybo اجرا کنید.

  1. اگر کپی ندارید ، FreeRTOS را از اینجا بارگیری کرده و فایل ها را استخراج کنید.
  2. نسخه ی نمایشی FreeRTOS Zynq واقع در FreeRTOSv9.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo را وارد کنید. روند واردات تقریباً مشابه پروژه نمایشی دیگر است ، اما به دلیل اینکه نسخه نمایشی FreeRTOS Zynq متکی به فایل های دیگر موجود در پوشه FreeRTOS است ، نباید فایل ها را در فضای کاری خود کپی کنید. در عوض ، شما باید کل پوشه FreeRTOS را داخل پوشه پروژه خود قرار دهید.
  3. با رفتن به "file" -> "new" -> "board support pack" یک بسته پشتیبانی جدید برد ایجاد کنید. مطمئن شوید که مستقل انتخاب شده است و روی پایان کلیک کنید. پس از یک لحظه پنجره ای ظاهر می شود ، کادر کنار lwip141 را علامت بزنید (این امر باعث می شود یکی از نسخه های نمایشی FreeRTOS کامپایل نشود) و OK را فشار دهید. پس از اتمام کار ، روی پروژه RTOSdemo راست کلیک کرده و به "Properties" بروید ، به برگه "references project" بروید و کادر کنار bsp جدیدی که ایجاد کرده اید را علامت بزنید. امیدوارم به رسمیت شناخته شود اما گاهی اوقات Xilinx SDK می تواند در مورد چنین مواردی عجیب باشد. اگر هنوز بعد از این مرحله خطایی دریافت کردید که xparameters.h وجود ندارد یا چیزی شبیه آن ، سعی کنید این مرحله را تکرار کنید و شاید SDK را خارج کرده و مجددا راه اندازی کنید.

مرحله 4: کد لیزر هارپ را اضافه کنید

اکنون که FreeRTOS وارد شده است ، می توانید فایلهای پروژه چنگ لیزری را به نسخه نمایشی 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. این کاملاً مستند است و مستقیماً از نسخه ی نمایشی می آید. سپس وقفه متصل و فعال می شود. برای این پروژه فقط وقفه master-to-slave مورد نیاز است ، زیرا همه داده ها توسط DMA به کنترلر I2S ارسال می شوند. اگر مایل به ضبط صدا هستید ، همچنین به وقفه slave-to-master نیاز خواهید داشت. وقفه master-to-slave زمانی فراخوانی می شود که 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 هرتز باشد ، 48 ، 000 نمونه در ثانیه و 100 سیکل در ثانیه وجود دارد که به 4800 نمونه در هر چرخه می انجامد ، و طول آرایه 4800 نمونه خواهد بود و حاوی مقادیر یک کامل است. دوره موج سینوسی هنگامی که رشته پخش می شود ، بافر نمونه صوتی با گرفتن مقداری از آرایه موج سینوسی و قرار دادن آن در بافر صوتی به عنوان نمونه ، سپس افزودن شاخص به آرایه موج سینوسی پر می شود تا از مثال قبلی ما در طول دوره استفاده شود. از 4800 نمونه یک چرخه موج سینوسی در بافر صوتی قرار می گیرد. یک عملیات modulo در شاخص آرایه استفاده می شود به طوری که همیشه بین 0 و طول قرار می گیرد ، و هنگامی که شاخص آرایه از یک آستانه مشخص عبور می کند (مانند نمونه هایی به ارزش 2 ثانیه) ، رشته خاموش می شود. برای پخش همزمان چند رشته ، فهرست آرایه هر رشته را به طور جداگانه دنبال کنید و مقدار موج سینوسی هر رشته را با هم اضافه کنید تا هر نمونه را بدست آورید.

روش 2: برای ایجاد لحن موسیقایی بیشتر ، از مدل قبلی شروع می کنیم و هارمونیک ها را به هر فرکانس اساسی اضافه می کنیم. فرکانس های هارمونیک فرکانس هایی هستند که مضرب صحیح فرکانس اساسی هستند. برخلاف زمانی که دو فرکانس غیر مرتبط با هم جمع می شوند ، که منجر به پخش همزمان دو صدای مجزا می شود ، هنگامی که هارمونیک ها به هم اضافه می شوند ، فقط به عنوان یک صدا ، اما با لحن متفاوت ، به نظر می رسد. برای تحقق این امر ، هربار که مقدار موج سینوسی را در محل (شاخص آرایه٪ طول آرایه) به نمونه صوتی اضافه می کنیم ، (شاخص آرایه 2 *٪ طول آرایه) و (شاخص آرایه 3 *٪ طول آرایه را نیز اضافه می کنیم) ، و غیره برای هر چند هماهنگ مورد نظر است. این شاخص های ضرب شده موج سینوسی را در فرکانس هایی که مضرب صحیح فرکانس اصلی هستند ، می پیمایند. برای کنترل بیشتر تن ، مقادیر هر هارمونیک در یک متغیر ضرب می شود که نشان دهنده میزان آن هارمونیک در صدای کلی است. به عنوان مثال ، ممکن است موج سینوسی مقادیر آن همه در 6 ضرب شود تا بیشتر در صدا کلی نقش داشته باشد ، در حالی که هارمونیک 5 ممکن است ضرب 1 داشته باشد ، بدین معنی که مقادیر آن بسیار کمتر به صدای کلی کمک می کند.

روش 3: خوب ، بنابراین ما لحن بسیار خوبی در نت ها داریم ، اما هنوز یک مشکل بسیار مهم وجود دارد: آنها با حجم ثابت برای مدت زمان مشخص بازی می کنند. برای اینکه صدا به عنوان یک ساز واقعی به نظر برسد ، حجم تار در حال نواختن باید با گذشت زمان به آرامی از بین برود. برای انجام این کار ، یک آرایه با مقادیر یک تابع در حال پوسیدگی نمایی پر می شود. در حال ایجاد نمونه های صوتی ، صدای حاصل از هر رشته مانند روش قبلی محاسبه می شود ، اما قبل از افزودن به نمونه صوتی در مقدار شاخص آرایه آن رشته ها در آرایه تابع تجزیه نمایی ضرب می شود. این باعث می شود که صدا به آرامی در طول زمان پخش شود. وقتی شاخص آرایه به انتهای آرایه پوسیدگی می رسد ، رشته متوقف می شود.

روش 4: این آخرین مرحله چیزی است که واقعاً به سیم های سیم صدا واقعی رشته ای خود را می دهد. قبل از اینکه آنها دلپذیر به نظر برسند ، اما به وضوح ترکیب شده اند. برای تلاش برای تقلید بهتر از یک تار چنگ در دنیای واقعی ، میزان پوسیدگی متفاوتی به هر هارمونیک اختصاص داده می شود. در تارهای واقعی ، هنگامی که سیم برای اولین بار زده می شود محتوای بالایی از هارمونیک های با فرکانس بالا وجود دارد که نوعی صدای کندن را که از یک سیم انتظار داریم ایجاد می کند. این هارمونیک های با فرکانس بالا به طور خلاصه قسمت اصلی صدا هستند ، صدای تار زده می شود ، اما با هارمونیک های کندتر سرعت بیشتری می گیرند. برای هر عدد هارمونیکی که در سنتز صدا استفاده می شود ، یک آرایه پوسیدگی ایجاد می شود که هرکدام نرخ پوسیدگی خاص خود را دارد. اکنون هر هارمونیک را می توان به طور مستقل در مقدار آرایه فروپاشی مربوطه در نمای آرایه سیم ضرب کرده و به صدا اضافه کرد.

به طور کلی ترکیب صدا بصری است اما محاسبه آن سنگین است. ذخیره کل صدا در حافظه به یکباره ، حافظه زیادی را می گیرد ، اما محاسبه موج سینوسی و عملکرد نمایی بین هر فریم بسیار طول می کشد تا با سرعت پخش صدا همگام شود. تعدادی از ترفندها در کد برای سرعت بخشیدن به محاسبه استفاده می شود. تمام ریاضیات به جز در ایجاد جداول سینوس و تجزیه نمایی در قالب عدد صحیح انجام می شود ، که مستلزم گسترش فضای عددی موجود در خروجی صدای 24 بیتی است. به عنوان مثال ، میز سینوسی دارای دامنه 150 است به طوری که صاف است اما نه آنقدر بزرگ که بسیاری از سیم های نواخته شده با هم می توانند بیش از 24 بیت اضافه کنند. به همین ترتیب ، مقادیر جدول نمایی قبل از گرد شدن به اعداد صحیح در 80 ضرب می شوند. وزنهای هارمونیک می توانند مقادیر گسسته ای بین 0 تا 10 داشته باشند. همچنین همه نمونهها در واقع دو برابر شده و امواج سینوسی با 2 نمایه می شوند و به طور موثر میزان نمونه برداری را نصف می کنند. این حداکثر فرکانس قابل پخش را محدود می کند ، اما لازم بود تعداد تارها و هارمونیک های فعلی به اندازه کافی سریع محاسبه شود.

ایجاد این مدل صدا و به کار انداختن آن تلاش قابل توجهی از طرف پردازنده می طلبید و کارکردن آن از ابتدا در قسمت fpga از ابتدا در چارچوب زمانی این پروژه بسیار دشوار خواهد بود (تصور کنید که مجبورید هر بار جریان بیت را دوباره ایجاد کنید زمان تغییر یک قطعه کلمه برای آزمایش صدا). با این حال ، انجام آن در fpga احتمالاً می تواند راه بهتری برای انجام این کار باشد ، احتمالاً این موضوع که نمی توان نمونه ها را به سرعت محاسبه کرد و از بین بردن رشته ها ، هارمونیک ها و حتی جلوه های صوتی یا سایر کارهای دیگر بر روی آن جلوگیری کرد ، حذف شد. سمت پردازنده

مرحله 6: سیم کشی سنسورها

سیم کشی سنسورها
سیم کشی سنسورها

برای ایجاد رشته ها از سنسورهای IR break beam استفاده کردیم که زمان پخش رشته را تشخیص می دهد. ما سنسورهای خود را از لینک زیر سفارش دادیم. سنسورها دارای سیم قدرت ، زمین و داده هستند در حالی که ساطع کننده ها فقط سیم برق و زمین دارند. ما از برق 3.3 ولت و پایه های سربرگ PMOD برای تغذیه ساطع کننده ها و حسگرها استفاده کردیم. برای تغذیه همه سنسورها و ساطع کننده ها لازم است همه سنسورها و امیترها را به صورت موازی به هم وصل کنید. سیم های داده از سنسورها هر کدام باید به پین pmod مربوط به خود بروند.

مرحله 7: ساخت اسکلت

ساخت اسکلت
ساخت اسکلت

به منظور ایجاد شکل چنگ ، از سه قطعه به عنوان اسکلت برای قرار دادن سنسورها و ساطع کننده ها استفاده می شود. روی یکی از دو قطعه 18 اینچی لوله PVC ، سنسورها و ساطع کننده ها را به ترتیب متناوب 1.5 اینچ از یکدیگر تراز کنید و سپس آنها را به لوله بچسبانید. در لوله پی وی سی 18 اینچی دیگر سنسورها و ساطع کننده ها را به ترتیب متناظر کنید ، اما ترتیب را خنثی کنید (یعنی اگر لوله اول سنسور اول داشت ، لوله دوم باید اول ساطع کننده داشته باشد و بالعکس).لازم است سیمهای طولانی تری را روی داده ها ، برق و سیمهای زمین بچسبانید تا از دسترسی آنها به برد اطمینان حاصل شود.

مرحله 8: ساخت نمای بیرونی چوبی

ساخت نمای بیرونی چوبی
ساخت نمای بیرونی چوبی

این مرحله اختیاری است اما بسیار توصیه می شود. نمای بیرونی چوب نه تنها ظاهر چنگ را زیبا می کند ، بلکه از سنسورها و سیم ها در برابر آسیب محافظت می کند. قاب چوبی را می توان با یک حلقه مستطیل شکل از چوب ایجاد کرد. داخل مستطیل باید دارای دهانه ای حداقل 1-1/2 اینچ باشد تا متناسب با لوله و اسکلت سنسور باشد. هنگامی که قاب ساخته شد دو سوراخ ایجاد کنید که سیم ها را از سنسور و ساطع کننده ها خارج کرده تا بتوان آنها را با برد وصل کرد.

*توجه: توصیه می شود نقاط دسترسی را اضافه کنید تا بتوانید اسکلت لوله را بردارید و در صورت نیاز به تعمیرات یا تعدیل جزئی نیاز داشته باشید.

مرحله نهم: همه قطعات را کنار هم قرار دهید

کنار هم گذاشتن همه قطعات
کنار هم گذاشتن همه قطعات

هنگامی که تمام مراحل قبلی به پایان رسید ، زمان ساخت چنگ است. ابتدا اسکلت لوله را در قسمت بیرونی چوبی قرار دهید. سپس سیم های سنسورها و ساطع کننده ها را به محل مناسب روی برد وصل کنید. سپس SDK را باز کرده و دکمه اشکال زدایی را برای برنامه ریزی برد کلیک کنید. هنگامی که برد برنامه ریزی شد ، یک جفت هدفون یا بلندگو را وصل کنید. بسته به اینکه کدام حسگر در کدام پورت pmod به پایان برسد ، سیم های چنگ شما احتمالاً از ابتدا نامناسب خواهند بود. از آنجایی که تشخیص این که سیم های زیادی درگیر چه سیم هستند به کدام سنسور می رسد ، دشوار است ، ما راهی برای ترسیم اعداد رشته برای قطع موقعیت بیت در نرم افزار ارائه کردیم. "static int sensor_map [NUM_STRINGS]" را بیابید و مقادیر موجود در آرایه را تنظیم کنید تا رشته ها از پایین به بالاترین به ترتیب پخش شوند.

منو را می توان با باز کردن ترمینال سریال (به عنوان مثال RealTerm) استفاده کرد و نرخ باود را روی 115200 و صفحه نمایش را روی ANSI تنظیم کرد. با استفاده از کلیدهای w و s برای حرکت به بالا و پایین و کلیدهای a و d برای تغییر مقادیر ، می توان در منو حرکت کرد.

مرحله 10: خارج شوید

هنگامی که چنگ به طور کامل کار می کند. بر چنگ چیره شوید و به صدای شیرین موسیقی خودتان گوش دهید!

توصیه شده: