Can Kosar

Kategorie: Elektronik (page 1 of 4)

STM32 SAI Konfiguration

STM32 besitzt je nach Chipvariante eine serielle Audio-Schnittstelle SAI. Durch diese Schnittstelle kann über übliche Protokolle mit Audio-Codecs kommuniziert werden.

Audio-Clocks

Das Codec und die SAI-Schnittstelle müssen synchronisiert werden. Dabei gibt es konkrete Vorgaben bzw. Randbedingungen seitens Codecs.

  • Audio-Abtastfrequenz F_s wählen.
  • Den Multiplikator k_{MCLK} (Codecs haben oft Multiplikatortabellen z.B. 256 oder 512 bei 48kHz) wählen.
  • Daraus die erforderliche Master-Clock-Frequenz berechnen. (Oft F_{MCLK}F_s \cdot k_{MCLK})
  • Master-Clock-Quelle konfigurieren (Externer Quarz bzw. interne Clockquellen)

Übertragung

Unter dem Aspekt gibt es (wie für viele andere Hardwarekomponenten) hauptsächlich drei Möglichkeiten eine Codec-Schnittstelle zu steuern bzw. auszulesen:

  1. Normaler Modus (Blockierend)
  2. Interrupt-Modus (Nicht-blockierend)
  3. Per DMA auslesen (Nicht-blockierend)

Bei einer echtzeitkritischen Audio-DSP-Anwendung kommt nur DMA-Schnittstelle in Frage. Die Konfiguration der Software und Hardware ist hier beschrieben.

SAI und DMA Konfiguration

Beim Flex 500 ist feste 48kHz Abtastrate gewählt. Bei CS4272 kann der Multiplikator 256 oder 512 gewählt werden. Um auch zukünftig 96kHz zu unterstützen wurde hierbei 512 gewählt. Zu Stabilitätszwecken wurde für einen externen Quarz entschieden. Die Frequenz des Quarzes berechnet sich also als

(1)   \begin{equation*} F_{MCLK}=F_S \cdot k_{MCLK} = 48000 \cdot 512 = 24,576 MHz \end{equation*}

In dem Fall ist der Codec der Master und generiert den Bitclock. Der DSP ist Slave und erhält den Bitclock und dazugehörige Streams.

Die Konfiguration sieht folgendermaßen aus:

Low level Treiber: (*_hal_msp.c)

SAI Konfiguration

Starten vom Treiber

DMA Interrupts setzen die Flags. Die Software Architektur ist hier beschrieben.

Die CODEC-Treiber sind hier beschrieben:

CS4272 CODEC-Schnittstelle für Nucleo H743

WM8731 CODEC-Schnittstelle für Nucleo H743

Ressourcen

Der vollständige Code vom Communication Stack befindet sich auf den Repositories vom Controller und DSP unter den Ordnern „hw„.

DSP – Targetcode vom herunterladen

Controller- Targetcode vom   herunterladen

STM32 ADC: Expression-Pedal Steuerung

STM32 hat je nach Chipvariante einen oder mehrere Analog-Digital-Wandler (ADC).

Der ADC konvertiert die am analogen Eingang anliegende Spannung in einen binären Wert. Dafür braucht er allerdings ein Paar Zyklen- je nach Einstellung aber mindestens um die 3 Zyklen. Zudem läuft ADC mit niedrigerer Frequenz als der Cortex-Kern. Man muss also wissen, dass eine Konvertierung einige Prozessorzyklen lang dauert.

Unter dem Aspekt gibt es (wie für viele andere Hardwarekomponenten) hauptsächlich drei Möglichkeiten einen Analog-Digital-Wandler zu steuern bzw. auszulesen:

  1. Normaler Modus (Blockierend)
  2. Interrupt-Modus (Nicht-blockierend)
  3. Per DMA auslesen (Nicht-blockierend)
Normaler Modus

In diesem Modus läuft das Sampling im Hauptprogramm. Das heisst, man triggert das Sampling an, wartet(!) darauf, dass das Sampling fertig ist und macht weiter im Hauptprogramm. Das bedeutet viele verlorene Zyklen und darf nur in Ausnahmefällen bzw. in nicht leistungskritischen Applikationen eingesetzt werden.

Interrupt Modus

Im Interrupt-Modus stößt das Hauptprogramm das Sampling an und macht weiter mit seinen Aufgaben. Wenn das Sampling fertig ist, löst die ADC-Hardware einen Interrupt aus. Mit Hilfe dieses Interrupts kann dann dem Hauptprogramm mitgeteilt werden, dass nun das Register den neuen Digitalwert beinhaltet.

DMA MODUS

Im DMA-Modus schaufelt die DMA-Hardware im Hintergrund die ADC-Werte. Dabei wird die ADC-Hardware in den kontinuierlichen Modus gesetzt. Das heißt, sie fängt gleich mit dem nächsten Sampling an, wenn sie mit einem fertig ist. Das ist oft der effizienteste Modus.

 

Beim Projekt Flex 500 wird z. B. das Expression-Pedal mit einem ADC interrupt-gesteuert gelesen. Der Grund dafür ist, dass man die Frequenz mit einem Timer einstellen möchte.  Die ADC-Hardware ist folgendermaßen konfiguriert. Das

Nach jedem Lesezyklus triggert man dabei das nächste Sampling. Das Interrupt wird dabei allerdings nicht benutzt, da der Zyklus kurz ist und das Interrupt sonst das Hauptprogramm unnötig oft unterbrechen würde.

Andere Möglichkeit wäre eben per DMA, dass man dabei die Hardware nur starten und stoppen muss:

Die Konfiguration des Timers ist folgendermaßen. Bei einer CPU-Frequenz von 216MHz ergibt sich eine Timerfrequenz von:

(1)   \begin{equation*} f_{TIM3}= \frac{216\cdot 10^6}{(1600+1)*(10000+1)} \approx 13.5Hz \end{equation*}

Ressourcen

Der vollständige Code vom Communication Stack befindet sich auf den Repositories vom Controller und DSP unter den Ordnern „hw„.

DSP – Targetcode vom herunterladen

Controller- Targetcode vom   herunterladen

DSP<->Controller Kommunikation

Die Hardwarearchitektur vom Flex 500 ist hier beschrieben. Die Kommunikation zwischen DSP und Controller läuft über eine SPI-Schnittstelle. Auf der Controller-Seite werden Mitteilungen interrupt-gesteuert gesendet, da die Mitteilungen von mehreren Instanzen aus geschickt werden können und DMA zu ständigen Unterbrechungen auf der DSP Seite führen würde.

Auf der DSP-Seite wird die Mitteilung, die über SPI-Schnittstelle erhalten werden, mit DMA an den Programmspeicher kopiert. Danach wird ein Interrupt ausgelöst, wonach der DSP den Befehl verarbeiten kann.

Die Struktur der Mitteilung

Die Struktur der Mitteilung ist im folgenden dargestellt.

  • Bank Id: Die ID der Effekt-Bank.
  • Type: Der UI-Controller type, der sich geändert hat: Encoder oder Button
  • Id: Der ID des UI-Controllers (Button number oder Encoder number)
  • Data: Data in (Float, 32bit, 16bit, 8bit mit oder ohne Vorzeichen)

Die Übertragung der Mitteilung

Die Mitteilung liegt im Programm im Typ „union“, der die Typen

  • Float
  • 32bit unsigned
  • 16bit unsigned
  • 8bit unsigned

beinhaltet.

Daten dieses Typs müssen über SPI übertragen werden. Dabei wird der Vorteil genutzt, dass sowohl Sender als auch der Empfänger gleiche Endianness benutzt. (Beide Cortex-M7) Das heißt, wir können einfach den Speicherbereich, wo die Mitteilung liegt, schicken. Dann castet der Empfänger auf dieselbe Union zurück und die Daten liegen in der erwünschten Struktur beim Empfänger an.

Code vom Sender

wobei ctrl_tx des Typs „Unions“ ist.

Code vom Empfänger

Ressourcen

Der vollständige Code vom Communication Stack befindet sich auf den Repositories vom Controller und DSP unter den Ordnern „com„.

DSP – Targetcode vom herunterladen

Controller- Targetcode vom   herunterladen

Hardware Architektur – Verteiltes System

Übliche Systemarchitektur eines Audioprozessorsystems wie das vom Flex 500 ist ein verteiltes System. Die Aufgaben werden dabei auf mehrere Prozessoren verteilt. Bei einer leistungs- und echtzeitkritischen Anwendung wie ein Audio-Prozessor ist das oft unverzichtbar.

Hardware-Architektur

Die Hardware-Architektur vom Flex 500 ist im folgenden Bild gezeigt:

Audio-DSP

Spezialisierte Audio-DSP-Chips

Der Kern eines typischen Audio-Prozessors ist ein DSP-Chip. Lange Zeit wurden dafür ausschließlich dafür konzipierte Audio-DSPs, wie z.B. die von Texas Instruments und Analog devices eingesetzt. Die Audio-DSPs haben Befehlsätze, die für Audiodatenverarbeitung typisch sind und eine effiziente hardwaregestütze Verarbeitung der Daten ermöglichen. Dazu gehören viele spezialisierte SIMD-Befehle. (Single Instruction Multiple data) wie MACs (Multiplier+Accumulator). Diese ermöglichen schnelle Verarbeitung von z.B. Biquad-Filtern, ein sehr verbreitetes digitales Filter oder aber auch viele andere Algorithmen, wo sequentielle Multiplikation und Addition-Folgen größerer Daten nötig ist.

MehrZweck-Mikroprozessoren (General purpose Microprocessors)

Mittlerweile sind die Leistung und die Befehlssätze der Mikroprozessoren rasant gestiegen. Heutzutage sind viele Prozessoren mehrere Hundert Megahertz schnell getaktet und bieten u. a. DSP-Einheiten für SIMDs und Gleitkommazahl-Einheiten (FPUs). Aufgrund ihrer breiten Verfügbarkeit und vielseitiger Einsatzmöglichkeiten jenseits der Audio-Verarbeitung, sind die Mehrzweck-Mikroprozessoren zu einer echten Alternative gegenüber der herkömmlichen Audio-DSPs geworden.

Ein Spitzenreiter unter denen ist die Prozessoren auf Basis von ARM Cortex-M7. Diese Prozessoren sind bis zu 600MHz getaktet, besitzen DSP und FPU Einheiten. Ein Vergleich von Cortex-basierten Prozessoren gegenüber der herkömmlichen, verbreiteten Produkte von Texas Instruments und Analog devices ist im folgenden Artikel detailliert aufgeführt:

Choosing the best processor for your DSP application

DSP capabilities of Cortex Processors

In diesen Studien ist sichtbar, dass die High-End Spezialprozessoren für manche spezialisierte Tasks wie MAC-Leistung immer noch die Nase vorne haben. Allerdings sind die Cortex Prozessoren auch sehr leistungsfähig und können ihre Stärken bei allgemeineren Tasks spielen, wofür die Spezialprozessoren keine HW-Unterstützung anbieten.

Aus den genannten Aspekten wurde für den Flex 500 ein STM32H743 mit 400MHz Taktrate, DSP und FPU-Einheiten gewählt.

Controller-Chip

Ein Controller-Chip übernimmt oft alle sonstigen Aufgaben wie die allgemeinen Verwaltungsaufgaben, GUI-Steuerung, Anzeige etc. Die Echtzeitansprüche an den Controller-Chip ist niedrig, dafür muss er viele Tasks abarbeiten. DSP und Controller-Chips unterscheiden sich voneinander vor allem in deren Softwarearchitektur.

Der DSP-Chip muss mehrere Tasks schedulen und abarbeiten. Eine Middleware wie FreeRTOS ist dafür sehr gut geeignet, wenn die Komplexität und die Tasks steigt. Man kann auch „Bare-metal“ programmieren und eigenen Scheduler schreiben.

Je nach benötigter Leistung und Peripherien kann man einen Mikroprozessor wählen, der diese Aufgaben erledigt. Auch hierbei  ist ARM Cortex-M sehr gut geeignet und verbreitet.

Beim Flex 500 muss der Mikrocontroller

  • GUI Inputs und Outpus managen
  • Eine kleine Grafikbibliothek treiben
  • Kommunikation zum DSP aufbauen.
  • Expression-Pedal und Fußschalter treiben
  • Sonstige HW steuern (Leistungsstufe etc.)

Als Controller von Flex 500 ist der STM32F767 von ST gewählt, der mit 216MHz Taktfrequenz und zahlreiche Schnittstellen all diese Aufgaben erledigen kann. Für diesen Zweck ist vermutlich auch ein kleinerer Cortex-M4 vollständig ausreichend.

Display-Treiber

Der Controller-Chip ist von der Prozessorleistung her sehr stark und besitzt  auch ein Display-Treiber. Allerdings ist die verfügbare interne RAM mit 512 sehr knapp für Grafikanwendungen. Um die interne RAM für sonstige Aufgaben freizuhalten, ist ein externer Display-Treiber gewählt.

Die Lösung für Display hängt stark von Anforderungen an. Eine sehr gute Übersicht ist im folgenden Paper von ST verfügbar:

LCD-TFT display controller (LTDC) on STM32 MCUs

Beim Flex 500 ist ein Display mit integriertem Chip ILI9341 eingesetzt.

 

Flex 150 – Analoger Bassgitarrenverstärker

Flex 150 ist ein Experimentierprojekt für die Umsetzung eines analogen 150W-Class-AB-Bassgitarrenverstärkers.

 

Unter dem Bastelgehäuse stecken:

  • 150W-Class-AB-Verstärker
  • Kleinsignalstufe mit EQ und Compressor
  • 200W lineares Netzteil für die Leistungsstufe
  • 30W lineares Netzteil für die Kleinsignalstufe

Ressourcen

Die Design- und Simulationsressourcen von diesem Projekt können hier heruntergeladen werden:

Flex150 Leistungsverstärker LTSPice Simulationsdateien herunterladen.

Flex 150 KiCAD-Designdateien herunterladen.

150W Class-AB Verstärker-Design

Das Design eines 150W-Mono-Class-AB-Verstärkers ist im folgenden dokumentiert. Dieser Verstärker ist im Bassgitarrenverstärker-Projekt Flex 150 eingebaut.

Architektur

Open-Loop vs. Closed-Loop Architektur

Die ersten Verstärker hatten eine „open-loop“-Architektur, d.h. sie waren offene Steurung, die aus einer Spannungsverstärker- (Voltage amplifier stage) und einer Stromverstärkerstufe bestand.

Die Spannung wurde durch einfache Transistor (oder Röhren-)schaltungen verstärkt. Das allein bringt sehr bescheidene Ergebnisse. Der wirkliche Durchbruch bei Audio-Verstärkern ist durch die Einführung der „Closed-Loop“-Verstärkern erreicht. Das heißt, der ganze Verstärker war ein Regelkreis. Da die Spannungs- und Stromverstärkerstufen sehr hohe Verzerrungen aufweisen (s. Beitrag zu VAS) ist Ausgangssignal abgezweigt, skaliert und vom Eingangssignal abgezogen. Diese neue Stufe hieß Differenzverstärker und die Architektur sah folgendermaßen aus:

Das heißt, die Fehler, die durch VAS und Puffer entstehen, sind wieder in den Eingang negativ zurückgeführt, dass diese wieder ausgebügelt werden.

Komponenten

Differenzverstärkerstufe

Die Differenzverstärkerstufe ist in diesem Beitrag erklärt und die Dimensionierung berechnet.

Spannungsverstärkerstufe

Die Spannungsverstärkerstufe ist in diesem Beitrag erklärt und die Dimensionierung berechnet.

Stromverstärkerstufe und Rückkopplung

Eine sehr gute Quelle, in der das Leistungsverstärkerdesign ausführlich erklärt wird ist das praktische Standardwerk vom Bob-Cordell: Designing Audio power amplifiers.

150W Class-AB Verstärker

Für die praktische Umsetzung sind die Ressourcen eines hochwertigen 150W-Class-AB Verstärkers verfügbar, der im Projekt Flex 150 eingebaut ist.

Ressourcen

Die Leistungsstufe im Projekt Flex-150 ist ein Class-AB Verstärker entwickelt mit min. 150W Dauerlast. Spitzenlasten liegen weit höher, da das Design auf linearem Netzteil basiert. Die Design- und Simulationsressourcen von diesem Projekt können hier heruntergeladen werden:

Flex 150 Bassgitarrenverstärker

Flex 150 Leistungsverstärker LTSPice Simulationsdateien herunterladen.

Flex 150 KiCAD-Designdateien herunterladen.

DSP Architektur

Ein DSP-FX benötigt jitter-freie Verarbeitung der Audiodaten in Echtzeit.  Echtzeit ist ein theoretischer und dehnbarer Begriff, der die erforderliche Systemlatenz beschreibt. Beim Audio beruht diese Feststellung auf die Latenzwahrnehmung des Menschen. Wir nehmen die Latenzen unter 10ms als Echtzeit wahr. Die Latenz der gesamten Kette (Roundtriplatenz) ist die Zeit zwischen dem Eintreten des Signals in die Codec-Eingänge bis zur Bereitstehung des verarbeiteten Signals an Codec-Ausgängen. Diese Zeit darf 10ms nicht überschreiten. Am besten soll diese Zeit sogar noch unter 10ms liegen, da auch der Schall zwischen den Lautsprechern und dem Ohr zusätzlich große Latenz erzeugt und Echtzeiterlebnis schnell beeinflusst werden kann.

Systemarchitektur

Die Übersicht der Systemarchitektur des DSPs vom Flex 500 ist im folgenden Diagramm gezeigt:

Codec

Ein Audio- Codec (Coder, decoder) ist die Komponente, die die analogen Audio-Signale ins Digitale wandelt und die digitalen Audio-Signale ins Analoge wandelt. (Sampling) Er besteht aus einem oder mehreren Analog-Digital-Wandlern (ADC) und ein Digital-Analog-Wandlern (DAC). Nach diesem Schritt liegen die Audio-Signale in einem digitalen Audio-Format vor, im vorliegenden Fall als I2S-Format (Intersound).

Die Codecs müssen konfiguriert und initialisiert werden. Das erfolgt über eine andere serielle Schnittstelle, üblicherweise SPI oder I2C. Das heißt, der Codec hat auch eine Steuerschnittstelle zum DSP. Beim Flex 500 stehen beide Schnittstellen zur Verfügung.

SAI

SAI (Serial Audio Interface) ist eine Schnittstelle, über die digitale Audio-Daten ausgetauscht werden können. Der Codec kommuniziert mit der SAI-Schnittstelle vom DSP-Chip, in dem Fall STM32H743. Diese Schnittstelle serialisiert und deserialisiert die Audiodaten, D.h. er schreibt/liest die in den bzw. von dem Arbeitsspeicher.

 

DMA

Das Schreiben bzw. Lesen muss über eine DMA (DIrect memory access)-Hardware-Komponente erfolgen. DMA ist eine einfache Hardware, die die Aufgabe hat, ein Register in das andere zu kopieren. Die Startaddresse, FIFO, IRQs und die Länge müssen dabei konfiguriert werden. Dadurch dass DMA die Datenübertragungsaufgabe übernimmt, kann sich DSP auf die Datenverarbeitung konzentrieren.

DMA muss so konfiguriert werden, dass er ein Interrupt auslöst, wenn die Puffer

  • halb voll und
  • ganz voll

sind. Dadurch können die Flags der Zustandsmaschine (State machine) gesetzt werden.

Puffer

Das vom Audio-Codec ins digitale I2S-Format gewandelte Audio-Signal muss in einem Eingangspuffer zwischengespeichert werden. Dann wird dieses Puffer vom DSP verarbeitet und das Ergebnis in ein Ausgangspuffer geschrieben. Die Größe der Puffer ergibt sich aus dem Kompromiss aus zwei Anforderungen:

  1. Die Puffer muss so klein wie möglich sein, um eine nicht-wahrnehmbare Latenz zu erreichen.
  2. Die Puffer müssen so groß wie möglich sein, um eine effiziente blockweise Datenverarbeitung zu ermöglichen (Overhead muss reduziert werden)

Bei den Anforderungen

  • Roundtrip-Latenz = 10ms
  • Abtastrate f_S= 48kHz
  • Bittiefe = 32bit

ergibt sich eine Puffergröße von 240 für jeweils Eingangs- und Ausgangspuffer mit 32bit Registern, da Eingangslatenz und Ausgangslatenz 5ms betragen müssen.

Für die Verarbeitung mit DMA-Interrupts wird ein Doppelpuffer der Größe 480 verwendet. Für genaue Erkläreung, siehe unten.

Zustandsmaschine

Die Zustandsmaschine ist die Hauptsteuerungskomponente  in der Software. Durch die Interrupts von DMA wird der Software mitgeteilt, dass das Puffer halb oder ganz voll ist. Nun kann die Zustandsmaschine, die in Endlosschleife läuft, entscheiden, ob der Prozess getriggert werden soll.

 

Die auf STM32 eingesetzter DMA unterstützt Double-buffering. Das heißt, er kann auf der Hälfte und am Ende der Übertragung ein Interrupt auslösen. Deshalb müssen wir das Doppelpuffer nicht selbst managen.

Der Ablauf sieht folgendermaßen aus:

  1. Erste Hälfte vom RX fertig ( Ab nun beschreibt DMA die zweite Hälfte)
  2. Erste Hälfte vom TX fertig ( Ab nun beschreibt DMA die zweite Hälfte)
  3. Zustandsmaschine löst die Verarbeitung der ersten Hälfte aus. Jetzt liest DSP von der ersten Hälfte von RX und beschreibt die erste Hälfte von TX.
  4. Zweite Hälfte vom RX fertig ( Ab nun beschreibt DMA die erste Hälfte)
  5. Zweite Hälfte vom TX fertig ( Ab nun beschreibt DMA die erste Hälfte)
  6. Zustandsmaschine löst die Verarbeitung der zweiten Hälfte aus. Jetzt liest DSP von der zweiten Hälfte von RX und beschreibt die zweite Hälfte von TX.
  7. Zurück zu 1.

Man erkennt, dass zwischen den RX und TX interrupts ein kleiner Versatz ist. Zwar synchronisiert der Codec die ADCs und DACs aber trotzdem entstehen ein kleines Offset von ein paar Samples. Um den Jitter zu verhindern, müssen beide Interrupts ausgewertet werden, um sicherzugehen, dass in der zu verarbeitenden Hälfte wirklich nichts mehr beschrieben bzw. gelesen wird.

Implementierung

Zuerst müssen die Stati initialisiert werden.

 

Die Hauptroutine, die Endlosschleife der Verarbeitung wird folgendermaßen implementiert:

Die Flags tx_status und rx_status wurden in Interrupt Routinen gesetzt und hier (nach der Verarbeitung) wieder geresettet.

Wichtig: Die Interruptroutine muss so schnell wie möglich ablaufen, da diese höchste Priorität hat und alles pausiert. Hier nichts verarbeiten, sondern nur Flags setzen, die dann in der Hauptschleife verarbeitet werden.

 

 

WM8731 CODEC-Schnittstelle für Nucleo H743

Die WM8731 ist ein Budget-Klasse-Stereo Audio-CODEC von Cirrus Logic für mobile Applikationen. Es unterstützt 24bit Bittiefe, bis zu 96kHzAbtastrate und besitzt einen dynamischen Bereich vom 90db für ADC und 100dB für DAC .

Für Flex 500 wurde ein Breakout-Board für WM8731 entwickelt, das man direkt auf ein Nucleo Board stecken kann.

Board-Design

Folgendes auf Referenzdesign basiertes Design wurde für das Breakout board entwickelt.

Analoge Ein- und Ausgänge

Da WM8731 für mobile Anwendungen mit knappem Platz entwickelt ist, kommt es ohne zusätzlichen Eingangs- und Ausgangsstufen klar. Dafür unterstützt es nur unsymmetrische Ein- und Ausgänge.

Dafür hat es einen integrierten Kopfhörerverstärker. Auf dem Board befinden sich Line-In/Out und Kopfhörer-Anschlüsse.

Oszillator

Ein 24,576 MHz Oszillator ist eingebaut und gibt den Takt an den Master-Clock.

Ressourcen

Die KiCad Schaltung- und PCB-Designdaten herunterladen

Kompletter Programmcode für H743-Target

CS4272 CODEC-Schnittstelle für Nucleo H743

Die CS4272 ist ein hochwertiges Stereo Audio-CODEC von Cirrus Logic für anspruchsvolle Implementierungen. Es unterstützt 24bit Bittiefe, bis zu 192kHz Abtastrate und besitzt einen dynamischen Bereich vom 114dB.

Für Flex 500 wurde ein Breakout-Board für CS4272 entwickelt, das man direkt auf ein Nucleo Board stecken kann.

PCB Design

CS4272 CODEC- Breakout board im Betrieb

Board-Design

CS4272 unterstützt 2x symmetrische Eingänge und hat 2x symmetrische Ausgänge.

Symmetrische Eingänge

Die Nutzsignale vom analogen Preamp-Board sind Wechselspannungen, da Preamp-Board symmetrische Spannungsversorgung von +-15V hat. Für die symmetrischen Eingänge muss das Signal vom Preamp-Board in einen Pegel von V_{pp}<5V gebracht werden. Danach muss eine Gleichspannung V_{alias}=2,5V addiert werden, damit das Eingangssignal in den erlaubten Bereich vom CS4272 0V\leq V_{i} \leq5V gebracht werden. Das wird in der untenstehenden Schaltung realisiert:

Bei diesem Design handelt es sich um das Referenzdesign von CS4272. Hierbei wird die Alias-Spannung V_{com}=2,5V auf die durch die Kondensatoren C_INAx entkoppelte Eingangsspannung addiert und ein Eingangspuffer hinzugefügt.

Symmetrische Ausgänge

Die analogen Ausgänge vom CS4272 symmetrisch und für weitere Verarbeitung desymmetriert werden. Das wurde mit folgender Schaltung realisiert.

Hierbei werden die symmetrischen Signale V_{OUT,A+} und V_{OUT,A-} in einer Stufe voneinander abgezogen. Danach wird mit dem Ausgangskondesator C_OUTA6 der Gleichstrom herausgefiltert. Schließlich arbeitet die ganze Schaltung auf einen Lastwiderstand von R_L=47k\Omega. Hierbei handelt es sich um das Referenz Design von CS4272.

Digitale Schnittstellen

Das Breakout-Board unterstützt SPI und I2C Schnittstellen zum Controller.

Initialisierungssequenz

Die Initialisierungssequenz von CS4272 ist im folgenden Code gezeigt.

Nach der Initialisierung kann das CODEC aktiviert und deaktiviert werden.

Der SAI von H743 muss folgendermaßen konfiguriert sein:

Oszillator

Ein 24,576 MHz Oszillator ist eingebaut und gibt den Takt an den Master-Clock.

Ressourcen

SPICE-Simulationsdateien zu analogen Schnittstellen für CS4272 herunterladen

Die KiCad Schaltung- und PCB-Designdaten herunterladen

Kompletter Programmcode für H743-Target

Flex 500 – Analoge Schnittstellen

Flex 500 besitzt u. a. folgende Schnittstellen:

  • Kopfhörerausgang
  • Symmetrischen Eingang (Balanced in)
  • Symmetrischen Ausgang (Balanced out)

Kopfhörerausgang

Kopfhörer können sehr niedrige Impedanzen von bis zu 16\Omega haben. D.h. für den Kopfhörerausgang ist ein Verstärker erforderlich, der Lasten bis 16\Omega bei Ausgangspegeln von V_{PP}=4V bedienen kann. Das bedeutet eine Effektivspannung von V_{eff}=\frac{4}{\sqrt{2}}=2,828, was wiederum bei einer R_L=16\Omega Last einer Effektivleistung von

(1)   \begin{equation*} P_{eff}=\frac{V_{eff}}{R_L}=\frac{2,828^2}{16}=0,5W \end{equation*}

Das entspricht einer Leistung, für die die Kleinsignalverstärker bzw. Opamps nicht ausgelegt sind. Man kann dafür

  • einen diskreten Verstärker mit Transistoren bauen
  • einen Kopfhörer-IC verwenden
  • einen Strompuffer verwenden

Bei Flex 500 wurde ein Strompuffer von TI, der BUF634 verwendet. Die Schaltung mit dem Baxandall-Lautstärkenregler ist unten dargestellt.

Der Strompuffer wird in die Rückkopplungsschleife gesetzt. Die Anwendung des Strompuffers ist hier beschrieben.

Zudem besitzt Flex 500 eine Erkennung des eingesteckten Kopfhörersteckers. Wenn der Stecker eingesteckt ist, wird die Masse vom Optokopplereingang getrennt und der Transistor wird hochohmig. Mit Hilfe dieses Ausgangs kann an einem Mikrocontroller erkannt werden, ob Kopfhörer eingesteckt ist und automatisch den Leistungsverstärker ausschalten.

Symmetrischen Eingang

Für die Beschallung externe Audioquellen wurde bei Flex 500 einen symmetrischen Eingang eingebaut. Dieser basiert auf einen IC von Texas Instruments, dem INA134.

Die Umsetzung ist unten dargestellt.

 

Symmetrischer Ausgang

Für eine geräuscharme Aufnahme ist die symmetrische Übertragung der Audio-Signale unerlässlich.  Deshalb wurde bei Flex 500 ein symmetrische Ausgang eingebaut. Dieser basiert auf einen IC von Texas Instruments, dem DRV135.

Die Umsetzung ist unten dargestellt.

Davor befindet sich ein Schalter, womit man die Signalquelle wählen kann, je nachdem ,ob man vor oder nach der Signalverarbeitung aufnehmen möchte.

Ground lift

Die symmetrischen Leitungen zeichnen sich aus zwei wichtigsten Gründen aus

  1. Die Störungen wirken auf beide Kabelader V_O und V_{O,inv) einigermaßen gleichmäßig, nach dem Differenzieren am Zielgerät eliminieren sie sich.
  2. Das Signal am Zielgerät muss nicht mehr von der Masse aus gemessen werden, sondern kann zwischen den beiden Signalleitungen V_O und V_{O,inv) gemessen werden.

Der zweite Punkt hat einen großen weiteren Vorteil, dass man dadurch nicht die Massen der beiden Geräte miteinander verbinden muss. Das Verbinden der Geräte kann nämlich zu Masseschleifen führen. Mit dem Ground-Lift kappt man die Masseleitung zwischen den Geräten, wenn man es nicht erwünscht.

Bei Flex 500 wurde sowohl der symmetrische Eingang als auch der symmetrische Ausgang mit einem Ground-Lift-Schalter vorgesehen.

SPICE-Simulationsdateien zu den analogen Schnittstellen herunterladen

KiCAD-Schaltung und PCB-Design herunterladen

ältestenposts

Rechte © 2024 Can Kosar

Mit Unterstützung von Wordpress, QuickLaTeX und Design von Anders NorenSeitenanfang ↑