Forum: Mikrocontroller und Digitale Elektronik STM32F4 - Audioausgabe realisieren?


von Z.B. Max Z. (oapc)


Lesenswert?

Ich möchte einen STM32F4 gerne für die Ausgabe eines Audiosignals 
verwenden (ein einzelner Kanal, also nichts aufwändiges). Jetzt sehe ich 
folgende Möglichkeiten:

- der integrierte DAC hat nur eine Auflösung von 12 Bit, was doch eher 
lausig ist und deswegen wegfällt

- zwei der internen DACs kombinieren um eine höhere Auflösung zu 
erreichen, dürfte wohl eher nicht funktionieren, da der Übergang vom 
ersten DAC zum zweiten, aufsummierenden DAC (4096facher Ausgangswert für 
die oberen Bits) vermutlich nicht sauber zu justieren ist

- das Audiosignal in ein hochfrequentes PWM konvertieren und dieses über 
einen Tiefpass verstärken scheitert ebenfalls an der geringen 
Timerauflösung

- es gibt Audio-DACs mit I2S-Interface und 24 Bit Auflösung (z.B. 
PCM1780), allerdings benötigen die zusätzlich ein Clock-Signal mit ganz 
dubiosen Eigenschaften (eine spezielle Frequenz, die ein Vielfaches der 
Samplefrequenz des Audiosignals ist UND gleichzeitig synchron zum Clock 
des I2S-Signals getaktet ist) - keine Ahnung, wie ich die hinbekommen 
sollte

- "richtige" DACs mit SPI-Eingang sind horrend teuer

- ein anderes Signal (z.B. SPDIF) ausleiten und das auf eine externe Box 
(aka Verstärker) geben, ist keine Lösung, da ich eben keinen separaten 
Verstärker haben möchte

So, was nun? Gibt es noch irgend eine Möglichkeit, die ich übersehen 
habe?

von Jörg H. (idc-dragon)


Lesenswert?

I2S wäre schon am standardmäßigsten für Audio.
Was für einen Controller verwendest du denn genau? Hat der eine 
I2S-Peripherie?
Hier hat jemand ein Audiogerät aus einem STM32F405 gebaut:
https://github.com/JonasNorling/guitarboard

Selbst wenn kein I2S existiert kann man das vielleicht mit einem USART 
bauen. Kenne mit konkret mit STM32 nicht aus, aber habe das mal für 
einen 8-Bit Atmel ATmega32 gebaut.

Der ominöse Takt nennt sich MCLK - Master Clock. Nicht alle DAC-Chips 
brauchen den. Er ist ein vielfaches vom Bitclock und der Samplerate Fs, 
üblicherweise Fs*256|384|512. Die Phase spielt keine Rolle. Die Chips 
verwenden den intern für ihren Modulator, falls nötig.

Wahrscheinlich brauchst du keine bestimmte standardmäßige Sample Rate, 
wenn dich nur das analoge Audio interessiert. Bei meinem ATmega-Projekt 
brauchte ich den MCLK, dafür habe ich dann meinen eh existierenden 
externen Clock genommen, den USART mit passendem Teiler betrieben und 
die Samplerate ergab sich daraus. (War glaube ich 20MHz/384 = 
52,083kHz.)

: Bearbeitet durch User
von Dirk E. (dirk_1980)


Lesenswert?

Das I2S-Interface ist da schon die richige Wahl.
Da du I2S als Hardware hast und vermutlich auch den Master spielst 
brauchst Du dich nur indirekt um die ganzen Signale zu kümmern.

Das kommplizierte ist da eigentlich die Einstellung der Schnittstelle 
und dann die Daten per DMA double buffer zu senden.
Dafür gibt es aber einige gute leicht zufindene Beispiele.

Ich hatte mal für so was eine billiges board gekauft, das teil brauchte 
nicht mal die Masterclock. Finde nur gerade die Platine nicht.

von Johnny B. (johnnyb)


Lesenswert?

Z.B. Max Z. schrieb:
> So, was nun? Gibt es noch irgend eine Möglichkeit, die ich übersehen
> habe?

Ein STM32F4 ist nicht unbedingt dafür gemacht, grosse Datenmengen 
herumzuschieben, so wie Du es anstrebst (16-Bit mit 44.1kHz, geringer 
Jitter interpretiere ich in etwa aus Deiner Beschreibung). Natürlich ist 
es realisierbar (mit PWM Ausgabe sollte doch irgendwie realisierbar 
sein), aber macht meiner Meinung nach nicht gross Sinn.
Ich würde seitens STM32F4 mit komprimierten Audiodaten hantieren wie 
z.B. MP3-Dateien und die per DMA an einen externen Chip schicken, 
welcher den Stream decodiert und analog oder digital (I2S) weiterreichen 
kann.

: Bearbeitet durch User
von Z.B. Max Z. (oapc)


Lesenswert?

Johnny B. schrieb:
> Ein STM32F4 ist nicht unbedingt dafür gemacht, grosse Datenmengen
> herumzuschieben, so wie Du es anstrebst

Große Datenmengen fallen nicht an, tatsächlich erzeugt/konvertiert der 
STM32F446 nur einzelne Samples und schiebt die dann gleich wieder raus. 
Speicher bzw. die Datenmengen ist also nicht das Problem, nur der Weg, 
die Daten wieder in ein Analogsignal zu verwandeln.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Z.B. Max Z. schrieb:
> - der integrierte DAC hat nur eine Auflösung von 12 Bit, was doch eher
> lausig ist und deswegen wegfällt

So lausig sind 12Bit auch nicht. Nimm den integrierten DAC.

Gruss
WK

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.