ESPuino - bestückte Platine // BETA-Version

Hallo zusammen,

ich habe mich die letzten Tage und Wochen mal hingesetzt und eine ESPuino Platine nach meinen(!) Wünschen und Vorstellungen designed.
Heraus gekommen ist das Folgende:

Ich habe meine Wünsche, zum Teil aber auch Anregungen der Community, einfließen lassen. Bei der Platine handelt es sich um eine erste Beta Version.
Da ich keinen Elektroschrott in China produzieren lassen will, ist die Platine mit 2-3 überflüssigen Bauteilen ausgestattet, die im späteren Design vermutlich wegfallen werden. Eigentlich ein Widerspruch in sich selbst - wo ich da so gerade beim Tippen drüber nachdenke…

Grundlegendes zur Funktion:

  • WRover

  • UART CP2102 - war eine Preis/Leistungsentscheidung

  • USB Type B - ich finde ihn robust

  • Unterstützt wird der RC522, ich führe allerdings 2 Pins (I2C) raus, die erstmal nicht benötigt werden. Hier könnte der PN5180 zusätzlich angeschlossen werden?!

  • Die Platine ist mit derzeit 4(!) LDOs ausgestattet. Der UART LDO ist nur aktiv, falls ein USB Kabel gesteckt ist. Er versorgt den CP2102 - dieser wird im Akku Betrieb nicht benötigt. Ein 2. versorgt die Audio Komponenten, ein Dritter die Peripherie (RC522, SD-Card, wahlweise Encoder, NEO-Ring). Nummer 2 + 3 werden im Deepsleep über PIN22 abgeschaltet (hoffentlich :grinning:) Der 4te LDO bleibt an. Die Entscheidung, die Spannungsversorgung zu trennen, ist aufgrund von Störgeräusch-Minimierung getroffen. Zusätzlich sind hinter den LDO Ausgängen Ferrit-Perlen (ist das so im deutschen korrekt?) zur Entstörung vorhanden.

  • Kopfhöreranschluss schaltet den Class D Amplifier ab, ein zusätzlicher PIN vom ESP wird nicht benötigt - die Kopfhörerbuchse habe ich noch von einem „anderen“ Projekt zu hause :wink:

  • Die Mosfet Schaltung sollte überflüssig sein - falls die ME6211 Lösung nicht funktioniert kann über Jumper die Abschaltung der Komponenten über die MOSFETS erfolgen (Stichwort Elektroschrott)

  • Batteriespannungs-Messung ist drin

  • Batteriebetrieb über LiPos - TP4056 + zusätzliche BatteryProtection über einen DW01A+G

  • Maße 88x72mm

  • Verbrauch im DeepSleep - kA :innocent:

Wie oben schon erwähnt, ist das Board noch in einer Beta-Phase, daher erstmal diese etwas spärlichen Informationen. Die ein oder andere Funktion wird sicherlich noch verändert werden.

Ideen und Anregungen sind gerne willkommen :slight_smile:
Viele Grüße
Stefan

Zusatz:
Die Bestückung könnte über JLCPCB erfolgen, allerdings gibt es dort keinen TF-Card Leser und ein Handbestückung ist bei einer geringen Anzahl an Platinen unwirtschaftlich - somit müssten alle Konnektoren (JST und Dupont), USB Buchse, Kopfhörer Buchse und halt TF-Card Leser selbst aufgelötet werden. Der Preis einer solchen Platine bewegt sich bei 20€ pro Stück bei Abnahme von 5 Platinen.

6 „Gefällt mir“

Du meinst das jetzt aber so, dass man dann nicht i2c verwendet sondern stattdessen RST + BUSY für PN5180 hat. Oder? Weil i2c kann der PN5180 nicht.

Der GPIO ist bei meinen PCBs rein zur Funktion des Abschaltens auch nicht erforderlich. Es belegt bei mir nur deswegen einen GPIO, weil ich damit die Maximallautstärke limitieren kann. Und zwar getrennt für MAX und Kopfhörer. Und dafür muss der µC natürlich wissen, wenn ein Kopfhörer eingesteckt ist. Braucht man das nicht, dann kann man sich den GPIO natürlich sparen - klar.

1 „Gefällt mir“

Ja, RST und BUSY meine ich…

Die Lautstärke des Kopfhörers kann über 2 Jumper über die HPGain Pins „rudimentär“ eingestellt werden…

Was für einen DAC hast du jetzt eigentlich verwendet? Oder habe ich es überlesen?

Hi

Ich denke das ist zu wenig . Die Kopfhörer unterscheiden sich doch enorm . Vielleicht wäre ein Mäuseklavier 4 oder 5fach angebracht aber auf jeden Fall ist die Version die Lautstärkeanpassung wie gehabt per Software zu machen die 1.Wahl. Und Pins gibt es bald genug .

zu Stereo Endstufe : wie machst du das bei Monobetrieb ? Ich kenne nicht viel von Class-D und deshalb habe ich da schon vor einiger Zeit oft und lange danach gegoogelt .

  1. Ich habe noch keine gescheite Schaltung gefunden wie man für Mono die beiden Endstufen in Brückenschaltung betreiben kann , weil
  2. ich gelesen habe , dass Class-D-Verstärker immer einen angeschlossenen Lautsprecher haben müssen , also ein Kanal bei Mono nicht offen bleiben darf. Bei Class-D gehört der Lautsprecher zum Betrieb unbedingt dazu . Ist ja letztendlich ein Schaltnetzteil.

Ich weiß nicht ob das so richtig ist und auch bei den kleinen Chips gilt . Vielleicht hat ja jemand eine Antwort .

Deshalb sehe ich 2 Endstufen-IC´s vor . Bei Mono dann am Eingang die Ausgänge des DAC mit 2 Widerständen / Kondensatoren parallel schalten und den anderen Kanal nicht bestücken .

BTW , USB-B ist TOP !!! Ich würde nicht anderes nehmen , gestützt auf die Erfahrung nach ca. 2,5 Jahren Enkelbetrieb mit dem Tonuino

Den PCM5102…

Den Port-Expander habe ich bisher nicht berücksichtig, ich war zu weit fortgeschritten - aber ich gebe dir recht.

Die Frage hat sich mir bisher ehrlicher Weise nicht gestellt. Ich habe in meinen bisherigen (3) Boxen jeweils 2 Lautsprecher verbaut. Da bot sich Stereo an. Da denke ich nochmal drüber nach.

Danke auf jeden Fall für deine Gedankenanstöße :slight_smile:

Noch gibt’s von mir auch keinen Code, den man testen könnte, hehe. Aber kommt noch.

Ich könnte es eh nicht testen, habe keinen zu Hause… :wink:

Das ist ja interessant und darüber habe ich noch gar nicht nachgedacht.
Ich habe bei meinen Tests bisher immer nur einen Lautsprecher angeschlossen. Grundsätzlich funktioniert das. Aber Du meinst, dass es langfristig nicht „gut“ ist für den Amp?

Um einen Kanal bei der Ausgabe nicht zu verlieren, müsste man das doch über I2S Parameter setzen können, oder? Inter-IC Sound (I2S) - ESP32 - — ESP-IDF Programming Guide latest documentation

Interessant , werde ich mit meinem Kopfhörerverstärker testen

…wobei mir dabei gerade einfällt, dass es dann ja für die Kopfhörer doof ist, wenn alles Mono wäre.

Ja, habe ich auch schon gemerkt . Da muss ein #define für Mono/Stereo rein und ein Umschalten bei headset detected . Wenn es funktionieret werde ich den Chefentwickler mal antriggern .

Hi

Mit war bisher nicht aufgefallen das der Code per Default nur Mono spielt , erst eben nach dem Hören eines Stereo/Mono Tests. Das hört man ja auch nur über die Kopfhörerplatine .
Hallo @biologist , kannst du das bestätigen ?

Ich habe mal im Code folgendes geändert :

#// Function to play music as task
void playAudio(void *parameter) {
static Audio audio;
bool m_f_forceMono; //neu
m_f_forceMono = false; //neu
audio.forceMono(m_f_forceMono); //neu
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
audio.setVolume(initVolume);

Jetzt geht auch Stereo und der Klang ist jetzt mit Kopfhörer richtig gut . Ich wundere mich , dass dies noch niemand bemerkt hat . Mit der Zeile m_f_forceMono = false; könnte man dann bei gestecktem Kopfhörer auf Stereo umschalten

1 „Gefällt mir“

Im Prinzip war mir das klar, ich habe mich jedoch, wenn ich ehrlich bin, nie groß drum gekümmert :slight_smile: Ich kann das allerdings gerne als Direktive aufnehmen. Wobei die Frage ist, was Sinn macht.

Meine Vermutung wäre, dass man beim Kopfhörer immer Stereo will, es jedoch beim Lautsprecher gerne konfigurierbar haben möchte. Muss ich mal schauen, ob man das im Betrieb auch ändern kann, aber ich würde es mal vermuten.

Die Idee kam ja auf wegen der Verwendung einer Stereoendstufe für zukünftige Boards .
Also wie du schon vorgeschlagen hast per #define wählbar und für Kopfhörer immer Stereo . Damit sollte alles abgedeckt sein . Das vereinfacht auch wieder die künftige Hardware , werde meine neue Schaltung anpassen .

Ich habe heute leider keine Zeit mehr sonst würde ich das schon ändern . Zum finalen Test müsste ich dann aber den HeadsetPin ablöten , sonst ist ja immer Stereo . Ich denke aber es wird funktionieren .

Dann ist es also sogar schon in der lib?!
Super, Danke fürs Testen.

@StefSo hast du einen verpolschutz vorgesehen? Im tonuinoforum haben einige die AIO gekillt, da sie den Akku falsch angeschlossen haben. Das wäre auch ein Beitrag um elektroschott zu vermeiden (ich weiß, wenn man vorsichtig ist, dann braucht man das nicht)
Eine Suppressordiode zum überspannungsschutz wird wahrscheinlich nicht gebraucht

Hey,

ich hoffe - ich habe es nicht explizit reingeschrieben, aber dem DW01+G steht noch ein FS8205 zur Seite. Dieser sollte den Verpolungsschutz bereitstellen.

Viele Grüße
Stefan

1 „Gefällt mir“

@StefSo Kann man dieses Projekt irgendwo online finden?