S0 - Impuls mit GPIO auswerten - mindestens 5 V benötigt

  • Guten Tag zusammen,

    ich bin neu hier und ein lernwilliger Laie.

    Ich möchte gerne einen Stromzähler mit S0 - Ausgang über einen Raspberry Pi auslesen. Es werden 800Impulse / kWh ausgegeben.

    Ich habe einen Stromzähler namens Chint DDS666. Man findet relativ wenig Doku darüber, vermutlich da es ein China Produkt für den Afrikanischen Markt ist (in dem ich mich aktuell befinde).


    Wenn ich den S0 richtig verstehe, gibt mein RPi eine Spannung auf S0+. S0- ist die Masse. In dem Moment, wenn der Impuls kommt, wird der Stromkreis mittels Optokoppler geschlossen und es fließt ein Strom. Meine Interrupt Routine erkennt eine Veränderung der Spannung (sinkt kurz ab) und setzt den Zähler hoch. Frage 1: Habe ich das so richtig verstanden?


    Eigentliche Frage: Ich habe bei besser dokumentierten Stromzählern den Hinweis gefunden, dass die S0 - Schnittstelle mit mindestens 5 V arbeitet. (z.B.http://www.honeywell-building-solutions.de/katalog/pdf/eem400-d-p-p26-591-de01-ge51r0813.pdf)


    Die GPIO's geben ja aber alle nur 3,3 V aus. Jetzt habe ich gedacht, dass ich einfach den 5V Pin nehme. Aber kann ich den ebenfalls als GPIO-Input verwenden?


    Mein Status ist der, dass das Programm (Python) läuft. Habe den GPIO18 (PIN 12) als Input und PIN 14 als GND. Wenn ich die beiden verbinde erkennt der Interrupt das und setzt den Counter hoch. Wenn ich das nun an meinem Stromzähler teste und GPIO18 --- S0+ und GND --- S0- verbinde, registriert mein interrupt gar nichts. Meine einzige Erklärung ist, dass die 3,3V nicht ausreichen, um die S0-Schnittstelle zu aktivieren.


    Ich sitze hier in Uganda in einem Non-Profit Projekt. Es geht letztendlich um die Bestromung einer Klinik und potenzielle Sponsoren einer Solaranlage möchten gerne aktuelle Verbrauchswerte präsentiert bekommen. Ich habe einen RPi und jede Menge Motivation, aber leider nicht ganz soviel Detailwissen. Wer kann mir auf die Sprünge helfen?


    Lieben Dank und Grüße vom Äquator.


    Johann

  • Hallo!


    Den 5-V-Pin solltest du sicherheitshalber erst mal nicht verwenden. Je nach Schaltung kann das den GPIO zerstören.


    In Wikipedia findest du eine Beschreibung zur S0-Schnittstelle.


    Wenn dein Zähler genau so aufgebaut ist, wie in Wiki beschrieben, dann befindet sich im Schaltkreis ein 200-Ohm-Widerstand, ein (Photo)tranistor als open Collector und eine Diode als Verpolungsschutz. Eigentlich sollte das auch mit 3.3 Volt gehen. Normalerweise hast du am Pin 18 einen Pullup-Widerstand von 10-50 kOhm. Die S0-Schnittstelle hat einen 200-Ohm-Widerstand, der bewirkt keinen großen Spannungsabfall. Die Diode hat maximal 0,7 V und der Phototransistor hat vielleicht noch einen geringen Spannungsabfall. Die Spannung sollte daher eigentlich nicht über 0,8 V liegen und der Pin sollte das Signal erkennen.

    Ich gehe daovn aus, dass du einen Pullup-Widerstand hast - entweder intern per Software aktiviert oder extern - und dass letzterer nicht zu klein ist >= 10 K).


    Du sagst, dass 3,3 V zu wenig sein könnten, um den GPIO zu schalten. Das ist hier aber nicht das Problem. Der GPIO bekommt im ungeschalteten Zustand 3,3 V über den Pullup-Widerstand und wird beim Schalten auf GND gezogen. Das scheint aber nicht zu klappen. Ursachen könnten sein:

    - Der Spannungsabfall am Open Collector ist zu hoch

    - Dazu kommt der Spannungsabfall an der Verpolungsschutz-Diode

    - Der Pullup-Widerstand ist zu klein

    Man müsste mal die Spannung am GPIO im ungeschalteten und im geschalteten Zustand messen. Die Spannung sollte unter 0,8 Volt im geschalteten Zustand liegen, damit das Signal sicher erkannt wird. Da die Impulse nur kurz sind, lässt sich das mit einem Multimeter nicht messen. Da bräuchtst du ein Oszilloskop...


    Falls dein Pullup < 10 K ist, probier mal einen größeren.


    Ansonsten hätte ich zwei Lösungsansätze:


    1)

    Du kannst die Erkennung rumdrehen. Schließe S0+ an 3,3 Volt und den Pin 18 an S0-. Dann bekommst du ein HIGH, wenn ein Impuls kommt. Viele Leute sind aber der Ansicht, dass diese Schaltung anfälliger für Störungen ist, vor allem bei längeren Leitungen vom S0 zum Pi.
    Hier ist das Problem der Spannungsabfälle an der Diode und dem Phototransistor im Prinzip aber das Gleiche. Du könntst hier aber eine höhere Spannung an S0+ legen und mit einer weiteren Diode oder einem Spannungsteiler auf das gewünschte Niveau absenken. Das ist aber ein riskantes Vorgehen, wenn du nicht ziemlich genau weißt, was du tust. Für einen "lernwilligen Laien" eher nicht zu empfehlen.


    2)

    Schalte einen Optokoppler dazwischen. Ein 08/15-Optokoppler genügt - z. B. Typ 817, der ist weit verbreitet.

    5 Volt an S0+

    die Anode es Optokopplers an S0- (Ein Widerstand von 200 Ohm sollte schon im S0 verbaut sein, so dass du keinen strombegrenzenden Widerstand mehr vor dem Optokoppler benötigst. Ansonsten geht der Optokoppler kaputt - das kannst du bestenfalls testen, weil du bei den kurzen Impulsen den Widerstand kaum messen kannst.) Wenn du auf Nummer sicher gehen willst, schalte noch einen 200-Ohm-Widerstand vor die Anode.

    Die Kathode des Optokopplers an GND.


    Den Collector des Optokopplers an Pin 18 (am besten mit einem 1000 Ohm Schutzwiderstand)

    Den Emitter des Optokopplers an GND

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited 4 times, last by Gnom ().

  • Hi Gnom,


    sehr cool. Danke für deine Mühe. Ich werde Ende der Woche deine Ansätze mal ausprobieren und Rückmeldung geben.


    Liebe Grüße


    Johann