STM32F4 - Audioausgabe realisieren?

OP #7495350
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?

#7495371
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.)

#7495378
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.

#7495385
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.

OP #7495495
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren