- SF800 Solar Speicher Tutorial         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Buzzer mit PWM über Transistor

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    .. eine Piezo-Scheibe .. wie ein Kondensator.. z.B. 1k parallel zum Buzzer schaltest wird er lauter werden ..
    Sorry, wenn ich meine völlige Unkenntnis hier aufbiete. Ich habe das getestet.

    Aufbau: Experimentierplatine mit mega1284 @ 20 MHz, PORTD/PD2 und GND, 5V-Controller, PD2 ist Ausgang. Eines dieser zölligen (Ø ca. 25,4 mm) Scheibchen aus ner Glückwunschkarte. Kapazität: DMM => 26 nF, selbstgebauter "Transistor"tester => 19 nF. Zwei Drähte angelötet. Piezoscheibe mit Krokoklemme an Pappdeckel geklemmt.

    Test:
    a) PD2 wird mit 4 kHz getoggelt, die zwei Drähte der Scheibe an PD2 und GND. Es pfeift mit den erwarteten 2 kHz.
    b) Parallel zu den Drahtanschlüssen der Scheibe einen 1k gesteckt. Es pfeift etwa so laut wie vorher.

    Warum pfeifts - nach meinem eigenen Gehör - gleichlaut?

    Danke für ne Antwort.

    Code:
    // ============================================================================= =
    // ===  Nicht unterbrechbare ISR für timer2 ==================================== =
    // Routine zählt hoch im Takt 20 kHz = 50 µs.  
     ISR(TIMER2_COMPA_vect)         // Vektor 10 / $0012
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     {                              //
      IzeitA2 --;                   //  ###>>> IzeitA2 ist aktuell int16_t ==>>
                                    //  IzeitA2 bleibt bis 32000 in der int16-Grenze
                                            
    // - - - - - - - - - - - - - - - - - - -
      tmpizo --;
      if ( !tmpizo )
      {                     //
        ToggleBit (PORTD, PD2);
        tmpizo     =    5;  //
      }
    // - - - - - - - - - - - - - - - - - - -
    . . .
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Hallo Joe
    Der Unterschied von deiner Schaltung zur Schaltung am Anfang dieses Beitrags ist der, das du eine Seite des Kondensators auflädst und wieder entlädst wenn der Ausgang auf 0 geht.
    Bei der ersten Schaltung wird der Kondensator über den Transistor aufgeladen aber nicht mehr entladen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Geier,
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Aufbau: Experimentierplatine mit mega1284 @ 20 MHz, PORTD/PD2 und GND, 5V-Controller, PD2 ist Ausgang.
    Test:
    a) PD2 wird mit 4 kHz getoggelt, die zwei Drähte der Scheibe an PD2 und GND. Es pfeift mit den erwarteten 2 kHz.
    b) Parallel zu den Drahtanschlüssen der Scheibe einen 1k gesteckt. Es pfeift etwa so laut wie vorher.

    Warum pfeifts - nach meinem eigenen Gehör - gleichlaut?
    Dein Aufbau ist falsch!

    Beim ursprüngliche Aufbau wurde nur ein Transistor verwendet, welcher nach 0V schaltet und im anderen Fall hochohmig ist, also ein OC-Ausgang.

    Dein PD2 hat aber eine Gegentakt-Ausgangsstufe.
    Der Port-Ausgang schaltet zuerst nach 0V und lädt den Kondensator, anschliessend wir der Pin gegen 5V geschaltet und der Kondensator wird entladen.

    Wenn man an einen Piezo-Kristall eine Spannung anlegt verformt er sich. Die Verformung ist proportional zur angelegten Spannung. Polt man die Spannung um, verformt er sich in die andere Richtung. Entsprechend werden Piezo auch als Aktoren im µm-Bereich verwendet.

    Umgekehrt kann man den Piezo verbiegen und er erzeugt dann eine Spannung, welche proportional zur Kraft ist.
    Wurde in billigen Plattenspielern verwendet, als Mikrofon, vandalensichere Tasten, EnOcean betreibt damit auch noch einen Sender für Funktasten ohne Batterie, im Feuerzeug hat ein Hammer drauf um einen Zündfunken zu bekommen usw.

    Achja, der Schwingquarz gehört auch noch dazu. Das Plättchen schwingt dann tatsächlich mechanisch mit 16MHz im Gehäuse. Der Trick ist dabei, dass die mechanische Eigenresonanz-Frequenz entsprechend abgeglichen wird. Wenn man den Quarz also wie eine Glocke anschlägt, würde dieser mit den 16MHz nachklingen.
    Jetzt habe ich etwas gelogen, praktisch verwendet man in diesem Bereich eine der Obertöne. Der Quarz würde vermutlich nur mit 1 MHz klingen.

    Zurück zur Frage!
    Mit dem OC-Ausgang schaltest du gegen Masse, der Kondensator wird geladen und der Piezo-Kristall verbiegt sich.
    Dann schaltest du den OC ab
    Der Kondensator bleib geladen und der Piezo ändert seine Form nicht!
    OK, ein klein bisschen hat er sich über die Leckströme entladen, ganz leise war er hörbar.

    Mit dem Widerstand wird nun der Kondensator entladen und der Piezo verbiegt sich wieder zurück.

    Der 1k war nur so ein Schätzwert um den Fehler aufzuzeigen. Je kleiner man den Macht umso schneller, bzw. mehr kann sich der Kondensator entladen. Macht man ihn zu klein brennt irgendwann der Transistor durch, weil er überlastet wird.
    Wie sich der Kondensator entlädt, kann man über die normalen RC-Gleichungen berechnen, dazu braucht man die Kapazität des Piezos und den Widerstandswert. Zusammen mit der Ansteuerfrequenz kann man R dann so festlegen, dass sich der Kondensator nur auf die halbe Spannung oder 1/4 entladen kann. Entsprechend ändert sich die Lautstärke, bei einer festen Frequenz.


    Du kannst aber folgendes testen:
    Setze den Pin per Software auf 0.
    Dann schaltest du in der ISR zwischen Ausgang und Eingang um. Also wie ToggleBit() aber nicht auf dem Port-Register sondern das DDR-Register.
    Dann kannst du die Lautstärke noch damit ändern, dass du den Pull-Up zu und weg schaltest.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    .. Dein Aufbau ist falsch! .. .. .. Dann kannst du die Lautstärke noch damit ändern, dass du den Pull-Up zu und weg schaltest ..
    Mannoohh, Peter, danke für diese umfassende Antwort.

    Das mit Feuerzeug, Tonabnehmer und so und natürlich das mit den (Frequenz-)Quarzen kannte ich - ungefähr - auch das mit den Oberwellen. Ich glaube, jetzt verstehe ich das aber besser. Und den Aufbau mache ich morgen anders, die Geschichte interessiert mich.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.07.2011
    Beiträge
    348
    Hallo zusammen,

    ich wollte auch nochmal kurz bescheid geben, das ich den Buzzer jetzt mal testweise an zwei PWM-Pins eines Timers gehängt habe.
    Die beiden Pins lasse ich wechselweise über die PWM ein und aus schalten.
    Damit ist der Summer jetzt nochmal deutlich lauter geworden als im Vergleich zur Transistorschaltung mit Widerstand oder an nur einem PWM-Pin.

    Theoretisch müsste man doch jetzt auch die Lautstärke, zumindest in zwei Stufen, regeln können. Wenn man einen der beiden PWM-Pins auf einem Potential stehen lässt und nur mit einem Pin weiter togglet, dann verringert man die Lautstärke. Gefühlt hätte ich gesagt man halbiert sie? Togglet man den zweiten Pin wieder, erhöht man die Lautstärke wieder. Leider gibt es im Datenblatt keine Auskunft darüber wie die Lautstärke mit der Spannung in Zusammenhang zu bringen ist.

    Was würde denn passieren wenn die beiden PWM-Pins nicht synchron ihr Potential wechseln?
    Dies hätte vermutlich hauptsächliche eine Auswirkung auf die Frequenz nehme ich an. Kurzzeitig müsste eine Unterbrechung in der Umladung des Kondensators stattfinden, da beide Pins für einen Moment das gleiche Potential haben würden.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von demmy Beitrag anzeigen
    ich wollte auch nochmal kurz bescheid geben, das ich den Buzzer jetzt mal testweise an zwei PWM-Pins eines Timers gehängt habe.
    Die beiden Pins lasse ich wechselweise über die PWM ein und aus schalten.
    Damit ist der Summer jetzt nochmal deutlich lauter geworden als im Vergleich zur Transistorschaltung mit Widerstand oder an nur einem PWM-Pin.
    Das müsste die Lautstärke sein, welche im Datenblatt angegeben wird, die ist bei 9VPP gemessen. Deine Ausgänge schalten nicht exakt bis 0B und +5V durch, da fällt noch etwas Spannung ab.

    [QUOTE=demmy;634828] Theoretisch müsste man doch jetzt auch die Lautstärke, zumindest in zwei Stufen, regeln können. Wenn man einen der beiden PWM-Pins auf einem Potential stehen lässt und nur mit einem Pin weiter togglet, dann verringert man die Lautstärke. Gefühlt hätte ich gesagt man halbiert sie? Togglet man den zweiten Pin wieder, erhöht man die Lautstärke wieder. Leider gibt es im Datenblatt keine Auskunft darüber wie die Lautstärke mit der Spannung in Zusammenhang zu bringen ist. /QUOTE]
    Richtig, Versuch macht kluch.
    Bei der Lautstärke wird es aber etwas schwierig. Das Gehör empfindet die Lautstärke nicht linear.

    Zitat Zitat von demmy Beitrag anzeigen
    Was würde denn passieren wenn die beiden PWM-Pins nicht synchron ihr Potential wechseln?
    Dies hätte vermutlich hauptsächliche eine Auswirkung auf die Frequenz nehme ich an. Kurzzeitig müsste eine Unterbrechung in der Umladung des Kondensators stattfinden, da beide Pins für einen Moment das gleiche Potential haben würden.
    Kannst du auch einfach ausprobieren, einfach zwei PWM unterschiedlich programmieren.
    Das ist das schöne am Mikrokontroller. Du musst nur die Software ändern. kostet dich ausser Zeit keinen zusätzlichen Cent.
    Kaputt kannst du in diesem Fall auch nichts machen.

    Je nachdem bekommst du dann ganz lustiges Gejaule hin
    Neben den beiden Grundfrequenzen hörst du dann noch die Summen und Differenzen der beiden Frequenzen. Zudem dürfe je nach dem auch noch die Lautstärke etwas moduliert werden.
    Schöne Schwebungen müsste es geben, wenn die Frequenzen nur ganz leicht voneinander abweichen. Also im Bereich von nur ein paar Herz.

    Bei grösseren Abweichungen, z.B. 1kHz kommt dann diese Frequenz auch schön durch.

    Dann spiel mal schön.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    .. Dein Aufbau ist falsch! .. Du kannst aber folgendes testen:
    Setze den Pin per Software auf 0.
    Dann schaltest du in der ISR zwischen Ausgang und Eingang um. Also wie ToggleBit() aber nicht auf dem Port-Register sondern das DDR-Register.
    Dann kannst du die Lautstärke noch damit ändern, dass du den Pull-Up zu und weg schaltest.

    MfG Peter(TOO)
    OK:
    Setze den Pin per Software auf 0.
    >>..PORTD........&= ~(1<<PD2);........// PD2 auf Null setzen
    .. Also wie ToggleBit() aber nicht auf dem Port-Register sondern das DDR-Register.
    >>..ToggleBit (DDRD, PD2);..............// DDRD-2 umschalten: Eingang/Ausgang

    Geht leider überhaupt nicht => kein Ton (auch kein Blinken einer LED). Die "alte" Variante tönte wenigstens. Hab ich Dein Posting falsch vestanden ?

    Code:
    ...
    // Auszug aus main.c
    // ============================================================================= =
    //      Testweise hier eine Endlosschlaufe, NUR für Piezosummer (anderer Test!!)
    //      Verwendete Pinne: RXD1/INT0/PD2 + GND,
    // - - - - - - - - - - - - - - - -
      DDRD         &= ~(1<<PD2);            // Setze Pinn auf Eingang
      PORTD        &= ~(1<<PD2);            // PD2 auf Null setzen
    // ============================================================================= =
    //      Testweise hier eine Endlosschlaufe, NUR für Piezosummer (anderer Test!!)
    //      Verwende Ausgänge RXD1/INT0/PD2 + TXD1/INT1/PD3, beide als Ausgang, PD2=0
    // - - - - - - - - - - - - - - - -
      DDRD         &= ~(1<<PD2);            // Setze Pinn auf Eingang
      DDRD         |=  (1<<PD3);            // Setze Pinn auf Ausgang
      PORTD        &= ~(1<<PD2);            // PD2 auf Null setzen
      tmpizo        =        5 ;            // Piezo schnarrt mit 20000/5 = 4 kHz
                                            //      siehe ISR(TIMER2_COMPA_vect)
    // - - - - - - - - - - - - - - - -
      while ( 1 ) 
      {                     //
      }                     //
    // - - - - - - - - - - - - - - - -
    // ============================================================================= =
    ...
    // Auszug aus ~tmr~.c
    // ============================================================================= =
    // ===  Nicht unterbrechbare ISR für timer2 =================================== */
    // Routine zählt hoch im Takt 20 kHz = 50 µs.
     ISR(TIMER2_COMPA_vect)         // Vektor 7
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     {                              //
      IzeitA2 --;                   //  ###>>> IzeitA2 ist aktuell int16_t ==>>
                                    //  IzeitA2 bleibt bis 32000 in der int16-Grenze
    //...
    // - - - - - - - - - - - - - - - - - - -
    // - - - - - - - - - - - - - - - - - - -
      tmpizo --;
      if ( !tmpizo )
      {                     //
    //  ToggleBit (PORTD, PD2);     // Portpin umschalten 0/1
        ToggleBit (DDRD,  PD2);     // DDRD-2 umschalten: Eingang/Ausgang
        tmpizo     =    5;  //
      }
    // - - - - - - - - - - - - - - - - - - -
    ...
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Du hast mich nicht ganz richtig verstanden:

    1. Initialisieren Port-Pin auf 0 setzen.
    2. Erster ISR-Aufruf: DDR auf Eingang
    3. nächster ISR-Aufruf: DDR auf Ausgang setzen
    4. wieder wie 2.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Du hast mich nicht ganz richtig verstanden:

    1. Initialisieren Port-Pin auf 0 setzen.
    2. Erster ISR-Aufruf: DDR auf Eingang
    3. nächster ISR-Aufruf: DDR auf Ausgang setzen
    4. wieder wie 2.
    ..(TOO)
    Grübel - ich dachte genauso läufts bei mir. Im main wird vor einer Endlosschleife Port-Pin PD2 auf null gesetzt ( PORTD &= ~(1<<PD2); ), danach gehts in die leere while-Schleife. Inzwischen schaltet die ISR lustig im Toggelmodus ( ToggleBit (DDRD, PD2); ). Sorry, ich denke, das ist genau wie von Dir empfohlen ? ? ? ?
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Was ist mit dem Widerstand parallel zum Piezo um dem Pullup im Port?

    und wie ist der Piezo angeschlossen? gegen +5V oder gegen Masse?



    if ( !tmpizo )
    Das if wird nur ausgeführt wenn tmpizo == 0 ist.
    Bei einer Störung (doppelter decrement) geht es dann eine Ganze Runde bis tmpizo wieder 0 wird.

    So etwas sollte man mit
    if ( tmpizo <= 0 )
    aber dann muss tmpizo signed sein.

    Zudem verwende ich keine Bibliotheken, da weiss man nie welche Seiteneffekt die noch haben.

    Ich weiss nicht was ToggleBit() im Detail macht.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Selbsthaltung über Transistor
    Von blondie im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 17.04.2014, 17:15
  2. Motor über Transistor schalten
    Von andyrhoads im Forum Motoren
    Antworten: 19
    Letzter Beitrag: 26.02.2013, 17:09
  3. Buzzer für Silvesterparty
    Von EscoR im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 22.12.2012, 08:47
  4. Anschluss meherer LED´s über Transistor
    Von pmaler im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 22.03.2008, 19:43
  5. IR-Sendediode nur über Transistor an µc?
    Von Goblin im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 13.02.2006, 13:24

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test