Für ein neues Projekt mit Arduino muss ich einen Alarmton erzeugen, der mit der Zeit an Amplitude zunehmen muss, wenn der Benutzer nichts unternimmt. Die Ausgabe erfolgt über einen kleinen Lautsprecher.
Wenn also die Alarmbedingung ausgelöst wird, würde ich einen leisen Piepton im hörbaren Bereich erzeugen, dem Benutzer etwas Zeit zum Reagieren geben, dann die Lautstärke erhöhen, warten, wieder erhöhen, bis der Benutzer reagiert. So erzeuge ich nicht von vornherein einen lauten Alarmton, der in einer ruhigen Umgebung störend wirken kann.
Das Erzeugen von Impulsen und die Verwendung eines Transistors oder IC-Verstärkers zum Ansteuern des Lautsprechers ist kein Problem.
--> Das Problem ist: Wie moduliert man die Amplitude des Lautsprecherklangs?
Meine Einschränkung ist, dass der Arduino, während er den Alarm auslöst, noch andere Sachen machen muss, also kann ich ihn nicht in einer komplizierten Routine blockieren, um Töne zu erzeugen, zum Beispiel durch eine ausgefallene PWM, die dann gefiltert wird, um ein Signal mit unterschiedlichen Amplituden zu liefern .
Ich könnte einen Pin verwenden, um das Basisfrequenzsignal zu erzeugen, und 3 Pins zur Verfügung haben, um eine externe Schaltung zu steuern, um die Amplitude zu ändern, wie folgt:
Habt ihr ein paar Ideen zu teilen?
Tks!
NACHTRAG: Dies ist die Lösung, die ich bereits ausprobiert hatte, aber die Lautstärkepegel sind nicht von einem Gerät zum nächsten wiederholbar, daher möchte ich das Hinzufügen eines Trimmerpotis vermeiden. D13 erzeugt mit dem Audioton eine Rechteckwelle. Die anderen Ausgänge leiten diesen Ton über die UND-Gatter durch die Widerstandsleiter.
Ihre Frage zeigt eine PWM-Einheit, gefolgt von einer einstellbaren Verstärkungsstufe. Dies ist keine sehr offensichtliche Form, aber es könnte funktionieren.
Herkömmlicherweise können Sie mehrere PWM-Einheiten mit unterschiedlichen Ausgangstreiberstärken (unter Verwendung von Widerständen) verwenden, um im Endeffekt einen DAC aufzubauen.
Was Sie gebaut haben, sollte funktionieren, wenn Sie die PWM (zum Schalten) mit einer programmierbaren Stromquelle (für die Amplitude) kombinieren. Als Stromquelle können Sie 3 Stromspiegelschaltungen parallel verwenden, die von Ihren 3 Amplitudenreglern geschaltet werden. Typischerweise können Sie für jeden Umschaltschritt eine logarithmische Skalierung wählen.
Ihr PWM-Ausgang kann verwendet werden, um Strom zu senken, die 3 Stromspiegelstufen liefern Strom (und steuern die Amplitude).
Arduino sagt nicht wirklich, welcher Mikrocontroller speziell, aber ich denke, alle mir bekannten Arduinos haben eine programmierbare PWM-Einheit, sodass Sie überhaupt keine CPU für die Erzeugung des Signals aufwenden müssen.
Einzelheiten zu verschiedenen Möglichkeiten zur Verwendung einer PWM-Einheit finden Sie in dieser Antwort , aber das Wesentliche ist:
Sie können die Periode Ihrer PWM programmieren, dh die Frequenz des Ausgangssignals.
Um die Spannung einzustellen, die Sie in den Lautsprecher einspeisen, können Sie verschiedene Wege gehen:
Ein anderer und wahrscheinlich einfachster Weg besteht darin, Ihren µC überhaupt nicht mit der Erzeugung eines analogen Signals zu befassen, sondern dafür einen Audio-DAC zu verwenden. Diese Dinge nehmen serielle Daten, typischerweise über SPI/I2S, und haben oft sogar integrierte Verstärker.
Beispielsweise verwenden die ST-Discovery-Boards den CS43L22 - IC für diese Aufgabe. Sie senden einfach digitale Audiodaten ein – und schon wird der Ton generiert. Tatsächlich hat es sogar eine Signaltonerzeugungseinheit, wenn Sie zu faul sind, die Signaltonwellenform über die I2S-Schnittstelle zu schreiben!
Es gibt eine Fülle anderer Optionen, wie z. B. Spannungs-Frequenz-Wandler-ICs, periodisches Ansteuern einer Tank- / Oszillatorschaltung usw., aber ich denke, dies könnten die arduino-freundlichsten Ansätze sein.
kxtronic