Inhaltsverzeichnis:

4-20mA Generator/Tester mit Arduino - Gunook
4-20mA Generator/Tester mit Arduino - Gunook

Video: 4-20mA Generator/Tester mit Arduino - Gunook

Video: 4-20mA Generator/Tester mit Arduino - Gunook
Video: 4-20mA sensor explained with a simple Arduino example! 2024, Dezember
Anonim
4-20mA Generator/Tester mit Arduino
4-20mA Generator/Tester mit Arduino

4-20mA-Generatoren sind bei ebay erhältlich, aber ich liebe den DIY-Teil der Dinge und die Verwendung von Teilen, die ich herumliegen habe.

Ich wollte die analogen Eingänge unserer SPS testen, um unsere Scada-Messwerte zu überprüfen und den Ausgang von 4-20-mA-Instrumenten zu testen. Es gibt jede Menge Strom-Spannungs-Wandler und Spannungs-Strom-Wandler für Arduino bei ebay, sie müssen jedoch kalibriert werden. Ich kann dies verwenden, um jeden dieser Konverter zu kalibrieren, die bei ebay und dergleichen gefunden werden.

Ich habe beschlossen, dass ich einen Generator und einen Tester selbst bauen werde. Zu diesem Zeitpunkt ist es noch in Arbeit und ein Prototyp.

Ich hatte ein altes 2.1-Soundsystem, das nicht verwendet wurde (kleine Lautsprecher). Also habe ich eine der Lautsprecherboxen als Gehäuse verwendet. Ich hatte auch einen Verstärker, der durch Blitzschlag gestorben ist. Ich habe den Lautsprecheranschluss von diesem Verstärker entfernt, um das Anschließen zum Kinderspiel zu machen. Ich beabsichtige, in Zukunft eine Leiterplatte und ein besseres Gehäuse zu machen.

Lieferungen:

Liste der Einzelteile.

LCD // 20x4 (Code anpassen, wenn Ihrer kleiner ist)

LM7808 // 8-Volt-Regler

LED // Jede Art oder Größe

Widerstand für LED // Passend zum LED-Typ und 8volt

100 Ohm Widerstand + 47 Ohm Widerstand in Reihe // Wird als Shunt-Widerstand verwendet

10K Widerstand // Arduino analog zum Schutz gegen Hochspannung

22K Widerstand // Um A0 vom Schweben zu stoppen

Trimpot 100 Ohm + 47 Ohm Widerstand in Reihe // PT100 Simulator

35-Volt-Kondensator // Ich habe 470uF verwendet, nur um die Schwankungen der Versorgungsspannung gering zu halten

RTD (PT100-Messumformer) // Spanne spielt keine Rolle (Bereich)

DIODE (für Verpolungsschutz)

INA219

Arduino

Schritt 1:

Bild
Bild

Wenn Sie dem Schaltplan folgen, sollten Sie wissen, wo Sie die Teile hinzufügen und verdrahten müssen.

Der LM7808 erlaubt einen maximalen Eingang von 25 Volt, was für SPS-Systeme in Ordnung ist, sie verwenden im Allgemeinen 24-Volt-Netzteile. Fügen Sie dem Regler einen Kühlkörper hinzu und verwenden Sie ihn nicht für längere Zeit. Wenn 16 Volt abfallen, erzeugt der Regler viel Wärme.

Die Eingangsversorgung speist den Regler und ist mit dem INA219 VIN verbunden. In dieser Konfiguration kann der INA219 auch die korrekte Versorgungsspannung abzüglich des Spannungsabfalls von der Diode messen. Sie sollten Ihren Diodenspannungsabfall messen und zum Code hinzufügen, damit Sie die richtige Versorgungsspannungsanzeige erhalten.

Vom INA219 VOUT zum RTD+ wird das RTD eingeschaltet. RTD- an Masse schließt den Stromkreis.

Um eine SPS-Analogkarte zu testen, würden Sie RTD- an den Eingang der Analogkarte und die Masse der Karte an die Arduino-Masse anschließen. (Stellen Sie sicher, dass Sie alle an den zu testenden Kanal angeschlossenen Instrumente trennen).

R5 und LED1 zeigen an, dass das System eingeschaltet ist.

Der Regler speist in die arduino VIN ein (arduino hat einen eingebauten Regler auf 5 Volt).

Der Arduino 5V-Pin geht an INA219, um den On-Board-Chip mit Strom zu versorgen. INA219 GND zu Arduino-Masse.

Potentiometer-Wischer auf RTD-PIN1 trimmen und Potentiometer-Pin 3 auf RTD-Pin 2 trimmen simulieren eine PT100-Verbindung. (Vertauschen Sie die Drähte, wenn das Drehen des Trimmpotentiometers im Uhrzeigersinn den mA-Wert nicht erhöht).

Schritt 2: Geräteausgangstest

Zum Testen des Geräteausgangs werden zusätzliche Teile benötigt, wie z. B. ein Shunt-Widerstand. Normale 0,25-W-Widerstände werden die Arbeit gut machen. Sie können den Shunt-Widerstand belassen und einen zweiten INA219 hinzufügen, um den Instrumentenausgang zu testen. Ich hatte nur noch einen übrig, also habe ich stattdessen einen Widerstand verwendet.

Die Prüfung mit einem Shunt kann nur auf der negativen Seite des Geräts durchgeführt werden. Wenn Sie die positive Seite verwenden, versorgen Sie Ihr Arduino mit mehr als der 4-fachen zulässigen Spannung und lassen den Rauch heraus.

Fügen Sie den Shunt-Widerstand in Reihe mit dem negativen Draht des Instruments hinzu. Die Seite des Shunts, die dem Gerät am nächsten ist, wird zum positiven Analogon für Arduino. Die andere Seite des Shunts, die der Stromversorgung am nächsten ist, wird zur Arduino-Masse, die die analoge Eingangsschaltung vervollständigt.

150 Ohm Shunt-Widerstand ist das absolute Maximum, das bei der Verwendung eines Arduino verwendet werden sollte. Der Widerstand hat einen Spannungsabfall linear zu dem durch ihn fließenden mA. Je größer der mA, desto größer die Spannung.

Bei 20 mA Strom # 150 Ohm * 0,02 A = 3 Volt zu Arduino.

Bei 4 mA Strom # 150 Ohm * 0,004 A = 0,6 Volt zu Arduino.

Jetzt möchten Sie vielleicht, dass die Spannung näher an 5 Volt liegt, damit Sie den gesamten ADC-Bereich des Arduino nutzen können. (Keine gute Idee).

RTDs können einen Ausgang von 30,2 mA erreichen (bei mir). 150 Ohm * 0,03 A = 4,8 Volt. Das ist so nah, wie ich sein möchte.

Eine andere Website gab an, einen 250-Ohm-Widerstand zu verwenden.

Bei 20 mA Strom # 250 Ohm * 0,02 A = 5 Volt zu Arduino.

Bei 30 mA Strom # 250 Ohm * 0,03 A = 7,5 Volt zu Arduino.

Sie riskieren, Ihren ADC und Arduino zu verbrennen.

Um ein Gerät im Feld zu testen, nehmen Sie eine 12-Volt-Batterie mit und schließen Sie sie an den Versorgungseingang an. Die Verwendung einer externen Stromquelle hat keinen Einfluss auf das aktuelle SPS-Setup.

Um eine analoge Eingangskarte im Feld zu testen, nehmen Sie eine 12-Volt-Batterie mit. Trennen Sie das Instrument + vom Stromkreis. Verbinden Sie die Masse mit der Instrumentenmasse und das RTD- mit dem abgetrennten Instrumentenkabel.

Schritt 3: Kalibrierung

Kalibrierung
Kalibrierung

Um Ihren Shunt-Widerstandsmesswert zu kalibrieren, verdrahten Sie RTD- mit dem Shunt-Analogeingang. Stellen Sie Ihren Trimmpotentiometer so ein, dass der erzeugte mA 4 mA beträgt. Wenn der mA-Wert Ihres Geräts nicht gleich ist, ändern Sie den ersten Wert im Code in Zeile 84. Wenn Sie diesen Wert erhöhen, wird die mA-Anzeige verringert.

Stellen Sie dann Ihren Trimmpotentiometer so ein, dass er 20 mA erzeugt. Wenn Ihr Gerät mA nicht gleich ist, ändern Sie den zweiten Wert im Code in Zeile 84.

So werden Ihre 4-20 mA jetzt zu 0,6-3 Volt (theoretisch). Mehr als genug Reichweite. Wenn Sie die Bibliothek von eRCaGuy verwenden, erhalten Sie durch Oversampling eine bessere und stabilere Auslesung.

Hoffentlich hast du das gelesen. Dies ist mein erstes anweisbares, also nehmen Sie es bitte leicht, wenn ich irgendwo einen Fehler gemacht oder etwas ausgelassen habe.

Dieses Projekt ist wahrscheinlich nicht der beste Weg, aber es funktioniert für mich und hat Spaß gemacht.

Einige Ideen habe ich extra…

Fügen Sie ein Servo hinzu, um den Trimmpotentiometer in der Box zu drehen.

Fügen Sie Druckknöpfe hinzu, um das Servo nach links oder rechts zu drehen.

Fügen Sie dem Kühlkörper des Reglers einen digitalen Temperatursensor hinzu, um vor gefährlicher Hitze zu warnen.

Schritt 4: Arduino programmieren

#enthalten

// #include //Entkommentieren Sie, wenn Sie ein LCD mit einem Schieberegister verwenden.

#enthalten

#enthalten

#enthalten

#enthalten

//A4 = (SDA)

//A5 = (SCL)

Adafrucht_INA219 ina219;

Flüssigkristall-LCD (12, 11, 5, 4, 3, 2);

// LiquidCrystal_SR lcd(3, 4, 2); // Kommentieren Sie, wenn Sie ein LCD mit einem Schieberegister verwenden.

// | | |_ Verriegelungsstift

// | \_ Uhr-Pin

// \_ Daten/Aktivierungs-Pin

Byte bitsOfResolution = 12; //befohlene überabgetastete Auflösung

unsigned long numSamplesToAvg = 20; //Anzahl der Proben BEI DER ÜBERSAMPELTEN AUFLÖSUNG, die Sie nehmen möchten, und den Durchschnitt

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

Schwimmer-Nebenschlussspannung = 0,0; //Von INA219

Schwimmerbusspannung = 0,0; //Von INA219

Schwimmerstrom_mA = 0.0; //Von INA219

Erhaltungsladespannung = 0,0; //Von INA219

Schwimmer-Arduinospannung = 0,0; // Spannungsberechnung von A0 Pin

Unsigned long A0analogReading = 0;

Byte analogIn = A0;

float ma_mapped = 0.0; // Kartenspannung von A0 bis 4-20mA

Leere Einrichtung () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution(bitsOfResolution);

adc.setNumSamplesToAvg(numSamplesToAvg);

uint32_t aktuelleFrequenz;

ina219.begin();

ina219.setCalibration_32V_30mA(); //Modifizierte Bibliothek für mehr Präzision bei mA

lcd.begin(20, 4); // initialisiere das LCD

lcd.clear();

lcd.home(); // nach Hause gehen

lcd.print("********************");

Verzögerung (2000);

lcd.clear();

}

Leere Schleife ()

{

unsigned long currentMillis = millis();

const langes Intervall = 100;

//&&&&&&&&&&&&&&&&&

Lesen Sie I2C-Geräte in Intervallen aus und führen Sie einige Berechnungen durch

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

if (currentMillis - previousMillis >= Intervall) {

vorherigeMillis = aktuelleMillis;

Intervall();

}

Print_To_LCD(); // Ich muss das LCD wahrscheinlich nicht so schnell aktualisieren und kann unter Intervall () verschoben werden

}

Leere

Intervall() {

Nebenschlussspannung = ina219.getShuntVoltage_mV();

Busspannung = ina219.getBusVoltage_V();

current_mA = ina219.getCurrent_mA();

Lastspannung = (Busspannung + (Shuntspannung / 1000)) + 0,71; // +0,71 ist mein Diodenspannungsabfall

A0analogReading = adc.newAnalogRead(analogIn);

Arduino-Spannung = (5,0 * A0analogReading); // Berechnet zu mV

ma_mapped = map(arduinovoltage, 752, 8459, 30, 220) / 10.0; //Map kann keine Gleitkommazahlen verwenden. Fügen Sie eine 0 hinter dem zugeordneten Wert hinzu und teilen Sie sie durch 10, um eine Float-Anzeige zu erhalten.

// Die Zuordnung aus der Spannungsberechnung ergibt eine stabilere Anzeige als die Verwendung des rohen ADC-Messwerts.

if (Shuntspannung >= -0,10 && Shuntspannung <= -0,01) // Ohne Last tendiert der INA219 dazu, unter -0,01 zu lesen, gut, meine tut es.

{

Strom_mA = 0;

Busspannung = 0;

Lastspannung = 0;

Nebenschlussspannung = 0;

}

}

Leere

Print_To_LCD() {

lcd.setCursor(0, 0);

if (ma_mapped < 1,25) {// Ohne Strom ist dies mein mA-Messwert, also werfe ich ihn einfach weg.

lcd.print("* 4-20mA Generator *");

}

anders {

lcd.print("** Analogtester **");

}

lcd.setCursor(0, 1);

lcd.print("Gerät:");

lcd.setCursor(10, 1);

if (ma_mapped < 1,25) {

lcd.print("kein Gerät");

}

anders {

lcd.print (ma_mapped);

}

lcd.print("mA");

lcd.setCursor(0, 2);

lcd.print("Generieren:");

lcd.setCursor(10, 2);

lcd.print (aktueller_mA);

lcd.print("mA");

lcd.setCursor(0, 3);

lcd.print("Versorgung:");

lcd.setCursor(10, 3);

lcd.print (Lastspannung);

lcd.print("V");

}

Schritt 5: Einige weitere Fotos

Noch ein paar Fotos
Noch ein paar Fotos

Anschluss für Verstärkerlautsprecher. LED, die vom Stromgenerator (RTD) angetrieben wird. Die Verdrahtung der Analogkarte ersetzt die LED.

Die Klemme ganz links ist für den Versorgungseingang. Die Anschlüsse auf der rechten Seite sind für die Instrumenteneingabe.

Schritt 6: Einpassen

Passt in
Passt in

Alles scheint zu passen. Ich habe Silikon verwendet, um einige Sachen vorübergehend zusammenzuhalten. Der Trimmtopf ist oben rechts silikonisiert. Ein kleines Loch wurde vorgebohrt. Ich kann den Strom von der Oberseite der Box einstellen.

Schritt 7: Nur Fotos

Nur Fotos
Nur Fotos
Nur Fotos
Nur Fotos
Nur Fotos
Nur Fotos
Nur Fotos
Nur Fotos

Schritt 8: Schlussworte

Ich habe die Ausgabe dieses Geräts mit einer Allan Bradley-SPS getestet. Die Ergebnisse waren sehr gut. Ich habe die volle Reichweite. Ich habe dieses Gerät auch mit einem 4-20-mA-Drucksensor getestet, der über ein eingebautes LCD-Display verfügt. Die Ergebnisse waren wieder sehr gut. Meine Messwerte waren um ein paar Dezimalstellen daneben.

Ich schreibe meinen Arduino-Code in Tabs. In SPS werden sie als Unterroutinen bezeichnet. Erleichtert das Debuggen für meine.

Angehängt sind Textdateien dieser Registerkarten.

Empfohlen: