Агуулгын хүснэгт:

Zybo самбар дээрх лазер ятга синтезатор: 10 алхам (зурагтай)
Zybo самбар дээрх лазер ятга синтезатор: 10 алхам (зурагтай)

Видео: Zybo самбар дээрх лазер ятга синтезатор: 10 алхам (зурагтай)

Видео: Zybo самбар дээрх лазер ятга синтезатор: 10 алхам (зурагтай)
Видео: Вентиляция в хрущевке. Как сделать? Переделка хрущевки от А до Я. #31 2024, Долдугаар сарын
Anonim
Zybo самбар дээрх лазер ятга синтезатор
Zybo самбар дээрх лазер ятга синтезатор

Энэхүү гарын авлагад бид цуврал интерфэйстэй IR мэдрэгч ашиглан бүрэн ажиллагаатай лазер ятга бүтээх бөгөөд энэ нь хэрэглэгчийн багажны тааруулалт, аяыг өөрчлөх боломжийг олгоно. Энэхүү ятга нь 21 -р зууны үеийн хуучин хөгжмийн зэмсэг болох болно. Энэхүү системийг Vivado Design Suites -ийн хамт Xilinx Zybo хөгжлийн самбар ашиглан бүтээжээ. Төслийг дуусгахын тулд танд дараахь зүйлс хэрэгтэй болно.

  • 12 IR мэдрэгч ба ялгаруулагч (мөрийн тооноос хамааран их бага хэмжээгээр ашиглаж болно)
  • Zybo Zynq-7000 хөгжлийн самбар
  • Үнэгүй RTOS
  • Vivado загварын иж бүрдэл
  • Утас (мэдрэгчийг самбар дээр холбох зориулалттай)
  • 3 ширхэг PVC хоолой ((2) 18 инч ба (1) 8 инч)
  • 2 PVC тохой

Алхам 1: Digilent -ийн Zybo DMA Аудио Демо програмыг аваарай

Энэхүү төслийн FPGA тал нь эндээс олдсон демо төсөл дээр үндэслэсэн болно. Энэ нь санах ойн шууд хандалтыг ашиглан процессорыг AXI Stream -ээс I2S аудио блок руу бичих боломжтой санах ойгоос өгөгдлийг шууд дамжуулдаг. Дараахь алхамууд нь DMA аудио демо төслийг эхлүүлэхэд тусална.

  1. Zybo самбарын самбарын файлын шинэ хувилбар шаардлагатай байж магадгүй юм. Vivado -ийн шинэ самбар файлуудыг авахын тулд эдгээр зааврыг дагана уу.
  2. Vivado -д демо төслийг нээхийн тулд энэ хуудсан дээрх зааврын 1 ба 2 -р алхамуудыг дагана уу. SDK -ийн техник хангамжийг бус Vivado аргыг ашиглаарай.
  3. Таны зарим ip блокуудыг шинэчлэх шаардлагатай гэсэн мессеж ирэх болно. Хэрэв тийм бол "IP статусыг харуулах" гэснийг сонгоод IP статус таб дээрээс хуучирсан IP хаягийг сонгоод "Сонгосон хэсгийг сайжруулах" дээр дарна уу. Дуусч, гаралтын бүтээгдэхүүн үйлдвэрлэхийг хүсч байгаа эсэхийг асуух цонх гарч ирэн "Үүсгэх" дээр дарна уу. Хэрэв танд чухал анхааруулах мессеж ирвэл үүнийг үл тоомсорлоорой.
  4. Загвараас Vivado дахь эх сурвалж таб руу шилжиж эх файлуудыг үзнэ үү. "Design_1" блокны дизайн дээр хулганы баруун товчийг дараад "HDL боолт үүсгэх" -ийг сонгоно уу. Танаас асуухад "Хэрэглэгчийн засварыг зөвшөөрөхийн тулд үүсгэсэн боодолыг хуулах" -ыг сонгоно уу. Төслийн боодол файлыг үүсгэх болно.
  5. Нөгөө хичээл дээр ямар нэгэн байдлаар орхигдсон чухал алхамуудыг хийж дууссаны дараа та өмнө нь холбосон хичээл рүү буцаж очоод 4 -р алхамаас төгсгөл хүртэл үргэлжлүүлж, демо төсөл зөв ажиллаж байгаа эсэхийг шалгаарай. Хэрэв танд аудио бичих арга байхгүй бол чихэвчээ оруулаад тоглуулах товчлуурыг дарахад 5-10 секундын бүдэг дуу сонсоорой. Тоглуулах товчлуурыг дарахад чихэвчний үүрнээс ямар нэгэн зүйл гарч ирэх л юм бол энэ нь зөв ажиллаж магадгүй юм.

Алхам 2: Vivado -д зарим өөрчлөлт оруулаарай

Vivado -д зарим өөрчлөлт оруулаарай
Vivado -д зарим өөрчлөлт оруулаарай

Тэгэхээр одоо та Digilent -ийн DMA аудио демог ажиллуулж байна, гэхдээ энэ бол эцсийн зорилго биш юм. Тиймээс бид Vivado руу буцаж очоод зарим өөрчлөлтийг хийх ёстой бөгөөд ингэснээр бидний мэдрэгчийг PMOD толгойн хэсэгт залгаж, програм хангамжийн тал дээр тэдний үнэ цэнийг ашиглах боломжтой болно.

  1. Vivado дахь блок диаграмыг нээнэ үү
  2. Блок диаграм дахь хоосон орон зайд хулганы баруун товчийг дараад цэснээс "IP нэмэх" -ийг сонгоод GPIO блок үүсгэнэ үү. "AXI GPIO" -ийг сонгоод сонгоно уу.
  3. Шинэ IP блок дээр давхар товшоод IP-г дахин тохируулах цонхонд IP тохиргооны таб руу очно уу. Бүх оролтыг сонгож, өргөнийг арван хоёр болгож тохируулаарай, учир нь бидний босоо ятга дээр 12 "уяа" байх тул 12 мэдрэгч хэрэгтэй болно. Хэрэв та цөөн тооны мэдрэгч ашиглахыг хүсч байвал энэ тоог тохируулж тохируулаарай. Мөн тасалдлыг идэвхжүүлэх тохиргоог хийнэ үү.
  4. Шинэ GPIO IP блок дээр хулганы баруун товчийг дараад "холболтын автоматжуулалтыг ажиллуулах" -ыг сонгоно уу. AXI хайрцгийг шалгаад зүгээр дарна уу. Энэ нь AXI интерфэйсийг автоматаар холбох ёстой боловч блокийн гаралтыг холболтгүй үлдээх ёстой.
  5. Нэмэлт тасалдал гаргахын тулд xlconcat_0 IP блок дээр давхар товшоод портын тоог 4 болгож 5 болгон өөрчилсний дараа ip2intc_irpt зүүг шинэ GPIO блокоос xlconcat блок дээрх ашиглагдаагүй шинэ порт руу холбож болно.
  6. Шинэ GPIO IP блокийн "GPIO" гаралт дээр хулганы баруун товчийг дараад "гадаад болгох" гэснийг сонгоно уу. Шугам хаашаа явж байгааг олж мэдээд хажуу тийш чиглэсэн таван өнцөгт дээр дарж, зүүн талд нь нэрээ өөрчлөх боломжтой цонх нээгдэнэ. Нэрийг "SENSORS" болгон өөрчилнө үү. Хэрэв та бидний өгсөн хязгаарлалтын файлыг ажиллуулахыг хүсч байвал ижил нэрийг ашиглах нь чухал бөгөөд эс бөгөөс та хязгаарлалтын файл дахь нэрийг өөрчлөх шаардлагатай болно.
  7. Эх сурвалж таб руу буцаж очоод хязгаарлалтын файлыг олоод бидний өгсөн файлаар солино уу. Та файлыг солих эсвэл манай хязгаарлалтын файлын агуулгыг хуулж, хуучин файлынхаа дээр буулгахыг сонгож болно. Бидний хязгаарлах файлын хийдэг чухал зүйл бол PMOD толгой дээрх татах эсэргүүцлийг идэвхжүүлэх явдал юм. Энэ нь бидний ашигладаг тусгай мэдрэгчүүдэд шаардлагатай боловч бүх мэдрэгч ижил байдаггүй. Хэрэв таны мэдрэгчүүд унах резистор шаардлагатай бол та "set_property PULLUP true" -ийн бүх тохиолдлыг "set_property PULLDOWN үнэн" болгож өөрчилж болно. Хэрэв тэдгээр нь самбар дээрхээс өөр эсэргүүцлийн утгыг шаардах юм бол та эдгээр мөрүүдийг арилгаж, гадаад эсэргүүцэл ашиглаж болно. Зүүний нэр нь хязгаарлалтын файлын тайлбар дээр байгаа бөгөөд тэдгээр нь Zybo Schematics -ийн эхний диаграм дээрх шошготой тохирч байна. хуудсыг эндээс олж болно. Хэрэв та өөр pmod тээглүүр ашиглахыг хүсвэл хязгаарлалтын файлын нэрийг схемийн дагуу хаягаар нь тааруулаарай. Бид PMOD толгой JE ба JD толгойг ашигладаг бөгөөд тус бүрдээ 6 өгөгдлийн зүү ашигладаг бөгөөд 1 ба 7 -р зүүг орхигдуулдаг. Энэ мэдээлэл нь мэдрэгчээ залгахад чухал ач холбогдолтой юм. Схемд үзүүлснээр PMODS дээрх 6 ба 12 -р зүү нь VCC, 5 ба 11 -р зүү нь газардсан байна.
  8. HDL боодлыг урьдын адил сэргээж, хуучныг нь хуулаад дарж бичээрэй. Үүнийг хийсний дараа битийн урсгал үүсгэж, өмнөх шигээ техник хангамж экспортлож, SDK -г дахин ажиллуулна уу. Хэрэв та хуучин тоног төхөөрөмжийн файлыг солихыг хүсч байгаа эсэхийг асуувал тийм гэж хариулна. Тоног төхөөрөмжийг зөв солихын тулд экспортлохдоо SDK -ийг хаах нь дээр.
  9. SDK -ийг ажиллуулна уу.

Алхам 3: FreeRTOS ажиллуулах

Дараагийн алхам бол FreeRTOS -ийг Zybo самбар дээр ажиллуулах явдал юм.

  1. Хэрэв танд хуулбар байхгүй бол FreeRTOS -ийг эндээс татаж аваад файлуудыг задлаарай.
  2. FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo дээр байрлах FreeRTOS Zynq демог импортлох. Импортын процесс нь бусад демо төслийнхтэй бараг адилхан боловч FreeRTOS Zynq демо нь FreeRTOS фолдерын бусад файлд тулгуурладаг тул та файлуудаа ажлын талбарт хуулж болохгүй. Үүний оронд та FreeRTOS фолдерыг бүхэлд нь төслийн хавтас дотор байрлуулах хэрэгтэй.
  3. "Файл" -> "шинэ" -> "самбарыг дэмжих багц" руу очиж самбарыг дэмжих шинэ багц үүсгэнэ үү. Бие даасан сонгосон эсэхийг шалгаад дуусгах дээр дарна уу. Хэсэг хугацааны дараа цонх гарч ирэх бөгөөд lwip141 -ийн хажууд байгаа нүдийг чагтална уу (энэ нь FreeRTOS -ийн демо хувилбаруудын аль нэгийг эмхэтгэхээ болино), OK дарна уу. Үүнийг дуусгасны дараа RTOSdemo төсөл дээр хулганы баруун товчийг дараад "шинж чанарууд" руу очоод "төслийн лавлагаа" таб руу очоод шинээр үүсгэсэн bsp -ийн хажууд байгаа нүдийг чагтална уу. Үүнийг хүлээн зөвшөөрнө гэж найдаж байна, гэхдээ заримдаа Xilinx SDK нь иймэрхүү зүйлд хачин санагддаг. Хэрэв та энэ алхмын дараа xparameters.h байхгүй эсвэл үүнтэй төстэй алдаа гарсаар байвал энэ алхамыг давтаж, SDK -ээс гараад дахин эхлүүлээрэй.

Алхам 4: Лазер ятга код нэмнэ үү

FreeRTOS -ийг импортолсон тул та лазер ятгын төслөөс авсан файлуудыг FreeRTOS демо руу оруулах боломжтой.

  1. FreeRTOS демо дахь src фолдерын дор шинэ хавтас үүсгээд main.c -ээс бусад өгсөн c файлуудыг энэ хавтсанд хуулж тавина уу.
  2. RTOSDemo main.c -ийг өгсөн main.c. -ээр солино уу.
  3. Хэрэв бүх зүйл зөв хийгдсэн бол та яг одоо лазер ятга код ажиллуулах боломжтой байх ёстой. Туршилтын зорилгоор DMA демо төсөлд ашигласан товчлуурын оролтыг мэдрэгч хавсаргаагүйгээр дуу тоглуулахад ашигладаг болсон (үндсэн дөрвөн товчлуурын аль нь ч ажиллах болно). Энэ нь дарах болгондоо мөр тоглож, олон даралтаар системийн бүх мөрүүдийг тойрч гарах болно. Зарим чихэвч эсвэл чанга яригчийг Zybo самбар дээрх чихэвчний үүрэнд холбож, товчлуурыг дарахад утаснуудын дууг сонсох боломжтой эсэхийг шалгаарай.

Алхам 5: Кодын тухай

Энэхүү гарын авлагыг уншиж буй та нарын ихэнх нь аудио тохируулах эсвэл DMA -ийг ашиглан өөр зүйл хийх эсвэл өөр хөгжмийн зэмсэг бүтээх талаар эндээс суралцах магадлалтай. Ийм учраас дараагийн хэдэн хэсэгт өгсөн код нь DMA ашиглан ажиллаж буй аудио гаралтыг авахын тулд өмнө тайлбарласан техник хэрэгсэлтэй хэрхэн уялдаатай болохыг тайлбарлахад зориулагдсан болно. Хэрэв та кодын хэсгүүд яагаад байгааг ойлгож байгаа бол тэдгээрийг үүсгэхийг хүссэн зүйлдээ тохируулах боломжтой байх ёстой.

Тасалдаг

Эхлээд би энэ төсөлд тасалдал хэрхэн үүсгэгдсэнийг дурдах болно. Бидний хийсэн арга бол эхлээд ID, тасалдлын зохицуулагч, тасалдал бүрийн төхөөрөмжийн лавлагааг хянадаг тасалдлын векторын хүснэгтийн бүтцийг бий болгох явдал байв. Тасалдлын ID нь xparameters.h -аас ирдэг. Тасалдлын зохицуулагч нь бидний DMA болон GPIO -д зориулж бичсэн функц бөгөөд I2C тасалдал нь Xlic I2C драйвераас гардаг. Төхөөрөмжийн лавлагаа нь бидний өөр газар эхлүүлсэн төхөөрөмж бүрийн тохиолдлыг заана. _Init_audio функцийн төгсгөлийн ойролцоо тасалдлын векторын хүснэгтийн зүйл бүрээр давталт хийж, тасалдлыг холбох, идэвхжүүлэхийн тулд XScuGic_Connect () ба XScuGic_Enable () гэсэн хоёр функцийг дуудна. Тэд анхдагч байдлаар FreeRTOS main.c дээр үүсгэгдсэн тасалдлын хянагч болох xInterruptController -ийг иш татдаг. Үндсэндээ бид тасалдал бүрээ 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 дээжийн нэг синус долгионы мөчлөгийг аудио буферт оруулсан болно. Модулийн үйлдлийг массивын индекс дээр ашигладаг бөгөөд энэ нь үргэлж 0 ба уртын хооронд байдаг бөгөөд массивын индекс тодорхой босгыг давах үед (жишээ нь 2 секундын үнэтэй дээж гэх мэт) мөрийг унтраана. Олон мөрийг нэгэн зэрэг тоглуулахын тулд мөр бүрийн массивын индексийг тусад нь хянаж, мөр бүрийн синус долгионы утгыг нэмж дээж бүрийг авна.

Арга 2: Хөгжмийн аялгууг бий болгохын тулд бид өмнөх загвараас эхэлж, үндсэн давтамж бүрт гармоник нэмдэг. Хармоник давтамжууд нь үндсэн давтамжийн бүхэл тооны үржвэрүүд юм. Харилцан хамааралгүй хоёр давтамжийг нэгтгэн дүгнэж, хоёр өөр дууг нэгэн зэрэг тоглуулахаас ялгаатай нь гармоникуудыг нэгтгэхэд энэ нь зөвхөн нэг дуу шиг сонсогдож байгаа боловч өөр өнгө аясаар сонсогдож байна. Үүнийг хийхийн тулд бид байрлал дахь синус долгионы утгыг (массивын индекс % массивын урт) аудио дээжинд нэмэх болгондоо (2 * массивын индекс % массивын урт), мөн (3 * массивын индекс % массивын уртыг) нэмнэ.) гэх мэт олон гармоникуудыг хүсч байна. Эдгээр үржүүлсэн индексүүд нь анхны давтамжийн бүхэл тооны үржвэр болох синус долгионыг давах болно. Аяыг илүү хянах боломжийг олгохын тулд гармоник бүрийн утгыг тухайн дууны ерөнхий гармоникийн хэмжээг илэрхийлдэг хувьсагчаар үржүүлдэг. Жишээлбэл, үндсэн синус долгион нь бүхэл бүтэн дууны хүчин зүйл болохын тулд бүх утгыг 6 -аар үржүүлж, 5 -р гармоник нь 1 -ийн үржүүлэгчтэй байж болох бөгөөд энэ нь түүний утга нь ерөнхий дуунд хамаагүй бага хувь нэмэр оруулдаг.

Арга 3: За, одоо бид тэмдэглэл дээр маш сайхан өнгө аястай болсон, гэхдээ маш чухал асуудал байсаар байна: тэд тогтмол хугацаанд тогтмол хэмжээтэй тоглодог. Бодит багаж шиг сонсогдохын тулд тоглож буй чавхдасын эзлэхүүн цаг хугацааны явцад жигд буурах ёстой. Үүнийг хийхийн тулд массивыг экспоненциал задрах функцийн утгуудаар дүүргэсэн болно. Аудио дээжийг үүсгэж байх үед мөр бүрээс гарч буй дууг өмнөх аргын адил тооцоолж байгаа боловч аудио дээжид оруулахаасаа өмнө экспоненциал задралын функцын массив дахь тухайн мөрүүдийн массивын индексийн утгаар үржүүлнэ. Энэ нь дуу чимээ нь цаг хугацааны явцад жигд алга болдог. Массивын индекс нь задралын массивын төгсгөлд хүрэхэд мөр зогсох болно.

Арга 4: Энэ сүүлчийн алхам бол мөрөнд жинхэнэ утсан дууг өгөх явдал юм. Тэд аятайхан сонсогдож байсан ч тодорхой нийлэгжсэн байв. Бодит ертөнц дээр босоо ятга дууг илүү сайн дуурайхыг оролдохын тулд гармоник бүрт өөр өөр ялзралын түвшинг оноодог. Бодит мөрөнд утсыг анх цохиход өндөр давтамжтай гармоникийн өндөр агууламж байдаг бөгөөд энэ нь бидний утсан дээрээс хүлээж буй дуу чимээг бий болгодог. Эдгээр өндөр давтамжийн гармоникууд нь дууны гол хэсэг болох цохиулах дууны товчлол боловч маш удаан гармоникууд эзлэх тусам маш хурдан мууддаг. Дууны синтезд ашигладаг гармоник тоо бүрийн хувьд задралын массивыг бий болгодог. Одоо гармоник бүрийг харгалзах задралын массивын утгыг мөрийн массивын индекс дээр бие даан үржүүлж, дуунд нэмж болно.

Ерөнхийдөө дууны синтез нь ойлгомжтой боловч тооцоолол нь хүнд байдаг. Утасны дууг бүхэлд нь санах ойд хадгалах нь хэт их санах ой шаарддаг боловч синус долгион ба хүрээ бүрийн экспоненциал функцийг тооцоолох нь аудио тоглуулах хурдыг хадгалахад хэтэрхий урт хугацаа шаардагдах болно. Тооцооллыг хурдасгахын тулд кодонд хэд хэдэн заль мэхийг ашигладаг. Синус ба экспоненциал задралын хүснэгтийг анх үүсгэснээс бусад бүх математикийг бүхэл тоон форматаар хийдэг бөгөөд энэ нь 24 битийн аудио гаралт дээр байгаа тоон орон зайг түгээх шаардлагатай болдог. Жишээлбэл, синусын хүснэгт нь 150 далайцтай тул гөлгөр боловч тийм ч том биш тул олон мөрийг хамт тоглосноор 24 битээс илүү байж болно. Үүний нэгэн адил экспоненциал хүснэгтийн утгыг бүхэл тоонд бөөрөнхийлж хадгалахаас өмнө 80 -аар үржүүлнэ. Гармоник жин нь 0 -ээс 10 хүртэлх утгыг авч болно. Мөн бүх дээжийг хоёр дахин нэмэгдүүлж, синус долгионыг 2 -оор индексжүүлж, түүвэрлэлтийн хэмжээг хоёр дахин бууруулдаг. Энэ нь тоглож болох хамгийн их давтамжийг хязгаарладаг боловч одоогийн мөр болон гармоникуудын тоог хангалттай хурдан тооцоолоход шаардлагатай байсан.

Энэхүү дууны загварыг бүтээж, ажиллуулах нь процессор талаас ихээхэн хүчин чармайлт гаргасан бөгөөд энэ төслийн хүрээнд fpga тал дээр эхнээс нь ажиллуулахад үнэхээр хэцүү байх байсан (бит урсгалыг дахин бүтээх хэрэгтэй гэж төсөөлөөд үз дээ. Дууг шалгахын тулд верилог хэсгийг солих цаг). Гэсэн хэдий ч үүнийг fpga дээр хийх нь дээжийг хангалттай хурдан тооцоолж чадахгүй байх, олон мөр, гармоник, тэр ч байтугай аудио эффект эсвэл бусад даалгавруудыг ажиллуулах боломжийг олгодоггүй байх асуудлыг арилгаж магадгүй юм. процессорын тал.

Алхам 6: Мэдрэгчийг холбох

Мэдрэгчийг холбох
Мэдрэгчийг холбох

Мөрүүдийг бий болгохын тулд бид утсыг тоглож байх үед илрүүлэх IR цацраг туяа мэдрэгчийг ашигласан. Дараах линкээр бид мэдрэгчээ захиалсан. Мэдрэгчид хүч, газардуулга, өгөгдлийн утастай байдаг бол ялгаруулагч нь зөвхөн тэжээлийн ба газардуулгын утастай байдаг. Бид ялгаруулагч ба мэдрэгчийг ажиллуулахын тулд PMOD толгойн 3.3 В ба газардуулгын зүүг ашигласан. Бүх мэдрэгч ба ялгаруулагчийг асаахын тулд бүх мэдрэгч ба ялгаруулагчийг зэрэгцээ холбох шаардлагатай. Мэдрэгчийн өгөгдлийн утас тус бүр өөрийн pmod зүү рүү орох шаардлагатай болно.

Алхам 7: Араг ясыг бүтээх

Араг ясыг бүтээх
Араг ясыг бүтээх

Ятга хэлбэрийг бий болгохын тулд гурван хэсгийг мэдрэгч, ялгаруулагчийг байрлуулах араг яс болгон ашигладаг. 18 инчийн хоёр ширхэг PVC хоолойн нэг дээр мэдрэгч ба ялгаруулагчийг ээлжлэн 1.5 инчийн зайтай байрлуулж, дараа нь хоолой руу наа. Нөгөө 18 инчийн PVC хоолой нь мэдрэгч ба ялгаруулагчийг ээлжлэн байрлуулдаг боловч дарааллыг нь нөхөх ёстой (өөрөөр хэлбэл эхний хоолойд эхлээд мэдрэгчтэй бол хоёр дахь нь ялгаруулагчтай байх ёстой). Самбар дээр хүрэхийн тулд өгөгдөл, хүч, газардуулгын утсан дээр урт утсыг гагнах шаардлагатай болно.

Алхам 8: Модны гадна талыг барих

Модны гадна талыг барих
Модны гадна талыг барих

Энэ алхам нь сонголттой боловч үүнийг зөвлөж байна. Модны гаднах байдал нь ятга сайхан харагдуулахаас гадна мэдрэгч, утсыг гэмтэхээс хамгаалдаг. Модон хүрээг модноос тэгш өнцөгт хэлбэртэй бөгжөөр хийж болно. Тэгш өнцөгтийн дотор талд хоолой ба мэдрэгчийн араг ясыг тааруулахын тулд дор хаяж 1-1/2 инч нүхтэй байх шаардлагатай. Хүрээг барьсны дараа самбар дээр холбохын тулд мэдрэгч ба ялгаруулагчийн утсыг гадагшлуулах хоёр нүх өрөмдөнө.

*Тэмдэглэл: Засвар хийх эсвэл бага зэрэг тохируулга хийх шаардлагатай тохиолдолд хоолойн араг ясыг салгаж, оруулахын тулд нэвтрэх цэгүүдийг нэмж оруулахыг зөвлөж байна.

Алхам 9: Бүх хэсгүүдийг нэгтгэх

Бүх хэсгүүдийг нэгтгэх
Бүх хэсгүүдийг нэгтгэх

Өмнөх бүх алхамууд дууссаны дараа ятга хийх цаг болжээ. Эхлээд хоолойны араг ясыг модон гадна талд байрлуулна. Дараа нь мэдрэгч ба ялгаруулагчийн утсыг самбар дээрх зөв байрлалд залгаарай. Дараа нь SDK -ийг нээж, дебаг хийх товчийг дарж самбарыг програмчлаарай. Самбарыг програмчилсны дараа чихэвч эсвэл чанга яригчийг залгаарай. Ямар pmod порт дээр ямар мэдрэгч дууссанаас хамааран таны ятга чавхдас эхлэх боломжгүй болно. Маш олон утас холбогдсон үед аль утас нь ямар мэдрэгч рүү ордогийг хэлэхэд хэцүү байдаг тул бид програм хангамжийн битийн байрлалыг таслахын тулд мөрийн дугаарыг зурах аргыг оруулсан болно. "Static int sensor_map [NUM_STRINGS]" -ийг олоод мөрүүдийг хамгийн багаас дээд хүртэл дарааллаар нь тоглуулах хүртэл массивын утгыг тохируулна уу.

Цэсийг цуваа терминал (жишээ нь RealTerm) нээж, дамжуулах хурдыг 115200, дэлгэцийг ANSI болгон тохируулах замаар ашиглаж болно. W болон s товчлууруудыг ашиглан дээш, доош, a ба d товчлууруудыг ашиглан утгыг өөрчлөх боломжтой.

Алхам 10: ROCK OUT

Ятга бүрэн ажиллагаатай болсны дараа. Ятга хөгжмийг эзэмшиж, өөрийн хөгжмийн эгшигтэй аялгууг сонсоорой!

Зөвлөмж болгож буй: