INHOUDSOPGAWE:

4-20ma generator/toetser wat Arduino gebruik: 8 stappe
4-20ma generator/toetser wat Arduino gebruik: 8 stappe

Video: 4-20ma generator/toetser wat Arduino gebruik: 8 stappe

Video: 4-20ma generator/toetser wat Arduino gebruik: 8 stappe
Video: 4-20 MA Transmitter: How Does It Work? 2024, Desember
Anonim
4-20ma generator/toetser met behulp van Arduino
4-20ma generator/toetser met behulp van Arduino

4-20mA kragopwekkers is beskikbaar op eBay, maar ek hou van die DIY-deel van dinge en die gebruik van onderdele wat ek het.

Ek wou die analoog insette van ons PLC toets om ons scada-metings te verifieer en die uitset van 4-20mA-instrumente te toets. Daar is baie stroom na spanning omsetters en spanning na stroom omsetters vir arduino op eBay, maar hulle benodig egter kalibrasie. Ek kan dit gebruik om enige van die omsetters wat op eBay en dies meer gevind word, te kalibreer.

Ek het besluit dat ek 'n kragopwekker en toetser gaan doen. Op hierdie tydstip is dit nog steeds 'n werk aan die gang en 'n prototipe.

Ek het 'n ou 2.1 klankstelsel gehad wat nie gebruik is nie (klein luidsprekers). Ek gebruik dus een van die luidsprekerkaste as 'n omhulsel. Ek het ook 'n versterker gehad wat dood is as gevolg van weerlig, ek het die luidsprekeraansluiting van die versterker verwyder om 'n briesie te maak. Ek is van plan om in die toekoms 'n PCB en 'n beter omhulsel te maak.

Benodighede:

Onderdele lys.

LCD // 20x4 (pas kode aan as joune kleiner is)

LM7808 // 8volt regulator

LED // Enige tipe of grootte

Weerstand vir LED // Geskik vir die tipe LED en 8volt

100 ohm weerstand + 47 ohm weerstand in serie // Sal as shuntweerstand gebruik word

10K -weerstand // Arduino -analoog ter beskerming teen hoogspanning

22K weerstand // Om te keer dat A0 dryf

Trimpot 100 ohm + 47 ohm weerstand in serie // PT100 simulator

35 volt -kondensator // Ek het 470uF gebruik, net om die skommelinge van die voedingsspanning te beperk

RTD (PT100 transducer) // Span maak nie saak nie (omvang)

DIODE (vir polariteitsbeskerming)

INA219

Arduino

Stap 1:

Beeld
Beeld

As u die skematiese aanwysing volg, moet u begin met die plek waar u die dele moet byvoeg en dit moet bedraad.

Die LM7808 laat 'n maksimum van 25 volt ingang toe, wat goed is vir PLC -stelsels; hulle gebruik gewoonlik 24 volt kragbronne. Voeg 'n heatsink by die regulator en moenie dit vir lang periodes gebruik nie. Deur 16 volt te laat sak, veroorsaak die reguleerder baie hitte.

Die ingangstoevoer voed die reguleerder en maak verbinding met die INA219 VIN, in hierdie opset kan die INA219 ook die korrekte voedingsspanning minus die spanningsval van die diode meet. U moet die daling van die diodespanning meet en dit by die kode voeg sodat u die korrekte voedingsspanning kan aflees.

Van die INA219 VOUT tot die RTD+ skakel die RTD aan. RTD- tot grond voltooi die kring.

Om 'n analoge PLC-kaart te toets, sou u RTD- verbind met die ingang op die analoogkaart en die grond van die kaart na die arduino-grond. (Maak seker dat u enige instrument wat aan die kanaal getoets is, ontkoppel).

R5 en LED1, wat aandui dat die stelsel aangeskakel is.

Die reguleerder voer die arduino VIN in (arduino het 'n ingeboude reguleerder tot 5 volt).

Die Arduino 5V-pen gaan na INA219 om die ingeboude chip aan te dryf. INA219 GND tot arduino gemaal.

Sny potveër na RTD PIN1 en Knip potpen 3 tot RTD -pen 2 na, sal 'n PT100 -verbinding naboots. (Ruil die drade om as die afwerkingspot met die kloksgewys draai nie die mA verhoog nie).

Stap 2: Instrumentuitvoertoets

Om die uitvoer van die instrument te toets, is ekstra dele nodig, soos 'n shuntweerstand. Normale 0.25W weerstande sal die werk goed doen. U kan die shuntweerstand verlaat en 'n tweede INA219 byvoeg om die uitvoer van die instrument te toets. Ek het net een oor, so ek het eerder 'n weerstand gebruik.

Toets met 'n shunt kan slegs aan die negatiewe kant van die toestel gedoen word. As u die positiewe kant gebruik, voorsien u meer as 4 keer die toegelate spanning van u arduino en laat die rook uit.

Voeg die shuntweerstand in serie met die negatiewe draad van die instrument. Die kant van die shunt naaste aan die toestel sal die positiewe analoog vir arduino word. Die ander kant van die shunt wat die naaste aan die kragtoevoer is, word die arduino -grond wat die analoog ingangskring voltooi.

150 ohm shuntweerstand is die absolute maksimum wat gebruik moet word by die gebruik van 'n arduino. Die weerstand het 'n spanningsval wat lineêr is na die mA wat daardeur vloei. Hoe groter die mA hoe groter die spanning.

By 20mA stroom # 150ohm*0.02A = 3volt na arduino.

By 4mA stroom # 150ohm*0.004A = 0.6volt na arduino.

Nou wil u miskien hê dat die spanning nader aan 5 volt moet wees, sodat u die volledige ADC -reeks van die arduino kan gebruik. (Nie 'n goeie idee nie).

RTD's kan 'n uitset van 30,2 mA bereik (myne doen dit). 150ohm*0,03A = 4,8 volt. Dit is so naby as wat ek sou wou wees.

'N Ander webwerf dui aan dat 'n weerstand van 250 ohm gebruik word.

By 20mA stroom # 250ohm*0.02A = 5volt na arduino.

By 'n stroom van 30 mA # 250ohm*0,03A = 7,5 volt na arduino.

U loop die risiko om u ADC en arduino te verbrand.

Om 'n instrument in die veld te toets, neem 'n 12 volt -battery saam en koppel dit aan die voedingsingang. Die gebruik van 'n eksterne kragbron sal nie die huidige PLC -opstelling beïnvloed nie.

Om 'n analoog ingangskaart in die veld te toets, neem 'n 12 volt -battery saam. Ontkoppel die instrument + van die stroombaan. Koppel die grond aan die instrumentaarde en die RTD- met die ontkoppelde instrumentdraad.

Stap 3: Kalibrasie

Kalibrasie
Kalibrasie

Om u shuntweerstandlesing te kalibreer, dra RTD- na die shunt Analog in. Stel u trimpot in sodat die gegenereerde mA 4mA is. As u toestel se mA nie gelyk is nie, verander dan die eerste waarde in die kode op reël 84. Deur hierdie waarde te verhoog, word die mA -uitlees verlaag.

Stel dan u snypot in om 20mA op te wek. As u toestel -mA nie gelyk is nie, verander die tweede waarde in die kode op reël 84.

Dus word u 4-20mA nou 0,6-3volt (teoreties). Meer as genoeg omvang. Deur die biblioteek van eRCaGuy te gebruik, bied oorsampling u 'n beter en stabiele uitlees.

Hopelik lees jy dit. Dit is my eerste instruksie, so neem dit rustig as ek iewers 'n fout gemaak het of iets weggelaat het.

Hierdie projek is waarskynlik nie die beste manier om dit te doen nie, maar dit werk vir my en was baie lekker om dit te doen.

'N Paar idees wat ek ekstra het …

Voeg 'n servo by om die snypot in die boks te draai.

Voeg drukknoppies by om die servo na links of regs te draai.

Voeg 'n digitale temperatuursensor by die koeler van die reguleerder om te waarsku vir gevaarlike hitte.

Stap 4: Arduino programmeer

#insluit

// #include // Uncomment as jy 'n LCD met 'n skofregister gebruik.

#insluit

#insluit

#insluit

#insluit

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Gee kommentaar as u 'n LCD met 'n skofregister gebruik.

// | | | _ Grendelpen

// | / _ Klokpen

// / _ Data/Aktiveer speld

byte bitsOfResolution = 12; // beveel oorbeelde resolusie

ongetekende lang numSamplesToAvg = 20; // aantal monsters BY DIE OORSAMPLEDE RESOLUTIE wat u wil neem en gemiddeld

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

ongetekende lang vorigeMillis = 0;

float shuntvoltage = 0.0; // Vanaf INA219

vlot busspanning = 0.0; // Vanaf INA219

dryfstroom_mA = 0.0; // Vanaf INA219

float load voltage = 0.0; // Vanaf INA219

float arduinovoltage = 0.0; // Spanningsberekening vanaf A0 -pen

Ongetekende lang A0analogReading = 0;

byte analoogIn = A0;

float ma_mapped = 0.0; // Kaartspanning van A0 tot 4-20mA

ongeldige opstelling () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t huidige frekwensie;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Gewysigde biblioteek vir meer presisie oor mA

lcd.begin (20, 4); // initialiseer die LCD

lcd.clear ();

lcd.home (); // gaan huis toe

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

vertraging (2000);

lcd.clear ();

}

leemte lus ()

{

ongetekende lang stroomMillis = millis ();

konst lang interval = 100;

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

Lees I2C -toestelle met tussenposes en doen 'n paar berekeninge

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

if (currentMillis - previousMillis> = interval) {

vorigeMillis = currentMillis;

Interval ();

}

Print_To_LCD (); // Ek hoef waarskynlik nie die LCD so vinnig op te dateer nie, en ek kan dit onder Interval () skuif

}

nietig

Interval () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

lasspanning = (busspanning + (shuntspanning / 1000)) + 0,71; // +0,71 is my diodespanningsval

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analogReading); // Bereken tot mV

ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10.0; // Kaart kan nie vlotte gebruik nie. Voeg 'n 0 agter die gekarteerde waarde by en deel met 10 om 'n float -uitlees te kry.

// Die kartering van die spanningberekening gee 'n meer stabiele uitlees dan die gebruik van die rou ADC -lesing.

if (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // Met geen las is die INA219 geneig om onder -0.01 te lees, wel myne.

{

huidige_mA = 0;

busspanning = 0;

laaispanning = 0;

shuntspanning = 0;

}

}

nietig

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Met geen stroom is dit my mA -lesing, so ek gooi dit net weg.

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

}

anders {

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

}

lcd.setCursor (0, 1);

lcd.print ("Toestel:");

lcd.setCursor (10, 1);

as (ma_kaart <1.25) {

lcd.print ("geen toestel");

}

anders {

lcd.print (ma_kaart);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Genereer:");

lcd.setCursor (10, 2);

lcd.print (huidige_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Verskaf:");

lcd.setCursor (10, 3);

lcd.print (laaispanning);

lcd.print ("V");

}

Stap 5: Nog 'n paar foto's

Nog 'n paar foto's
Nog 'n paar foto's

Versterker luidspreker terminale. LED aangedryf deur die stroomopwekker (RTD). Bedrading van 'n analoog kaart vervang die LED.

Terminal heel links is vir toevoerinvoer. Terminale aan die regterkant is vir instrumentinvoer.

Stap 6: Inpas

Inpas
Inpas

Alles blyk te pas. Ek het silikoon gebruik om dinge tydelik bymekaar te hou. Die afwerkingpot is regs bo in silikoon. 'N Klein gaatjie is voorgeboor. Ek kan die stroom aan die bokant van die boks aanpas.

Stap 7: Net foto's

Net foto's
Net foto's
Net foto's
Net foto's
Net foto's
Net foto's
Net foto's
Net foto's

Stap 8: Finale woorde

Ek het die uitvoer van hierdie toestel getoets met 'n Allan Bradley PLC. Die resultate was baie goed. Ek het die hele reeks bereik. Ek het hierdie toestel ook getoets met 'n druksensor van 4-20 mA met 'n ingeboude LCD-skerm. Weereens was die resultate baie goed. My lesings was met 'n paar desimale af.

Ek skryf my arduino -kode op oortjies. In PLC's word dit subroetines genoem. Maak ontfouting makliker vir my.

Aangeheg is tekslêers van die oortjies.

Aanbeveel: