Innehållsförteckning:
- Steg 1:
- Steg 2: Instrumentutmatningstest
- Steg 3: Kalibrering
- Steg 4: Programmering av Arduino
- Steg 5: Några fler foton
- Steg 6: Montering
- Steg 7: Bara foton
- Steg 8: Slutord
Video: 4-20ma generator/testare med Arduino: 8 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:36
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:
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
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
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
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
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:
Renegade-i (programmerbar IC-testare som känns som den riktiga saken): 3 steg (med bilder)
Renegade-i (programmerbar IC-testare som känns som den verkliga saken): MILLIONS DOLLAR DREAM. Har du någonsin drömt om att ha din egen IC-testare hemma? Inte bara en pryl som kan testa IC, utan en "programmerbar" maskin som känns som en av flaggskeppsprodukterna för de största aktörerna i semikon -testindustrin, lyckas
Smart IC -testare: 7 steg (med bilder)
Smart IC -testare: Vi vet alla vad IC -testare gör … men för dem som inte gör det - IC -testare är enheter som används för att testa integrerade kretsar genom att skicka in pulser enligt deras sanningstabell. I allmänhet matas IC -nummer in i IC -testare och ett jämförelsetest görs
Hjälpande händer med LED -testare .: 4 steg
Hjälpande händer med LED -testare .: Mycket användbart när man arbetar med mikrochips och hanterar små delar Har en vit led för att lysa upp ett visst område eller det behövs ljus. Här är allt du behöver: - Någon formbar tråd - 1 led (färg är tillval)- 6 krokodilklämmor- 2 AAA-batterier
Nuvarande reglerad LED -testare: 4 steg (med bilder)
Nuvarande reglerad LED -testare: Många människor antar att alla lysdioder kan drivas med en konstant 3V strömkälla. Lysdioder har faktiskt ett icke-linjärt ström-spänningsförhållande. Strömmen växer exponentiellt med den medföljande spänningen. Det finns också missuppfattningen att alla lysdioder av
LED -testare med justerbar ström: 8 steg
LED -testare med justerbar ström: Detta är en lättbyggd LED -testare med flera användbara funktioner. - Justerbar ström på 1 mA till 20 mA - Utvärdera ljusstyrka och effektivitet - Vf (spänningsfall framåt) - Behövs för att beräkna motståndsvärdet - LED kommer att skadas inte om