NEWS
S0 - Signal mit Wemos D1 Mini erzeugen?
-
@homoran said in S0 - Signal mit Wemos D1 Mini erzeugen?:
@dieter_p sagte in S0 - Signal mit Wemos D1 Mini erzeugen?:
Dabei liefert der S0-Eingang die Spannungsversorgung und der S0-Ausgang funktioniert nur als ein "Ventil" um die Signale zu takten und zurück auf den Eingang zu geben.
das bedeutet aber, dass das S0 Signal, dann nie von zwei Empfängern genutzt werden kann
Soweit für mich kein Widerspruch zur Norm:
-
So rasch scheinen mir die Signale auch nicht zu sein, dass dies eine Schottky Diode benötigen würde. Ich denke, ich beginne mit einer normalen Diode und wechsle auf eine Schottky Diode, sofern im Oszilloskop die Flanken zu wenig steil sind. Oder weiss jemand von Euch, was korrekt ist?
Nein, kann ich dir nicht mit letzter Gewissheit beantworten. In der Norm steht dazu nix und aus der Schaltung sehe ich da einen Verpolungsschutz, der aber Potential hat das eigentliche Signal zu "versauen". Daher die steile These, dass man darauf auch ggf verzichten kann, wenn man in der Lage ist S0+ und S0- richtig anzuschließen.
Im mikrocontroller-Forum wurde bei der Aufgabe als S0-Ausgang auf eine 1N4148 verwiesen. Um die Signalflanken nicht zu stark zu verfälschen klingt das nach einer Option.
-
@dieter_p
Vielen Dank!
Zusätzlich zu den Berechnungen habe ich jetzt noch ein kleines LTSpice Modell erstellt. Auf der Seite der WP ist dies sicher zu sehr vereinfacht; denke aber, dass dies so ausreichend sein sollte.
Anhand den Simulationen habe ich den Eindruck, dass der Einfluss der Diode sehr gering ist; ob 1N4148, 1N4007 oder eine Schottky Diode, hat fast keinen Einfluss auf die Schalzeiten, soweit ich dies sehe. Ich werde dennoch die 1N4148 verwenden, wie von Dir empfohlen.
Gemäss Norm muss der Strom im EIN-Zustand bei der Klasse A zwischen 10mA und 27mA sein (auch hier bereits am 1.2. gepostet) . Bei zu grossen Widerständen auf der ESP32 Seite (damit bei R2 im unteren Modell) werden jedoch auch diese minimalen 10mA nicht erreicht.
Mit einem 200 Ohm Widerstand (bei R1 im unteren Modell) habe ich, gemäss Modell, max. ca. 16.5mA auf der Seite der WP (z.B. über R3), mit 220 Ohm (als Widerstand jeweils bei R2) ca. 15mA seitens WP, mit einem 470 Ohm gerade noch ca. 6.8mA (was zu wenig wäre, zumindest für Klasse A). Mit 180 Ohm ca. 17.7mA, 150 Ohm ca. 20mA. Ich denke, ich werde etwas zwischen 180 Ohm und 220 Ohm verwenden.
-
@mistral
Vielen Dank! den Gedankengang hatte ich auch, dass man das ja eigentlich theoretisch schön simulieren könnte am PC.
Da ich das aber weniger häufig mache, wäre das eine Aufgabe fürs ganze lange Wochenende und bin dann beim etwas praktischen/ HauRuck Approach geblieben. Priorität auf die Betrachtung was bei der WP kaputt gehen könnte.
Der ESP und "unsere" Bauteile sind ja wirklich Kleinkram und für wenige Cent einfach zu ersetzen.Entsprechend würde man Worst-Case den Eingang der WP einfach Brücken, dann sind wir mit >1350 Ohm (R1+R3) auf einer recht sicheren Seite (20mA für den Optokoppler der WP). Vielleicht kannst Du ja R3 in Deiner WP sogar messen und weißt dann was verbaut ist. Der Rest wäre dann "nur" funktionales AddOn
Um hier bei Problemen auch praktisch etwas tun zu können (Du sprachst vom Multimeter Neukauf), hab ich mich vor Kurzem doch mal durchringen können das heimische Equipment zu erneuern. Klar, ein Multimeter bekommt man für 10€, ein TrueRMS vielleicht um die 25€ hilft hier aber Beides nicht wirklich und ich wollte etwas spielen und hab mir eine Kombigerät aus Multimeter und Osziloskop gekauft. Klar ist das günstiger ChinaKram, aber für die Zwecke und um den getakten ESP-Ausgang zu messen genial (damaliger Preis 95€). Glaube da gibt es mitlerweile sogar neuere Modelle dann mit Funktionsgenerator.
-
@dieter_p
Ebenfalls vielen Dank! Mir hat bei LTSpice vor allem der 4N35 etwas "Kopfzerbrechen" bereitet, wie ich den reinbekomme, da dieser nicht direkt in der library vorhanden ist; und da ich LTSpice bisher nicht verwendet habe.
Da habe ich mich vertippt. Ein Multimeter habe ich. Ich habe mir ein günstiges Oszi (Joy-IT Mini-Handheld DSO-200) bestellt. Sowie ein Labornetzteil. Damit werde ich die 27V zuerst an die Schaltung mit dem Labornetzteil anlegen und den getakteten ESP Ausgang messen. Den Funktionsgenerator habe ich ja über den ESP dazu
Ja, genau, mit R3 (der WP) + R1 (der S0 Schaltung) sollte dies für die WP bereits auf der ziemlich sicheren Seite sein. Zusätzlich noch die Begrenzung durch den Optokopplers (abhängig vom CTR des Optokoppler, R2 und der Spannungsquelle, z.B. 3.3V beim ESP32). Daher tendiere ich für R1 auch eher den Widerstand etwas tiefer zu nehmen (z.B. 180 Ohm, eventuell 200 Ohm), damit das Signal zuverlässig erkannt wird.
P.S.: Jetzt noch das Design der Platine und die Bestellung davon. Ich teste mal KiCad 7 und Fritzing etwas und entscheide mich dann, was ich davon verwende.
... und ich habe die Angaben bei der Simulation noch aktualisiert, da ich einen Fehler dort gesehen hatte (ich hatte 24V statt 27V bei der Spannungsquelle V1). -
Ich habe dies inzwischen noch mit einem Labornetzteil bei 27Volt und mit einem Oszi über den 1000 Ohm Widerstand getestet (R3 im LTSPice Modell). Und mit jeweils 200 Ohm Widerständen bei R1 und R2.
Mit dem Oszi messe ich damit über R3 ca. 18.5V während des "high signals" ("Ein-Zustand"), damit ca. 18.5mA.
Ich vermute, dass dies ziemlich gut sein dürfte (da während des "Ein-Zustands" für Klasse deutlich über den minimalen 10mA und auch unter den maximalen 27mA; und da damit auch nur ca. 10mA über R2 und damit am GPIO des ESP32).
Ich vermute, dass dies gut sein dürfte, sonst bitte Feedback.
Vielen Dank!
P.S.: Gemäss meinem oberen LTSpice Modell wäre dies als Strom über R3 dort ca. 16.5mA (gemessen: 18.5mA). Ca. 10% Abweichung finde ich nachvollziehbar, insbesondere da ich denke, dass es wahrscheinlich unterschiedliche Modelle und auch etwas Toleranz insbesondere beim Optokoppler geben dürfte. -
@mistral
Klingt für mich top.
Was nutzt du für Widerstände 1% Genauigkeit? -
@dieter_p
Vielen Dank!
Ja, korrekt, die Genauigkeit ist mit "TOL: ±1%" angegeben.
Ich habe mir jedoch ein Set gekauft, da ich den Strom mit verschiedenen Widerständen messen wollte. Und bei vielen Sets waren z.B. 220 Ohm, aber nicht 200 Ohm Widerstände dabei. Daher habe ich dies nach den Widerstandsgrössen ausgewählt, die im Set dabei sind, und nicht nach der Genauigkeit. Dies habe ich erst jetzt nachgeschaut. -
@mistral
War für mich nur eine Option um die Schwankung von 10% etwas erklärbarer zu machen. 5% Widerstände dürften wohl kaum noch zum Einsatz kommen und da hätte man ggf etwas optimieren können indem du die Widerstände vorher ausmist und wählst. Aber bei 1% kann man sich das schenkenKlingt gut, lass mal wissen wenn es in Funktion läuft.
-
@dieter_p
Vielen Dank und ja, werde mich dann gerne wieder melden. Bis es läuft, wird es wahrscheinlich noch etwas dauern: Ich warte noch auf das PCB, welches ich dafür erstellt und bestellt habe (aktuell erst auf einem breadboard) und noch auf ein paar kleinere Komponenten.
Betreffs Schwankung gehe ich ziemlich sicher vom Optokoppler aus: Dort ist für den 4N35 bei LTSpice keine Komponente direkt dabei und ich musste dies daher im Internet suchen. Und mein 4N35 Optokoppler hatte ich bei mir bereits "herumliegen" und weiss auch nicht, von welchem Hersteller dieser ist. -
@dieter_p Ist jetzt in Funktion und läuft
Wie gut die Regelung seitens der WP ist, kann ich noch nicht beurteilen, aber das S0 Signal wird bei mir einwandfrei übermittelt und anhand der aktuellen PV Einspeiseleistung berechnet.
Vielen Dank! -
@mistral Guten Morgen, ich suche gerade auch nach einer Lösung ein S0 Signal zu erzeugen. Kannst du die verwendetet Hardware und evtl. den Code der Öffentlichkeit zur Verfügung stellen? Dann brauche ich nicht alles neu Recherchieren und Testen
Das ist die benötigte Hardware wenn ich es richtig aus den vorherigen Post lese:
Wenn jetzt noch jemand einen Code Schnipsel hätte wäre ich glücklich
Hab mal rumprobiert hier mein Ergebnis:
#include <ESP8266WiFi.h> #include <PubSubClient.h> // WiFi configuration const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // MQTT configuration const char* mqtt_server = "broker_address"; const char* mqtt_topic = "energy/consumption"; const int mqtt_port = 1883; // S0 Pin configuration const int s0Pin = 7; // Pin connected to the S0 output signal // Timing variables unsigned long pulseDuration = 100; // Duration of each pulse in milliseconds unsigned long pulseInterval = 720; // Interval between pulses in milliseconds (initial value) // WiFi and MQTT clients WiFiClient espClient; PubSubClient client(espClient); // Function to handle received MQTT messages void callback(char* topic, byte* payload, unsigned int length) { char message[length + 1]; strncpy(message, (char*)payload, length); message[length] = '\0'; float kWh = atof(message); // Convert received message to float // Assuming 1000 pulses per kWh and 3600 seconds in an hour pulseInterval = (3600 * 1000) / (kWh * 1000) - pulseDuration; } void setup() { // Set the S0 pin as an output pinMode(s0Pin, OUTPUT); // Initialize Serial for debugging Serial.begin(115200); // Connect to WiFi setup_wifi(); // Set up MQTT client client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); // Connect to MQTT broker reconnect(); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); // Generate a pulse digitalWrite(s0Pin, HIGH); // Set the S0 pin HIGH delay(pulseDuration); // Wait for the pulse duration digitalWrite(s0Pin, LOW); // Set the S0 pin LOW delay(pulseInterval); // Wait for the interval before the next pulse } void setup_wifi() { delay(10); // Connect to WiFi Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect("ESP8266Client")) { Serial.println("connected"); // Subscribe to topic client.subscribe(mqtt_topic); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } }
Hab leider kein Oszilloskop um das mal zu prüfen.
-
Hab leider kein Oszilloskop um das mal zu prüfen.
Wenn Du mir einen "easy" weg erklärst wie ich das in den ESP32 reinbekomme, schließe ich mal ein Oszi dran an.
-
@dieter_p Ich würde das mit Adurino IDE auf einen ESP flashen.
Hier der Code vereinfacht und ohne Wifi & MQTT. Das sollte jetzt 5kwH abbilden.
// S0 Pin configuration const int s0Pin = 7; // Pin connected to the S0 output signal // Timing variables unsigned long pulseDuration = 100; // Duration of each pulse in milliseconds // replaced with static value unsigned long pulseInterval = (3600 * 1000) / (5 * 1000) - pulseDuration; // Interval between pulses in milliseconds (initial value) void setup() { // Set the S0 pin as an output pinMode(s0Pin, OUTPUT); // Initialize Serial for debugging Serial.begin(115200); } void loop() { // Generate a pulse digitalWrite(s0Pin, HIGH); // Set the S0 pin HIGH delay(pulseDuration); // Wait for the pulse duration digitalWrite(s0Pin, LOW); // Set the S0 pin LOW delay(pulseInterval); // Wait for the interval before the next pulse }
-
@andy123andy1 said in S0 - Signal mit Wemos D1 Mini erzeugen?:
@dieter_p Ich würde das mit Adurino IDE auf einen ESP flashen.
Bin Tasmota/ESPEasy verseucht, aber wird man ja nicht dümmer durch etwas Neues zu probieren. Starte mal bei mir die Umgebung aufzusetzen und melde mich.
Alternativ die "dumme" Frage eine .bin datei daraus kannst Du mir nicht erzeugen und ich flashe sie einfach auf den ESP?
-
Doch das geht ich müsste nur welchen welchen ESP.
-
Hab einen ESP32 S2 hier (wie auf der Zeichnung/Screenshot)
Edit: den configurierten S0 Pin hast Du in der letzten Version rausgenommen, bleibt bei GPIO 7 ?
-
-
kann keine Funktion/Signalpuls messen
Hab zum Test nochmal ESPEasy zum Vergleich genutzt und hier lässt sich ein Puls messen.
-
Komisch nochmal das gleiche mit PIN 2