Hur man väljer och använder en ljudcodec och microcontroller för inbäddade ljudåterkopplingsfiler

Av Jacob Beningo

Bidraget med av DigiKeys nordamerikanska redaktörer

Det finns ett växande behov för inbäddade system att leverera högkvalitativt ljud för användaråterkoppling istället för sumrar, såsom larm och varningar. Pip och kvitter har varit effektivt tidigare, men nu förväntar sig användare avancerade ljud som bara kan produceras genom att spela ljud från filformat, som t.ex. MP3. Problemet är att ljuduppspelning kan upplevas som krångligt och lägger på extra kostnader och komplexitet till ett system. Den första instinkten är att hitta en microcontroller som kan spela MP3-filer, men detta lägger ofta på kostnader för komponenter och medför en avsevärd komplexitet i den inbäddade programvaran.

En lösning som är särskilt bra för att balansera merkostnaden och mjukvarukomplexiteten är att använda en ljudcodec. Ljudcodecar mottar inte bara en ljuddataström från en microcontroller, de har också ofta flera funktioner som gör att utvecklaren noggrant kan ställa in uppspelningssystemet för att förbättra kvaliteten på ljudet som spelas upp.

Denna artikel tar upp ljudcodecarnas roll, de viktigaste egenskaperna som utvecklare bör ta hänsyn till när de gör ett val av codec och hur de kan användas effektivt. Lösningar frånAKM Semiconductor, Texas Instruments ochMaxim Integrated introduceras och används som exempel här,även om det förstås också finns fler. Den avslutas med tips och knep för hur man kan påskynda utvecklingen av ljuduppspelningsapplikationer med hjälp av en codec, samtidigt som systemkostnaden sänks.

Vad är ljudcodecar?

En ljudcodec är en hårdvarukomponent som kan koda eller avkoda en digital dataström som innehåller ljudinformation1. En ljudcodec är användbar eftersom den gör det möjligt att sköta ljudbehandlingen utanför microcontrollern. Detta kan avsevärt minska mjukvarukomplexiteten och gör det också möjligt att använda en billigare och enklare microcontroller i en tillämpning.

En typisk ljudcodec innehåller flera funktionella block:

  • Ett I2S-gränssnitt för att sända eller ta emot kodad, digital ljuddata.
  • Ett I2C-gränssnitt för att konfigurera och läsa ljudcodecens styrregister.
  • En mikrofoningång som är ansluten till en A/D-omvandlare.
  • Minst en ljudutgångskanal, såsom en högtalarutgång, men de flesta inkluderar också en linjeutgång och kan inkludera flera högtalarutgångar för stereouppspelning
  • Ett digitalt block som innehåller högpass-, lågpass-, bandspärr- och equalizer-filter för att ställa in ljudbild för uppspelning och inspelning.

Ett exempel på en ljudcodec som är mycket populär till följd av sin låga kostnad och många ljudfunktioner är AK4637EN, en 24-bitars ljudcodec från AKM Semiconductor (figur 1). AK4637EN har alla dessa funktioner och dessutom en signalgeneratoringång som kan användas för att generera ett pip med hjälp av en PWM-signal (pulsbreddsmodulering) vid önskad frekvens.

Diagram över AKM Semiconductors ljudcodec AK4637EN med mono-högtalarutgång (klicka för att förstora)Figur 1: AK4637EN är en ljudcodec med monohögtalarutgång som har uppspelnings- och inspelningsfunktioner. Den innehåller ett internt ljudblock som kan användas för att filtrera inkommande och utgående ljud för att förbättra ljudkvaliteten. (Bildkälla: AKM Semiconductor)

Utvecklare kommer att upptäcka att den huvudsakliga skillnaden för en ljudcodec är om den matar ut mono- eller stereoljud, samt att de har olika digitala blockfunktioner. Exempelvis erbjuder AK4637EN ett högpassfilter, ett lågpassfilter, en fyrbandsequalizer, en auto-utjämningskanal och en enbandsequalizer. Det senare kan användas som ett bandspärrfilter. Hur en utvecklare ställer in dessa digitala filter kan dramatiskt påverka hur ett system låter.

Ljudcodecar kan ibland skrämma en utvecklare som är nybörjare inom ljuduppspelning. Ta exempelvis AK4637EN, som är en enkel ljudcodec: databladet visar att den ändå har 64 konfigurerbara register. Det kan tyckas som mycket i början, men de flesta av dessa register används för att ställa in filterkoefficienterna för de olika digitala filter som är tillgängliga. Bara en handfull behöver användas för att få systemet att mata ut ljud ordentligt, vilket gör drivkretsutvecklingen för en ljudcodec mycket enklare än en nybörjare kanske tror.

Att välja ljudcodec

En av de viktigaste drivkrafterna för att fatta beslut inom produktutveckling är kostnaden, och ljudcodecar är inte annorlunda härvidlag. Det är ändå viktigt att ha i åtanke att man som utvecklare får vad man betalar för, så när det gäller ljud måste ett team noggrant väga konstruktionskraven mot de viktigaste lösningsparametrarna.

Den första faktorn att överväga är det önskade ljudet från ljudcodecen. Det finns flera olika alternativ. Exempelvis har AK4637EN en linjeutgång och en monohögtalarutgång. Det finns andra codecar, som Texas Instruments stereoljudcodec TLV320AIC3110IRHBR som kan driva två högtalare med 1,29 watt (figur 2).

Diagram över TI TLV320AIC3110IRHBR är en ljudcodec med stereoutgång och förstärkning (klicka för att förstora) Figur 2: TI TLV320AIC3110IRHBR är en ljudcodec med stereoutgång och förstärkning utöver en mikrofoningång. Codecen kan driva 1,29 watt från interna förstärkare och har programmerbara digitala ljudblock. (Bildkälla: Texas Instruments)

Andra ljudkodecar som Maxim Integrateds MAX9867 är konstruerade för att bara driva ett par hörlurar (figur 3). MAX9867 har de typiska digitala I2S- och I2C-gränssnitten, men innehåller också stereomikrofoningångar och två linjeingångar som kan väljas digitalt.

Diagram över Maxim Integrateds ljudcodec MAX9867 Figur 3: Maxim Integrateds ljudcodec MAX9867 kan styra stereohörlurar och välja mellan digital-, mikrofon- och linjeingångar. (Bildkälla: Maxim Integrated)

Att välja mellan dessa tre lösningar för vad utgångstypen ska vara (eller till och med ingången) är ett kritiskt tidigt beslut.

Utvecklarna måste tänka över vad det är de vill driva. Ska ljudcodecen direkt driva hörlurar, en högtalare eller ett par högtalare, och vad behöver utgångseffekten vara? Om systemet ska driva en 5 W-högtalare finns det inte många codecar för inbäddade system som gör det. Istället kan en utvecklare då välja line out och använda en separat Klass-D-förstärkare för att driva högtalaren direkt. Detta sparar en del kostnader samtidigt som det ger flexibilitet i konstruktionen.

De två sista aspekterna är den interna signalbanan och de digitala filtreringsfunktionerna. Häri ligger den verkliga differentieringen och kostnadsskillnaderna ljudcodecar. TLV320AIC311IRHBR har exempelvis funktioner för sprakdämpning och mjukstart för att minimera högtalarsmällar och möjliggöra en smidig övergång till ljuduppspelningen. Den har också en intern mixer för varje utgångskanal och digital volymkontroll.

Det är upp till utvecklaren att noggrant balansera behoven från ljudcodecen mot komponentlistan och mängden kortutrymme som upptas av kretsarna.

Ljuduppspelningssystemet

När man arbetar med en ljudcodec är det viktigt att inse att det finns flera olika block utanför codecen som är nödvändiga för att lyckas få till en välljudande uppspelning. De exakta blocken varierar något beroende på tillämpningen och den metod som valts för uppspelning, men ett generaliserat diagram visas i figur 4.

Diagram över allmänt kopplingsblockschema för ett ljuduppspelningssystem Figur 4: Ett generellt kopplingsblockschema för ett ljuduppspelningssystem i en typisk inbäddad applikation visar att det måste finnas lagring för ljudfiler, som kan finnas på microcontrollern eller på externt minne. (Bildkälla: Beningo Embedded Group)

Det finns flera punkter i detta diagram som är värda att diskutera. Först måste det finnas en metod som används för att lagra ljuduppspelningsfilerna. Det finns två alternativ för detta: lagra filerna internt i microcontrollerns flashminne eller lagra dem externt i flashminnet. Valet beror på hur stora ljudfilerna är och hur stort det interna flashminnet är på microcontrollern.

Utvecklare måste också tänka på vilket ljuduppspelningsformat som ska användas. Det vanligaste är att använda MP3. I detta fall måste den valda microcontrollern ha en programvarustack som stöder MP3-avkodning. Detta gör att MP3-filen kan öppnas och sedan matas ut med hjälp av en DMA-styrenhet (Dynamic Memory Access) via I2S-gränssnittet. Även I2S-porten kan konfigureras för master/slave och flera andra lägen, så detta måste undersökas noggrant för att säkerställa att datan överförs till codecen med rätt hastighet.

Som nämndes ovan kan det hända att en extern ljudförstärkare behövs eller inte behövs, beroende på tillämpning. En typisk codec ger cirka 1 till 1,5 watt, vilket är användbart för att köra en liten högtalare. För att driva en högtalare på 3 watt eller större måste man använda en extern förstärkare. De vanligaste att använda är, som nämnts, klass D. Förstärkaren behöver inte nödvändigtvis ha variabel förstärkning heller. Ljudcodecen kan justera volymkontrollen digitalt för att ge ett brett effektspektrum på utgången.

Ett område som ofta förbises är bulkkapacitans. När ljud spelas upp kan det belasta matningskällorna avsevärt. Om det inte finns tillräckligt med kapacitans på kortet, kan utgångskvaliteten påverkas dramatiskt och kan ge ett plonkigt ljud samt med flera andra oönskade ljud. Detta kan upptäckas genom att noggrant övervaka matningsreferensnivåerna under testningen. Det är ingen en dum idé under kretskortsutveckling att lämna extra utrymme på kortet så att olika kapacitansvärden kan testas för att ställa in utgångskretsarna.

Tips och tricks för att välja och använda en ljudcodec

Ljudcodecar kan dramatiskt förenkla den inbäddade programvaran och resultera i en produkt med fantastisk ljudkvalitet. Ljudcodecar kan vara svåra om en utvecklare inte har arbetat med dem tidigare. För att framgångsrikt kunna använda en ljudcodec, finns det flera tips och knep att tänka på, exempelvis:

  • Använda DMA-funktionen (Direct Memory Access Controller) i en microcontroller för att mata ljudcodecen med minimal intervention från microprocessorn. Detta bidrar till att codecen inte "svälter" av databrist.
  • När ljud inte spelas, använd codecens mute-funktion för att förhindra att lågt brus når högtalaren.
  • När du inaktiverar eller aktiverar uppspelning, använd en ljudcodecs mjuka avstängningsfunktion för att förhindra högtalarsprak och annat oönskat brus.
  • Använd en terminalapplikation för att mata ut codec-registren efter att codecen har initierats. Detta kan vara särskilt användbart när du försöker felsöka problem eller justera högtalarens utgångskretsar och inkapsling.
  • Utnyttja de interna digitala filtermekanismerna som ingår i en codec. De digitala filtren gör det möjligt för att en utvecklare kan jämna ut utdata, filtrera bort oönskade höga och låga frekvenser och maximera ljudkvaliteten från systemet.
  • Glöm inte att inställning av ljudet bara kommer vara meningsfullt när kretskortet och högtalaren är installerade i höljet, eftersom höljet och infästningen gör enorm skillnad.

För att komma igång kan utvecklare experimentera med MAX9867EVKIT + utvärderingssatsen för Maxim Integrateds MAX9867 (figur 5).

Bild på Maxims MAX9867EVKIT + utvärderingssats för MAX9867Figur 5: MAX9867EVKIT + utvärderingssats för MAX9867 ansluts till en PC via en USB-kabel och har RCA-ingångar, hörlursutgångar och fiberoptiska sändnings- och mottagningsmoduler. (Bildkälla: Maxim Integrated)

Satsen består av kortet och tillhörande programvara och är konfigurerad för att skicka och ta emot ljuddata med Sonys/Philips digitala gränssnitt (S/PDIF), men det kan också ställas in för att använda I2S. Den har två RCA-ingångar, två 3,5 mm analoga hörlursuttag och fiberoptiska mottagnings- och sändningsmoduler. Programvaran är Windows-kompatibel och när den är ansluten till en dator via en USB-kabel öppnas den i ett grafiskt användargränssnitt (GUI) genom vilket utvecklaren kan experimentera med MAX9867:s inställningar (figur 6).

Bild av det Windows-baserat gränssnittet (klicka för att förstora) Figur 6: Med hjälp av det Windows-baserade gränssnittet kan användare experimentera med ett stort antal MAX9867-inställningar, med början i Clock and Digital Audio (vald flik), hela vägen till Register 1 och Register 2 (höger). (Bildkälla: Maxim Integrated)

Slutsats

Inbäddade systemanvändare har vant sig vid kvalitetsljud så mycket att det nu helt enkelt förväntas, snarare än surr och pip för larm, varningar och andra former av ljudsignaler. Utvecklingsteam känner sig därför starkt manade att implementera MP3-uppspelningsfunktioner i sina system. Detta kan till en början upplevas som en komplex utmaning. Men genom att använda rätt ljudcodec tillsammans med en microcontroller och genom att följa några välkända tips och etablerad konstruktionspraxis, kan utvecklare balansera kostnaderna och komplexiteten i samband med ljudtillämpningar.

Referenser

  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 är konsult inom inbäddad programvara. Han har publicerat över 200 artiklar om utveckling av inbäddad programvara, och är en eftertraktad talare och teknisk utbildare med tre examina, däribland en master i teknik från University of Michigan.

Om utgivaren

DigiKeys nordamerikanska redaktörer