Hoe selecteer en gebruik je een audiocodec en een microcontroller voor ingebedde audio-feedbackbestanden?

Door Jacob Beningo

Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey

Er is een groeiende behoefte onder de embedded systemen om high-fidelity audio te leveren in plaats van buzzers voor gebruikersfeedback, inclusief alarmen en waarschuwingen. Hoewel piepjes en tsjilpen in het verleden effectief zijn geweest, verwachten gebruikers geavanceerde geluiden die alleen kunnen worden geproduceerd door het afspelen van audio van bestandsformaten zoals MP3's. Het probleem is dat het afspelen van audio intimiderend kan overkomen en extra kosten en complexiteit aan een systeem kan toevoegen. Het eerste instinct is het vinden van een microcontroller die MP3's kan afspelen, maar dit voegt vaak enkele dollars toe aan de materiaallijst (BOM) en een aanzienlijke complexiteit aan de embedded software.

Een oplossing die vooral goed is in het balanceren van de extra kosten en de complexiteit van de software is het gebruik van een audiocodec. Audiocodecs accepteren niet alleen een audio-datastroom van een microcontroller, ze hebben vaak ook meerdere functies waarmee de ontwikkelaar het audioweergavesysteem zorgvuldig kan afstemmen om de kwaliteit van het geluid dat door het systeem wordt afgespeeld te verbeteren.

In dit artikel wordt de rol van audiocodecs besproken, de belangrijkste kenmerken waar ontwikkelaars rekening mee moeten houden bij het maken van een selectie, en hoe ze effectief kunnen worden toegepast. Oplossingen van AKM Semiconductor, Texas Instruments en Maxim Integrated worden hier geïntroduceerd en als voorbeeld gebruikt, hoewel er ook andere oplossingen beschikbaar zijn. Het zal eindigen met tips en trucs om de ontwikkeling van audioweergave-applicaties met behulp van een codec te versnellen en tegelijkertijd de systeemkosten te verlagen.

Wat zijn audiocodecs?

Een audiocodec is een hardwarecomponent die in staat is een digitale datastroom met audio-informatie1 te coderen of te decoderen. Een audiocodec is nuttig omdat het mogelijk is de audioverwerking van de microcontroller te verwijderen. Dit kan de complexiteit van de software aanzienlijk verminderen en maakt het ook mogelijk om een minder dure en minder capabele microcontroller te gebruiken voor een toepassing.

Een typische audiocodec zal verschillende functionele blokken bevatten:

  • Een I2S-interface voor het verzenden of ontvangen van gecodeerde digitale audiogegevens
  • Een I2C-interface om de controleregisters van de audiocodec te configureren en uit te lezen
  • Een microfooningang die is aangesloten op een analoog/digitaal-omzetter (ADC)
  • Ten minste één audio-uitgangskanaal zoals een luidsprekeruitgang, maar de meeste hebben ook een line-out en kunnen meerdere luidsprekeruitgangen hebben voor stereoweergave
  • Een digitaal blok dat high-pass, low-pass, notch en equalizer filters bevat voor het afstemmen van audio playbacks en opnames

Een voorbeeld van een audiocodec die vrij populair is vanwege de lage kosten en de audiomogelijkheden is de AK4637EN24-bits audiocodec van AKM Semiconductor (Afbeelding 1). De AK4637EN heeft al deze functies, naast een piepgeneratoringang die kan worden gebruikt om een pieptoon te genereren met behulp van een pulsbreedtemodulatie (PWM) signaal op een gewenste frequentie.

Diagram van AKM Semiconductor AK4637EN audiocodec met een mono-luidsprekeruitgang (klik om te vergroten)Afbeelding 1: De AK4637EN is een audiocodec met een monoluidsprekeruitgang die audioweergave en opnamemogelijkheden heeft. Het bevat ook een intern audioblok dat kan worden gebruikt om inkomende en uitgaande audio te filteren om de geluidskwaliteit te verbeteren. (Bron afbeelding: AKM Semiconductor)

Ontwikkelaars zullen merken dat de belangrijkste onderscheidende factor voor een audio-codec zal zijn of deze mono- of stereo-audio uitzendt, evenals de digitale blokmogelijkheden. De AK4637EN biedt bijvoorbeeld een hoogdoorlaatfilter, een laagdoorlaatfilter, een vierbandige equalizer, een automatisch nivellerende kanaalfunctie en een enkelbandige equalizer. Dit laatste kan worden gebruikt als een notch-filter. De manier waarop een ontwikkelaar deze digitale filters instelt, kan een dramatisch effect hebben op de manier waarop een systeem klinkt.

De audiocodec kan soms een ontwikkelaar die nieuw is in het afspelen van audio intimideren. Terwijl de AK4637EN bijvoorbeeld een eenvoudige audiocodec is, blijkt uit een snel onderzoek van de datasheet dat deze 64 configureerbare registers heeft. Dat lijkt in eerste instantie misschien veel, maar de meeste van die registers worden gebruikt om de filtercoëfficiënten voor de verschillende digitale filters die beschikbaar zijn, in te stellen. Er zijn er maar een paar die gebruikt moeten worden om het systeem goed te laten werken, waardoor de ontwikkeling van de driver voor een audiocodec veel eenvoudiger is dan een nieuweling zich zou kunnen voorstellen.

Hoe selecteer je een audiocodec

Een van de belangrijkste drijfveren om iets te selecteren in de productontwikkeling is de kostprijs, en audiocodecs zijn niet anders. Toch is het belangrijk om in gedachten te houden dat ontwikkelaars krijgen waar ze voor betalen, dus als het op audio aankomt, moet een team de ontwerpvereisten zorgvuldig afwegen tegen de belangrijkste oplossingsparameters.

De eerste overweging is de vereiste output van de audiocodec. Er zijn verschillende keuzes. Zo heeft de AK4637EN een lijnuitgang en een monoluidsprekeruitgang. Er zijn andere codecs zoals de Texas Instruments TLV320AIC3110IRHBR stereo audiocodec die twee luidsprekers met 1,29 watt kunnen aansturen (Afbeelding 2).

Diagram van TI TLV320AIC3110IRHBR is een audiocodec met stereo-uitgang en -versterking (klik om te vergroten)Figuur 2: De TI TLV320AIC3110IRHBR is een audiocodec met stereo-uitgang en -versterking naast een microfooningang. De codec kan 1.29 watt van interne versterkers aansturen en heeft programmeerbare digitale audioblokken. (Bron afbeelding: Texas Instruments)

Andere audiocodecs zoals de Maxim Integrated MAX9867zijn ontworpen om alleen een hoofdtelefoon aan te sturen (Afbeelding 3). De MAX9867 heeft de typische I2S en I2C digitale interfaces, maar bevat ook stereo microfoon ingangen en twee line ins die digitaal geselecteerd kunnen worden.

Diagram van Maxim Integrated MAX9867 audio codecAfbeelding 3: De Maxim Integrated MAX9867 audio codec kan een stereo hoofdtelefoon aansturen en kiezen tussen digitale, microfoon- en lijningangen. (Bron afbeelding: Maxim Integrated)

Beslissen tussen deze drie oplossingen over het type output (of zelfs de input) is een kritische vroege beslissing.

Ontwikkelaars moeten ook nadenken over wat ze gaan rijden. Zal de audiocodec direct een hoofdtelefoon, een luidspreker of een paar luidsprekers aansturen en wat zal de outputrating zijn? Als het systeem een 5 W luidspreker zal aansturen, zijn er niet veel codecs voor embedded systemen die dat doen. In plaats daarvan kan het zijn dat een ontwikkelaar de lijn wil selecteren en een aparte Klasse-D versterker wil gebruiken om de luidspreker direct aan te sturen. Dit bespaart wat kosten en biedt tegelijkertijd flexibiliteit in het ontwerp.

Twee laatste overwegingen zijn de interne routing en de digitale filtermogelijkheden. Hier worden de werkelijke differentiatie en kostenverschillen bepaald voor een audiocodec. De TLV320AIC311IRHBR heeft bijvoorbeeld de-pop- en softstartmogelijkheden om het knallen van de luidsprekers tot een minimum te beperken en een soepele overgang naar de audioweergave mogelijk te maken. Het heeft ook een interne mixer voor elk uitgangskanaal en een digitale volumeregelaar.

Het is aan de ontwikkelaar om een zorgvuldige afweging te maken tussen de behoeften van de audiocodec en de BOM en de hoeveelheid ruimte op het bord die door het circuit wordt verbruikt.

Het audioweergavesysteem

Bij het werken met een audiocodec is het belangrijk te beseffen dat er buiten de audiocodec verschillende blokken zijn die nodig zijn om een succesvolle audioweergave te realiseren. De exacte blokken zullen enigszins variëren op basis van de toepassing en de gekozen methode voor het afspelen, maar een algemeen schema is weergegeven in Afbeelding 4.

Diagram van het gegeneraliseerde aansluitblokdiagram voor een audioweergavesysteemAfbeelding 4: Een gegeneraliseerd aansluitblokschema voor een audioweergavesysteem in een typische embedded applicatie laat zien dat er opslag nodig is voor audiobestanden, die op de microcontroller of op het externe geheugen kunnen staan. (Bron afbeelding: Beningo Embedded Group)

Er zijn verschillende punten in dit schema die de moeite van het bespreken waard zijn. Eerst moet er een methode zijn die gebruikt wordt om de audiobestanden op te slaan. Er zijn twee mogelijkheden; de bestanden intern opslaan in het flashgeheugen van de microcontroller of extern opslaan in het flashgeheugen. De keuze is afhankelijk van hoe groot de audiobestanden zijn en hoe groot het interne flashgeheugen op de microcontroller is.

Ontwikkelaars moeten ook nadenken over wat het audioweergaveformaat zal zijn. De meest voorkomende is het gebruik van een MP3. In dit geval moet de geselecteerde microcontroller een softwarestack hebben die MP3-decodering ondersteunt. Hierdoor kan het MP3-bestand worden geopend en vervolgens via de I2S-interface met behulp van een DMA-controller (dynamic memory access) naar buiten worden geduwd. Zelfs de I2S poort kan worden geconfigureerd voor master/slave en verschillende andere modi, dus dit moet zorgvuldig worden onderzocht om ervoor te zorgen dat de gegevens worden overgebracht naar de codec met de juiste snelheid.

Zoals eerder vermeld, kan een externe audioversterker al dan niet nodig zijn, afhankelijk van de toepassing. Een typische codec geeft ongeveer 1 tot 1,5 W uit, wat handig is om een kleine luidspreker aan te sturen. Om een 3 Watt of grotere luidspreker aan te drijven, zal het nodig zijn om een externe versterker te gebruiken. Nogmaals, de meest gebruikte zijn klasse D. De versterker hoeft ook niet per se een variabele versterking te hebben. De audiocodec kan het volume digitaal regelen voor een breed scala aan uitgangsvermogen.

Een gebied dat vaak over het hoofd wordt gezien is de bulkcapaciteit. Als er audio wordt afgespeeld, kan het zwaar aan de stroomrails trekken. Als er niet genoeg capaciteit op de printplaat aanwezig is, kan de uitgangskwaliteit dramatisch worden aangetast en kan het geluid samen met verschillende andere ongewenste geluiden een tweeledig karakter krijgen. Dit kan worden gedetecteerd door de stroomrails tijdens het testen zorgvuldig te controleren. Het is geen slecht idee om tijdens de ontwikkeling van de printplaat extra footprints op de printplaat achter te laten, zodat verschillende capaciteitswaarden kunnen worden uitgeprobeerd om het uitgangscircuit af te stemmen.

Tips en trucs voor het selecteren en gebruiken van een audiocodec

Audiocodecs kunnen de ingebedde software drastisch vereenvoudigen en zorgen voor een toepassing met een geweldige geluidskwaliteit. Audiocodecs kunnen lastig zijn als een ontwikkelaar er niet eerder mee heeft gewerkt. Om met succes gebruik te maken van een audio-codec, zijn er verschillende "tips en trucs" teams moeten in gedachten houden, zoals:

  • Gebruik de DMA-functie (Direct Memory Access Controller) in een microcontroller om de audiocodec met minimale CPU-interventie te voeden. Dit zal helpen om ervoor te zorgen dat de codec niet wordt "uitgehongerd" voor gegevens.
  • Wanneer het geluid niet wordt afgespeeld, gebruik dan de codecs dempingsfunctie om te voorkomen dat laag niveau van het uitgangsgeluid de luidspreker bereikt.
  • Wanneer u het afspelen uitschakelt of inschakelt, gebruikt u de soft mute functie van een audiocodec om te voorkomen dat de luidspreker gaat knallen en andere ongewenste ruis ontstaat.
  • Gebruik een terminalapplicatie om de codec-registers uit te voeren nadat de codec is geïnitialiseerd. Dit kan vooral nuttig zijn bij het debuggen van problemen of bij het afstellen van het uitgangscircuit en de behuizing van de luidsprekers.
  • Maak gebruik van de interne digitale filtermechanismen die in een codec zijn opgenomen. De digitale filters stellen een ontwikkelaar in staat om de output te egaliseren, ongewenste hoge en lage frequenties uit te filteren en de kwaliteit van het geluidssysteem te maximaliseren.
  • Vergeet niet dat het afstemmen van het geluid alleen nuttig is wanneer de printplaat en de luidspreker in de behuizing zijn geïnstalleerd, want de behuizing en de montage maken een groot verschil.

Om te beginnen kunnen ontwikkelaars experimenteren met de MAX9867EVKIT+ evaluatiekit voor Maxim Integrated's MAX9867 (Afbeelding 5).

Afbeelding van Maxim MAX9867EVKIT+ evalkit voor de MAX9867Afbeelding 5: De MAX9867EVKIT+ evalkit voor de MAX9867 wordt aangesloten op een PC via een USB-kabel en is voorzien van RCA-ingangen, koptelefoonuitgangen en fiberoptische zend- en ontvangstmodules. (Bron afbeelding: Maxim Integrated)

De kit bestaat uit het bord en de bijbehorende software en is geconfigureerd voor het verzenden en ontvangen van audiodata met behulp van de Sony/Philips digitale interface (S/PDIF), maar kan ook worden ingesteld op het gebruik van I2S. Het heeft twee RCA-ingangsaansluitingen, twee 3,5 millimeter (mm) analoge uitgangsaansluitingen voor koptelefoons en fiberoptische ontvangst- en zendmodules. De software is compatibel met Windows en wanneer de software via een USB-kabel op een PC wordt aangesloten, opent deze in een grafische gebruikersinterface (GUI) waarmee de ontwikkelaar kan experimenteren met de instellingen van de MAX9867 (Afbeelding 6).

Afbeelding van op Windows gebaseerde GUI (klik om te vergroten)Afbeelding 6: Met behulp van de op Windows gebaseerde GUI kunnen gebruikers experimenteren met een breed scala aan MAX9867-instellingen, te beginnen met Clock en Digital Audio (geselecteerd tabblad), tot aan Registers 1 en Registers 2 (rechts). (Afbeelding: Maxim Integrated)

Conclusie

Embedded systeemgebruikers zijn gewend geraakt aan kwaliteitsaudio tot het punt dat het nu wordt verwacht in plaats van buzzers en pieptonen voor alarmen, waarschuwingen en andere gebruikersaudiofeedback. Dit legt de verantwoordelijkheid bij de ontwikkelingsteams om MP3-afspeelmogelijkheden in hun systemen te implementeren. Dit kan op het eerste gezicht een complexe onderneming lijken. Echter, door het gebruik van de juiste audio codec naast een microcontroller, en door het volgen van een aantal design best practices, kunnen ontwikkelaars de kosten en de complexiteit in verband met audio applicaties in balans brengen.

Referenties

  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.

Achtergrondinformatie over deze auteur

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo is een embedded software consultant. Hij heeft meer dan 200 artikelen over embedded software ontwikkelingstechnieken gepubliceerd, is een veelgevraagde spreker en technische trainer en heeft drie universitaire graden, waaronder een Masters of Engineering bij de University of Michigan.

Over deze uitgever

De Noord-Amerikaanse redacteurs van DigiKey