Wie kann eine zuvor gespeicherte SIRC-Protokollwellenform neu generiert werden?

Ich versuche, die Fernbedienung für mein Sony-Heimkinosystem nachzubauen. Ich begann mit der Analyse des demodulierten Signals des Einschaltknopfs mit einem TSOP1738 IR-Demodulator. Es sieht aus wie das:

Sie können das Signal (zusammen mit dem decodierten Befehl) sehen. Als nächstes replizierte ich das Signal mit dem Arduino (und wählte gemäß dem SIRC-Protokoll 1/4 Duty @ 38Khz). Unten ist das Signal eines vollständigen, um den gesendeten Code zu zeigen, und ein gezoomtes, um den 38-kHz-Burst mit 25 % Einschaltdauer innerhalb des Signals zu zeigen.

Um nun eine IR-LED mit diesem Signal anzusteuern, habe ich dieses in die Basis eines 2N2222- NPN-BJT-Transistors eingespeist, dessen Kollektor mit + 5 V und die Basis mit IR-LED -> Serienwiderstand -> GND verbunden ist. Und um das Signal zu testen, fütterte ich dieses "erzeugte" Signal erneut durch den TSOP1738 und prüfte den Ausgang.

schematische Darstellung

Das Signal, das ich bekomme, sieht aus wie ein IR-Signal, mit Ausnahme der 1 (wenn TSOP1738 auf LOW geht), anstatt für eine Dauer LOW zu sein, wie im ersten Bild. Ich sehe, dass viel umgeschaltet wird:

Das "erzeugte" Signal funktioniert natürlich nicht. Irgendeine Ahnung, was hier vor sich geht?

Möglicherweise möchten Sie die Zeile in Ihrer Frage bearbeiten, in der derzeit "... und Basis auf IR-LED -> Serienwiderstand -> GND" steht. Außerdem löst ein Schaltplan viele Zweifel, bitte fügen Sie Ihrer Frage einen hinzu.
Das tut mir leid. Hier ist es i.imgur.com/7PrhAl.png
Zum einen begrenzen Sie mit einem 100K-Basiswiderstand die Ansteuerung wirklich auf die LED. Abhängig von der genauen Verstärkung des Transistors erhält die LED wahrscheinlich nur etwa 5 mA, nicht die 50 mA, die Sie vielleicht erwarten. Dies kann auch Probleme mit der Schaltgeschwindigkeit des Transistors verursachen. Sie sollten ein Oszilloskop (keinen Logikanalysator) auf den Kollektor legen und prüfen, ob Sie dort eine saubere Wellenform erhalten.

Antworten (1)

Da ich keine "Kommentar"-Privilegien habe, antworte ich im Antwortformular, obwohl dies keine Antwort ist:

  • Sind Sie sicher, dass Ihre IR-LED wie angegeben mit der Basis des Transistors verbunden ist und nicht wie im ersten Schema auf dieser Seite ?
  • Hat die von Ihnen verwendete IR-LED die gleiche IR-Wellenlänge wie vom TSOP1738 erwartet , dh 950 Nanometer oder so ungefähr?

Mögliche Antwort: Ihre Oszilloskopspur des von Arduino generierten Signals zeigt eine PWM-Frequenz von 39,215 KHz, und die endgültige Signalspur zeigt Effekte, die typisch für Aliasing zwischen zwei Fenstern mit leicht unterschiedlichen Frequenzen sind. Versuchen Sie, Ihre Ausgabe näher an die nominellen 38 kHz zu bringen, und erfassen Sie die Ergebnisse für diese Diskussion bitte erneut.

[ Bearbeiten : Woohoo, ich habe gerade die Privilegien "Überall kommentieren" erhalten! Also lasse ich diese Antwort an Ort und Stelle und ändere sie in eine gültige Antwort, wenn ich kann. ]

Genau so habe ich meine LED verdrahtet. Die Basis des Transistors ist über einen Widerstand mit dem Arduino-Ausgangspin verbunden
Ich bin mir nicht sicher, ob ich das "Aliasing"-Bit verstehe. Woher würde die andere ähnliche Frequenz kommen? Zugegeben, mein erzeugtes Signal ist nicht genau 38 kHz, aber ich verstehe, dass eine geringfügige Abweichung von der Demodulatorfrequenz die Empfindlichkeit / Wirksamkeit meines IR-Signals beeinträchtigen kann, aber es sollte insgesamt immer noch die gleiche Spur haben ...
Aus dem 38-kHz-Notchfilter des TSOP-Teils.
Danke für die Hilfe. Befolgte Ihren Vorschlag und den Code, um näher an 38 kHz heranzukommen. Das Umschalten ist viel geringer als hier zu sehen . Ich habe eine andere Sache bemerkt, die ich verpasst habe, bevor die Nullen in der Wellenform einen Zeitraum von ca. 2,84 ms haben (während in meinem Code 1,2 ms). Also fast doppelt so viel wie ich es codiert habe
Die vorherige Codeversion funktionierte möglicherweise tatsächlich besser mit einem TSOP1740. :-)
Ich bin mir immer noch nicht sicher, was falsch war, aber ich habe das Problem gelöst, indem ich Timer verwendet habe, um die 38-kHz-Welle zu erzeugen, anstatt sie manuell einzugeben.
Das heißt, Sie wissen jetzt, was falsch war: Der Unterschied zwischen Ihrer früheren Übertragungsträgerfrequenz und der 38-kHz-Filterfrequenz des TSOP-Teils führte dazu, dass die eingehenden Impulse manchmal knapp außerhalb des "offenen" Zeitschlitzes des Filters fielen, um die Idee zu vereinfachen. Dies würde mit dem Komparator darin in Konflikt geraten, daher die Spitzen in dem, was ein flacher Teil der Wellenform hätte sein sollen.
Wenn Sie nicht wissen, was falsch war, beziehen Sie sich darauf, warum das Bit-Bang-Signal nicht genau 38 kHz war: Vielleicht haben Sie Stack-Pushes und Pops in Ihrem Code nicht berücksichtigt oder die Zyklen, die erforderlich sind, um die Berechnungen für jeden Impuls und die Anweisungen tatsächlich auszuführen Schreiben Sie an den Hafen. Ein weiterer Faktor, der zur Frequenzdrift beiträgt, ist die MCU-Taktpräzision, insbesondere bei Verwendung von internen oder RC-Taktgebern oder Taktraten innerhalb einer oder drei Größenordnungen der gewünschten Ausgangsauflösung.