Geräusch beim Start der Box, allerdings nicht bei jedem Start

Hallo zusammen, mich hat das Geräusch auch gestört und ich habe mal einen anderen Ansatz.
Ich schalte den Lautsprecher über einen Mosfet zu. Aufbau ist ein simpler N Kanal Mosfet mit Vorwiederstand, im Speaker 2 Pfad.
Über Pin 8 wird dieser im Setup zugeschalten.

Mein Tony nutzt ausschliesslich den DAC und nicht den DFPlayer-eigenen Verstärker. Dort tritt das Geräusch auch auf. Es liegt also nicht am Verstärker.

Hallo @Dennis,
ich komme zwar mehr von der Software-Seite, aber hier muss ich doch nachfragen:

Habe den 100uF Kondensator dann mal testweise direkt zw. + und - vom Lautsprecher gehängt…

Hast Du (oder jemand anders) Dir denn die Ausgangsstufe des Players vorher angeschaut?
Ich würde erwarten, dass der Lautsprecher mit Wechselspannung angetrieben wird, d.h. die Spannung am Lautsprecher ist also immer auch wieder negativ.Die Bezeichnung +/- an den Klemmen würde ich eher darauf zurückführen, dass z.B. im Stereo-Betrieb, beide Lautsprecher in Phase betrieben werden müssen und ein Verpolen einen Phasenversatz von 180° ergibt (aber wie gesagt, das ist nicht mein Gebiet).
Auf jeden Fall sehe ich die Gefahr dass der Elko zeitweise verpolt betrieben wird, was dazu führen kann, dass er platzt. Dabei treten giftige Gase aus, je nachdem können diese sogar heraus spritzen - ein Szenario, dass man weder im Kinderzimmer haben möchte, noch während man sich gerade über den Testaufbau beugt…
Ich erinnere mich auch daran, dass für Frequenzweichen bipolare Kondensatoren verwendet werden.

Wie gesagt: Ist nicht mein Fachgebiet und hängt sicherlich von weiteren Komponenten ab, aber ich wäre hier sehr vorsichtig!

Da bin ich ehrlich gesagt überfragt. Bin ja nur testweise so vorgegangen wie in diversen Foren beschrieben wurde.
Habe es dann aber wg. genannten Nachteilen verworfen.

Mein Vorschlag war etwas Voreilig hier veröffentlicht. Ich hatte das Gestern noch ausgiebig getestet und ein einfacher MOSFET schaltet den Lautsprecher nicht 100%ig ab.
Ich habe mich weiter informiert und bin auf die Möglichkeit gestoßen den MOSFET antiseriell zu verschalten. Das soll für Wechselspannungssignale geeignet sein. Ich teste das und werde weiter berichten.

Ich hab es gelöst!
Ein MOSFET war zu wenig, aber mit zweien gehts.
Antiserielle Schaltung heißt das, man lernt nie aus.
Hier mein Aufbau:

Im Programm schalte ich im Setup D8 zu und beim Ausschalten wieder ab. Die erste Sekunde in der der DFPlayer den Ton ausgibt, ist der Lautsprecher aus und das Störgeräusch nicht hörbar.

Ich überlege ob sich ein abschaltbarer Lautsprecher noch für etwas anderes eignet, aber mir fättl nichts sinnvolles ein :thinking:

3 Like

Das klingt gut.
Wären das hier die richtigen Bauteile?


Verbraucht die Box dadurch mehr?

Für Kopfhörer-Anschlüsse, die den Lautsprecher nicht selbst ausschalten?

Ja die habe ich verwendet und sie funktionieren ohne hörbare Einschränkung.

Ich wüsste nicht warum ein höherer Verbrauch zusatnde kommen sollte, da MOSFETs keinen Strom brauchen um zu Schalten, sondern nur Spannung.

Das mit dem Kopfhörer ist eine sehr gute Idee.

Das sind halt SMD Bauteile und relativ klein, ich weiß nicht ob es diese auch als THT gibt.
Aber löten geht, mit Pinzette und einer ruhigen Hand.

Wenn man sich andere aussucht, sollte man auf den Widerstand zwischen Drain und Source achten. Der sollte möglichst klein sein. Die von mir verwendeten haben 0, 45 Ohm. Ich habe auch welche mit 5 Ohm probiert, die haben sehr schlecht funktioniert.

1 Like

@marco-117

In welcher Zeile hast du deinen Code eingefügt? Hast du das mit delay gelöst, oder noch besser, kannst du dein Codeschnipsel hier reinschreiben? Wär echt cool, wenn das so funktioniert, und danke für deine Hilfe.

void setup() {
  mp3.begin(); 
  
  Serial.begin(115200); // Es gibt ein paar Debug Ausgaben über die serielle Schnittstelle
  
  pinMode(SpeakerOnPin, OUTPUT);
  digitalWrite(SpeakerOnPin, LOW);
  
  // Wert für randomSeed() erzeugen durch das mehrfache Sammeln von rauschenden LSBs eines offenen Analogeingangs
  uint32_t ADC_LSB;
  uint32_t ADCSeed;
  for(uint8_t i = 0; i < 128; i++) {
    ADC_LSB = analogRead(openAnalogPin) & 0x1;
    ADCSeed ^= ADC_LSB << (i % 32); 
  }
  randomSeed(ADCSeed); // Zufallsgenerator initialisieren

  // Dieser Hinweis darf nicht entfernt werden
  Serial.println(F("\n _____         _____ _____ _____ _____"));
  Serial.println(F("|_   _|___ ___|  |  |     |   | |     |"));
  Serial.println(F("  | | | . |   |  |  |-   -| | | |  |  |"));
  Serial.println(F("  |_| |___|_|_|_____|_____|_|___|_____|\n"));
  Serial.println(F("TonUINO Version 2.1"));
  Serial.println(F("created by Thorsten Voß and licensed under GNU/GPL."));
  Serial.println(F("Information and contribution at https://tonuino.de.\n"));

  // Busy Pin
  pinMode(busyPin, INPUT);

  // load Settings from EEPROM
  loadSettingsFromFlash();

  // activate standby timer
  setstandbyTimer();

  // DFPlayer Mini initialisieren
//  mp3.begin();
//  // Zwei Sekunden warten bis der DFPlayer Mini initialisiert ist
//  delay(2000);
  volume = mySettings.initVolume;
  mp3.setVolume(volume);
  mp3.setEq(mySettings.eq - 1);
  // Fix für das Problem mit dem Timeout (ist jetzt in Upstream daher nicht mehr nötig!)
  //mySoftwareSerial.setTimeout(10000);

  // NFC Leser initialisieren
  SPI.begin();        // Init SPI bus
  mfrc522.PCD_Init(); // Init MFRC522
  mfrc522
  .PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }

  pinMode(buttonPause, INPUT_PULLUP);
  pinMode(buttonUp, INPUT_PULLUP);
  pinMode(buttonDown, INPUT_PULLUP);
#ifdef FIVEBUTTONS
  pinMode(buttonFourPin, INPUT_PULLUP);
  pinMode(buttonFivePin, INPUT_PULLUP);
#endif
  pinMode(shutdownPin, OUTPUT);
  digitalWrite(shutdownPin, LOW);


  // RESET --- ALLE DREI KNÖPFE BEIM STARTEN GEDRÜCKT HALTEN -> alle EINSTELLUNGEN werden gelöscht
  if (digitalRead(buttonPause) == LOW && digitalRead(buttonUp) == LOW &&
      digitalRead(buttonDown) == LOW) {
    Serial.println(F("Reset -> EEPROM wird gelöscht"));
    for (int i = 0; i < EEPROM.length(); i++) {
      EEPROM.update(i, 0);
    }
    loadSettingsFromFlash();
  }

  digitalWrite(SpeakerOnPin, HIGH);
  // Start Shortcut "at Startup" - e.g. Welcome Sound
  playShortCut(3);

}

Das ist der angepasste Code.
Du musst „SpeakerOnPin“ noch durch die Nummer des Arduino Ausgangs ersetzen
oder wie ich ein #define dafür festlegen.

2 Like

Im übrigen ist dieser Code noch so optimiert, das der TonUINO 2sec schneller hoch fährt.

@marco-117
wow, so eine schnelle Antwort, hätt ich jetzt nicht erwartet :slight_smile:

Danke, ja ich sehe der delay(2000); ist auskommentiert.
Reicht dann das Anschalten des Lautsprechers am Ende des Code-Teiles, dass der Lautsprecher dann nicht knackt? Ich dachte da hätte man 1 Sekunde abwarten müssen…

Danke

Hast Glück, sitze gerade am Rechner um mein Puzzle weiter zu entwickeln.

Das hat zeitlich bis jetzt immer gerreicht, hab es bei drei TonUINO’s getestet.

@marco-117

Ich bin auch gerade dabei eine Tonuino Box für meinen Jüngsten Sohnemann zu bauen. Da soll gleich alles rein, also auch Deine Schaltung um das Startgeräusch zu eliminieren. Jetzt bin ich gerade nur am Stutzen, da die Schaltung und dein Aufbau auf der Platine für mich irgendwie gerade nicht zusammen passen. Laut Datenblatt ist das Pinout folgendes:
image

Hast Du auf der Platine dann nicht aber jeweils Gate und Drain der beiden Mosfets verbunden und SPK_2 und den Lautsprecher am Source-Anschluss?

Wo hast Du den Widerstand auf der Platine untergebracht? Oder hast Du ihn letztendlich weggelassen?

Fragen über Fragen :wink:

Nein ich habe die beiden Drain auf einem Pad zusammen gelötet und an den Gates hängt einmal ein Anschluss des Lautsprechers und ein Anschluss des DFPlayers.
Der Widerstand ist bei mir auf meiner Platine. Ich habe mir eine eigene Entwickelt.
Das Bild hab ich nur rein gestellt, umnzu zeigen, das es mit den SMD Teilen Möglich ist, diese auf einer Lochraster unter zu bringen.

Ich muss noch dazu sagen, dass es egal ist ob man die beiden Drain oder die beiden Gate Anschlüsse zusammen Verbindet
und an die jeweils anderen den Lautsprecher.

Alles klar. Danke für die Antwort. Der Hinweis, dass es egal ist ob die beiden Drain oder die beiden Gate Anschlüsse zusammen verbunden werden, erklärt es dann. Im Schaltbild oben sind ja die beiden Gate und die beiden Source Anschlüsse verbunden. Dann kann ich jetzt ja weitermachen. :smile:

@marco-117
Habe oben deinen Code gesehen. Kann ich auch alleine durch diesen das Einschaltgeräusch eliminieren? Oder nur mit den Mosfets?
Danke im Vorraus und schöne Weihnachten!

Nein leider nicht, der neue Code reduziert aber die Einsvhaltzeit.

@marco-117 Vielen Dank für den Tipp! Habe damit auch das Einschalt-Knistern entfernen können (wobei ich mich schon irgendwie daran gewöhnt hatte :wink: ).

Mein Ansatz aufgrund der SMD Bauform: ein 2*2 Stück Pfostenleiste (die beiden Transistoren sind „huckepack“ übereinander). Ist zwar eine ziemliche Fummelei, aber dafür ist es recht platzsparend unterzubringen -Meine Platine (auf Lochraster) war nämlich eigentlich schon fertig, als ich über den Beitrag gestolpert bin.

1 Like

@marco-117
Vielen Dank Marco! Das Löten war für mich wirklich eine Herausforderung, aber nun bin ich fast ein wenig überrascht, dass das Startgeräusch wirklich eliminiert wurde!
Sehr platzsparend ist meine Version nicht, ich habe aber zum Glück auch viel Platz in meiner Box.

1 Like