Hvordan velge og bruke en lydkodek og mikrokontroller for innebygde tilbakekoblingslydfiler

Av Jacob Beningo

Bidrag fra DigiKeys nordamerikanske redaktører

Det er et økende behov blant integrerte systemer for å gi lyd med høy pålitelighet i stedet for summer for brukertilbakekobling fra brukere, inkludert alarmer og varslere. Selv om pip og kvitter har vært effektive tidligere, forventer brukerne avanserte lyder som bare kan produseres ved å spille av lyd fra filformater som MP3-filer. Problemet er at lydavspilling kan virke skremmende og legge til ekstra kostnader og kompleksitet i et system. Det første instinktet er å finne en mikrokontroller som kan spille av MP3-er, men dette legger ofte flere dollar til materiallisten (stykkliste) og betydelig kompleksitet til den innebygde programvaren.

En løsning som er spesielt god til å balansere tilleggskostnadene og programvarekompleksiteten, er å bruke en lydkodek. Lydkodeker godtar ikke bare en lyddatastrøm fra en mikrokontroller, de har ofte også flere funksjoner som gjør at utvikleren nøye kan stille lydavspillingssystemet for å forbedre lydkvaliteten på systemet.

Denne artikkelen vil ta for seg rollen til lydkodeker, de viktigste egenskapene utviklere bør ta hensyn til når de foretar et valg, og hvordan de kan anvendes effektivt. Løsninger fra AKM Semiconductor, Texas Instruments og Maxim Integrated vil bli introdusert og brukt som eksempler her, selv om andre også er tilgjengelige. Det vil avsluttes med tips og triks om hvordan du akselererer programutvikling for lydavspilling ved hjelp av en kodek, samtidig som du senker systemkostnaden.

Hva er lydkodeker?

En lydkodek er en maskinvarekomponent som er i stand til å kode eller dekode en digital datastrøm som inneholder lydinformasjon1. En lydkodek er nyttig fordi den gjør det mulig å slå av lydbehandlingen fra mikrokontrolleren. Dette kan redusere programvarekompleksiteten betydelig, og gjør det også mulig å bruke en billigere og mindre kapabel mikrokontroller til et program.

En vanlig lydkodek vil inneholde flere funksjonelle blokker:

  • Et I2S-grensesnitt for å sende eller motta kodede digitale lyddata
  • Et I2C-grensesnitt for å konfigurere og lese lydkodekens kontrollregistre
  • En mikrofoninngang som er koblet til en analog-til-digital-omformer (ADC)
  • Minst én lydutgangskanal, for eksempel en høyttalerutgang, men de fleste inkluderer også en linje ut og kan inkludere flere høyttalerutganger for stereoavspilling
  • En digital blokk som inneholder høypassfiter, lavpassfilter, båndsperrefilter (båndstoppfilter) og equalizerfiltre for å justere lydavspillinger og opptak

Et eksempel på lydkodek som er ganske populær på grunn av sine lave kostnader og lydmuligheter, er AK4637EN 24-bits lydkodek fra AKM Semiconductor (figur 1). AK4637EN har alle disse funksjonene, i tillegg til en pipegeneratorinngang som kan brukes til å generere et pipesignal ved hjelp av et pulsbreddemodulasjonssignal (PWM-signal) ved en ønsket frekvens.

Skjema over AKM Semiconductor AK4637EN-lydkodek med monohøyttalerutgang (klikk på for å forstørre)Figur 1: AK4637EN er en lydkodek med monohøyttalerutgang som har muligheter for lydavspilling og opptak. Den inneholder også en innebygd lydblokk som kan brukes til å filtrere innkommende og utgående lyd for å forbedre lydkvaliteten. (Bildekilde: AKM Semiconductor)

Utviklere vil oppdage at den viktigste differensiatoren for en lydkodek vil være om den utganger mono- eller stereolyd, så vel som de digitale blokkfunksjonene. AK4637EN tilbyr for eksempel et høypassfilter, et lavpassfilter, en firebåndsutjevner, en funksjon for automatisk nivellering av kanalen og en enkeltbåndsequalizer. Sistnevnte kan brukes som båndsperrefilter (båndstoppfilter). Hvordan en utvikler setter opp disse digitale filtrene kan dramatisk påvirke hvordan et system høres ut.

Lydkodeken kan noen ganger skremme en utvikler som er ny i lydavspilling. Selv om AK4637EN for eksempel er en enkel lydkodek, viser en rask undersøkelse av databladet at det har 64 konfigurerbare registre. Det kan virke som mye i starten, men de fleste av disse registrene brukes til å angi filterkoeffisientene for de forskjellige digitale filtrene som er tilgjengelige. Det er bare en håndfull som må brukes for å få systemet til å sende ut lyd på riktig måte, noe som gjør driverutviklingen for en lydkodek langt enklere enn en nybegynner kan forestille seg.

Hvordan velge en lydkodek

En av de viktigste drivkreftene for å velge noe i produktutvikling er kostnader, og lydkodeker er ikke forskjellige. Det er likevel viktig å huske på at utviklere får det de betaler for, så når det kommer til lyd, må et team nøye veie designkravene mot de viktigste løsningsparameterne.

Den første betraktningen er den nødvendige utgangen fra lydkodeken. Det er flere forskjellige valg. AK4637EN har for eksempel en linjeutgang og en monohøyttalerutgang. Det er andre kodeker som Texas InstrumentsTLV320AIC3110IRHBR stereolydkodek som kan kjøre to høyttalere på 1,29 watt (figur 2).

Skjema over TI TLV320AIC3110IRHBR er en lydkodek med stereoutgang og forsterkning (klikk for å forstørre)Figur 2: TI TLV320AIC3110IRHBR er en lydkodek med stereoutgang og forsterkning i tillegg til en mikrofoninngang. Kodeken kan drive 1,29 watt fra innebygde forsterkere og har programmerbare digitale lydblokker. (Bildekilde: Texas Instruments)

Andre lydkodeker som Maxim Integrated MAX9867 er designet for å bare drive et par hodetelefoner (figur 3). MAX9867 har de typiske I2S og I2C digitale grensesnittene, men den inneholder også stereomikrofoninnganger og to linjeinnganger som kan velges digitalt.

Skjema over Maxim Integrated MAX9867-lydkodekFigur 3: Maxim Integrated MAX9867-lydkodeken kan kjøre stereohodetelefoner og velge mellom digitale, mikrofon- og linjeinnganger. (Bildekilde: Maxim Integrated)

Å bestemme mellom disse tre løsningene om hva utdatatypen vil være (eller til og med inndataene) er en kritisk tidlig avgjørelse.

Utviklere må også vurdere hva de vil kjøre. Vil lydkodeken kjøre hodetelefoner, en høyttaler eller et par høyttalere direkte, og hva vil utgangsrangeringen være? Hvis systemet vil kjøre en 5 watt høyttaler, er det ikke mange kodeker for innebygde systemer som vil gjøre det. I stedet kan en utvikler velge linjen ut og bruke en separat klasse D-forsterker til å drive høyttaleren direkte. Dette sparer noen kostnader samtidig som det gir designfleksibilitet.

To siste hensyn er mulighetene for innebygd ruting og digital filtrering. Her er hvor den reelle differensieringen og kostnadsforskjellene bestemmes for en lydkodek. For eksempel har TLV320AIC311IRHBR av-pop og myk startfunksjoner for å minimere høyttalersprang og muliggjøre en jevn overgang til lydavspilling. Den har også en innebygd mikser for hver utgangskanal og digital volumkontroll.

Det er opp til utvikleren å nøye balansere deres behov fra lydkodeken med stykklisten og mengden kortplass som vil bli brukt av kretsene.

Systemet for lydavspilling

Når du arbeider med en lydkodek, er det viktig å innse at det er flere forskjellige blokker utenfor lydkodeken som er nødvendige for å oppnå vellykket lydavspilling. De nøyaktige blokkene vil variere litt basert på applikasjon og metoden som er bestemt for avspilling, men et generalisert skjema er vist i figur 4.

Skjema over generell tilkoblingsblokkdiagram for et lydavspillingssystemFigur 4: Et generelt tilkoblingsblokkskjema for et lydavspillingssystem i et typisk innebygd program viser at det må være lagring for lydfiler, som kan være på mikrokontrolleren eller på eksternt minne. (Bildekilde: Beningo Embedded Group)

Det er flere punkter i dette skjemaet som er verdt å ta for seg. Først må det være en metode som brukes til å lagre lydavspillingsfilene. Det er to alternativer for dette; lagre filene internt i mikrokontrollerens flashminne eller lagre dem eksternt i flashminnet. Valget vil avhenge av hvor store lydfilene er og hvor stort det interne flashminnet er på mikrokontrolleren.

Utviklere må også vurdere hva lydavspillingsformatet vil være. Det vanligste er å bruke en MP3. I dette tilfellet må den valgte mikrokontrolleren ha en programvarestabel som støtter MP3-dekodning. Dette gjør at MP3-filen kan åpnes og deretter skyves ut ved hjelp av en DMA-kontroller (Dynamic Memory Access) via I2 S-grensesnitt. Selv jeg2 S-port kan konfigureres for master / slave og flere andre moduser, så dette må undersøkes nøye for å sikre at dataene overføres til kodeken med riktig hastighet.

Som nevnt tidligere, kan en ekstern lydforsterker være nødvendig, eller ikke, avhengig av applikasjonen. En typisk kodekutgang på rundt 1 til 1,5 watt, noe som er nyttig for å drive en liten høyttaler. For å kjøre en 3 watt eller større høyttaler, vil det være nødvendig å bruke ekstern forsterker. Klasse D-forsterkere er mest brukt til dette også. Forsterkeren trenger heller ikke å ha variabel forsterkning. Lydkodeken kan justere volumkontrollen digitalt for å gi et bredt spekter av utgangseffekt.

Et område som ofte overses er bulkkapasitet. Når lyd spilles, kan den trekke kraftig på strømskinnene. Hvis det ikke er nok kapasitans på kortet, kan utgangskvaliteten bli dramatisk påvirket og kan ta på seg en klimprende (nasal) lyd sammen med flere andre uønskede lyder. Dette kan oppdages ved nøye overvåking av strømskinnene under prøving. Det er ikke en dårlig idé under utvikling av PC-kort å legge igjen ekstra fotavtrykk på kortet for å tillate at forskjellige kapasitansverdier kan prøves for å justere utgangskretsene.

Tips og triks for å velge og bruke en lydkodek

Lydkodeker kan forenkle den innebygde programvaren dramatisk og gi et program med flott lydkvalitet. Lydkodeker kan være vanskelig hvis en utvikler ikke har jobbet med dem før. For å utnytte en lydkodek, er det flere «tips og triks»-team som bør huske på, for eksempel:

  • Bruk DMA-funksjonen (direct memory access controller) i en mikrokontroller for å mate lydkodeken med minimal CPU-inngripen. Dette vil bidra til å sikre at kodeken ikke «sulter» etter data.
  • Når lyd ikke spilles av, bruk kodeks mute-funksjonen for å forhindre at lavnivåutgangsstøy når høyttaleren.
  • Når du deaktiverer eller aktiverer avspilling, bruk en lydkodeks myke dempefunksjon for å forhindre at høyttaleren spretter opp og annen uønsket støy.
  • Bruk et terminalprogram til å sende ut kodekregistrene etter at kodeken er initialisert. Dette kan være spesielt nyttig når du forsøker å feilsøke problemer eller justere høyttalerutgangskretsen og kabinettet.
  • Utnytt de innebygde digitale filtermekanismene som er inkludert i en kodek. De digitale filtrene lar en utvikler utjevne utgangen, filtrere bort uønskede høye og lave frekvenser og maksimere kvaliteten på lydsystemet.
  • Ikke glem at innstilling av lyden bare vil være en nyttig innsats når kretskortet og høyttaleren er installert i kabinettet, da kabinettet og monteringen utgjør en enorm forskjell.

For å komme i gang kan utviklere eksperimentere med MAX9867EVKIT+ evalueringssettet for Maxim Integrated sin MAX9867 (figur 5).

Bilde av Maxim MAX9867EVKIT+ evalueringssett MAX9867Figur 5: MAX9867EVKIT+ eval-settet for MAX9867 kobles til en PC via en USB-kabel og har RCA-innganger, hodetelefonutganger og fiberoptiske sende- og mottaksmoduler. (Bildekilde: Maxim Integrated)

Settet omfatter kortet og tilhørende programvare og leveres konfigurert til å sende og motta lyddata ved hjelp av Sony/Philips sitt digitale grensesnitt (S/PDIF), selv om det også kan settes til å bruke I2S. Den har to RCA-inngangskontakter, to 3,5 mm (analoge) utgangshodetelefonkontakter og fiberoptiske mottaks- og sendemoduler. Programvaren er Windows-kompatibel, og når den er koblet til en PC over en USB-kabel, åpnes den til et grafisk brukergrensesnitt (GUI) som utvikleren kan eksperimentere med MAX9867-innstillingene (figur 6).

Bilde av Windows-basert brukergrensesnitt (GUI) (klikk på for å forstørre)Figur 6: Ved hjelp av det Windows-baserte grensesnittet kan brukere eksperimentere med et bredt utvalg av MAX9867-innstillinger, som starter med Klokke og digital lyd (valgt fane), helt til registre 1 og registre 2 (høyre). (Bildekilde: Maxim Integrated)

Konklusjon

Etablerte systembrukere har blitt vant til lydkvalitet til det punktet at det nå forventes, i stedet for summere og pip som alarmer, varslere og annen tilbakemelding fra brukere. Dette pålegger utviklingsteam å implementere MP3-avspillingsfunksjoner i systemene sine. Dette kan i utgangspunktet virke som en kompleks bestrebelse. Men ved å bruke riktig lydkodek sammen med en mikrokontroller, og ved å følge noen design beste praksis, kan utviklere balansere kostnadene og kompleksiteten forbundet med lydapplikasjoner.

Referanser

  1. https://en.wikipedia.org/wiki/Audio_codec
DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Om skribenten

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo is an embedded software consultant. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees, including a Masters of Engineering from the University of Michigan.

Om denne utgiveren

DigiKeys nordamerikanske redaktører