Fehlerstrom-Messung mit Rogowski-Spule

Haushalts-Stromnetze sind abgesichert durch sog. FI-Schalter (Fehlerstrom-Schutzeinrichtungen). Sie nehmen eine Abwägung vor zwischen den Strömen der stromführenden Leiter in einem Stromkreis und lösen bei Ungleichheiten aus, also wenn die Summe aller Ströme (der zwei oder drei Phasen, je nach Anschlussart) nicht Null ist. Letzteres ist dann der Fall, wenn ein Strom aus dem Stromkreis heraus in die Erde fließt, z.B. wenn der Fön in die Badewanne fällt und der Strom durch Wanne und Abwasserrohr geerdet wird.

Der Fön in der Badewanne ist ein nachvollziehbarer Grund für das Auslösen eines FI-Schalters. Was aber, wenn der FI-Schalter auslöst ohne einen erkennbaren Grund? Vorausgesetzt, der FI-Schalter ist nicht defekt, bedeutet dies, dass in einem der Stromkreise in der Wohnung ein Fehlerstrom fließt. Das ist grundsätzlich bedenklich, da Gefahr für Laib und Leben bestehen könnte.

Wie kann man feststellen, in welchem Stromkreis der Fehlerstrom fließt? Die einfachste Methode ist, den Fehlerstrom mit einem Strom-Messgerät nachzumessen. Normalerweise muss zur Strommessung der stromführende Leiter unterbrochen werden. Im Haushalt ist diese Methode wegen der Gefahr eines Stromschlags nicht zu empfehlen.

Da man nur den Differenzstrom zwischen Hin- und Rückleiter eines Stromnetzes (L- und N-Adern; i.d.R. schwarze und blaue Drahtummantelung) messen möchte, genügt es, diese beiden Leiter mit einem magnetisch-leitfähigen Material, z.B. Ferrit, zu ummanteln. Im Idealfall ist der Strom durch Hin- und Rückleiter gleich groß und es entsteht kein Magnetfeld. Sind die Ströme jedoch ungleich groß, so entsteht gemäß der Lenzschen Regel im Ferrit ein magnetisches Feld, das in erster Näherung proportional zum Differenzstrom = Fehlerstrom ist. Da der Fehlerstrom u.U. durch den PE-Leiter fließt, muss diese Ader bei der Fehlerstrom-Messung außerhalb des Ferrits liegen. Der Vorteil dieser Herangehensweise ist, dass die stromführenden Leiter nicht unterbrochen werden müssen.

Das magnetische Feld in einem Ferrit kann auf verschiedene Arten gemessen werden. Eine ist das Umwickeln des Ferrits mit Kupferlackdraht entsprechend dem Prinzip der Rogowski-Spule. Dies wurde mit einer improvisierten Spule aus einem Common Mode-Filter-Klappferrit mit 42 Windungen Kupferlackdraht getestet:

Klappferrite hat man herumzuliegen, wenn man schon in den 80er- und 90er-Jahren PCs verwendet hat. Diese wurden seinerzeit zu Entstörzwecken um Kabel geklappt.

Mit einem Funktionsgenerator wurden verschiedene Frequenzen mit einer Amplitude von 5V erzeugt und auf einen 270R-Widerstand gelegt, sodass etwa 20mA durch den Widerstand fließen. Die Rogowski-Spule wurde über eines der beiden Kabel zwischen Funktionsgenerator und Widerstand geklappt und am Oszilloskop der Spannungsverlauf über der Spule gemessen.

Bei 50kHz und 5kHz ist eine Spannung messbar, deren Verlauf der Anregung folgt. Bei 500Hz und darunter ist das Signal unterhalb der Messgrenzen des Oszilloskops (<10mV).

Das Signal wurde daraufhin mit dem Operationsverstärker LM358 verstärkt (Widerstände: 12kR und 120kR). Mit diesem lässt sich das Signal soweit verstärken, dass es auch bei 500Hz messbar ist.

Leider hat das Stromnetz hierzulande eine noch kleinere Frequenz von 50Hz, sodass der Aufbau noch weiter verbessert werden muss, um angewandt werden zu können. Denkbar sind z.B. eine Spule mit mehr Windungen zu wickeln oder einen Hall-Sensor zur Messung des Magnetfelds im Ferrit heranzuziehen.

Veröffentlicht unter Technik | Verschlagwortet mit , , , , , , , , , , | Hinterlasse einen Kommentar

Lattice iCEcube2-Abhängigkeiten unter Linux

Wenn man die letzte Version von Lattice Semiconductor’s iCEcube2-IDE (12. September 2017)  verwenden will, wird man bei der Ausführung des Setup-Programms unter Umständen einen „No such file or directory“-Fehler zu sehen bekommen.

Der kommt dadurch zustande, dass einige Bibliotheken, auf die das Programm zurückgreift, auf dem eigenen PC nicht vorhanden sind. Leider gibt das Setup-Programm (nur als x86 32-Bit verfügbar) keine hilfreiche Fehlermeldung dazu aus. Zum Glück lässt sich mit strace relativ schnell herausfinden, welche Bibliotheken fehlen:

apt install libpng12-0:i386 libxrender1:i386 \
  libxrandr2:i386 libxcursor1:i386 \
  libxinerama1:i386 libsm6:i386 \
  libc6:i386 libglib2.0-0:i386 \
  libelf1:i386
Veröffentlicht unter FPGA | Hinterlasse einen Kommentar

PT331C-Fototransistor mit Impedanzwandler betreiben

Der Everlight Opto PT331C ist ein mit 0,36€ (Stand: Oktober 2017 bei Conrad Elektronik) sehr günstiger Fototransistor für nahes UV-, sichtbares und nahes Infrarot-Licht (ca. 200-1200 nm). Das Absorptionsmaximum liegt etwa bei 800-900 nm.

Schließt man eine Spannung in Sperrrichtung des Fototransistors an, so beginnt ein lichtabhängiger Strom durch den Transistor zu fließen. Um den lichtabhängigen Stromfluss als Spannung mit einem A/D-Wandler auslesen zu können, z.B. mit einem Mikrocontroller, schließt man an den Kollektor des Fototransistors (äußerlich an der Abflachung des Gehäuses zu erkennen) den Pluspol der Spannungsquelle und an den Emitter einen Widerstand an, der auf der anderen Seite mit dem Minuspol der Spannungsquelle verbunden ist. Gemäß dem Ohmschen Gesetz ist dann der Spannungsabfall über dem Widerstand proportional zum Stromfluss durch den Fototransistor. Bei einer Spannung von 3.3 Volt hat sich ein Widerstandswert von 12 kOhm als geeignet erwiesen, um Tageslicht zu quantifizieren. Der Widerstand kann aufgrund des geringen Fotostroms allerdings nicht direkt mit dem Eingang des A/D-Wandlers verbunden werden. Ein Impedanzwandler muss zwischengeschaltet werden, um zu vermeiden, dass ein das Messergebnis verfälschend großer Anteil des Stroms in den A/D-Wandler anstatt durch den Messwiderstand fließt. Ein Experiment mit einem LM358 war erfolgreich (siehe Bilder unten). Für zukünftige Anwendung könnte es noch interessant werden, dass Operationsverstärker analoge Eingangswerte grundsätzlich auch mit einem über Widerstände einstellbaren Faktor multiplizieren können – So können auch kleine Eingangswerte in einen messbaren Spannungsbereich verstärkt werden. Außerdem könnte sich zur Steigerung der Signalqualität für zukünftige Experimente ein Eingangs- & Ausgangs-Rail-to-Rail-OPV empfehlen.

Messaufbau: Der Oszilloskop-Tastkopf ist am Ausgang des Operationsverstärkers angeschlossen.

Ausgabe der oben aufgebauten Schaltung am Oszilloskop. Die Schwankung der Lichtintensität mit ca. 100 Hz rührt vermutlich von den Neon-Röhren im Raum her.

Veröffentlicht unter Arduino, Optik, Tagebuch | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Atmel XMEGA-A1 Xplained mal angesteckt

Die Platine Atmel XMEGA-A1 Xplained ist eine Entwicklungsplattform für den Atmega128A1 Mikrocontroller (und ähnliche).

Sie beherbergt u.a. 8x LEDs, 8x Buttons, einen Lautsprecher, einen Temperatur- und einen Lichtsensor sowie 8MB SD-RAM. Angeschlossen wird die Platine über Mini-USB.

Unter Linux identifiziert sie sich als serieller Port:

$ lsusb
...
Bus 002 Device 081: ID 03eb:2122 Atmel Corp. XMEGA-A1 Explained evaluation kit
...
$ dmesg
...
usb 2-1.2: new full-speed USB device number 82 using ehci-pci
usb 2-1.2: New USB device found, idVendor=03eb, idProduct=2122
usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-1.2: Product: XPLAINED CDC
usb 2-1.2: Manufacturer: ATMEL
usb 2-1.2: SerialNumber: 123456789012
cdc_acm 2-1.2:1.0: ttyACM18: USB ACM device
...

Serieller Port… Das klingt vielversprechend – funktioniert das Board mit avrdude? Kann man die Arduino IDE zur Entwicklung verwenden? Augenscheinlich nein, in der Arduino IDE es gibt keinen Support für die MCU.

Aber AVR-GCC bietet mit der Option -mmcu=avrxmega7 eine (freie) Möglichkeit, Code dafür zu compilieren.

Die zweite onboard MCU (AT32UC3B1256) kann augenscheinlich nicht als Debugger genutzt werden. Sie dient offenbar nur als USB-zu-UART-Schnittstelle. Zum Debuggen gibt es einen separaten AVR-JTAG-Stecker auf dem Board.

Die Application Note AVR1927 beschreibt, wie die Software BatchISP aus dem FLIP-Softwarepaket genutzt werden kann, um Software mithilfe des UART-Bootloaders auf dem einzuflashen. Freie Software scheint es hierfür mit dem dfu-programmer ebenfalls zu geben.

Veröffentlicht unter Arduino | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

CANtact-Firmware über USB flashen

Die Firmware des CANtact ist dankenswerterweise Open Source, sodass individuelle Änderungen möglicht sind. Allerdings muss eine selbst-compilierte Firmware erstmal in den STM32F042C6-Mikrocontroller eingespielt werden, bevor sie funktionieren kann. Der CANtact bietet im Wesentlichen zwei Möglichkeiten hierfür:

  • Über einen externen, an die SWD-Pins angeschlossenen MCU-Debugger
  • Über den im MCU ROM vorhandenen USB-Bootloader von ST

Hier wird demonstriert, wie der zweite Weg unter Linux funktioniert.

Zunächst muss das mit „BOOT“ gekennzeichnete Pfostensteckerpaar auf der Platine überbrückt werden. Steckt man danach USB an, identifiziert sich die Platine nicht mehr als CANtact, sondern startet im USB-DFU-Modus:

$ lsusb
...
Bus 001 Device 058: ID 0483:df11 STMicroelectronics STM Device in DFU Mode
...

Dann muss am PC die Software dfu-util installiert werden:

sudo apt install dfu-util

Es sollte nun möglich sein, die programmierbaren Speicherbereiche auf dem CANtact auflisten zu lassen:

$ dfu-util --list
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Found DFU: [0483:df11] ver=2200, devnum=58, cfg=1, intf=0, path="1-1.1.2.4", alt=1, name="@Option Bytes  /0x1FFFF800/01*016 e", serial="FFFFFFFEFFFF"
Found DFU: [0483:df11] ver=2200, devnum=58, cfg=1, intf=0, path="1-1.1.2.4", alt=0, name="@Internal Flash  /0x08000000/032*0001Kg", serial="FFFFFFFEFFFF"

In dieser Anleitung gehe ich davon aus, dass die Firmware bereits erfolgreich compiliert wurde. Daraus resultiert (i.d.R. im Ordner cantact-fw/build/) die Datei CANtact-b0.bin. Diese kann nun in den internen MCU-Flash an dessen Start-Adresse 0x080000000 eingespielt werden:

# sudo dfu-util -d 0483:df11 -a 0 -D cantact-fw/build/CANtact-b0.bin -s 0x08000000
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Downloading to address = 0x08000000, size = 14876
Download        [=========================] 100%        14876 bytes
Download done.
File downloaded successfully

Nun wird die „BOOT„-Überbrückung wieder entfernt und das USB-Kabel abgezogen und wieder angesteckt. Danach bootet der CANtact die neue Firmware.

Wer auch normalen PC-Benutzern Rechte zum Firmware-Flashen geben möchte, muss zusätzlich unter /etc/udev/rules.d/ die Datei 49-st-usb-dfu.rules anlegen:

# 0483:df11 - ST's USB DFU bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
Veröffentlicht unter CAN | Verschlagwortet mit , , , , , , , , | Hinterlasse einen Kommentar

Inbetriebnahme des PCAN-USB unter Linux

Der PCAN-USB von Peak System ist ein USB-Adapter zum Verbinden des PCs mit einem CAN-Bus. Die Inbetriebnahme des Adapters unter Linux verlief problemlos. Folgendes Paket muss installiert sein:

Getestet wurde auf einem 64-Bit Debian-System mit Standard-Kernel Version 4.7.0-0.bpo.1-amd64.

Details zur Hardware finden sich auf der Wiki-Seite (siehe Link unten).

Folgende Befehle musste ich eingeben, um CAN-Frames vom Bus zu empfangen:

# Zuerst setze ich die Bus-Bitrate auf 1 Mbps
ip link set can0 type can bitrate 1000000
# Dann aktiviere ich das Netzwerk-Interface (in meinem Fall can0)
ifconfig can0 up
# Danach kann man CAN-Frames vom Bus empfangen
candump can0

Links:

Veröffentlicht unter CAN | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

Vector CAN Panel in QtWidget umwandelbar?

Die Firma Vector bietet Hardware und Software an für die Analyse und Entwicklung von CAN-basierten Technologien, u.a. die Software Panel Designer, mit der im WYSIWYG-Stil graphische Oberflächen erstellt werden können, die CAN-Signale visualisieren.

Leider ist die Verwendung der Software nur mit einer kostenpflichtigen Lizenz möglich, was mich unmittelbar zu der Frage bringt: Geht das auch mit freier Software? Vielleicht mit QtCreator?

Veröffentlicht unter CAN | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Schlechte Darstellung des STM32F446RE-PLLCFGR-Registers in Eclipse’s Memory-View

Die Darstellung des PLL-Konfigurations-Registers PLLCFGR im Block „Reset and clock control“ (RCC) muss nachgebessert werden:

Die Darstellung des PLLCFGR-Registers eines STM32F446RE zur Laufzeit des Mikrocontrollers in Eclipse’s Peripheral Registers/Memory-View

Dargestellt werden nur die Konfigurationsparameter M, N, P und Q. Es fehlt R.

Darüberhinaus ist die Aufgliederung in einzelnen Bits unzwecksmäßig. Hilfreicher wäre es, die Parameter-Werte jeweils zusammengefasst auslesen bzw. schreiben zu können.

Mittig der oben konfigurierte PLL-Block, hier visualisiert von STM32CubeMX; Zu erkennen sind insbesondere die leicht lesbaren Konfigurations-Parameter M,N,P,Q und R.

Verwendet wurde das STM32F4xx_DFP-Pack Version 2.11.0 von Keil mit Eclipse 4.6.3 (Neon 3).

Veröffentlicht unter Bug reports & Feature requests | Verschlagwortet mit , , , , , , , , , | Hinterlasse einen Kommentar

Zeilensensor steckbrett-tauglich machen

Handelsübliche Flachbettscanner funktionieren, indem ein Schlitten die gesamte Länge des einzuscannenden Blattes abfährt und Zeile für Zeile einliest. Dabei wird jeweils eine Zeile in der vollen Breite auf einmal eingelesen, bevor der Schlitten die nächste Position anfährt. Das Einlesen passiert auf speziell für diesen Zweck vorgesehenen Leiterplatten, die im Schlitten eingebaut sind und über einen Zeilensensor verfügen.

Leiterplatte mit Zeilensensor, ausgebaut aus einem Flachbettscanner

Neben dem Zeilensensor ist i.d.R. auch die Spannungsversorgung, ein logischer Signal-Invertierer und drei Bipolar-Transistoren, welche die drei analogen Ausgangssignale für Rot-, Grün- und Blau-Wert eines Pixels, verstärken, auf der Platine vorhanden. Der Invertierer hat die Aufgabe, die Ansteuerung des Sensors zu vereinfachen, da solche Sensoren i.d.R. zwei invertierte Takte zur Ansteuerung erwarten.

Eine solche Platine eignet sich sehr gut, um mit einfachen Mitteln eine recht hochauflösende Sensor-Einheit für ein Spektrometer zu bauen. Daher habe ich mal eine solche Platine aus einem alten Scanner ausgebaut. Statt dem Flachbandkabel wollte ich Steckbrücken-Käbelchen verwenden, um mir die Inbetriebnahme zu vereinfachen:

Flachbandkabel von der Platine abknipsen

 

Mit der Entlötpumpe überschüssiges Lötzinn entfernt

Die Unterseite ist noch hübscher, als die Oberseite geworden

Statt des Flachachbandkabel-Sockels wurden Buchsenleisten aufgelötet

…und nochmal die Unterseite mit den neuen Stiftleisten

Veröffentlicht unter Optik | Hinterlasse einen Kommentar

SciPy error: object has no attribute ‚decorate‘

When using the linker cross reference table to graphviz dot file conversion script from https://balau82.wordpress.com/2013/11/24/analyzing-c-source-files-dependencies-in-a-program/, I get the error:

$ ./cref2dot.py
Traceback (most recent call last):
  File "./cref2dot.py", line 5, in 
    from networkx import MultiDiGraph, write_dot
  File "/usr/lib/python2.7/dist-packages/networkx/__init__.py", line 82, in 
    import networkx.linalg
  File "/usr/lib/python2.7/dist-packages/networkx/linalg/__init__.py", line 9, in 
    from networkx.linalg.algebraicconnectivity import *
  File "/usr/lib/python2.7/dist-packages/networkx/linalg/algebraicconnectivity.py", line 24, in 
    from scipy.sparse.linalg import eigsh, lobpcg
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/__init__.py", line 112, in 
    from .isolve import *
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/isolve/__init__.py", line 6, in 
    from .iterative import *
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/isolve/iterative.py", line 84, in 
    def bicg(A, b, x0=None, tol=1e-5, maxiter=None, xtype=None, M=None, callback=None):
  File "/usr/lib/python2.7/dist-packages/scipy/_lib/_threadsafety.py", line 59, in decorator
    return lock.decorate(func)
  File "/usr/lib/python2.7/dist-packages/scipy/_lib/_threadsafety.py", line 47, in decorate
    return scipy._lib.decorator.decorate(func, caller)
AttributeError: 'module' object has no attribute 'decorate'

The error occurs in scipy/_lib/_threadsafety.py at

...
    def decorate(self, func):
        def caller(func, *a, **kw):
            with self:
                return func(*a, **kw)
        return scipy._lib.decorator.decorate(func, caller)
...

It occurs with Debian package python-scipy, version 0.10.1+dfsg2-1, maintained by the Debian Python Modules Team, and can befixed by changing the above return statement to:

...
        return scipy._lib.decorator.decorator(caller, func)
...
Veröffentlicht unter Bug reports & Feature requests | Verschlagwortet mit , , , , , , | Hinterlasse einen Kommentar