Indholdsfortegnelse:

4-20ma generator/tester ved hjælp af Arduino: 8 trin
4-20ma generator/tester ved hjælp af Arduino: 8 trin

Video: 4-20ma generator/tester ved hjælp af Arduino: 8 trin

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

4-20mA generatorer er tilgængelige på ebay, men jeg elsker for det første DIY-delen af tingene og bruger dele, jeg har lagt rundt.

Jeg ville teste vores PLCs analoge indgange for at verificere vores scada-aflæsninger og for at teste output fra 4-20mA-instrumenter. Der er masser af strøm til spændingsomformere og spænding til strømomformere til arduino på ebay, de har dog brug for kalibrering. Jeg kan bruge dette til at kalibrere enhver af de konvertere, der findes på ebay og lignende.

Jeg besluttede, at jeg ville lave en generator og tester. På dette tidspunkt er det stadig et igangværende arbejde og en prototype.

Jeg havde et gammelt 2.1 lydsystem, der ikke blev brugt (små højttalere). Så jeg brugte en af højttalerkasserne som et kabinet. Jeg havde også en forstærker, der døde på grund af lyn, jeg fjernede højttalerterminalen fra forstærkeren for at gøre forbindelsen til en leg. Jeg agter at lave et printkort i fremtiden og et bedre kabinet.

Tilbehør:

Liste over dele.

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

LM7808 // 8 volt regulator

LED // Enhver type eller størrelse

Modstand til LED // Egnet til LED -typen og 8volt

100 ohm modstand + 47 ohm modstand i serie // Vil blive brugt som shuntmodstand

10K modstand // Arduino analog til beskyttelse mod højspænding

22K modstand // For at stoppe A0 fra at flyde

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

35 volt kondensator // Jeg brugte 470uF, bare for at holde udsving i forsyningsspændingen nede

RTD (PT100 transducer) // Spænding er ligegyldigt (område)

DIODE (til polaritetsbeskyttelse)

INA219

Arduino

Trin 1:

Billede
Billede

Ved at følge skematikken skal du komme i gang med, hvor du skal tilføje delene og koble dem.

LM7808 tillader maksimalt 25 volt input, hvilket er fint til PLC -systemer, de bruger generelt 24 volt strømforsyninger. Tilføj en kølelegeme til regulatoren, og brug den ikke i længere perioder. Fald af 16 volt får regulatoren til at generere meget varme.

Indgangsforsyningen tilfører regulatoren og opretter forbindelse til INA219 VIN, i denne konfiguration vil INA219 også være i stand til at måle den korrekte forsyningsspænding minus spændingsfaldet fra dioden. Du bør måle dit diodespændingsfald og tilføje det til koden, så du får den korrekte aflæsning af forsyningsspændingen.

Fra INA219 VOUT til RTD+ tænder RTD'en. FTU- til jorden fuldender kredsløbet.

For at teste et analogt PLC-kort ville du slutte RTD- til indgangen på det analoge kort og jorden fra kortet til arduino-jorden. (Sørg for at afbryde ethvert instrument, der er knyttet til den kanal, der testes).

R5 og LED1, der angiver, at systemet er tændt.

Regulatoren føder ind i arduino VIN (arduino har indbygget regulator til 5 volt).

Arduino 5V pin går til INA219 for at drive den indbyggede chip. INA219 GND til arduinojord.

Trim pot -visker til RTD PIN1 og Trim pot pin 3 til RTD pin 2 vil simulere en PT100 -forbindelse. (Skift ledningerne, hvis drejning af gryden med uret ikke øger mA).

Trin 2: Instrument Output Test

For at teste instrumentets output er der brug for ekstra dele, som en shuntmodstand. Normale 0,25W modstande klarer jobbet fint. Du kan forlade shuntmodstanden og tilføje en anden INA219 for at teste instrumentets output. Jeg havde kun en tilbage, så jeg brugte en modstand i stedet.

Test med en shunt kan kun udføres på enhedens negative side. Hvis du bruger den positive side, vil du forsyne din arduino med mere end 4 gange den tilladte spænding og slippe røgen ud.

Tilføj shuntmodstanden i serie med instrumentets negative ledning. Siden af shunten tættest på enheden bliver den positive analog for arduino. Den anden side af shunten tættest på strømforsyningen bliver arduino -jorden, der fuldender det analoge indgangskredsløb.

150 ohm shuntmodstand er det absolutte maksimum, der skal bruges, når du bruger en arduino. Modstanden har et spændingsfald lineært til mA, der strømmer gennem den. Jo større mA jo større spænding.

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

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

Nu vil du måske have spændingen til at være tættere på 5 volt, så du kan give os det fulde ADC -område af arduinoen. (Ikke en god idé).

FTU’er kan nå 30,2 mA output (Mine gør). 150ohm*0,03A = 4,8 volt. Det er så tæt, som jeg gerne vil være.

Et andet websted angav at bruge en 250ohm modstand.

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

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

Du risikerer at brænde din ADC og arduino.

For at teste et instrument ude i marken skal du tage et 12 volt batteri med dig og tilslutte det til forsyningsindgangen. Brug af en ekstern strømkilde påvirker ikke den nuværende PLC -opsætning.

For at teste et analogt indgangskort i feltet, skal du tage et 12 volt batteri med dig. Afbryd instrumentet + fra kredsløbet. Tilslut jord til instrumentjord og RTD- til den frakoblede instrumentledning.

Trin 3: Kalibrering

Kalibrering
Kalibrering

For at kalibrere din shuntmodstandsaflæsning, led RTD- til shunten Analog. Indstil din trimpotte, så den genererede mA er 4mA. Hvis din enheds mA ikke er lig, skal du ændre den første værdi i koden på linje 84. Forøgelse af denne værdi vil sænke mA -aflæsningen.

Indstil derefter din trimpotte til at generere 20mA. Hvis din enheds mA ikke er lig, skal du ændre den anden værdi i koden på linje 84.

Så din 4-20mA bliver nu til 0,6-3volt (teoretisk). Mere end nok rækkevidde. Ved hjælp af biblioteket fra eRCaGuy vil oversampling give dig en bedre og stabil aflæsning.

Forhåbentlig læser du dette. Dette er min første instruerbare, så tag det roligt, hvis jeg har begået en fejl et sted eller udeladt noget.

Dette projekt er nok ikke den bedste måde at gøre det på, men det fungerer for mig og var sjovt at gøre det.

Nogle ideer jeg har ekstra …

Tilføj en servo for at rotere trimgryden inde i æsken.

Tilføj trykknapper for at rotere servoen til venstre eller højre.

Tilføj en digital temperatursensor til regulatorens kølelegeme for at advare om farlig varme.

Trin 4: Programmering af Arduino

#omfatte

// #include // Fjern kommentar, hvis du bruger en LCD med et skiftregister.

#omfatte

#omfatte

#omfatte

#omfatte

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Fjern kommentar hvis du bruger en LCD med et skiftregister.

// | | | _ Låsestift

// | / _ Urnål

// / _ Data/Aktiver pin

byte bitsOfResolution = 12; // kommanderet oversamplet opløsning

usigneret lang numSamplesToAvg = 20; // antal prøver I OVERSAMPLED OPLØSNING, som du vil tage og gennemsnit

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

float shunt spænding = 0,0; // Fra INA219

flydebusspænding = 0,0; // Fra INA219

flyde strøm_mA = 0,0; // Fra INA219

float belastningsspænding = 0,0; // Fra INA219

float arduinovoltage = 0,0; // Spændingsberegning fra A0 pin

Usigneret lang A0analogReading = 0;

byte analogIn = A0;

float ma_mapped = 0,0; // Kortspænding fra A0 til 4-20mA

ugyldig opsætning () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Ændret bibliotek for mere præcision på mA

lcd.begin (20, 4); // initialiser LCD'et

lcd.clear ();

lcd.home (); // gå hjem

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

forsinkelse (2000);

lcd.clear ();

}

hulrum ()

{

usigneret lang strømMillis = millis ();

konstant langt interval = 100;

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

Læs I2C -enheder med intervaller og foretag nogle beregninger

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

hvis (currentMillis - previousMillis> = interval) {

previousMillis = currentMillis;

Interval();

}

Print_To_LCD (); // Jeg har sandsynligvis ikke brug for at opdatere LCD'en så hurtigt og kan flyttes til under Interval ()

}

ugyldig

Interval () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

belastningsspænding = (busspænding + (shuntspænding / 1000)) + 0,71; // +0,71 er mit diodespændingsfald

A0analogReading = adc.newAnalogRead (analogIn);

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

ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10,0; // Kortet kan ikke bruge floats. Tilføj et 0 bag den kortlagte værdi, og del med 10 for at få float -aflæsning.

// Kortlægning fra spændingsberegning giver mere stabil aflæsning derefter ved hjælp af den rå adc -læsning.

hvis (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // Uden belastning har INA219 en tendens til at læse under -0.01, det gør min.

{

nuværende_mA = 0;

busspænding = 0;

belastningsspænding = 0;

shuntspænding = 0;

}

}

ugyldig

Print_To_LCD () {

lcd.setCursor (0, 0);

hvis (ma_mapped <1,25) {// Uden strøm er dette min mA -læsning, så jeg smider det bare væk.

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

}

andet {

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

}

lcd.setCursor (0, 1);

lcd.print ("Enhed:");

lcd.setCursor (10, 1);

hvis (ma_mapped <1,25) {

lcd.print ("ingen enhed");

}

andet {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Generer:");

lcd.setCursor (10, 2);

lcd.print (nuværende_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Supply:");

lcd.setCursor (10, 3);

lcd.print (belastningsspænding);

lcd.print ("V");

}

Trin 5: Nogle flere fotos

Nogle flere fotos
Nogle flere fotos

Forstærker højttaler terminal. LED drevet af strømgeneratoren (RTD). Ledninger til analoge kort erstatter LED'en.

Terminal yderst til venstre er til forsyningsindgang. Terminaler til højre er til instrumentindgang.

Trin 6: Tilpasning

Passer ind
Passer ind

Alt ser ud til at passe. Jeg brugte silikone til midlertidigt at holde nogle ting sammen. Trimgryden er silikone øverst til højre. Et lille hul blev forboret. Jeg kan justere strømmen fra toppen af boksen.

Trin 7: Bare fotos

Bare fotos
Bare fotos
Bare fotos
Bare fotos
Bare fotos
Bare fotos
Bare fotos
Bare fotos

Trin 8: Afsluttende ord

Jeg har testet denne enheds output med en Allan Bradley PLC. Resultaterne var meget gode. Jeg har fuld rækkevidde. Jeg har også testet denne enhed med 4-20mA tryksensor, der har et indbygget LCD-display. Igen var resultaterne meget gode. Mine aflæsninger blev slukket med et par decimaler.

Jeg skriver min arduino -kode i faner. I PLC'er kaldes de sub -rutiner. Gør debugging lettere for min.

Vedhæftede er tekstfiler på disse faner.

Anbefalede: