Jump to content

markus5766h

Members
  • Gesamte Inhalte

    155
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von markus5766h

  1. Für genauere Messungen ist es manchmal nötig, einen einstellbaren Offset zu verwenden (Messleitungsoffset ...).

    Die lässt sich unter Verwendung einiger handelsüblicher Bauteile auch über TF-Komponenten steuern.

    index.php?action=dlattach;topic=4227.0;attach=3109

    Der Analog Out 2.0 erzeugt die "Roh"-Offsetspannung, hierzu wird dieser über einen LM317T mit 4,1VDC versorgt. Am Ausgang des Analog Out hängt ein Spannungsteiler (1:199), gepuffert von einem 10nF Kondensator und einem Impedanzwandler vom Typ OP07. Die Vergleichsspannung wird mit der Stromquelle (BC559) und den Widerständen 12 Ohm und dem Trimmer 100 Ohm erzeugt.

    Zur Beachtung : eine Versorgungs-Spannungsänderung von 100mV erzeugt am Kolektor des BC559 eine Spannungsänderung von 5µV - die Versorgungsspannung muss also sorgfältig aufgebaut sein.

    Beide Spannungen werden über den Differenzverstärker - wieder ein OP07 - zur Offsetspannung von bis zu +-10mV mit einer Auflösung von knapp 5µV (20mV / 4096). Dies ist für die meisten Anwendungen ausreichend.

    Die Spannungsversorgung der OP07 ist in nachfolgendem Bild dargestellt.

    index.php?action=dlattach;topic=4227.0;attach=3110

    Offset.jpg.51b3b1487b6f7e4f1cc58f7002302779.jpg

    6V_0_6V.jpg.7e524c2391206d6137bd50ac15418558.jpg

  2. Moin.

    Wenn Du dies :

    https://www.tinkerunity.org/forum/index.php/topic,3584.msg21700.html#msg21700

    etwas umänderst, kannst Du damit auch Ströme unter 1 mA zuverlässig messen.

     

    Die Stromquelle entfällt, der PT100 wird gegen einen Widerstand (1 % sollte reichen) ausgetauscht, das Massepotential mit den zwei Widerständen bleibt

    bestehen.

    Die beiden 2700-Ohm-Widerstände werden gegen einen 100-Ohm Widerstand ausgetauscht.

    Ein Anschluss des Messwiderstandes an die Pumpe, den zweiten Anschluss an die Opferanode - keine (!) Verbindung der Masse zu dem Korrosionsschutzkreis.

     

    Widerstand / Messbereich / Spannungsfall über R

    100 Ohm / 1mA / 100mV

    1KOhm / 100µA / 100mV

    10KOhm / 10µA / 100mV

     

    index.php?action=dlattach;topic=4185.0;attach=3111

     

    Soll noch genauer und mit kleinerem Spannungsfall gemessen werden, muss ein "richtiger" Differenzverstärker benutzt werden (3 ST. OP-Amps) oder z.B. INA110 o.ä.

    temp.jpg.da28305c0457a5fa3afe8d586cfecf6c.jpg

  3. so, hat etwas gedauert . . .

    ja, das Modul funktioniert einwandfrei, und für viele Anwendungen ist es sicherlich vollkommen ausreichend - auf was die daraus resultierende, geringere Wärmeentwicklung angeht.

    Ich hatte beruflich nur schon mehrere Male mit Drucksensoren (Zylinderdruck / Schiffsdiesel / Generatoren) zu tun - und des Öfteren war der Störspannungsabstand definitiv zu klein, weshalb durch Reihenschaltung eines Widerstandes der Spanungsbereich bei 20mA-Messungen auf 20 V angehoben wurde.

    Hier müssten die Parallelwiderstände im Eingang dann wahrscheinlich 1W-Typen sein, um den Meßwert nicht durch Eigenerwärmung zu verfälschen.

  4. Moin zusammen.

     

    Bei Durchsicht des Schaltplanes für das Dual 0..20mA-Modul ist mir aufgefallen,

    dass der Eingangswiderstand (R6 bzw. R7) nur 91 Ohm beträgt --> heißt, bei einem Stromfluss von 20mA liegt hier eine Spannung von nicht mal 2 Volt an.

    Das ist für den industriellen Einsatz kaum zu gebrauchen :

    insbesondere beim Messen von analogen Größen sollte der Meßspannungsbereich von

    normalerweise 20V bei 24V Versorgungsspannung ausgenutzt werden, um den Störspannungsabstand bei analogen Signalen möglichst klein zu halten,

    selbst im 10V Meßbereich (0..20mA) kann der Widerstand dann 500 Ohm betragen.

    Ist in dieser Hinsicht eine Änderung geplant ?

     

  5. Moin.

     

    1) Der 140mV-Spannungsfall ist nicht dramatisch - und eigentlich völlig normal.

    Jeder - wie auch immer aufgebauter - Spannungsregler quittiert einen erhöhten

    Strombedarf mit Reduzierung der festgelegten Nennspannung.

    2) Die Step-Down-Power-Supply sollte - auf Grund ihrer Eigenschaften - mit einer

    niederohmigen Spannungsquelle betrieben werden : min. 1A (besser mehr) bei einer

    Spannung von min. +6,5V. Ich benutze in einer Meßanordnung eine Versorgung mit

    7,5V - 2A, habe 2 Master-Bricks und 8 Bricklets dran --> Spanungsfall : 45mV.

    3) Die meisten Bricks / Bricklets haben in der Versorgung eine Schutzdiode, die

    die Versorgungsspannung noch mal um ca. 400 ... 450mV reduziert, daher ist der Betrieb des Stapels bei einer kleinen Reduzierung der Spannung kein Problem.

  6. ... ich will aber eigentlich nicht auf SSR ausweichen, da ich Angst habe, dass ein Programmierfehler dann plötzlich für 'Auf' und für 'Ab' Strom liefert... Ich glaub das wäre schlecht...

     

    1) Die gegenseitige Verriegelung, wie sie i.d.R. mit Relais geschaltet wird, lässt sich auch per Software programmieren, so dass Dein o. beschriebener Zustand nicht eintreten kann.

     

    2) Die SSR kann man auch durch das DualRelayBricklet beschalten, somit sind die

    Relays auf dem DualRelayBricklet so 'was wie Koppelrelays - in der Industrie

    durchaus üblich.

    So wird über die beiden Relays nur die Steuer(gleich-)Spannung geschaltet.

     

    3) Zusätzlich zur programmiertechnischen "Verriegelung" kann der Ansteuerungs-

    zustand der SSR's auf AnalogInput oder DigitalIn ausgewertet werden.

     

  7. Schaltplan im Anhang,

    dabei beachten : der Ground vom Brick/Bricklet-System muss mit "gnd"

    der 24V-Schaltung verbunden sein.

    Die Schaltung auf der linken Seite (CV --> Control Voltage) wird nur einmal benötigt - reicht für ca. 10 Komparatoren.

    Der Komparator aus µ741 und dem 1K-Widerstand wird je Solid-State-Relay benötigt.

    Die Leuchtdiode "LC" ist ein Low-Current (2mA, 3mmØ) Typ.

    Als LowCurrent liegen die Flußspannungen der Led's bei 1,885V (1.8mA).

    Kosten :

    linker Schaltungsteil : ca. 5€ mit Bauteilen und Platine, Anschlussverbinder

    rechter Schaltungsteil : ca. 50Ct. ohne Solid-State-Relay.

     

    Im Anhang auch mal zwei Bilder vom Omron-SSR

     

    Bilder von einer Gesamt-Ansteuerung hab' ich momentan nicht - ist verbaut.

     

    Stromverbrauch :

    linker Schaltungsteil : ca. 5mA

    rechter Schaltungsteil inkl. SSR : ca. 17mA (max)

     

    ... ach ja : Größe

    linker Schaltungsteil : ca. 30*30mm

    rechter Schaltungsteil : ca. 20*30mm ohne SSR

    Abmaße Omron Sold State Relay :

    B = 22,5mm

    H = 98mm (inkl. Kühlkörper)

    T = 80mm

     

     

    ... Nachtrag :

    eine andere Möglichkeit ist,

    diese Relais-Karte

    http://www.sainsmart.com/8-channel-dc-5v-relay-module-for-arduino-pic-arm-dsp-avr-msp430-ttl-logic.html

    am IO16 zu betreiben (kostet so um die 8€), ist in den Eingängen über

    Optokoppler geschaltet, so dass auch hier eine gewisse Sicherheit besteht.

    Allerdings sind diese Platinen keine Industrieware,

    wenn also die Tierchen in den Terrarien nicht unbedingt gegrillt oder eingefroren werden sollen - würd' ich davon die Finger lassen.

    Elektronik in diesem Preissegment ist meist sehr nahe an Maximalbelastungen

    beschaltet, so dass der Ausfall nicht lange auf sich warten lässt.

    Omron.jpg.976082ccfe7619488342a3a2acd2f482.jpg

    15A_1.thumb.jpg.8bd70750de3bd706331477f5c424295e.jpg

    15A2.thumb.jpg.69724ad2b12d1b6740792d33249328b7.jpg

  8. Die "Schutzschaltung" betrifft aber nur die Spulenseite des Relais.

    Sekundär - also an den Umschalt-Kontakten - gibt's keine Schutzschaltung / Kompensation.

    Generell ist die Verwendung von Solid-State-Relais sinnvoll, allerdings haben die

    meisten - industriellen - eine "Arbeitsspannung" von 24 Volt - jedenfalls die industriellen Typen wie z.B.OmronG3PB-215B-VD o.ä,

    so daß man trotz dem das Dual-Relay-Bricklet benötigt, da die Bricklets 24Volt

    nicht ansteuern können.

    Ich habe mir etwas anders beholfen :

    IO/16 --> Komparator mit µA741-OP-Amps (kosten nur wenige Cent) --> Ansteuerung

    auf die Omron-Sold-State.

    Die Komparatoren habe ich in der Schwellspannung auf 2,5V eingestellt.

    Ist 'ne sichere Sache, die Omron's verkraften 15A, können direkt auf einer 35mm DIN-Schiene montiert werden (oder Surface-Montage).

    Bei Bedarf kann ich mal ein Schaltplan posten.

    Von den Omron's hab' ich auch noch ca. 30St. auf Lager.

  9. Für "einfache" Sachen wie Auslesen und in einem Textfeld ausgeben

    reicht Dein Code allemal,

    wenn's aber dann doch mal mehr wird, sollte man sich überlegen, wie man

    a) den Datenerhalt

    b) die Datenausgabe - welche von a) getrennt sein sollte

    bewerkstelligt.

    Daher mein Hinweis mit den Arrays oder den Klassen - wenn man sich mal dran gewöhnt hat, wird vieles leichter, weil dadurch der Code übersichtlicher wird.

     

  10. ...

    z.B. Verwende ich mehrere Bricklets, die die Temperatur messen können.

    Alle arbeiten mit "temperature"...

     

    Nun wird aber jede Rückgabe in ihre eigene Variable geschrieben:

     

    TemperatureBricklet -> tmp1 = temperature

    TemperatureIRBricklet -> tmp2 = temperature

    ...

     

    dann benutz doch gleich Arrays für die Bricklets und die Values,

    dann haben die "Values", hier "temperature"

    die gleichen Indizes wie die Bricklets -->

    Bricklets[0..n]

    Temperature[0..n]

     

    oder ggf. eine eigene Class definieren,

    somit hast Du dann dein Bricklet mit seinen Eigenschaften

    in einer Klasse untergebracht - wenn dann die Klassen eindeutig benannt werden,

    ist der Code auch besser lesbar.

  11. ...

    Callbacks:

    private void TemperatureCB(BrickletTemperature sender, short temperature)
    {
        short tmpValue = temperature;
        aGauge2.Invoke(new Action(() => aGauge2.Value = tmpValue / 100));          
    }
    
    private void TemperatureIRCB(BrickletTemperatureIR sender, short temperature)
    {
        short tmpIRValue = temperature;
        aGauge1.Invoke(new Action(() => aGauge1.Value = tmpIRValue / 10));
    }
    

    ...

     

    warum wird denn hier tmpIRValue auf temperatur gecastet,

    langt nicht

      aGauge1.Invoke(new Action(() => aGauge1.Value = temperature / 10));
    

    ?

     

     

  12. ...

    Wenn ich einzelne bricklets abfragen möchte, dann muss ich ja ein connect mit der jeweiligen uid des bricklets absetzen, richtig?

     

    Wie kann ich ggf. hier überprüfen, ob noch eine Verbindung besteht?

    Oder denke ich jetzt in die falsche Richtung?

     

    im Zweifelsfall mit einer Datenabfrage in einem Try-Except bzw. Try-Catch-Ressourcenschutzblock, evt. als Funktion mit boolschem Rückgabewert.

    Man könnte zwar beim Connect eine Statusvariable initialisieren, diese bekommt

    aber von z.B. dem Abziehgen des USB-Steckers nichts mit.

  13. ...

    Wenn ja, wie sollte ich die Abfrage ändern, damit die "Verbindung" zu den Bricks getrennt wird?

     

    ich trenne die Verbindung mit

    ipcon.Disconnect (DELPHI)

    sollte auch in anderen Umgebungen so sein

     

    ---> o.k., hatte ich übersehen, ist im Form.Close drin,

    ich vermute, dass sich das Connection-State auf die interne Verbindung,

    aufgebaut durch die Treiber, bezieht - sonst mal in den entspr. Bindings nachschauen, welcher Rückgabewert für connected wann erzeugt wird.

     

  14. ... may be, one for Wessels, they are communicating over RS-485 Interface

    with NMEA-Records.

    Some also have 0..20mA-Outputs for Speed and Direction.

    Price-Bandwith : from 70€ ... 1800€

     

    for analog Outputs :

    http://www.windspeed.co.uk/ws/index.php?option=displaypage&Itemid=47&op=page&SubMenu=

     

    for analog and NMEA-Output :

    http://images.google.de/imgres?imgurl=http://gillinstruments.com/images/products/anemometer/windsonic-m/windsonic-m-wind-sensor.png&imgrefurl=http://gillinstruments.com/products/anemometer/windsonic-m.html&h=310&w=271&tbnid=meLoMuZap0sxwM:&tbnh=90&tbnw=79&docid=OrC3CHzrRIq02M&usg=__are1GlOed-I0xraNvigUqdnQRCc=&sa=X&ved=0ahUKEwiZ3f2579fPAhUD7B4KHbeaCQAQ9QEITjAE

  15. ...

    Du kannst getchar() durch ein while (true) Schleife ersetzen und dort regelmäßig alle 10 Millisekunden deine knopf Variable prüfen.

    ...

    Für usleep muss du noch unistd.h includen. Falls du auf Windows bist, musst du usleep(10000); durch Sleep(10); ersetzen und windows.h includen.

     

    wird aber nie wirklich 10ms sein : Windows selbst gibt eine min. Sleep-Step von

    15..16ms an, da die Funktion Sleep nicht genau genug arbeitet, wer's genauer haben möchte muß auf den Performance Counter ausweichen.

    Zudem friert die Funktion Sleep in einer Schleife das Programm ein, daher sollte so eine Funktion dann in einem eigenen Thread eingebunden sein.

    ... nur so als Ergänzung

  16. Ok, gefunden, schalte den Range Check aus, ist ja bei dir an, denn wenn ich z.B. im LEConverter {$R+} extra hinzufüge bekomme ich deinen 1091.

    Entweder in den globalen Compiler Flags oder so

    unit LEConverter;
    
    {$R-}
    {$ifdef FPC}{$mode OBJFPC}{$H+}{$endif}

     

    o.k., danke

    wechsel dann mal von global auf Unit-bezogene Compiler-Schalter,

    da ich sehr viel mit Arrays arbeite,

    hab' ich den Range-Check meist global benutzt.

  17. . . . vielleicht auch interessant :

     

    Delphi 10.1 Berlin

    STARTER EDITION

    Promotion Download

    "Embarcadero® Delphi 10.1 Berlin Starter is a great way to get started building high-performance Delphi apps for Windows. Delphi Starter includes a streamlined IDE, code editor, integrated debugger, two-way visual designers to speed development, hundreds of visual components, and a limited commercial use license. Database components and drivers are not included."

    https://www.embarcadero.com/de/products/delphi/starter/promotional-download

  18. Ich komme gar nicht soweit: 2 Fehler beim Erzeugen eines neuen Projects innerhalb der Bindings:

    [Fehler] BlockingQueue.pas(17): $IFEND erwartet, aber $ENDIF gefunden
    [Fataler Fehler] BlockingQueue.pas(25): Datei nicht gefunden: 'Generics.Collections.dcu'
    

    Mit D7 Pro.

    ... das sind die neusten Units (Bindings), den Fehler hab' ich auch - benutze

    ältere (vorige Version) Bindings.

    Die Generics sind - glaub' ich - in neueren Delphi-Versionen vorhanden

    - Rad Studio (ab Version 9) ...

     

    http://docwiki.embarcadero.com/Libraries/Berlin/de/System.Generics.Collections

     

    sollte vielleicht in einer Versions-Abfrage gekapselt werden,

    sonst sind "ältere" Delphi-Versionen nicht mehr nutzbar,

    wie z.B. auch D7 und Unicode . . .

     

    das IFEND kann umgeschrieben werden . . .

×
×
  • Neu erstellen...