Talaan ng mga Nilalaman:

Laser Harp Synthesizer sa Zybo Board: 10 Hakbang (na may Mga Larawan)
Laser Harp Synthesizer sa Zybo Board: 10 Hakbang (na may Mga Larawan)

Video: Laser Harp Synthesizer sa Zybo Board: 10 Hakbang (na may Mga Larawan)

Video: Laser Harp Synthesizer sa Zybo Board: 10 Hakbang (na may Mga Larawan)
Video: Laserharp II Jean Michel Jarre 2024, Hulyo
Anonim
Laser Harp Synthesizer sa Zybo Board
Laser Harp Synthesizer sa Zybo Board

Sa tutorial na ito lilikha kami ng isang ganap na gumaganang laser harp gamit ang mga IR sensor na may isang serial interface na magpapahintulot sa gumagamit na baguhin ang pag-tune at tono ng instrumento. Ang alpa na ito ay magiging ika-21 siglo muling paggawa ng katandaan na instrumento. Ang sistema ay nilikha gamit ang isang Xilinx Zybo development board kasama ang Vivado Design Suites. Ano ang kakailanganin mo upang makumpleto ang proyekto:

  • 12 IR sensor at emitter (maaaring magamit ang higit pa o mas mababa depende sa bilang ng mga string)
  • Zybo Zynq-7000 development board
  • Libreng RTOS
  • Vivado Design Suite
  • Wire (para sa pagkonekta ng mga sensor sa board)
  • 3 piraso ng pipa ng PVC ((2) 18 pulgada at (1) 8 pulgada)
  • 2 siko ng PVC

Hakbang 1: Kumuha ng Digilent's Zybo DMA Audio Demo

Ang panig ng FPGA ng proyektong ito ay batay batay sa proyekto sa demo na matatagpuan dito. Gumagamit ito ng direktang pag-access sa memorya upang magpadala ng data nang direkta mula sa memorya na maaaring isulat ng processor sa paglipas ng AXI Stream sa isang I2S audio block. Ang mga sumusunod na hakbang ay makakatulong sa iyo na maipatakbo ang proyekto ng audio demo ng DMA:

  1. Ang isang bagong bersyon ng file ng board para sa Zybo board ay maaaring kinakailangan. Sundin ang mga tagubiling ito upang makakuha ng mga bagong file ng board para sa Vivado.
  2. Sundin ang mga hakbang 1 at 2 sa mga tagubilin sa pahinang ito upang buksan ang proyekto sa demo sa Vivado. Gamitin ang pamamaraan ng Vivado, hindi ang handoff ng SDK hardware.
  3. Maaari kang makakuha ng isang mensahe na nagsasabing ang ilan sa iyong mga ip block ay dapat na-update. Kung gayon, piliin ang "Ipakita ang Katayuan ng IP" at pagkatapos ay sa tab na katayuan ng IP piliin ang lahat ng hindi napapanahong IP at i-click ang "Na-upgrade ang Na-upgrade". Kapag natapos ito at ang isang window ay pop up na nagtatanong kung nais mong makabuo ng output na produkto, magpatuloy at i-click ang "Bumuo". Kung nakakuha ka ng isang kritikal na mensahe ng babala, huwag pansinin ito.
  4. Lumipat mula sa disenyo sa mga mapagkukunan na tab sa Vivado upang makita ang mga file ng pinagmulan. Mag-right click sa disenyo ng block na "design_1" at piliin ang "Lumikha ng HDL Wrapper". Kapag sinenyasan piliin ang "kopya ng nabuong pambalot upang payagan ang mga pag-edit ng gumagamit". Ang isang file ng pambalot para sa proyekto ay malilikha.
  5. Ngayon na ang mga kritikal na hakbang na iyon na kahit papaano ay naiwan sa iba pang mga tutorial ay nakumpleto, maaari kang bumalik sa tutorial na dating naka-link at magpatuloy mula sa hakbang 4 hanggang sa katapusan at tiyakin na ang proyekto sa demo ay tumatakbo nang tama. Kung wala kang paraan upang mag-input ng audio para makapag-record ito pagkatapos ay mag-record lamang gamit ang iyong mga headphone at makinig para sa isang 5-10 segundong malabo na tunog kapag pinindot mo ang pindutan ng pag-playback. Hangga't may lumalabas sa jack ng headphone kapag pinindot mo ang pindutan ng pag-playback, malamang na gumagana ito nang tama.

Hakbang 2: Gumawa ng Ilang Pagbabago sa Vivado

Gumawa ng Ilang Pagbabago sa Vivado
Gumawa ng Ilang Pagbabago sa Vivado

Kaya ngayon nakuha mo na ang demo ng DMA audio demo ng Digilent, ngunit hindi iyan sa lahat ng layunin ng pagtatapos dito. Kaya't kailangan naming bumalik sa Vivado at gumawa ng ilang mga pagbabago upang ang aming mga sensor ay mai-plug sa mga header ng PMOD at magagamit namin ang kanilang halaga sa panig ng software.

  1. Buksan ang block diagram sa Vivado
  2. Lumikha ng isang bloke ng GPIO sa pamamagitan ng pag-right click sa walang laman na puwang sa block diagram at pagpili sa "Magdagdag ng IP" mula sa menu. Hanapin at piliin ang "AXI GPIO".
  3. I-double click ang bagong IP block at sa muling ipasadyang window ng IP pumunta sa tab na pagsasaayos ng IP. Piliin ang lahat ng mga input at itakda ang lapad sa labindalawa, dahil magkakaroon kami ng 12 "mga string" sa aming alpa at samakatuwid ay kailangan ng 12 sensor. Kung nais mong gumamit ng mas kaunti o higit pang mga sensor pagkatapos ay ayusin nang maayos ang bilang na ito. Itakda din ang paganahin ang makagambala.
  4. Mag-right click sa bagong block ng GPIO IP at piliin ang "magpatakbo ng automation ng koneksyon". Lagyan ng tsek ang kahon na AXI at pindutin ang okay. Dapat nitong ikonekta ang interface ng AXI nang awtomatiko, ngunit iwanan ang mga output ng block na hindi konektado.
  5. Upang makagawa ng puwang para sa labis na nakakagambala, mag-double click sa xlconcat_0 IP block at baguhin ang bilang ng mga port mula 4 hanggang 5. Pagkatapos ay maaari mong ikonekta ang ip2intc_irpt pin mula sa bagong block ng GPIO sa bagong hindi ginagamit na port sa xlconcat block.
  6. Mag-right click sa output na "GPIO" ng bagong GPIO IP block at piliin ang "gumawa ng panlabas". Alamin kung saan pupunta ang linya at mag-click sa maliit na patagilid na pentagon at sa kaliwa ang isang window ay dapat buksan kung saan maaari mong baguhin ang pangalan. Palitan ang pangalan ng "SENSORS". Mahalagang gamitin ang parehong pangalan kung nais mo ang mga hadlang na file na ibinibigay namin upang gumana, kung hindi man ay kailangan mong baguhin ang pangalan sa mga hadlang na file.
  7. Bumalik sa tab na mga mapagkukunan, hanapin ang mga hadlang na file at palitan ito ng isang ibinibigay namin. Maaari mong piliing palitan ang file o kopyahin lamang ang mga nilalaman ng aming mga hadlang na file at i-paste ito sa mga nilalaman ng luma. Isa sa mga mahahalagang bagay na ginagawa ng aming mga hadlang na file ay paganahin ang mga pullup resistors sa mga header ng PMOD. Ito ay kinakailangan para sa mga partikular na sensor na ginamit namin, subalit hindi lahat ng mga sensor ay pareho. Kung ang iyong mga sensor ay nangangailangan ng pulldown resistors maaari mong baguhin ang bawat halimbawa ng "set_property PULLUP true" na may "set_property PULLDOWN true". Kung nangangailangan sila ng ibang halaga ng resistor kaysa sa nasa board, maaari mong alisin ang mga linyang ito at gumamit ng panlabas na resistors. Ang mga pangalan ng pin ay nasa mga komento sa mga hadlang na file, at tumutugma sila sa mga label sa unang diagram sa Zybo Schematics pahina na maaaring matagpuan dito. Kung nais mong gumamit ng iba't ibang mga pmod pin tugma lamang ang mga pangalan sa hadlang na file sa mga label sa eskematiko. Gumagamit kami ng PMOD header JE at JD, at gumagamit ng anim na data pin sa bawat isa, na tinatanggal ang mga pin na 1 at 7. Mahalaga ang impormasyong ito kapag na-hook up ang iyong mga sensor. Tulad ng ipinakita sa eskematiko, ang mga pin 6 at 12 sa PMODS ay VCC at ang mga pin 5 at 11 ay ground.
  8. Muling buhayin ang pambalot ng HDL tulad ng dati, at kopyahin at patungan ang luma. Kapag tapos na iyon, bumuo ng bitstream at i-export ang hardware tulad ng dati, at ilunsad muli ang SDK. Kung tatanungin ka kung nais mong palitan ang lumang file ng hardware, ang sagot ay oo. Marahil mas mahusay na isara ang SDK kapag nag-export ka ng hardware upang maayos itong mapalitan.
  9. Ilunsad ang SDK.

Hakbang 3: Kumuha ng FreeRTOS Running

Ang susunod na hakbang ay upang makuha ang FreeRTOS na tumatakbo sa Zybo board.

  1. Kung wala ka pang kopya, i-download ang FreeRTOS dito at kunin ang mga file.
  2. I-import ang demo ng FreeRTOS Zynq na matatagpuan sa FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo. Ang proseso ng pag-import ay halos kapareho ng para sa iba pang proyekto sa demo, subalit dahil ang FreeRTOS Zynq demo ay nakasalalay sa iba pang mga file sa FreeRTOS folder, hindi mo dapat kopyahin ang mga file sa iyong workspace. Sa halip, dapat mong ilagay ang buong folder ng FreeRTOS sa loob ng iyong folder ng proyekto.
  3. Lumikha ng isang bagong pakete ng suporta sa board sa pamamagitan ng pagpunta sa "file" -> "bago" -> "board suportang package". Tiyaking napili ang standalone at i-click ang tapusin. Pagkaraan ng ilang sandali ang isang window ay mag-pop up, lagyan ng tsek ang kahon sa tabi ng lwip141 (ititigil nito ang isa sa mga demo ng FreeRTOS mula sa pagkabigo na sumulat) at pindutin ang OK. Matapos na makumpleto ang tamang pag-click sa proyekto ng RTOSdemo at pumunta sa "mga pag-aari", pumunta sa tab na "Mga sanggunian ng proyekto", at lagyan ng tsek ang kahon sa tabi ng bagong bsp na iyong nilikha. Sana makilala ito ngunit kung minsan ang Xilinx SDK ay maaaring maging kakaiba sa ganitong uri ng bagay. Kung nakakuha ka pa rin ng isang error pagkatapos ng hakbang na ito na ang xparameter.h ay nawawala o isang bagay tulad nito pagkatapos ay subukang ulitin ang hakbang na ito at marahil paglabas at paglunsad muli ng SDK.

Hakbang 4: Magdagdag ng Laser Harp Code

Ngayon na ang FreeRTOS ay na-import, maaari mong dalhin ang mga file mula sa proyekto ng laser harp sa demo ng FreeRTOS

  1. Lumikha ng isang bagong folder sa ilalim ng src folder sa demo ng FreeRTOS at kopyahin at i-paste ang lahat ng mga ibinigay na c file maliban sa main.c sa folder na ito.
  2. Palitan ang pangunahing RTOSDemo.c ng ibinigay na pangunahing.c.
  3. Kung ang lahat ay tapos nang tama, dapat mong patakbuhin ang laser harp code sa puntong ito. Para sa mga layunin sa pagsubok, ang pag-input ng pindutan na ginamit sa proyekto ng demo ng DMA ay ginagamit na ngayon upang i-play ang mga tunog nang walang naka-attach na mga sensor (gagana ang alinman sa apat na pangunahing mga pindutan). Magpe-play ito ng isang string sa tuwing pipindutin mo ito at ikot sa lahat ng mga string sa system sa maraming mga pagpindot. Mag-plug sa ilang mga headphone o speaker sa headphone jack sa Zybo board at tiyaking maririnig mo ang mga tunog ng mga string na dumarating kapag pinindot mo ang isang pindutan.

Hakbang 5: Tungkol sa Code

Marami sa iyo na nagbabasa ng tutorial na ito ay malamang dito upang malaman kung paano mag-set up ng audio o gumamit ng DMA upang gumawa ng ibang bagay, o upang lumikha ng ibang instrumento sa musika. Para sa kadahilanang iyon ang susunod na ilang mga seksyon ay nakatuon sa paglalarawan kung paano gumagana ang ibinigay na code kasabay ng hardware na dating inilarawan upang makakuha ng isang gumaganang audio output gamit ang DMA. Kung naiintindihan mo kung bakit nandoon ang mga piraso ng code kung gayon dapat mong ayusin ang mga ito para sa kung ano man ang nais mong likhain.

Nakagambala

Una ay banggitin ko kung paano nilikha ang mga pagkakagambala sa proyektong ito. Ang paraan ng paggawa namin nito ay sa pamamagitan ng unang paglikha ng isang nakakagambala na istraktura ng talahanayan ng vector na sumusubaybay sa ID, makagambala ang handler, at isang sanggunian sa aparato para sa bawat nakakagambala. Ang mga nakakagambalang ID ay nagmula sa xparameter.h. Ang makagambala na handler ay isang pagpapaandar na isinulat namin para sa DMA at GPIO, at ang pagkagambala ng I2C ay nagmula sa driver ng Xlic I2C. Ang sanggunian ng aparato ay tumuturo sa mga pagkakataon ng bawat aparato na pinasimulan namin sa ibang lugar. Malapit sa dulo ng _init_audio function na isang loop ay dumadaan sa bawat item sa makagambala na talahanayan ng vector at tumawag sa dalawang pag-andar, XScuGic_Connect () at XScuGic_Enable () upang ikonekta at paganahin ang mga nakakagambala. Sinangguni nila ang xInterruptController, na isang makagambala na controller na nilikha sa FreeRTOS main.c bilang default. Kaya't karaniwang ikinakabit namin ang bawat isa sa aming mga nakakagambala sa nakakagambala na kontrol na nilikha para sa amin ng FreeRTOS.

DMA

Ang DMA initialization code ay nagsisimula sa lh_main.c. Una ang isang static na halimbawa ng isang istraktura ng XAxiDma ay idineklara. Pagkatapos sa _init_audio () function na ito ay makakakuha ng naka-configure. Una ang configure function mula sa proyekto ng demo ay tinawag, na nasa dma.c. Medyo maayos itong naidokumento at nagmula sa demo. Pagkatapos ang pagkagambala ay makakakonekta at pinagana. Para sa proyektong ito ang master-to-slave interrupt lang ang kinakailangan, sapagkat ang lahat ng data ay ipinapadala ng DMA sa I2S controller. Kung nais mong mag-record ng audio, kakailanganin mo rin ang abala ng alipin-to-master. Ang master-to-slave interrupt ay tinawag kapag natapos ang DMA na magpadala ng anumang data na sinabi mong ipadala. Ang pagkagambala na ito ay hindi kapani-paniwalang mahalaga para sa aming proyekto dahil sa tuwing natatapos ng DMA ang pagpapadala ng isang buffer ng mga sample ng audio dapat itong agad na magsimulang magpadala ng susunod na buffer, o kung hindi man ay may naririnig na pagkaantala na magaganap sa pagitan ng mga pagpapadala. Sa loob ng pag-andar ng dma_mm2s_ISR () makikita mo kung paano namin hahawakan ang makagambala. Ang mahalagang bahagi ay malapit sa wakas kung saan ginagamit namin ang xSemaphoreGiveFromISR () at portYIELD_FROM_ISR () upang abisuhan ang _audio_task () na maaari nitong simulan ang susunod na paglipat ng DMA. Ang paraan ng pagpapadala namin ng pare-pareho na data ng audio ay sa pamamagitan ng paghahalili sa pagitan ng dalawang mga buffer. Kapag ang isang buffer ay naipapadala sa I2C block ang iba pang buffer ay nagkakalkula at nakaimbak ng mga halagang ito. Pagkatapos kapag ang pagkagambala ay nagmula sa DMA ang mga aktibong buffer switch at ang mas kamakailang nakasulat na buffer ay nagsisimulang mailipat habang ang dating inilipat na buffer ay nagsisimulang ma-overwrite ng bagong data. Ang pangunahing bahagi ng pagpapaandar ng _audio_task ay kung saan tatawagin ang fnAudioPlay (). Ang fnAudioPlay () ay kumukuha ng halimbawa ng DMA, ang haba ng buffer, at isang pointer sa buffer kung saan ililipat ang data. Ang ilang mga halaga ay ipinadala sa mga rehistro ng I2S upang ipaalam ito sa karagdagang mga sample na darating. Pagkatapos ang XAxiDma_SimpleTransfer () ay tinawag upang simulan ang paglipat.

I2S Audio

ang audio.c at audio.h ay kung saan nagaganap ang pagsisimula ng I2S. Ang I2S initialization code ay isang pangkaraniwang tipak ng code na lumulutang sa isang bilang ng mga lugar, maaari kang makahanap ng bahagyang mga pagkakaiba-iba mula sa iba pang mga mapagkukunan ngunit dapat gumana ang isang ito. Medyo maayos itong naidokumento at hindi gaanong kailangang mabago para sa proyekto ng harpa. Ang DMA audio demo kung saan nagmula ito ay may mga function para sa paglipat sa mic o mga input ng linya upang magamit mo ang mga iyon kung kailangan mo ng pagpapaandar na iyon.

Sintesis ng Tunog

Upang ilarawan kung paano gumagana ang tunog synthesis, ililista ko ang bawat isa sa mga modelo ng tunog na ginamit sa pag-unlad na humantong sa panghuling pamamaraan, dahil bibigyan ka nito ng isang kahulugan kung bakit ito ginagawa sa paraang ginagawa.

Paraan 1: Ang isang panahon ng mga halaga ng sine ay kinakalkula para sa bawat string sa kaukulang dalas para sa tala ng musikal ng string na iyon at nakaimbak sa isang array. Halimbawa, ang haba ng array ay ang panahon ng sine wave sa mga sample, na katumbas ng # ng mga sample / cycle. Kung ang rate ng sampling ay 48kHz at ang dalas ng tala ay 100Hz, pagkatapos ay mayroong 48, 000 na mga sample / segundo at 100 na mga cycle / segundo na humahantong sa 4800 na mga sample bawat pag-ikot, at ang haba ng array ay 4800 na mga sample at maglalaman ng mga halaga ng isang kumpleto panahon ng alon ng sine. Kapag pinatugtog ang string, ang audio sample buffer ay napunan ng pagkuha ng isang halaga mula sa sine wave array at ilagay ito sa audio buffer bilang isang sample, pagkatapos ay pagdaragdag ng index sa sine wave array upang magamit ang aming dating halimbawa sa kurso ng 4800 mga sample ng isang sine wave cycle ay inilalagay sa audio buffer. Ang isang pagpapatakbo ng modulo ay ginagamit sa index ng array upang palagi itong bumagsak sa pagitan ng 0 at ang haba, at kapag ang array index ay lumipas sa isang tiyak na threshold (tulad ng maaaring halagang 2 segundo ng mga sample) ang string ay naka-off. Upang i-play ang maramihang mga string sa parehong oras, subaybayan nang hiwalay ang bawat index ng array ng mga string at idagdag ang halaga mula sa sine wave ng bawat mga string upang makuha ang bawat sample.

Paraan 2: Upang lumikha ng isang mas tono ng musika, nagsisimula kami sa nakaraang modelo at nagdaragdag ng mga harmonika sa bawat pangunahing dalas. Ang mga frequency ng harmonic ay mga frequency na kung saan ay integer multiplier ng pangunahing dalas. Hindi tulad ng kapag ang dalawang hindi magkakaugnay na dalas ay pinagsama-sama, na nagreresulta sa dalawang magkakaibang tunog na pinatugtog nang sabay-sabay, kapag naidagdag ang mga harmonika ay patuloy itong tunog tulad ng isang tunog lamang, ngunit may ibang tono. Upang magawa ito, sa tuwing idaragdag namin ang halaga ng sine wave sa lokasyon (array index% haba ng array) sa sample ng audio, nagdagdag din kami (2 * array index% haba ng array), at (3 * array index% haba ng array), at iba pa para sa gayunpaman maraming mga harmonika ang ninanais. Ang mga pinaraming indeks ay tatawid ang sine wave sa mga frequency na kung saan ay integer multiplier ng orihinal na dalas. Upang pahintulutan ang higit na kontrolin ang tono, ang mga halaga ng bawat harmonic ay pinarami ng isang variable na kumakatawan sa dami ng maharmonya sa pangkalahatang tunog. Halimbawa, ang pangunahing sine wave ay maaaring magkaroon ng mga halagang ito ay pinarami ng 6 upang gawin itong higit na isang kadahilanan sa pangkalahatang tunog, habang ang ika-5 maharmonya ay maaaring magkaroon ng isang multiplier ng 1, na nangangahulugang ang mga halagang ito ay nakakatulong nang mas kaunti sa pangkalahatang tunog.

Paraan 3: Okay, kaya ngayon mayroon kaming napakagandang tono sa mga tala, ngunit mayroon pa ring isang napakahalagang problema: naglalaro sila sa isang nakapirming dami para sa isang nakapirming tagal. Upang tunog tulad ng isang tunay na instrumento ang dami ng isang string na pinatugtog ay dapat mabulok nang maayos sa paglipas ng panahon. Upang magawa ito, ang isang array ay puno ng mga halaga ng isang exponentially decaying function. Ngayon kapag ang mga sample ng audio ay nilikha, ang tunog na nagmumula sa bawat string ay kinakalkula tulad ng sa nakaraang pamamaraan ngunit bago ito maidagdag sa sample ng audio ay mapadami ng halaga sa index ng array ng mga string sa exponential decay function array. Ginagawa nitong maayos na mawala ang tunog sa paglipas ng panahon. Kapag naabot ng array index ang dulo ng pagkabulok na array, tumigil ang string.

Paraan 4: Ang huling hakbang na ito ay kung ano talaga ang nagbibigay sa mga tunog ng string ng kanilang makatotohanang tunog ng string. Bago ang tunog ay kaaya-aya ngunit malinaw na na-synthesize. Upang subukang mas mahusay na tularan ang isang real-world na harp string, isang iba't ibang mga rate ng pagkabulok ay nakatalaga sa bawat maharmonya. Sa totoong mga string, kapag ang string ay unang sinaktan mayroong isang mataas na nilalaman ng mataas na dalas ng mga harmonika na lumilikha ng uri ng pag-pluck ng tunog na inaasahan namin mula sa isang string. Ang mga maharmonya ng mataas na dalas na ito ay napakaliit na pangunahing bahagi ng tunog, ang tunog ng string na hinahampas, ngunit napapabilis ng pagkabulok habang ang mas mabagal na harmonika ay pumalit. Ang isang pagkaagnas na pagkakasunud-sunod ay nilikha para sa bawat magkatugma na bilang na ginamit sa tunog na pagbubuo bawat isa ay may sariling rate ng pagkabulok. Ngayon ang bawat pagkakasundo ay maaaring malaya na maparami ng halaga ng kaukulang pagkabulok na array sa array index ng string at idinagdag sa tunog.

Sa pangkalahatan ang tunog pagbubuo ay madaling maunawaan ngunit mabigat pagkalkula. Ang pag-iimbak ng buong tunog ng string sa memorya nang sabay-sabay ay kukuha ng labis na memorya, ngunit ang pagkalkula ng sine wave at ang exponential function sa pagitan ng bawat frame ay tatagal ng masyadong mahaba upang makasabay sa rate ng pag-playback ng audio. Ang isang bilang ng mga trick ay ginagamit sa code upang mapabilis ang pagkalkula up. Ang lahat ng matematika maliban sa paunang paglikha ng mga talahanayan ng sine at exponential decayential ay ginagawa sa format na integer, na nangangailangan ng pagkalat ng magagamit na puwang na bilang sa 24 na output ng audio. Halimbawa, ang sine table ay nasa amplitude 150 upang ito ay makinis ngunit hindi masyadong malaki na maraming mga string na pinatugtog na magkasama ay maaaring idagdag na higit sa 24 na piraso. Gayundin, ang mga halaga ng exponential na talahanayan ay pinarami ng 80 bago pa bilugan sa mga integer at itago. Ang mga timbang na maharmonya ay maaaring tumagal ng mga discrete na halaga sa pagitan ng 0 at 10. Gayundin ang lahat ng mga sample ay talagang dinoble at ang mga alon ng sine ay na-index ng 2's, na epektibo ang paghati sa sampling rate. Nililimitahan nito ang maximum na dalas na maaaring i-play, ngunit kinakailangan para sa kasalukuyang bilang ng mga string at harmonika upang makalkula nang sapat.

Ang paglikha ng modelong ito ng tunog at pagpapaandar nito ay tumagal ng malaking pagsisikap sa panig ng processor, at magiging mahirap na mahirap itong gawin sa gilid ng fpga mula sa simula sa tagal ng panahon ng proyektong ito (isipin na muling likhain ang bitstream bawat oras na ang isang piraso ng verilog ay binago upang subukan ang tunog). Gayunpaman, ang paggawa nito sa fpga ay maaaring maging isang mas mahusay na paraan ng paggawa nito, posibleng tinanggal ang isyu ng hindi magagawang makalkula ang mga sample nang mabilis at payagan ang higit pang mga string, harmonics, at kahit mga audio effects o iba pang mga gawain na tatakbo sa panig ng processor.

Hakbang 6: Pag-kable ng Mga Sensor

Pag-kable ng Mga Sensor
Pag-kable ng Mga Sensor

Upang likhain ang mga string ginamit namin ang IR break beam sensors na makakakita kapag pinatugtog ang string. Inorder namin ang aming mga sensor mula sa sumusunod na link. Ang mga sensor ay mayroong power, ground, at data wire habang ang mga emitter ay mayroon lamang power at ground wire. Ginamit namin ang 3.3 V at mga ground pin mula sa mga header ng PMOD upang mapagana ang parehong mga emitter at sensor. Upang mapagana ang lahat ng mga sensor at emitter kinakailangan upang ikonekta ang lahat ng mga sensor at emitter nang kahanay. Ang mga wire ng data mula sa mga sensor ay kailangan ng bawat isa na pumunta sa kanilang sariling pmod pin.

Hakbang 7: Pagbubuo ng Balangkas

Pagbuo ng Balangkas
Pagbuo ng Balangkas

Upang likhain ang hugis ng alpa ang tatlong mga piraso ay ginagamit bilang isang balangkas upang ilagay ang mga sensor at emitter. Sa isa sa dalawang 18 pulgada na piraso ng PVC pipe ay nakahanay ang mga sensor at emitter sa alternating order na 1.5 pulgada mula sa bawat isa at pagkatapos ay i-tape ito pababa sa tubo. Sa kabilang 18 pulgada na tubo ng PVC ay ihanay ang mga sensor at emitter sa alternating pagkakasunud-sunod ngunit siguraduhing mabawi ang pagkakasunud-sunod (ibig sabihin kung ang unang tubo ay nagkaroon ng sensor muna ang pangalawa ay dapat magkaroon ng emitter muna at kabaligtaran). Kinakailangan na maghinang ng mas mahabang mga wire sa data, lakas, at mga wire sa lupa upang matiyak na maaabot nila ang board.

Hakbang 8: Pagbuo ng Wood Exterior

Pagbuo ng Wood Exterior
Pagbuo ng Wood Exterior

Ang hakbang na ito ay opsyonal ngunit lubos itong inirerekumenda. Ang panlabas na kahoy ay hindi lamang ginagawang maganda ang alpa na pinoprotektahan din nito ang mga sensor at wires mula sa pinsala. Ang frame ng kahoy ay maaaring malikha ng isang hallow na hugis-parihaba na singsing mula sa kahoy. Ang loob ng rektanggulo ay kailangang magkaroon ng isang pambungad na hindi bababa sa 1-1 / 2 pulgada upang magkasya ang tubo ng tubo at sensor. Sa sandaling ang frame ay itinayo drill dalawang mga butas na magpapahintulot sa mga wire mula sa sensor at emitters out upang ikonekta ang mga ito sa board.

* Tandaan: Inirerekumenda na magdagdag ng mga access point upang maalis at maipasok ang balangkas ng tubo kung sakaling kailangang gawin ang pag-aayos o kailangang gawin ang kaunting pagsasaayos.

Hakbang 9: Pagsasama-sama ng Lahat ng mga piraso

Pagsasama-sama ng Lahat ng Piraso
Pagsasama-sama ng Lahat ng Piraso

Kapag natapos na ang lahat ng nakaraang mga hakbang ay oras na upang maitayo ang alpa. Ilagay muna ang tubo ng tubo sa loob ng kahoy na labas. Pagkatapos plug sa mga wires para sa mga sensor at emitter sa tamang lokasyon sa board. Pagkatapos buksan ang SDK at i-click ang pindutan ng pag-debug upang mai-program ang board. Kapag ang board ay na-program na plug sa isang pares ng mga headphone o isang speaker. Nakasalalay sa aling sensor ang nagtatapos kung aling pmod port ang mga kuwerdas ng iyong alpa ay maaaring wala sa order upang magsimula. Dahil maaaring mahirap sabihin kung aling alambre ang pupunta sa aling sensor kung kailan maraming kasangkot ang mga wire, nagsama kami ng isang paraan upang mapa ang mga numero ng string upang makagambala ang mga bit na posisyon sa software. Hanapin ang "static int sensor_map [NUM_STRINGS]" at ayusin ang mga halaga sa array hanggang sa mag-play ang mga string mula sa pinakamababa hanggang sa pinakamataas sa pagkakasunud-sunod.

Maaaring magamit ang menu sa pamamagitan ng pagbubukas ng isang serial terminal (hal. RealTerm) at itakda ang rate ng baud sa 115200 at ang display sa ANSI. Maaaring ma-navigate ang menu sa pamamagitan ng paggamit ng mga w at s key upang ilipat pataas at pababa at ang mga a at d key upang baguhin ang mga halaga.

Hakbang 10: ROCK OUT

Kapag ang harpa ay ganap na gumagana. Mahusay ang alpa at makinig sa matamis na tunog ng iyong sariling musika!

Inirerekumendang: