Wie könnte ich einen Schalter (basierend auf einem Halbleiterrelais oder einem Triac) programmieren, der bei Nulldurchgangsleistung auslöst?
Für diejenigen, die mit dem Thema nicht vertraut sind: Schalten Sie die 230-V-Stromversorgung ein, wenn die Sinuswelle der Stromleitung Null überschreitet - das Ergebnis ist die Minimierung der elektromagnetischen Störungen, die sich aus einer schnellen Stromspitze ergeben.
Insbesondere würde ich es vorziehen, so viel wie möglich in Software zu investieren. Die Erfassungsschaltung, die aus einem kleinen Transformator, einer Diode und einigen Widerständen besteht, um Pegel und Ströme in Schach zu halten, liefert "1", wenn die Wechselstromeingangsleistung zur positiven Hälfte, "0" zur negativen Hälfte, an einen GPIO-Eingangspin angeschlossen ist. Der Ausgang besteht aus einigen Halbleiterrelais und dem Nötigsten, um sie am Laufen zu halten (Klimmzüge usw.), die an die GPIO-Ausgangspins angeschlossen sind.
Das Problem ist das Timing: Mit 50 Hz Wechselstrom erhalten wir 100 Nulldurchgänge in einer Sekunde, eine Halbwelle ist 10 ms. Um einen angemessenen Abstand zum Nulldurchgang zu erreichen, um die EMI niedrig zu halten, sollten wir den Ausgang nicht mehr als 10% nach (oder vor) dem Ereignis des Nulldurchgangs aktivieren, dh + -1ms Toleranz. Das bedeutet keine Reaktionszeit von 1 ms - wir können davon ausgehen, dass der nächste Nulldurchgang genau 10 ms nach dem ersten oder dem vierten - 40 ms erfolgt. Es geht um Granularität - wenn wir 20 ms Reaktionszeit zulassen, müssen sie zwischen 19 und 21 ms liegen, nicht zwischen 18 und 22.
Wie kann ich einen solchen Timer - Triggerausgang GPIO entweder innerhalb von 1 ms, da der Eingang eine Flanke erkennt, oder innerhalb eines festen Vielfachen von 10 ms seitdem implementieren - vorzugsweise unter Berücksichtigung einer negativen Vorspannung (z. B. führen der Transformator und das Relais eine Verzögerung von 1,6 ms ein; Ich möchte also, dass der Trigger 8,4+ (n * 10) ms abläuft, da der Eingangsimpuls auf diese Weise die von der Schaltung eingebrachte Verzögerung ausgleicht.) - alles natürlich "auf Benutzerwunsch", sagt der Benutzer "1" msgstr "in eine / sys / class / ... - Datei und bei der nächsten (ungefähren) Gelegenheit geht die Ausgabe auf" on ". Der Benutzer schreibt "0", und wenn der Nulldurchgang eintrifft, wird das jeweilige Relais deaktiviert.
Ich glaube, dies würde das Schreiben oder Hacken eines Kernelmoduls erfordern. Könnten Sie mir zeigen, wie die GPIO-Pins von Raspberry Pi im Kernel gehandhabt werden und welche Art von Timern könnte ich daran anbringen (sofern nicht bereits welche vorhanden sind), um diese Art von Funktionalität zu erhalten?