Innehållsförteckning:

4-20ma generator/testare med Arduino: 8 steg
4-20ma generator/testare med Arduino: 8 steg

Video: 4-20ma generator/testare med Arduino: 8 steg

Video: 4-20ma generator/testare med Arduino: 8 steg
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Juni
Anonim
4-20ma generator/testare som använder Arduino
4-20ma generator/testare som använder Arduino

4-20mA generatorer är tillgängliga på ebay, men jag älskar en DIY-del av saker och att använda delar som jag har.

Jag ville testa våra PLC: s analoga ingångar för att verifiera våra scada-avläsningar och testa utmatningen från 4-20mA-instrument. Det finns massor av ström till spänningsomvandlare och spänning till strömomvandlare för arduino på ebay, men de behöver kalibrering. Jag kan använda detta för att kalibrera någon av de omvandlare som finns på ebay och liknande.

Jag bestämde mig för att jag ska göra en generator och testare. Vid denna tidpunkt är det fortfarande ett pågående arbete och en prototyp.

Jag hade ett gammalt 2.1 -ljudsystem som inte användes (små högtalare). Så jag använde en av högtalarlådorna som ett hölje. Jag hade också en förstärkare som dog på grund av blixtnedslag, jag tog bort högtalarterminalen från förstärkaren för att göra det enkelt att ansluta. Jag tänker göra ett kretskort i framtiden och ett bättre hölje.

Tillbehör:

Reservdelar.

LCD // 20x4 (anpassa koden om din är mindre)

LM7808 // 8volts regulator

LED // Alla typer eller storlekar

Motstånd för LED // Lämplig för LED -typen och 8volt

100 ohm motstånd + 47 ohm motstånd i serie // Kommer att användas som shuntmotstånd

10K motstånd // Arduino analog i skydd mot högspänning

22K motstånd // För att stoppa A0 från att flyta

Trimpot 100 ohm + 47 ohm motstånd i serie // PT100 simulator

35 volt kondensator // Jag använde 470uF, bara för att hålla matningsspänningsfluktuationer nere

RTD (PT100 -givare) // Span spelar ingen roll (intervall)

DIODE (för polaritetsskydd)

INA219

Arduino

Steg 1:

Bild
Bild

Genom att följa schemat bör du komma igång med var du ska lägga till delarna och dra dem.

LM7808 tillåter max 25 volt ingång vilket är bra för PLC -system, de använder i allmänhet 24 volt strömförsörjning. Lägg till en kylfläns till regulatorn och använd den inte under längre perioder. Att tappa 16 volt gör att regulatorn genererar mycket värme.

Ingångsmatningen matar regulatorn och ansluter till INA219 VIN, i denna konfiguration kommer INA219 också att kunna mäta rätt matningsspänning minus spänningsfallet från dioden. Du bör mäta ditt diodspänningsfall och lägga till det i koden så att du får rätt avläsning av matningsspänningen.

Från INA219 VOUT till RTD+ startar RTD. RTD- till jord slutför kretsen.

För att testa ett PLC-analogkort skulle du ansluta RTD- till ingången på det analoga kortet och marken från kortet till arduinojord. (Se till att koppla bort alla instrument som är anslutna till kanalen som testas).

R5 och LED1, vilket indikerar att systemet är påslagen.

Regulatorn matas in i arduino VIN (arduino har inbyggd regulator till 5 volt).

Arduino 5V-stift går till INA219 för att driva det inbyggda chipet. INA219 GND till arduino mark.

Trimgryttorkaren till RTD PIN1 och Trim potten 3 till RTD pin 2 simulerar en PT100 -anslutning. (Byt ut trådarna om du inte ökar mA genom att vrida trimkärlet medurs).

Steg 2: Instrumentutmatningstest

För att testa instrumentets utmatning behövs extra delar, som ett shuntmotstånd. Normala 0,25 W motstånd kommer att göra jobbet alldeles utmärkt. Du kan lämna shuntmotståndet och lägga till en andra INA219 för att testa instrumentets utgång. Jag hade bara en kvar så jag använde ett motstånd istället.

Test med en shunt kan endast göras på enhetens negativa sida. Om du använder den positiva sidan kommer du att förse din arduino med mer än 4 gånger tillåten spänning och släppa ut röken.

Lägg till shuntmotståndet i serie med instrumentets negativa kabel. Sidan av shunten närmast enheten blir den positiva analogen för arduino. Den andra sidan av shunten närmast strömförsörjningen blir arduino -marken som slutför den analoga ingångskretsen.

150 ohm shuntmotstånd är det absoluta maximum som bör användas när du använder en arduino. Motståndet har ett spänningsfall linjärt mot mA som strömmar genom det. Ju större mA desto större spänning.

Vid 20mA ström # 150ohm*0,02A = 3volt till arduino.

Vid 4mA ström # 150ohm*0,004A = 0,6volt till arduino.

Nu kanske du vill att spänningen ska vara närmare 5 volt så att du kan ge oss hela ADC -intervallet för arduino. (Inte en bra idé).

RTD: er kan nå 30,2 mA -utgång (min gör). 150ohm*0,03A = 4,8 volt. Det är så nära som jag skulle vilja vara.

En annan webbplats indikerade att använda ett 250ohm -motstånd.

Vid 20mA ström # 250ohm*0,02A = 5volt till arduino.

Vid 30mA ström # 250ohm*0,03A = 7,5volt till arduino.

Du riskerar att bränna din ADC och arduino.

För att testa ett instrument ute på fältet, ta ett 12 volt batteri med dig och anslut det till matningsingången. Att använda en extern strömkälla påverkar inte den nuvarande PLC -inställningen.

Ta ett 12 volt batteri med dig för att testa ett analogt ingångskort i fältet. Koppla bort instrumentet + från kretsen. Anslut jord till instrumentjord och RTD- till den bortkopplade instrumentkabeln.

Steg 3: Kalibrering

Kalibrering
Kalibrering

För att kalibrera din shuntmotståndsavläsning, koppla RTD- till shuntanalogen. Ställ in din trimkruka så att den genererade mA är 4mA. Om din enhets mA inte är lika ändrar du det första värdet i koden på rad 84. Om du ökar detta värde sänks mA -avläsningen.

Ställ sedan in din trimkanna för att generera 20mA. Om din enhet mA inte är lika, ändra det andra värdet i koden på rad 84.

Så din 4-20mA blir nu 0,6-3volts (teoretisk). Mer än tillräckligt med räckvidd. Genom att använda biblioteket från eRCaGuy ger översampling dig en bättre och stabil avläsning.

Förhoppningsvis läser du detta. Detta är min första instruerbara, så snälla ta det lugnt om jag har gjort ett misstag någonstans eller utelämnat något.

Det här projektet är förmodligen inte det bästa sättet att göra det, men det fungerar för mig och var roligt att göra det.

Några idéer jag har extra …

Lägg till en servo för att rotera trimgrytan inuti lådan.

Lägg till tryckknappar för att vrida servon åt vänster eller höger.

Lägg till en digital temperatursensor i regulatorns kylfläns för att varna för farlig värme.

Steg 4: Programmering av Arduino

#omfatta

// #include // Uncomment om du använder en LCD med ett skiftregister.

#omfatta

#omfatta

#omfatta

#omfatta

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

// LiquidCrystal_SR lcd (3, 4, 2); // Kommentera om du använder en LCD -skärm med skiftregister.

// | | | _ Låsstift

// | / _ Klocknål

// / _ Data/Aktivera PIN

byte bitsOfResolution = 12; // kommanderad översamplad upplösning

osignerat långt numSamplesToAvg = 20; // antal prover PÅ ÖVERSAMLADE RESOLUTION som du vill ta och genomsnitt

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

osignerad lång tidigareMillis = 0;

float shuntspänning = 0,0; // Från INA219

flottörbusspänning = 0,0; // Från INA219

float current_mA = 0.0; // Från INA219

flottörspänning = 0,0; // Från INA219

float arduinovoltage = 0,0; // Spänningsberäkning från A0 -stift

Osignerad lång A0analogReading = 0;

byte analogIn = A0;

float ma_mapped = 0,0; // Kartspänning från A0 till 4-20mA

void setup () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Modifierat bibliotek för mer precision på mA

lcd.begin (20, 4); // initiera LCD -skärmen

lcd.clear ();

lcd.home (); // gå hem

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

fördröjning (2000);

lcd.clear ();

}

void loop ()

{

osignerad lång strömMillis = millis ();

konstant långt intervall = 100;

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

Läs I2C -enheter med jämna mellanrum och gör några beräkningar

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

if (currentMillis - previousMillis> = intervall) {

previousMillis = currentMillis;

Intervall();

}

Print_To_LCD (); // Jag behöver nog inte uppdatera LCD -skärmen så snabbt och kan flyttas till under Intervall ()

}

tomhet

Intervall () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busspänning = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

lastspänning = (busspänning + (shuntspänning / 1000)) + 0,71; // +0,71 är mitt diodspänningsfall

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5,0 * A0analogReading); // Beräknat till mV

ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10,0; // Kartan kan inte använda flottörer. Lägg till en 0 bakom det mappade värdet och dela med 10 för att få float -avläsning.

// Kartläggning från spänningsberäkning ger en mer stabil avläsning än att använda den råa adc -avläsningen.

if (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // Utan belastning tenderar INA219 att läsa under -0.01, det gör väl min.

{

current_mA = 0;

busspänning = 0;

lastspänning = 0;

shuntspänning = 0;

}

}

tomhet

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1,25) {// Med ingen ström är detta min mA -läsning, så jag slänger det bara.

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

}

annat {

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

}

lcd.setCursor (0, 1);

lcd.print ("Enhet:");

lcd.setCursor (10, 1);

if (ma_mapped <1,25) {

lcd.print ("ingen enhet");

}

annat {

lcd.print (ma_mappad);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Generera:");

lcd.setCursor (10, 2);

lcd.print (current_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Supply:");

lcd.setCursor (10, 3);

lcd.print (lastspänning);

lcd.print ("V");

}

Steg 5: Några fler foton

Några fler foton
Några fler foton

Förstärkare högtalarterminal. LED som drivs av strömgeneratorn (RTD). Ledningar för analoga kort ersätter lysdioden.

Terminal längst till vänster är för matningssignal. Terminaler till höger är för instrumentinmatning.

Steg 6: Montering

Passar in
Passar in

Allt verkar passa. Jag använde silikon för att tillfälligt hålla ihop några saker. Trimgrytan är silikon uppe till höger. Ett litet hål förborrades. Jag kan justera strömmen från toppen av lådan.

Steg 7: Bara foton

Bara foton
Bara foton
Bara foton
Bara foton
Bara foton
Bara foton
Bara foton
Bara foton

Steg 8: Slutord

Jag har testat enhetens utdata med en Allan Bradley PLC. Resultaten var mycket bra. Jag har full räckvidd. Jag har också testat den här enheten med 4-20mA trycksensor som har en inbyggd LCD-display. Återigen var resultaten mycket bra. Mina avläsningar var av med ett par decimaler.

Jag skriver min arduino -kod i flikar. I PLC kallas de subrutiner. Gör felsökning enklare för mig.

Bifogade är textfiler på dessa flikar.

Rekommenderad: