Cuprins:

Generator / Tester 4-20ma folosind Arduino: 8 pași
Generator / Tester 4-20ma folosind Arduino: 8 pași

Video: Generator / Tester 4-20ma folosind Arduino: 8 pași

Video: Generator / Tester 4-20ma folosind Arduino: 8 pași
Video: How to Interface Industrial Sensors with Arduino Nano 2024, Iunie
Anonim
Generator / Tester 4-20ma folosind Arduino
Generator / Tester 4-20ma folosind Arduino

Generatoarele de 4-20mA sunt disponibile pe eBay, dar mie îmi place, pentru prima dată, partea DIY a lucrurilor și folosirea pieselor pe care le așez.

Am vrut să testez intrările analogice ale PLC-ului nostru pentru a verifica citirile noastre scada și pentru a testa ieșirea instrumentelor de 4-20mA. Există o mulțime de convertoare de curent la tensiune și convertoare de tensiune la curent pentru arduino pe eBay, totuși au nevoie de calibrare. Pot folosi acest lucru pentru a calibra oricare dintre convertoarele găsite pe eBay și like-uri.

Am decis că voi crea un generator și un tester. În acest moment, este încă o lucrare în curs și un prototip.

Aveam un sistem de sunet 2.1 vechi care nu era folosit (difuzoare mici). Așa că am folosit una dintre casetele difuzoarelor ca o incintă. De asemenea, am avut un amplificator care a murit din cauza fulgerului, am scos terminalul difuzorului din acel amplificator pentru a face conectarea ușoară. Intenționez să fac un PCB în viitor și o incintă mai bună.

Provizii:

Lista de componente.

LCD // 20x4 (adaptați codul dacă al dvs. este mai mic)

Regulator LM7808 // 8volt

LED // Orice tip sau dimensiune

Rezistor pentru LED // Potrivit pentru tipul LED și 8 volt

Rezistor de 100 ohmi + rezistor de 47 ohmi în serie // Va fi folosit ca rezistor de șunt

10K rezistor // Arduino analog în protecție împotriva tensiunii ridicate

22K rezistor // Pentru a opri plutirea A0

Trimpot 100 ohm + 47 ohm rezistor în serie // PT100 simulator

Condensator de 35 volți // Am folosit 470uF, doar pentru a menține fluctuațiile tensiunii de alimentare

RTD (traductor PT100) // Intervalul nu contează (interval)

DIODĂ (pentru protecția polarității)

INA219

Arduino

Pasul 1:

Imagine
Imagine

În urma schemei ar trebui să începeți să adăugați piesele și să le conectați.

LM7808 permite o intrare de maximum 25 volți, ceea ce este bine pentru sistemele PLC, în general utilizează surse de alimentare de 24 de volt. Adăugați un radiator la regulator și nu-l utilizați pentru perioade lungi de timp. Scăderea a 16 volți determină regulatorul să genereze multă căldură.

Sursa de intrare alimentează regulatorul și se conectează la INA219 VIN, în această configurație INA219 va putea măsura și tensiunea de alimentare corectă minus căderea de tensiune din diodă. Ar trebui să vă măsurați căderea de tensiune a diodei și să o adăugați la cod, astfel încât să obțineți citirea corectă a tensiunii de alimentare.

De la INA219 VOUT la RTD + pornește RTD. RTD- la masă completează circuitul.

Pentru a testa o placă analogică PLC, ați conecta RTD- la intrarea de pe placa analogică și la masă de la placă la masă arduino. (Asigurați-vă că deconectați orice instrument atașat la canalul testat).

R5 și LED1, indicând faptul că sistemul este pornit.

Regulatorul se alimentează în arduino VIN (arduino a încorporat regulatorul la 5 volți).

Pinul Arduino 5V merge la INA219 pentru a alimenta cipul integrat. INA219 GND la sol arduino.

Tăiați ștergătorul potului la RTD PIN1 și Tundeți pinul 3 la pinul RTD 2 va simula o conexiune PT100. (Schimbați firele dacă rotirea vasului de tăiere în sensul acelor de ceasornic nu mărește mA).

Pasul 2: Test de ieșire instrument

Pentru a testa ieșirea instrumentului este nevoie de piese suplimentare, cum ar fi un rezistor de șunt. Rezistoarele normale de 0,25 W vor face treaba foarte bine. Puteți părăsi rezistorul de șunt și puteți adăuga un al doilea INA219 pentru a testa ieșirea instrumentului. Mi-a rămas doar unul, așa că am folosit în schimb un rezistor.

Testarea folosind un șunt poate fi făcută numai pe partea negativă a dispozitivului. Dacă utilizați partea pozitivă, veți furniza arduino cu mai mult de 4 ori tensiunea permisă și veți lăsa fumul să iasă.

Adăugați rezistorul de șunt în serie cu fir negativ al instrumentului. Partea shuntului cea mai apropiată de dispozitiv va deveni analogul pozitiv pentru arduino. Cealaltă parte a șuntului cea mai apropiată de sursa de alimentare va deveni masa arduino care completează circuitul de intrare analogică.

Rezistența de șunt de 150 ohmi este maximul absolut care ar trebui utilizat atunci când se utilizează un arduino. Rezistorul are o cădere de tensiune liniară față de mA care curge prin el. Cu cât mA este mai mare, cu atât este mai mare tensiunea.

La 20mA curent # 150ohm * 0,02A = 3 volt la arduino.

La 4mA curent # 150ohm * 0,004A = 0,6 volt la arduino.

Acum s-ar putea să doriți ca tensiunea să fie mai aproape de 5 volți, astfel încât să ne puteți furniza întreaga gamă ADC a arduino-ului. (Nu-i o idee buna).

RTD-urile pot atinge 30,2 mA de ieșire (al meu o face). 150ohm * 0,03A = 4,8 volți. Asta este cât de aproape aș vrea să fiu.

Un alt site web a indicat utilizarea unui rezistor de 250ohm.

La 20mA curent # 250ohm * 0,02A = 5 volt la arduino.

La 30mA curent # 250ohm * 0,03A = 7,5 volt la arduino.

Risti să îți arzi ADC-ul și arduino-ul.

Pentru a testa un instrument pe teren, luați cu dvs. o baterie de 12 volți și conectați-o la intrarea de alimentare. Utilizarea unei surse externe de alimentare nu va influența configurarea curentă a PLC-ului.

Pentru a testa un card de intrare analogic pe teren, luați cu dvs. o baterie de 12 volt. Deconectați instrumentul + de la circuit. Conectați masa la masa instrumentului și RTD- la firul instrumentului deconectat.

Pasul 3: Calibrare

Calibrare
Calibrare

Pentru a calibra citirea rezistorului de șunt, conectați RTD- la șuntul analogic de șuntare. Setați potul tăiat astfel încât mA generat să fie de 4 mA. Dacă dispozitivul dvs. mA nu este egal, modificați prima valoare din cod la linia 84. Creșterea acestei valori va reduce citirea mA.

Apoi setați vasul tăiat pentru a genera 20mA. Dacă dispozitivul dvs. mA nu este egal, modificați a doua valoare din codul de la linia 84.

Deci, 4-20mA dvs. va deveni acum 0,6-3 volți (teoretic). Gama mai mult decât suficientă. Folosind biblioteca de la eRCaGuy, eșantionarea vă va oferi o citire mai bună și mai stabilă.

Să sperăm că ai citit asta. Acesta este primul meu instructable, așa că vă rog să-l luați ușor dacă am făcut o greșeală undeva sau am lăsat ceva deoparte.

Acest proiect nu este probabil cel mai bun mod de a face acest lucru, dar funcționează pentru mine și a fost distractiv să îl fac.

Câteva idei am în plus …

Adăugați un servo pentru a roti vasul de tăiere în interiorul cutiei.

Adăugați butoane pentru a roti servo la stânga sau la dreapta.

Adăugați un senzor digital de temperatură la radiatorul regulatorului pentru a preveni căldura periculoasă.

Pasul 4: Programarea Arduino

#include

// #include // Decomentează dacă folosești un ecran LCD cu un registru de schimbare.

#include

#include

#include

#include

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Decomentați dacă utilizați un LCD cu un registru de schimbare.

// | | | _ Știft de blocare

// | / _ Clock Pin

// / _ Date / Activare Pin

octeți bitsOfResolution = 12; // a comandat rezoluție supra-eșantionată

numSamples longSamplesToAvg = 20; // numărul de probe LA REZOLUȚIA SUPRAESEMPLUATĂ pe care doriți să le luați și mediați

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

tensiune de șuntare plutitoare = 0,0; // Din INA219

tensiunea autobuzului plutitor = 0,0; // Din INA219

float current_mA = 0,0; // Din INA219

tensiunea de încărcare a plutitorului = 0,0; // Din INA219

arduinovoltaj plutitor = 0,0; // Calculul tensiunii de la pinul A0

Unsigned long A0analogReading = 0;

octet analogIn = A0;

float ma_mapped = 0,0; // Harta tensiunii de la A0 la 4-20mA

configurare nulă () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Bibliotecă modificată pentru mai multă precizie pe mA

lcd.inceput (20, 4); // inițializați ecranul LCD

lcd.clear ();

lcd.home (); // du-te acasă

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

întârziere (2000);

lcd.clear ();

}

bucla nulă ()

{

curent lung nesemnat Millis = millis ();

const interval lung = 100;

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

Citiți dispozitivele I2C la intervale și faceți câteva calcule

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

if (currentMillis - previousMillis> = interval) {

previousMillis = curentMillis;

Interval();

}

Print_To_LCD (); // Probabil că nu trebuie să actualizez LCD-ul atât de repede și pot fi mutat sub Interval ()

}

nul

Interval () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

loadvoltage = (busvoltage + (shuntvoltage / 1000)) + 0,71; // +0.71 este căderea de tensiune a diodei mele

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analogReading); // Calculat la mV

ma_mapped = map (arduinovoltage, 752, 8459, 30, 220) / 10,0; // Harta nu poate folosi flotante. Adăugați un 0 în spatele valorii mapate și împărțiți la 10 pentru a obține citirea float.

// Cartografierea din calculul tensiunii oferă o citire mai stabilă, apoi folosind citirea ADC brută.

if (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // Fără sarcină INA219 tinde să citească mai jos -0.01, bine al meu.

{

current_mA = 0;

busvoltage = 0;

tensiune de sarcină = 0;

shuntvoltage = 0;

}

}

nul

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1,25) {// Fără curent, aceasta este citirea mea de mA, așa că am aruncat-o.

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

}

altceva {

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

}

lcd.setCursor (0, 1);

lcd.print ("Dispozitiv:");

lcd.setCursor (10, 1);

if (ma_mapped <1,25) {

lcd.print („fără dispozitiv”);

}

altceva {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Generare:");

lcd.setCursor (10, 2);

lcd.print (current_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Furnizare:");

lcd.setCursor (10, 3);

lcd.print (tensiune de încărcare);

lcd.print ("V");

}

Pasul 5: Mai multe fotografii

Mai multe fotografii
Mai multe fotografii

Terminal amplificator difuzor. LED acționat de generatorul de curent (RTD). Cablarea cardului analogic va înlocui LED-ul.

Terminalul din stânga este pentru intrarea de alimentare. Terminalele din dreapta sunt pentru intrarea instrumentului.

Pasul 6: Montare

Se încadrează
Se încadrează

Totul pare să se potrivească. Am folosit silicon pentru a ține temporar unele lucruri împreună. Ghiveciul de tăiere este siliconat în partea dreaptă sus. O gaură mică a fost pre-forată. Pot regla curentul din partea de sus a casetei.

Pasul 7: Doar fotografii

Doar fotografii
Doar fotografii
Doar fotografii
Doar fotografii
Doar fotografii
Doar fotografii
Doar fotografii
Doar fotografii

Pasul 8: Cuvinte finale

Am testat ieșirea acestui dispozitiv cu un PLC Allan Bradley. Rezultatele au fost foarte bune. Am o gamă completă. Am testat și acest dispozitiv cu senzor de presiune de 4-20 mA care are un ecran LCD încorporat. Din nou, rezultatele au fost foarte bune. Citirile mele au fost oprite de câteva zecimale.

Scriu codul meu arduino în file. În PLC-uri se numesc sub rutine. Îmi facilitează depanarea.

Atașate sunt fișiere text ale acestor file.

Recomandat: