Inhoudsopgave:
- Stap 1:
- Stap 2: Instrumentuitgangstest
- Stap 3: Kalibratie
- Stap 4: Arduino programmeren
- Stap 5: Nog wat foto's
- Stap 6: Inpassen
- Stap 7: Alleen foto's
- Stap 8: Laatste woorden
Video: 4-20ma generator/tester met Arduino - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Generatoren van 4-20 mA zijn verkrijgbaar op ebay, maar ik ben dol op het doe-het-zelf-gedeelte van dingen en het gebruik van onderdelen die ik heb liggen.
Ik wilde de analoge ingangen van onze PLC testen om onze scada-uitlezingen te verifiëren en om de output van 4-20mA-instrumenten te testen. Er zijn heel veel stroom-naar-spanning-omzetters en spanning-naar-stroom-omzetters voor arduino op ebay, ze moeten echter worden gekalibreerd. Ik kan dit gebruiken om elk van die converters te kalibreren die op eBay en dergelijke te vinden zijn.
Ik besloot dat ik een generator en tester zou maken. Op dit moment is het nog een work in progress en een prototype.
Ik had een oud 2.1-geluidssysteem dat niet werd gebruikt (kleine luidsprekers). Dus ik gebruikte een van de luidsprekerboxen als behuizing. Ik had ook een versterker die het begaf door blikseminslag, ik heb de luidsprekeraansluiting van die versterker verwijderd om het aansluiten een fluitje van een cent te maken. Ik ben van plan om in de toekomst een PCB te maken en een betere behuizing.
Benodigdheden:
Onderdelen lijst.
LCD // 20x4 (pas de code aan als de jouwe kleiner is)
LM7808 // 8volt regelaar
LED // Elk type of formaat
Weerstand voor LED // Passend bij het LED type en 8volt
100 ohm weerstand + 47 ohm weerstand in serie // Wordt gebruikt als shuntweerstand
10K weerstand // Arduino analoog in bescherming tegen hoogspanning
22K weerstand // Om te voorkomen dat A0 gaat zweven
Trimpot 100 ohm + 47 ohm weerstand in serie // PT100 simulator
35 volt condensator // Ik gebruikte 470uF, alleen om fluctuaties in de voedingsspanning laag te houden
RTD (PT100-transducer) // Span doet er niet toe (bereik)
DIODE (voor polariteitsbeveiliging)
INA219
Arduino
Stap 1:
Door het schema te volgen, kunt u beginnen waar u de onderdelen moet toevoegen en bedraden.
De LM7808 staat maximaal 25 volt toe wat prima is voor PLC-systemen, ze gebruiken over het algemeen 24 volt voedingen. Voeg een koellichaam toe aan de regelaar en gebruik deze niet voor langere tijd. Als je 16 volt laat vallen, genereert de regelaar veel warmte.
De ingangsvoeding voedt de regelaar en maakt verbinding met de INA219 VIN, in deze configuratie kan de INA219 ook de juiste voedingsspanning meten minus de spanningsval van de diode. U moet de spanningsval van uw diode meten en aan de code toevoegen, zodat u de juiste voedingsspanningsaflezing krijgt.
Van de INA219 VOUT tot de RTD+ zet de RTD aan. RTD-naar aarde voltooit het circuit.
Om een analoge PLC-kaart te testen, sluit u RTD- aan op de ingang op de analoge kaart en de aarde van de kaart op Arduino-aarde. (Zorg ervoor dat u elk instrument dat op het te testen kanaal is aangesloten loskoppelt).
R5 en LED1, wat aangeeft dat het systeem is ingeschakeld.
De regelaar voedt zich met de arduino VIN (arduino heeft een ingebouwde regelaar tot 5 volt).
Arduino 5V-pin gaat naar INA219 om de ingebouwde chip van stroom te voorzien. INA219 GND naar arduino-aarde.
Trimpot-afstrijker naar RTD PIN1 en Trimpot-pin 3 naar RTD-pin 2 simuleren een PT100-verbinding. (Verwissel de draden als het draaien van de trimpotmeter met de klok mee de mA niet verhoogt).
Stap 2: Instrumentuitgangstest
Om de output van het instrument te testen zijn extra onderdelen nodig, zoals een shuntweerstand. Normale weerstanden van 0,25 W zullen het werk prima doen. U kunt de shuntweerstand laten staan en een tweede INA219 toevoegen om de instrumentuitgang te testen. Ik had er nog maar één over, dus ik gebruikte in plaats daarvan een weerstand.
Testen met een shunt kan alleen aan de negatieve kant van het apparaat. Als je de positieve kant gebruikt, voorzie je je Arduino van meer dan 4 keer de toegestane spanning en laat je de rook ontsnappen.
Voeg de shuntweerstand toe in serie met de negatieve draad van het instrument. De kant van de shunt die zich het dichtst bij het apparaat bevindt, wordt de positieve analoog voor Arduino. De andere kant van de shunt die zich het dichtst bij de voeding bevindt, wordt de arduino-aarde die het analoge ingangscircuit voltooit.
Een shuntweerstand van 150 ohm is het absolute maximum dat moet worden gebruikt bij het gebruik van een arduino. De weerstand heeft een spanningsval die lineair is met de mA die er doorheen stroomt. Hoe groter de mA, hoe groter de spanning.
Bij 20mA stroom # 150ohm*0.02A = 3volt naar arduino.
Bij 4mA stroom # 150ohm*0.004A = 0.6volt naar arduino.
Nu wil je misschien dat de spanning dichter bij 5 volt ligt, zodat je het volledige ADC-bereik van de Arduino kunt gebruiken. (Geen goed idee).
RTD's kunnen een output van 30,2 mA bereiken (de mijne wel). 150ohm*0.03A = 4.8volt. Dat is zo dichtbij als ik zou willen zijn.
Een andere website gaf aan een 250ohm weerstand te gebruiken.
Bij 20mA stroom # 250ohm*0.02A = 5volt naar arduino.
Bij 30mA stroom # 250ohm*0.03A = 7.5volt naar arduino.
Je loopt het risico je ADC en Arduino te verbranden.
Om een instrument in het veld te testen, neem je een 12 volt batterij mee en sluit je deze aan op de voedingsingang. Het gebruik van een externe voedingsbron heeft geen invloed op de huidige PLC-setup.
Om een analoge ingangskaart in het veld te testen, neem je een 12volt batterij mee. Koppel het instrument + los van het circuit. Sluit aarde aan op instrumentaarde en de RTD- op de losgekoppelde instrumentdraad.
Stap 3: Kalibratie
Om de aflezing van uw shuntweerstand te kalibreren, sluit u RTD- aan op de shunt Analog in. Stel uw trimpot zo in dat de gegenereerde mA 4 mA is. Als de mA van uw apparaat niet gelijk is, wijzigt u de eerste waarde in de code op regel 84. Als u deze waarde verhoogt, wordt de mA-uitlezing lager.
Stel vervolgens uw trimpot in om 20mA te genereren. Als de mA van uw apparaat niet gelijk is, wijzigt u de tweede waarde in de code op regel 84.
Dus je 4-20mA wordt nu 0,6-3volt (theoretisch). Meer dan voldoende bereik. Als u de bibliotheek van eRCaGuy gebruikt, geeft oversampling u een betere en stabielere uitlezing.
Hopelijk leest u dit. Dit is mijn eerste instructable, dus doe het rustig aan als ik ergens een fout heb gemaakt of iets heb weggelaten.
Dit project is waarschijnlijk niet de beste manier om het aan te pakken, maar het werkt voor mij en het was leuk om te doen.
Enkele ideeën heb ik extra…
Voeg een servo toe om de trimpot in de doos te draaien.
Voeg drukknoppen toe om de servo naar links of rechts te draaien.
Voeg een digitale temperatuursensor toe aan het koellichaam van de regelaar om te waarschuwen voor gevaarlijke hitte.
Stap 4: Arduino programmeren
#erbij betrekken
// #include // Uncomment als je een LCD met een shift register gebruikt.
#erbij betrekken
#erbij betrekken
#erbij betrekken
#erbij betrekken
//A4 = (SDA)
//A5 = (SCL)
Adafruit_INA219 ina219;
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
// LiquidCrystal_SR lcd (3, 4, 2); // Uncomment als u een LCD met een schuifregister gebruikt.
// | | |_ Vergrendelpen
// | \_ Klok Pin
// \_ Gegevens/Pin inschakelen
byte bitsOfResolution = 12; //opdracht overbemonsterde resolutie
unsigned long numSamplesToAvg = 20; //aantal monsters BIJ DE OVERSAMPLED RESOLUTIE die u wilt nemen en het gemiddelde nemen
ADC_prescaler_t ADCSpeed = ADC_DEFAULT;
unsigned lange vorigeMillis = 0;
vlotter-shuntspanning = 0,0; //Van INA219
vlotterbusspanning = 0,0; //Van INA219
vlotter stroom_mA = 0,0; //Van INA219
vlotterbelastingsspanning = 0,0; //Van INA219
float arduinovoltage = 0.0; // Spanningsberekening van A0-pin
Niet-ondertekende lange A0analogReading = 0;
byte analoogIn = A0;
float ma_mapped = 0.0; // Kaartspanning van A0 tot 4-20mA
ongeldige setup() {
adc.setADCSpeed(ADCSpeed);
adc.setBitsOfResolution(bitsOfResolution);
adc.setNumSamplesToAvg(numSamplesToAvg);
uint32_t stroomfrequentie;
ina219.begin();
ina219.setCalibration_32V_30mA(); // Gewijzigde bibliotheek voor meer precisie op mA
lcd.begin(20, 4); // initialiseer het LCD-scherm
lcd.wissen();
lcd.home (); // ga naar huis
lcd.print("********************");
vertraging (2000);
lcd.wissen();
}
lege lus()
{
unsigned long currentMillis = millis();
const lang interval = 100;
//&&&&&&&&&&&&&&&&&
Lees I2C-apparaten met tussenpozen en doe wat berekeningen
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if (currentMillis - previousMillis >= interval) {
vorigeMillis = huidigeMillis;
Interval();
}
Print_Naar_LCD(); // Ik hoef het LCD-scherm waarschijnlijk niet zo snel bij te werken en kan worden verplaatst naar onder Interval()
}
leegte
Interval() {
shuntspanning = ina219.getShuntVoltage_mV();
busspanning = ina219.getBusVoltage_V();
huidige_mA = ina219.getCurrent_mA();
belastingsspanning = (busspanning + (shuntspanning / 1000)) + 0,71; // +0,71 is mijn diodespanningsval
A0analogReading = adc.newAnalogRead(analogIn);
arduinovoltage = (5,0 * A0analoge uitlezing); // Berekend naar mV
ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10.0; // Kaart kan geen drijvers gebruiken. Voeg een 0 toe achter de toegewezen waarde en deel deze door 10 om de float-uitlezing te krijgen.
// In kaart brengen van spanningsberekening geeft een stabielere uitlezing dan het gebruik van de onbewerkte adc-uitlezing.
if (shuntvoltage >= -0.10 && shuntvoltage <= -0.01) // Zonder belasting heeft de INA219 de neiging om onder -0.01 te lezen, de mijne wel.
{
stroom_mA = 0;
busspanning = 0;
belastingsspanning = 0;
shuntspanning = 0;
}
}
leegte
Print_To_LCD() {
lcd.setCursor(0, 0);
if (ma_mapped < 1.25) { // Zonder stroom is dit mijn mA-waarde, dus ik gooi het gewoon weg.
lcd.print ("* 4-20mA-generator *");
}
anders {
lcd.print("** Analoge tester **");
}
lcd.setCursor(0, 1);
lcd.print("Apparaat:");
lcd.setCursor(10, 1);
if (ma_mapped < 1.25) {
lcd.print("geen apparaat");
}
anders {
lcd.print(ma_mapped);
}
lcd.print("mA");
lcd.setCursor(0, 2);
lcd.print("Genereren:");
lcd.setCursor(10, 2);
lcd.print(current_mA);
lcd.print("mA");
lcd.setCursor(0, 3);
lcd.print("Aanbod:");
lcd.setCursor(10, 3);
lcd.print(laadspanning);
lcd.print("V ");
}
Stap 5: Nog wat foto's
Versterker luidsprekeraansluiting. LED aangedreven door de stroomgenerator (RTD). Analoge kaartbedrading zal de LED vervangen.
Terminal uiterst links is voor voedingsingang. Aansluitingen aan de rechterkant zijn voor instrumentinvoer.
Stap 6: Inpassen
Alles lijkt te passen. Ik gebruikte siliconen om tijdelijk wat spullen bij elkaar te houden. De trimpot is rechtsboven gesiliconeerd. Er werd een klein gaatje voorgeboord. Ik kan de stroom vanaf de bovenkant van de doos aanpassen.
Stap 7: Alleen foto's
Stap 8: Laatste woorden
Ik heb de output van dit apparaat getest met een Allan Bradley PLC. De resultaten waren erg goed. Ik heb het volledige bereik. Ik heb dit apparaat ook getest met een 4-20mA-druksensor met een ingebouwd LCD-scherm. De resultaten waren weer erg goed. Mijn metingen waren een paar decimalen afwijkend.
Ik schrijf mijn Arduino-code in tabbladen. In PLC's worden ze subroutines genoemd. Maakt het debuggen gemakkelijker voor mijn.
Bijgevoegd zijn tekstbestanden van die tabbladen.
Aanbevolen:
Generator: Fidget Spinner Generator 3 in 1: 3 stappen
Generator: Fidget Spinner Generator 3 in 1: fidget spinner generator 3 in 1 - nu kunt u uw fidget spinner generator configureren (drie keuzes) de micro generator gebruikt 3 neodymium bollen en 3 neodymium schijven (led en kleine spoel ijzer minder)Vind ons OP INSTAGRAM en zie een eenvoudige elektrische
Dice Generator: 12 stappen (met afbeeldingen)
Dice Generator: deze Instructables is voor mijn grote project dat ik heb voltooid als onderdeel van mijn IGCSE-cursus Systemen en besturing. Het heeft een A * cijfer gekregen en ik zal je helpen om het in dit instructable te maken. Een degelijke achtergrond in elektronica en ervaring
Weergebaseerde muziekgenerator (ESP8266 gebaseerde midi-generator): 4 stappen (met afbeeldingen)
Weergebaseerde muziekgenerator (ESP8266-gebaseerde midi-generator): Hallo, vandaag zal ik uitleggen hoe u uw eigen kleine weergebaseerde muziekgenerator kunt maken. Het is gebaseerd op een ESP8266, die een beetje op een Arduino lijkt, en het reageert op temperatuur, regen en lichtintensiteit. Verwacht niet dat het hele nummers of akkoordprogr
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Arduino Reflex Tester: 4 stappen (met afbeeldingen)
Arduino Reflex Tester: Vandaag heb ik besloten om een apparaat te maken dat je reactietijd kan meten. Je hebt een aantal basiscomponenten nodig, die allemaal te vinden zijn in Kuman's Arduino UNO Starter kits. De benodigde onderdelen zijn als volgt: Arduino UNO board USB Kabel 10k en