Spartan Voice Changer Hjelm: 14 trinn (med bilder)
Spartan Voice Changer Hjelm: 14 trinn (med bilder)
Anonim
Spartan Voice Changer hjelm
Spartan Voice Changer hjelm
Spartan Voice Changer hjelm
Spartan Voice Changer hjelm

Hallo! Vi er et team på 4 studenter fra Polytechnic school ved Sorbonne University:

  • Louis Buchert
  • Bilal Melehi
  • Bao Tinh Piot
  • Marco Longépé

Dette prosjektet er realisert som en del av våre studier, og tar sikte på å ta i bruk en rekke verktøy, samt demonstrere våre teoretiske prestasjoner.

Det berømte objektet ser ut som en hjelm som ligner helten i et bestemt videospill hvis navn vil gå tapt. For designsiden har vi også en skjerm som viser Fourier -transformasjonen av lydsignalet som kommer ut av høyttaleren. Formålet med dette headsettet er å endre stemmen til operatøren i sanntid ved hjelp av en rekke valgbare effekter.

Utdanningsmål:

  • Ta lyden fra en mikrofon
  • Forsterk, filtrer, digitaliser signalet
  • Innse FFT for et signal
  • Vis denne FFT på en skjerm
  • Signalsyntese
  • Ta en lyd ut av en høyttaler
  • Realiser effekter på lydlyden (etterklang, ekko, etc …)

Nå som vi har lagt bakgrunnen og presentert prosjektet, er det på tide å ta tak i det!

Trinn 1: Krav 1/3 - Maskinvare

Krav 1/3 - Maskinvare
Krav 1/3 - Maskinvare

For å lykkes med å bygge hjelmen din, trenger vi litt maskinvare for å kjøre enheten.

  • DE0-Nano-SoC Development Board av Terasic + Adafruit TFT LCD-skjerm (Arduino)
  • Tilgang til en 3D -skriver for å gjøre hjelmen (Hvis du er en universitetsstudent flytter nærmere universitetet ditt, har noen laboratorier tilgjengelig for studenter)
  • En datamaskin med internettilkobling og minimum tilkobling (USB, Ethernet). Datamaskinen din må også ha en sterk prosessor ettersom kompilering av programmer på Qsys tar mye tid.
  • (Ikke nødvendig) En skriver som lager kretskort (PCB) fra Gerber -filer for å krympe kretsstørrelsen + et loddejern for å sette komponentene på kretskortet.
  • (Sterkt anbefalt): En god kaffe for å nyte arbeidet ditt med vår Instructable:)

Trinn 2: Krav 2/3 - Komponenter for kretsen din

Krav 2/3 - Komponenter for kretsen din
Krav 2/3 - Komponenter for kretsen din
Krav 2/3 - Komponenter for kretsen din
Krav 2/3 - Komponenter for kretsen din
Krav 2/3 - Komponenter for kretsen din
Krav 2/3 - Komponenter for kretsen din

Her er komponentene som trengs for kretsen din:

  • Texas Instrument LM386 AB klasse lydforsterker
  • Brødbrett
  • Sett med mann-hann, mann-hunn-kabler
  • LM358P Digital-til-Analoh-omformer (DAC)
  • Høyttaler
  • Liten mikrofon brukt i analog krets
  • Et spill sett med motstander fra 1kOhm til 220kOhm
  • Kondensator 1.5nF
  • Kondensator 50nF
  • Kondensator 100nF
  • Kondensator 100uF
  • Kondensator 220uF
  • x4 Kondensatorer 10uF

Trinn 3: Krav 3/3 - Programvare

Krav 3/3 - Programvare
Krav 3/3 - Programvare
Krav 3/3 - Programvare
Krav 3/3 - Programvare

Sist men ikke minst trenger du programvare:

  • Quartus 15.1: Lite -versjon
  • En C -kompilator (for eksempel gcc)
  • Altium for PCB -design
  • Altera's SoC innebygde suite for å kommunisere med SoC -kartet
  • Kitt

Trinn 4: Inngangskrets

Inngangskrets
Inngangskrets
Inngangskrets
Inngangskrets
Inngangskrets
Inngangskrets
Inngangskrets
Inngangskrets

La oss bygge kretsen. Bruk bildet ovenfor av kretsen for å montere den på brødbrettet. Du vil også se bildet av brødbrettet og kretsen inne for å se hvordan pinner er koblet til. Hele kretsen drives av en 5V likestrøm (DC). For dette kan du bruke et 5V batteri med en USB-B-omformer eller en funksjonsgenerator.

Noen påminnelser:

  • 5V strømforsyning og bakken er tilkoblet på separate horisontale linjer på brødbrettet
  • Hvis du vil koble to komponenter parallelt, legg dem i en felles linje på brødbrettet
  • Hvis du vil koble til 2 serielle komponenter, må komponentene bare en pinne i en felles linje på brødbrettet.

Ikke nøl med å se dedikert opplæring om hvordan du bruker et brødbrett og bygger en krets på den. Ikke glem å lese pinposisjonen til LM358P lydforsterker nøye (se bildet ovenfor)

Trinn 5: Utgangskrets

Utgangskrets
Utgangskrets
Utgangskrets
Utgangskrets
Utgangskrets
Utgangskrets
Utgangskrets
Utgangskrets

Ganske de samme instruksjonene som trinn 4. De fire inngangene: SDI, ikke CS, SCK, ikke LDAC er fra DE0-Nano-Soc-kortet. Vi får se senere hvordan vi genererer dem.

Ikke glem å lese pinposisjonene til LM386 lydforsterker nøye (se bildet ovenfor)

Trinn 6: [VALGFRITT] Opprette trykte kretsborad- og loddekomponenter

[VALGFRITT] Opprette trykte kretsborad- og loddekomponenter
[VALGFRITT] Opprette trykte kretsborad- og loddekomponenter
[VALGFRITT] Opprette trykte kretsborad- og loddekomponenter
[VALGFRITT] Opprette trykte kretsborad- og loddekomponenter
[VALGFRITT] Opprette trykte kretsborad- og loddekomponenter
[VALGFRITT] Opprette trykte kretsborad- og loddekomponenter

Hvis du er så heldig å eie en kretskortskriver eller kan bruke en, skal vi lage vårt eget kretskort (PCB). Vær oppmerksom på at dette trinnet er valgfritt. Dette trinnet består bare i å flytte kretsen fra et brødbrett til et kretskort.

Du trenger disse 2 GERBER -filene.

Disse filene ble laget på Altium. Bruk dem på PCB -skriverprogramvaren for å skrive ut PCB. Når du har fått PCB, må du kontrollere at kretskortet er rent og at sporene er riktig skrevet ut.

Nå kommer den virkelige avtalen: Lodding. De to bildene ovenfor er kartet over kretsen på kretskortet. Hver komponent har navn (R6, C4, MK1 etc.). Bildene i trinn 4 og 5 viser komponentparametrene (motstand, konduktans..). Plasser hver komponent fra brødbrettet til kretskortet i henhold til navnene.

Når du har loddet alt med loddejernet, tester du alle komponentene med et voltmeter for å sjekke om det er noen kortslutning.

Trinn 7: SoC -oppsett

SoC -oppsett
SoC -oppsett
SoC -oppsett
SoC -oppsett

Når det gjelder SoC -oppsettet, må du kjøre noen kommandoer og skript som er inkludert i SoC -innebygde pakken i en terminal. For å gjøre dette må du legge til noen $ PATH. PATH brukes i en terminal for å si for å søke etter en fil i katalogene gitt av banen når du kjører en kommando. For å gjøre det, skriv inn følgende kommandolinje:

eksport PATH =/cygdrive/c/altera_lite/15.1/quartus/sopc_builder/bin: $ PATH

Skriv deretter inn kommandolinjen for å generere overskrifter fra en sof -fil. Du får sof -filen ved å kompilere prosjektet ditt på Quartus. For å gjøre det, skriver du:./generate_header.

Trinn 8: Programmering av C HPS

Programmering av C HPS
Programmering av C HPS

Vi må innse 2 ting i denne delen, nemlig lese lese verdien av ADC og skrive den i SPI.

1. Les verdien av ADC

Adressen til minnet der ADC er inneholdt er ikke direkte tilgjengelig. Faktisk setter Linux -systemet på kortet opp en abstraksjon av minnet. For å virkelig få tilgang til ADC -adressen vil vi bruke mmap -funksjonen.

"h2p_lw_spi_addr = virtual_base + ((usignert lang) (ALT_LWFPGASLVS_OFST + SPI_0_BASE) & (usignert lang) (HW_REGS_MASK));"

Denne instruksjonen gjør det mulig å legge til en forskyvning i begynnelsen av baseadressen for å nå adressen til minnet som er tildelt for ADC, og for å utføre den resulterende adressen en logikk OG for å ta hensyn til maskeringen.

Etter det vil det bare være nødvendig å avskille pekeren i programmet for å få verdien.

2. Skriv verdien av ADC i SPI

Manipulasjonen er identisk, denne gangen gir vi mmap -forskyvningen til å lande på adressen som er tildelt av SPI. Mens du skriver i SPI, spesifiserer den tekniske dokumentasjonen at du må skrive til adressen + 1 verdien til annonsen.

"*(h2p_lw_spi_addr+1) = ((0x1 << 12) | *h2p_lw_adc_addr);"

Denne instruksjonen lar deg skrive til SPI. Faktisk er bit 4, så 1 << 12, den biten som gjør det mulig å aktivere SPI. Med en logisk ELLER gir vi derfor både aktiveringsbiten og verdien av ADC til SPI.

Trinn 9: Digital anskaffelse av ADC fra kortet

Digital anskaffelse av ADC fra kortet
Digital anskaffelse av ADC fra kortet
Digital anskaffelse av ADC fra kortet
Digital anskaffelse av ADC fra kortet
Digital anskaffelse av ADC fra kortet
Digital anskaffelse av ADC fra kortet
Digital anskaffelse av ADC fra kortet
Digital anskaffelse av ADC fra kortet

Først av alt må du angi Ethernet -IP -adressen til datamaskinen din via Kontrollpanel -> Nettverk -> Kortparmesaler. Velg ethernet -grensesnittet til kortet, eiendommen, ipv4 -adressen og skriv inn en fast IP, en maske osv …

Deretter kobler du kortet fra strømuttakssiden med mikro -USB -kabelen. Åpne Quartus -programmereren og start eksporten. Denne manipulasjonen gjøres om etter hver strøm av kortet.

Bytt mikro -USB -kabel for å koble denne gangen ved siden av Ethernet -kontakten. Nå, med Putty, vil det være nødvendig å koble til kortet via en seriell lenke. Konfigurasjonen er synlig på bildene, ideen er å erstatte COM5 med COM etterfulgt av nummeret du kan finne i enhetsbehandleren (høyreklikk på Windows -logoen for å åpne den).

Trykk enter, du er tilkoblet.

Info for å starte prosjektet på nytt: - Fix ethernet ip tilsvarende kortet - Slå på kortet, hver gang du slår på strømmen, er det nødvendig å sette med "program" under quartus prosjektet som er samlet på kortet. Dette gjøres via mikro -USB -porten - For å kunne vise resultatet av programmet bruker vi mer mikro -USB, men UART - Med kitt konfigurert for seriell COM5 (eller 6 watch gestinnaire periph) Koble til kortet. - Angi et passord (passwd) - Angi IP -adresse ifconfig ethxx IPchoice (IP ikke langt fra det for PC -et) - Generer overskriften i henhold til Qsys med terminalen innebygd (eksporter PATH) - make - scp l exec i kart - utfør under kitt prog

Trinn 10: FFT -beregning

FFT -beregning
FFT -beregning

For å få Fast Fourier Transform i vårt C -program, vil vi bruke et bibliotek skrevet av Mark Borgerding: Kiss FFT. Du kan laste ned biblioteket her: https://kissfft.sourceforge.net/. Å bruke en FFT på et signal er nødvendig for å endre og anvende signaleffekter. Det kan også tjene til å vise spekteret til et signal.

Første trinn i C -programmet består i å tildele minne for å lagre FFT -resultatet. Størrelsen på minnet avhenger av antall punkter som brukes til å beregne FFT. Jo flere poeng du har, desto mer spesifikk vil FFT. Imidlertid vil programmet kjøre saktere og bruke mer minne. Vær oppmerksom på at du får to matriser fra kiss_fft -funksjonen: inngangen og utgangen til funksjonen (cx_in og cx_out)

Når matrisen vår er fylt med nye FFT -verdier, dvs. når r = Win - 1, behandler vi FFT. Når det gjelder displayet, viser vi bare den positive delen av spekteret, da det er en symmetri mellom den negative delen og den positive delen.

Når det gjelder den horisontale aksen, reduserer vi toppverdiene med 100*høyde/(høyde²) for å skille hovedfrekvensenes topper.

Vi bruker bruk av usleep -systemanropet for å definere en lesefrekvens for ADC -verdiene. Denne frekvensen er for øyeblikket satt til 1, 5 Hz.

Trinn 11: Visning av FFT

Viser FFT
Viser FFT
Viser FFT
Viser FFT

Basert på et eksempel, gi på Adafruit TFT LCD-skjermen tilgjengelig her: https://www.terasic.com/downloads/cd-rom/de0-nano-s… vi har programmert NIOS for styret vårt slik at han kan lese ADC -verdien.

Så ADC -registeret deles mellom NIOS og HPS fordi ADC -verdiene vil bli brukt til å vise FFT på NIOS -skjermen, og de samme verdiene vil bli skrevet på SPI for å bli sendt ut av brettet og til slutt konverteres av DAC for å få et analogt signal.

Trinn 12: Montering

montering
montering

Vi er nesten ferdige! Du må sette sammen alle deler av projet (inngangskrets, utgangskrets og brett). Sørg for å koble delene til riktige pinner i henhold til Quartus -prosjektet.

  1. Inngangskretsen sender lydsignalet som fanges opp av mikrofonen, forsterkes, filtreres og forskyves.
  2. Programmet C som er tilstede på kortet vil lese verdiene til ADC som vi har sett tidligere, og vil skrive det på SPI slik at vi kan gjenopprette verdien på GPIO på kortet.
  3. Deretter vil utgangen GPIO fra SPI overføre informasjonen som vil bli dekodet av vår DAC og forsterket ved å kjøre for å nå høyttaleren.

Trinn 13: Lydeffekter

Lydeffekter
Lydeffekter
Lydeffekter
Lydeffekter

Det eneste trinnet igjen er lydeffekter.

Tilgjengelige effekter er:

  • Høyfrekvent filter
  • Lavfrekvent filter

Du kan bytte mellom effekter takket være en knapp. Denne knappen vil endre en variabel i vårt C -program, slik at den kan bruke riktig effekt.

Trinn 14: [VALGFRITT] Å lage hjelmen

[VALGFRITT] Å lage hjelmen
[VALGFRITT] Å lage hjelmen
[VALGFRITT] Å lage hjelmen
[VALGFRITT] Å lage hjelmen
[VALGFRITT] Å lage hjelmen
[VALGFRITT] Å lage hjelmen

Her er vi i det mest manuelle trinnet i prosjektet:

  1. Først limte vi de forskjellige 3D -trykte delene av hjelmen.
  2. For å fylle hullene mellom de limte bitene la vi til en finish med en 3D -penn.
  3. Vi polerte mellomrommene fylt med pennen og hjelmen mer generelt, slik at maleriet holder godt etterpå.
  4. Vi malte hjelmen med 2 lag: Den første i antrasittsort, på nært hold, og den andre med primærgrønn fra videre for å gi nyanser av mørkere grønn.
  5. Til slutt trykte vi logoen til skolen vår på siden av hjelmen