Kopfhörerplatine basierend auf UDA1334 / PJ306b

Hallo @biologist was ist der Unterschied zu I²S Stereo Decoder Breakout Board - Adafruit | Mouser oder darf man das KiCad Projekt anschauen? Überlege dies mir auf meiner Audio-Platine mit den zwei MAX98357 zu integrieren.

Zwei Unterschiede
a) Die verwendete Buchse erkennt nicht, ob was eingesteckt ist. Problem: Steckst du was ein, dann hast du out-of-the-box keine Möglichkeit, den Lautsprecher automatisch auszuschalten.
b) Auf dem Board ist nur der DAC aber kein Verstärker drauf. Also man kann da einen Kopfhörer einstecken und hört auch was, aber allzu sehr kannst das nicht belasten - das verzerrt dann (das beschreibt Adafruit auch).

Kurz gesagt: Diese Platine eignet sich primär als LineOut zur Ansteuerung eines externen Verstärkers. Für Kopfhörer nur so bedingt.
Das Adafruit-Modul kriegt man übrigens auch als Nachbau: Page Not Found - Aliexpress.com. Hab’s auch 2mal hier; als Lineout funktioniert das fein. Nutze das selbst im Keller für einen ESP32, auf den ich per BT streame; der hängt dann an einem Verstärker.

Also ich denke in meinem Tun hier bin ich ziemlich transparent und teile+beschreibe auch sehr viel, aber das gehört zu den wenigen Sachen, die ich nicht rausgeben möchte. Im Endeffekt, das kann ich aber sagen, ist es ein Befolgen der Datenblätter von UDA1334 (DAC) und dem TDA1308 (Amp), wobei ich mich in Sachen UDA1334 eher am Schaltplan von Adafruit orientiert habe (der aber auch nur punktuell von dem von NXP abweicht).

Ok vielen Dank für die Antworten

1 „Gefällt mir“

Hier übrigens nochmal eine Info, wie die Kopfhörerbuchse funktioniert. Damit wird vielleicht nochmal die Funktion von R17 klarer, den ich im Rahmen des Aufweck-Problems mit dem Port-Expander beschrieben habe.

Hinweise:

  • Das Symbol des PJ306b zeigt diesen im Ruhezustand. D.h. SW1 und SW1_O sind miteinander verbunden (O = open). Steckt man den Stecker ein, so ist SW1 mit SW1_C verbunden (C = closed). Das ist ein potentialfreier Schalter, den ich auf GND gelegt habe.
  • Es gibt mit SW2 noch einen zweiten potentialfreien Schalter, den ich jedoch nicht benutzt habe.
  • HP_DETECT hängt an JP1.2. Über JP1 entscheidet man nun, welche Schaltlogik man braucht. In meinem Falle hätte ich gerne im nicht eingesteckten Zustand HIGH auf HP_DETECT und im eingesteckten Zustand LOW. Deswegen setze ich die Lötbrücke JP1.2 + JP1.3 und benötige R16.
  • Würde ich nun die umgekehrte Schaltlogik brauchen, so würde ich JP1.1 + JP1.2 brücken. Getestet habe ich das jedoch nie.
  • R17 und R19 bestücke ich nicht. Die 100k hatte ich einfach nur mal angenommen und passen wahrscheinlich, wenn man sie braucht, eher nicht.
  • MAX98357a und UDA1334 verhalten sich hinsichtlich mute exakt gegensätzlich. Da man hier gegensätzliches Verhalten möchte, werden sie identisch angesteuert.
  • Über R_out und L_out kann man das Signal auch durchschleifen. Das ist im Ruhezustand der Fall und wird unterbrochen, wenn der Stecker eingesteckt ist. Benutze ich aber bei dieser Kopfhörerplatine nicht.

Hallo @biologist , endlich WE Zeit weiter zu machen.
Werde mir dies mal anschauen und dieses WE hoffentlich den groben Entwurf fertig haben.

Denke dies liegt daran dass man im Stereo Mode SD anders beschalten muss.
PCM Operating with two drivers,

TDM MODE: SD/(EN)==Vdd, Gain=> GND for channel0 && Vdd for channel 1,Gain is 12dB

Jetzt wäre natürlich wichtig welcher Mode wird im diesem Projekt benutzt???

Eigentlich hat das Thema gar nicht unbedingt etwas mit der Kopfhörerplatine zu tun. Jedoch natürlich schon, wenn man HP_DETECT der Kopfhörerplatine direkt auf SD des MAX führt. Insofern lasse ich es hier mal stehen.

Also ich habe zu diesem Thema eben nochmal eine Runde gelesen, da ich das bisher noch nicht getan habe. Finde es bei einem einzigen Lautsprecher auch nicht so arg dramatisch, aber gut, ich kann auch der Argumentation folgen, dass man es nicht schlechter machen muss als notwendig, wenn es mit einfachen Mitteln machbar ist.

Ein paar Fakten zum MAX:

  • Das Breakout-Board von Adafruit (und die Nachbauten) verwenden einen PullUp-Widerstand von 1M zwischen SD und VDD. Dies soll, wenn nichts an SD angeschlossen ist, bei 5V VDD stereo mit sich bringen.
  • Der MAX besitzt einen internen Pulldown-Widerstand mit 100k.
  • SD < 0.16 V ist Standby
  • SD zwischen 0.16 und 0.77 V ist stereo
  • SD zwischen 0.77 und 1.4 V ist rechts
  • SD größer 1.4 V ist links

Da werde ich in Verbindung mit meinem PCB für den Lolin D32 pro mal Tests machen. Hier sind MAX.SD und HP_DETECT voneinander getrennt und per Port-Expander angeschlossen. Ja, ein Spannungsteiler müsste es hier eigentlich tun. Aktuell liegen beim genannten PCB auf jeden Fall 3.3 V an, was dann links bedeutet.

@Ringer Ich denke, dass wir hier PCM verwenden.

JA stimmt passt bedingt hier her, aber ganz falsch ist es nicht.
Werde bei mir HP_DETECT über den Port Expander machen, da ich jedoch Pro Kanal einen eigenen MAX will bin ich zufällig darüber gestolpert und denke es hilft für alle zum Allgemeinen Verständnis.
Hier noch ein anderes Schaltungsbeispiel, hier sieht man die möglichen Beschaltungen:
@SZenglein : wie @biologist schon geschrieben hat ~1 MOhm @5V bzw. ~630KOhm @3,3V würde dein Problem lösen wenn sonst an SD nichts angeschlossen ist.

Ansonsten muss man mit Widerstände in „Serie“ arbeiten wie bei meinem oberen Bild um einen Spannungsteiler abhängig des Signals Levels zu haben siehe @biologist

  • SD < 0.16 V ist Standby
  • SD zwischen 0.16 und 0.77 V ist stereo
  • SD zwischen 0.77 und 1.4 V ist rechts
  • SD größer 1.4 V ist links

@SZenglein Irgendwie wundert es mich, dass bei 1,6 V ein Stereosignal rauskommt, wenn das Datenblatt sagt, dass es dafür 0,16 bis 0,77 V braucht. Nachvollziehen kann ich die 1,6 V bei 10/10k jedoch (siehe nachfolgende Rechnung). Aus meiner Sicht ist die Anordnung so:


R1 + R2: Externer Spannungsteiler
R3: Widerstand auf MAX-PCB (1 M)
R4: Interner Pulldown des MAX (100 k)
=> Lässt man R1 + R2 komplett weg (also nicht 0 Ohm sondern weg), dann müssten an R3 3 V abfallen und an SD demnach 0,3 V anliegen. Das müsste dann ein Stereosignal sein im „Auspackzustand“, da es zwischen 0,16 und 0,77 V liegt.

Berechnung für 10k/10k-Spannungsteiler:
Parallelschaltung Rp1= R1 + R3: 9901 Ohm
Parallelschaltung Rp2 = R2 + R4: 9091 Ohm
Gesamtwiderstand Rges = Rp1 + Rp2 = 18992 Ohm
Iges = U / Rges = 3,3 V / 18992 Ohm = 1,737 * 10^-4 A
Spannung Up1 = Iges * Rp1 = 1,72 V
Spannung Up2 = Iges * Rp2 = 1,58 V <= um diese Spannung geht es und das passt sehr gut zu den gemessenen 1,6 V.

Ich hätte jetzt gedacht, dass R1 eher sowas wie 51k sein müsste. Daraus ergäbe sich gemäß meiner zuvor beschriebenen Rechnung:
Up1: 2,8 V
Up2: 0,5 V <= um diese Spannung geht es und das wäre schön zwischen 0,16 und 0,77 V

Für den Fall Standby haben wir im linken Zweig keine 3.3 V sondern GND. Aus meiner Sicht muss man sich R1 dann runtergeklappt auf GND vorstellen. D.h. wir haben dann einen Spannungsteiler bestehend aus R3 und einer Parallelschaltung aus R1 + R2 + R4. Dabei fließt ein Strom von 3,275 x 10^-6 A, was an R3 zu einem Spannungsabfall von 3,275 V führt. Dementsprechend müssten es für Usd 0,025 V sein. Das würde dann zu < 0,16 V passen.

Oder habe ich was übersehen?

grafik

sieht alles richtig aus :muscle:

btw gibt es von der 3,5mm Buchse auch eine zum Anschrauben? (also vorne da wo der Klinkenstecker rein kommt)

Da hat sich meine Ausbildung als Energieelektroniker (anno 1997 bis 2000) also gelohnt :joy:. War mal wieder schön, es von Hand zu rechnen, hehe.

Du meinst damit man so einen Ring hat, um das Ganze von außen zu kontern? Also gesehen habe ich sowas schon (ob mit Schaltkontakt weiß ich nicht), nur der Punkt ist, dass die Länge des „Halses“ eher für Blech oder dünnen Kunststoff gedacht ist. Das kann man bei Holz zB natürlich passend rausfräsen, um die Wandstärke dem anzupassen, aber dann sehe ich das Problem, dass der Kram irgendwann rausbricht.

ist bei mir ähnlich lange her :rofl:
(2001-2004 Ausbildung, dann Studium)

richtig genau sowas finde ich „Kinder-gerchter“ kann ich bei mir halt einfach festschrauben, mein Gehäuse ist ja der gelbe Koffer von Manufactum…

Ich denke die benotigten Spannungen sind anders wenn die Refernzspannung nur 3.3V beträgt. Bei mir haben jedenfalls die Datenblattwerte nicht mehr gestimmt, die sind aber auch auf 5V ausgelegt.

Ich habe meinen Spannungsteiler eher als solchen betrachtet und wegen der Größenordnung den 100k unf 1M Widerstand vernachlässigt. Halbiert dann eben ungefähr 3,3V und ergibt ca 1.6V.

Die Werte sind demnach auch nicht groß errechnet, sondern ausprobiert.

Also ich habe eben nochmal einen Blick ins Datenblatt geworfen (diesmal nicht in das von Adaruit sondern das von Max Integrated). Da steht auf Seite 17 eine Empfehlung von 634k als PullUp-Widerstand bei 3,3 V. Das wäre zusammen mit dem internen 100k-Pulldown eine Spannung von 2,85 V am Pullup, so dass an SD 0,45 V anlägen. Also das kommt schon sehr gut in die Ecke von dem, was ich oben beschrieben habe mit den 0,5 V bei einem Spannungsteiler von 51 zu 10 k.

Braucht man einen Spannungsteiler oder reicht ein PullUp?
Gut, jetzt sind die 1M auf dem MAX-Board halt drauf, die möchte ich nicht auslöten. Würde ich jetzt nur einem PullUp-Widerstand (R1) arbeiten wollen (R2 wäre dann weg), dann bräuchte ich, um aus der Parallelschaltung zwischen R1 und 1M (R3) die 634 k zu erreichen, 1,73 M als R1. Problem: Über so einen großen Widerstand kriegt man den Kram, wenn der Kopfhörer eingesteckt ist, natürlich nicht mehr ausgeschaltet. Das ist dann quasi wie unbeschaltet. Ergo: Keine Lösung wenn 1 M eingelötet bleibt.

Daraus entnehme ich:
a) Ich wundere mich weiterhin, warum die 1,6 V bei dir zu einem Stereoeffekt führen.
b) Man braucht, wenn man ein- und auschalten können will, auf jeden Fall einen Spannungsteiler und nicht einfach nur einen PullUp. Das gilt zumindest mal dann, wenn man die 1 M drin lässt (was ich auf jeden Fall möchte).
c) Ich werde es zuerst mit 51 zu 10 k versuchen. Wenn das nicht klappt und mit 10 / 10 k aber schon, dann werde ich es unter „Theorie ist halt keine Praxis“ verbuchen :joy:.

Den Spannungsteiler habe ich in erster Linie genommen da ich keinen großen passenden Widerstand hatte um den internen Pulldown zu verwenden.

Zur Spannung bei mir kann ich auch nichts sagen, ist auch ein board von Adafruit, also nicht von einem Dritterhersteller. Fand die Spannung auch ungewöhnlich hoch auf 1.6V für stereo, aber wesentlich niedrigere Werte haben eben nicht funktioniert…

Hast du denn mal die Spannungswerte bei deinem Board durchprobiert?

Bisher nicht. Das geht auch gar nicht ganz so einfach, da die 3.3 V ja aus dem Port-Expander kommen. An so einen Pin kriegst ja schlecht was drangelötet. THT-Widerstände (56 und 10 k) habe ich hier, das wäre kein Problem. Also ja, ich kann mir da schon was einfallen lassen, aber ich wollte eh noch nen PCB machen - da plane ich den Spannungsteiler einfach mit ein.

:grin: :grin: :grin: :grin: :grin:
Kommen wohl alle aus der gleichen Ecke
Ausbildung als Energieelektroniker 1998 bis 2001 und danach Studium

So, die neue Platine kam heute an und ich habe den Spannungsteiler mit 51/10k getestet.
Ergebnisse:

  • Ohne eingesteckten Kopfhörer liegt an SD 0.538 V an. 0.5 V hatte ich zuvor ausgerechnet, das passt also gut.
  • Ist ein Kopfhörer eingesteckt, so geht der Lautsprecher aus.
  • Stereo funktioniert. Habe es mit http://www.aoakley.com/articles/stereo-test.mp3 getestet.

Fein :+1:.

Damit bringe ich das hier mal zu einem Abschluss, da das eigentlich mit der Kopfhörerplatine ja nur bedingt zu tun hat.
Ab jetzt geht es hoffentlich wieder mit Diskussionen zur Kopfhörerplatine weiter :grin:.