Innholdsfortegnelse:

4-20ma generator/tester som bruker Arduino: 8 trinn
4-20ma generator/tester som bruker Arduino: 8 trinn

Video: 4-20ma generator/tester som bruker Arduino: 8 trinn

Video: 4-20ma generator/tester som bruker Arduino: 8 trinn
Video: Как использовать оптопару Mosfet HW-532 для управления скоростью двигателя постоянного тока до 30 В или нагрузкой с помощью Arduino 2024, Juni
Anonim
4-20ma generator/tester som bruker Arduino
4-20ma generator/tester som bruker Arduino

4-20mA generatorer er tilgjengelig på ebay, men jeg elsker en DIY-delen av ting og bruk av deler jeg har rundt meg.

Jeg ønsket å teste PLCs analoge innganger for å bekrefte våre scada-avlesninger og for å teste utgangen til 4-20mA-instrumenter. Det er masse strøm til spenning omformere og spenning til strøm omformere for arduino på ebay, men de trenger kalibrering skjønt. Jeg kan bruke dette til å kalibrere noen av de omformerne som finnes på ebay og lignende.

Jeg bestemte meg for at jeg skulle lage en generator og tester. På dette tidspunktet er det fremdeles et pågående arbeid og en prototype.

Jeg hadde et gammelt 2.1 lydsystem som ikke ble brukt (små høyttalere). Så jeg brukte en av høyttalerkassene som et kabinett. Jeg hadde også en forsterker som døde på grunn av lyn, jeg fjernet høyttalerterminalen fra forsterkeren for å gjøre det lett å koble til. Jeg har tenkt å lage en PCB i fremtiden og et bedre kabinett.

Rekvisita:

Deleliste.

LCD // 20x4 (tilpass kode hvis din er mindre)

LM7808 // 8volts regulator

LED // Enhver type eller størrelse

Motstand for LED // Passer for LED -typen og 8volt

100 ohm motstand + 47 ohm motstand i serie // Vil bli brukt som shuntmotstand

10K motstand // Arduino analog i beskyttelse mot høyspenning

22K motstand // For å stoppe A0 fra å flyte

Trimpot 100 ohm + 47 ohm motstand i serie // PT100 simulator

35 volt kondensator // Jeg brukte 470uF, bare for å holde svingningene i forsyningsspenningen nede

RTD (PT100 transduser) // Spenning spiller ingen rolle (område)

DIODE (for polaritetsbeskyttelse)

INA219

Arduino

Trinn 1:

Bilde
Bilde

Følgende skjematisk bør komme i gang med hvor du skal legge til delene og koble dem.

LM7808 tillater maks 25 volt inngang som er greit for PLS -systemer, de bruker vanligvis 24 volt strømforsyninger. Legg til en kjøleribbe til regulatoren og ikke bruk den over lengre perioder. Når du slipper 16 volt, får regulatoren mye varme.

Inngangstilførselen mater regulatoren og kobles til INA219 VIN, i denne konfigurasjonen vil INA219 også kunne måle riktig forsyningsspenning minus spenningsfallet fra dioden. Du bør måle diodespenningsfallet og legge det til koden slik at du får riktig avlesning av forsyningsspenningen.

Fra INA219 VOUT til RTD+ slår RTD på. RTD- til bakken fullfører kretsen.

For å teste et PLC-analogt kort vil du koble RTD- til inngangen på det analoge kortet og bakken fra kortet til arduino-bakken. (Sørg for å koble fra ethvert instrument som er festet til kanalen som testes).

R5 og LED1, som indikerer at systemet er slått på.

Regulatoren mates inn i arduino VIN (arduino har innebygd regulator til 5 volt).

Arduino 5V pin går til INA219 for å drive innebygd brikke. INA219 GND til arduino bakken.

Trim gryteviskeren til RTD PIN1 og Trim potten 3 til RTD pin 2 vil simulere en PT100 -tilkobling. (Bytt ledninger hvis du ikke øker mA ved å vri trimpotten med klokken).

Trinn 2: Instrumentutgangstest

For å teste instrumentutgang er det nødvendig med ekstra deler, som en shuntmotstand. Normale 0,25W motstander vil gjøre jobben helt fint. Du kan forlate shuntmotstanden og legge til en ny INA219 for å teste instrumentets utgang. Jeg hadde bare en igjen, så jeg brukte en motstand i stedet.

Testing med shunt kan bare utføres på enhetens negative side. Hvis du bruker den positive siden, vil du forsyne din arduino med mer enn 4 ganger tillatt spenning og slippe røyken ut.

Legg til shuntmotstanden i serie med negativ ledning til instrumentet. Siden av shunten nærmest enheten vil bli den positive analogen for arduino. Den andre siden av shunten nærmest strømforsyningen blir arduino -bakken som fullfører den analoge inngangskretsen.

150 ohm shuntmotstand er det absolutte maksimumet som bør brukes når du bruker en arduino. Motstanden har et spenningsfall lineært til mA som strømmer gjennom den. Jo større mA jo større spenning.

Ved 20mA strøm # 150ohm*0.02A = 3volt til arduino.

Ved 4mA strøm # 150ohm*0.004A = 0.6volt til arduino.

Nå vil du kanskje at spenningen skal være nærmere 5 volt, slik at du kan gi oss hele ADC -serien til arduinoen. (Ikke en god idé).

RTD -er kan nå 30,2mA -utgang (min gjør). 150ohm*0,03A = 4,8 volt. Det er så nært som jeg ønsker å være.

Et annet nettsted indikerte å bruke en 250ohm motstand.

Ved 20mA strøm # 250ohm*0.02A = 5volt til arduino.

Ved 30mA strøm # 250ohm*0,03A = 7,5 volt til arduino.

Du risikerer å brenne ADC og arduino.

For å teste et instrument ute i feltet, ta et 12 volt batteri med deg og koble det til forsyningsinngangen. Bruk av en ekstern strømkilde vil ikke påvirke gjeldende PLC -oppsett.

Ta et 12 volt batteri med deg for å teste et analogt inngangskort i feltet. Koble instrumentet + fra kretsen. Koble jord til instrumentjord og RTD- til den frakoblede instrumentledningen.

Trinn 3: Kalibrering

Kalibrering
Kalibrering

For å kalibrere shuntmotstandsavlesningen, koble RTD- til shuntanalogen. Sett trimpotten slik at den genererte mA er 4mA. Hvis enheten mA ikke er lik, må du endre den første verdien i koden på linje 84. Hvis du øker denne verdien, reduseres mA -avlesningen.

Sett deretter trimpotten til å generere 20mA. Hvis enheten mA ikke er lik, må du endre den andre verdien i koden på linje 84.

Så din 4-20mA blir nå 0,6-3volt (teoretisk). Mer enn nok rekkevidde. Ved å bruke biblioteket fra eRCaGuy vil oversampling gi deg en bedre og stabil avlesning.

Forhåpentligvis leser du dette. Dette er min første instruks, så ta det med ro hvis jeg har gjort en feil et sted eller utelatt noe.

Dette prosjektet er sannsynligvis ikke den beste måten å gjøre det på, men det fungerer for meg og var morsomt å gjøre det.

Noen ideer jeg har ekstra …

Legg til en servo for å rotere trimpotten inne i esken.

Legg til trykknapper for å rotere servoen til venstre eller høyre.

Legg til en digital temperatursensor i regulatorens kjøleribbe for å advare om farlig varme.

Trinn 4: Programmering av Arduino

#inkludere

// #include // Uncomment hvis du bruker en LCD med et skiftregister.

#inkludere

#inkludere

#inkludere

#inkludere

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Ikke kommenter hvis du bruker en LCD med skiftregister.

// | | | _ Låsestift

// | / _ Klokke Pin

// / _ Data/Aktiver pin

byte bitsOfResolution = 12; // kommandert oversamplet oppløsning

usignert lang numSamplesToAvg = 20; // antall prøver I OVERSAMPLED LØSNING du vil ta og gjennomsnittlig

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

flyte shuntspenning = 0,0; // Fra INA219

flytebusspenning = 0,0; // Fra INA219

float current_mA = 0.0; // Fra INA219

float lastspenning = 0,0; // Fra INA219

flyte arduinspenning = 0,0; // Spenningsberegning fra A0 -pinne

Usignert lang A0analogReading = 0;

byte analogIn = A0;

float ma_mapped = 0.0; // Kartspenning fra A0 til 4-20mA

ugyldig oppsett () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Endret bibliotek for mer presisjon på mA

lcd.begin (20, 4); // initialiser LCD -skjermen

lcd.clear ();

lcd.home (); // gå hjem

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

forsinkelse (2000);

lcd.clear ();

}

hulrom ()

{

usignert langstrømMillis = millis ();

konstant langt intervall = 100;

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

Les I2C -enheter med intervaller og gjør noen beregninger

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

hvis (currentMillis - previousMillis> = intervall) {

previousMillis = currentMillis;

Intervall ();

}

Print_To_LCD (); // Jeg trenger sannsynligvis ikke oppdatere LCD -skjermen så raskt og kan flyttes til under Intervall ()

}

tomrom

Intervall () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busspenning = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

lastspenning = (busspenning + (shuntspenning / 1000)) + 0,71; // +0,71 er diodespenningsfallet

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5,0 * A0analogReading); // Beregnet til mV

ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10,0; // Kartet kan ikke bruke flyter. Legg til en 0 bak den tilordnede verdien og del med 10 for å få float -avlesning.

// Kartlegging fra spenningsberegning gir en mer stabil avlesning enn ved bruk av rå ADC -avlesning.

hvis (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // Uten belastning har INA219 en tendens til å lese under -0.01, det gjør vel min.

{

nåværende_mA = 0;

busspenning = 0;

lastspenning = 0;

shuntspenning = 0;

}

}

tomrom

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1,25) {// Uten strøm er dette min mA -lesning, så jeg bare kaster den vekk.

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

}

annet {

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

}

lcd.setCursor (0, 1);

lcd.print ("Enhet:");

lcd.setCursor (10, 1);

hvis (ma_mapped <1,25) {

lcd.print ("ingen enhet");

}

annet {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Generer:");

lcd.setCursor (10, 2);

lcd.print (current_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Supply:");

lcd.setCursor (10, 3);

lcd.print (lastspenning);

lcd.print ("V");

}

Trinn 5: Noen flere bilder

Noen flere bilder
Noen flere bilder

Forsterkerhøyttalerterminal. LED drevet av strømgeneratoren (RTD). Ledninger til analoge kort erstatter lysdioden.

Terminal helt til venstre er for forsyningsinngang. Terminaler til høyre er for instrumentinngang.

Trinn 6: Montering

Passer inn
Passer inn

Alt ser ut til å passe. Jeg brukte silikon for å holde noen ting midlertidig sammen. Trimmegryta er silikon øverst til høyre. Et lite hull ble forboret. Jeg kan justere strømmen fra toppen av boksen.

Trinn 7: Bare bilder

Bare bilder
Bare bilder
Bare bilder
Bare bilder
Bare bilder
Bare bilder
Bare bilder
Bare bilder

Trinn 8: Siste ord

Jeg har testet enhetens utgang med en Allan Bradley PLC. Resultatene var veldig gode. Jeg har full rekkevidde. Jeg har også testet denne enheten med 4-20mA trykksensor som har en innebygd LCD-skjerm. Igjen var resultatene veldig gode. Avlesningene mine ble slått av med et par desimaler.

Jeg skriver min arduino -kode i faner. I PLS kalles de subrutiner. Gjør feilsøking lettere for meg.

Vedlagt er tekstfiler for disse fanene.

Anbefalt: