Turinys:

4-20ma generatorius/testeris naudojant „Arduino“: 8 žingsniai
4-20ma generatorius/testeris naudojant „Arduino“: 8 žingsniai

Video: 4-20ma generatorius/testeris naudojant „Arduino“: 8 žingsniai

Video: 4-20ma generatorius/testeris naudojant „Arduino“: 8 žingsniai
Video: #1 Как запрограммировать ПЛК Outseal Arduino (начало работы) 2024, Lapkritis
Anonim
4-20ma generatorius/testeris naudojant „Arduino“
4-20ma generatorius/testeris naudojant „Arduino“

4–20 mA generatoriai yra prieinami „ebay“, bet man labai patinka „pasidaryk pats“dalis ir naudoju turimas dalis.

Norėjau išbandyti mūsų PLC analogines įvestis, kad patikrintume „scada“rodmenis ir išbandytume 4–20 mA instrumentų išvestį. „Ebay“yra daugybė srovės ir įtampos keitiklių ir įtampos į srovę keitiklių, skirtų „arduino“, tačiau juos reikia kalibruoti. Aš galiu tai naudoti norėdamas sukalibruoti bet kurį iš tų keitiklių, rastų „ebay“ir panašiai.

Aš nusprendžiau pasidaryti generatorių ir testerį. Šiuo metu tai vis dar nebaigtas darbas ir prototipas.

Turėjau seną 2.1 garso sistemą, kuri nebuvo naudojama (maži garsiakalbiai). Taigi aš naudoju vieną iš garsiakalbių dėžių kaip korpusą. Aš taip pat turėjau stiprintuvą, kuris mirė dėl žaibo, pašalinau garsiakalbio gnybtą iš to stiprintuvo, kad būtų lengviau prisijungti. Ateityje ketinu pagaminti PCB ir geresnį korpusą.

Priedai:

Dalių sąrašas.

LCD // 20x4 (pritaikykite kodą, jei jūsų yra mažesnis)

LM7808 // 8 voltų reguliatorius

LED // Bet kokio tipo ar dydžio

LED rezistorius // Tinka LED tipui ir 8 voltų

100 omų rezistorius + 47 omų serijos rezistorius // Bus naudojamas kaip šunto rezistorius

10K rezistorius // „Arduino“analogas, apsaugantis nuo aukštos įtampos

22K rezistorius // Norėdami sustabdyti A0 plaukimą

Trimpot 100 omų + 47 omų rezistorius serijiniu būdu // PT100 simuliatorius

35 voltų kondensatorius // Aš naudojau 470uF, kad maitinimo įtampa nesikeistų

RTD (PT100 keitiklis) // Atstumas nesvarbu (diapazonas)

DIODAS (apsaugai nuo poliškumo)

INA219

Arduino

1 žingsnis:

Vaizdas
Vaizdas

Vadovaudamiesi schema turėtumėte pradėti nuo to, kur pridėti dalis ir prijungti juos.

LM7808 leidžia įvesti ne daugiau kaip 25 voltų įtampą, o tai puikiai tinka PLC sistemoms, paprastai jos naudoja 24 voltų maitinimo šaltinius. Pridėkite radiatorių prie reguliatoriaus ir nenaudokite jo ilgą laiką. Nuleidus 16 voltų, reguliatorius sukuria daug šilumos.

Įvesties maitinimas maitina reguliatorių ir jungiasi prie INA219 VIN, šioje konfigūracijoje INA219 taip pat galės išmatuoti teisingą maitinimo įtampą, atėmus įtampos kritimą iš diodo. Turėtumėte išmatuoti diodo įtampos kritimą ir pridėti jį prie kodo, kad gautumėte teisingą maitinimo įtampos rodmenį.

Nuo INA219 VOUT iki RTD+ įjungia RTD. RTD- įžeminimas užbaigia grandinę.

Norėdami išbandyti PLC analoginę kortelę, turite prijungti RTD prie analoginės kortelės įvesties ir įžeminti nuo kortelės iki arduino įžeminimo. (Būtinai atjunkite visus prie bandomo kanalo prijungtus instrumentus).

R5 ir LED1, rodantys, kad sistema įjungta.

Reguliatorius tiekiamas į arduino VIN („arduino“turi įmontuotą 5 voltų reguliatorių).

„Arduino 5V“kaištis eina į INA219, kad maitintų įmontuotą mikroschemą. INA219 GND į arduino žemę.

Apipjaustymo puodo valytuvas prie RTD PIN1, o apipjaustymo puodo kaištis 3 - RTD kaištis 2 imituos PT100 jungtį. (Pakeiskite laidus, jei sukant apdailos puodą pagal laikrodžio rodyklę mA nepadidėja).

2 žingsnis: prietaiso išvesties testas

Norint patikrinti prietaiso išvestį, reikia papildomų dalių, tokių kaip šunto rezistorius. Įprasti 0,25 W rezistoriai puikiai atliks šį darbą. Galite palikti šunto rezistorių ir prie bandymo prietaiso išvesties pridėti antrą INA219. Man liko tik vienas, todėl vietoj to naudojau rezistorių.

Bandymas naudojant šuntą gali būti atliekamas tik neigiamoje įrenginio pusėje. Jei naudosite teigiamą pusę, jūs aprūpinsite savo arduino daugiau nei 4 kartus leistina įtampa ir išleisite dūmus.

Prijunkite šunto rezistorių nuosekliai su neigiamu prietaiso laidu. Arčiausiai įrenginio esanti šunto pusė taps teigiamu arduino analogu. Kita arčiausiai maitinimo šaltinio esanti šunto pusė taps arduino įžeminimu, užbaigiančiu analoginę įvesties grandinę.

150 omų šunto rezistorius yra absoliutus maksimumas, kuris turėtų būti naudojamas naudojant arduino. Rezistoriaus įtampos kritimas yra linijinis per jį tekančiam mA. Kuo didesnė mA, tuo didesnė įtampa.

Esant 20 mA srovei # 150ohm*0,02A = 3 voltai iki arduino.

Esant 4mA srovei # 150ohm*0,004A = 0,6 volto iki arduino.

Dabar galbūt norėsite, kad įtampa būtų arčiau 5 voltų, kad galėtumėte mums naudotis visu arduino ADC diapazonu. (Nebloga mintis).

MTTP gali pasiekti 30,2 mA išėjimą (mano). 150 omų*0,03A = 4,8 voltai. Tai taip arti, kaip norėčiau būti.

Kita svetainė nurodė naudoti 250 omų rezistorių.

Esant 20 mA srovei # 250ohm*0,02A = 5 voltai iki arduino.

Esant 30 mA srovei # 250ohm*0,03A = 7,5 volto iki arduino.

Jūs rizikuojate sudeginti savo ADC ir arduino.

Norėdami išbandyti instrumentą lauke, pasiimkite su savimi 12 voltų bateriją ir prijunkite ją prie maitinimo šaltinio. Išorinio maitinimo šaltinio naudojimas neturės įtakos dabartinei PLC sąrankai.

Norėdami išbandyti analoginę įvesties kortelę lauke, pasiimkite su savimi 12 voltų bateriją. Atjunkite prietaisą + nuo grandinės. Prijunkite įžeminimą prie prietaiso įžeminimo ir RTD- prie atjungto prietaiso laido.

3 žingsnis: kalibravimas

Kalibravimas
Kalibravimas

Norėdami sukalibruoti šunto rezistoriaus rodmenis, prijunkite RTD- prie šunto analoginio įvesties. Nustatykite apdailos puodą taip, kad generuojama mA būtų 4 mA. Jei jūsų prietaiso mA nėra lygus, pakeiskite pirmąją kodo reikšmę 84. eilutėje. Padidinus šią vertę, mA rodmuo sumažės.

Tada nustatykite apdailos puodą taip, kad generuotų 20 mA. Jei jūsų prietaiso mA nėra lygus, pakeiskite antrąją kodo reikšmę 84 eilutėje.

Taigi jūsų 4-20 mA dabar taps 0,6-3 voltais (teorinis). Daugiau nei pakankamai diapazonas. Naudojant „eRCaGuy“biblioteką, per didelis mėginių ėmimas suteiks jums geresnį ir stabilesnį rodmenį.

Tikimės, kad tai perskaitysite. Tai pirmas mano pamokomas dalykas, todėl prašau nusiraminti, jei kažkur suklydau ar ką nors praleidau.

Šis projektas tikriausiai nėra geriausias būdas tai padaryti, bet man tai tinka ir buvo smagu tai padaryti.

Turiu papildomų idėjų…

Pridėkite servo, kad pasuktumėte apdailos puodą dėžutės viduje.

Norėdami pasukti servo kairę arba dešinę, pridėkite mygtukus.

Pridėkite skaitmeninį temperatūros jutiklį prie reguliatoriaus radiatoriaus, kad įspėtumėte apie pavojingą karštį.

4 žingsnis: „Arduino“programavimas

#įtraukti

// #include // Atminkite, jei naudojate LCD su pamainų registru.

#įtraukti

#įtraukti

#įtraukti

#įtraukti

// A4 = (SDA)

A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Nekomentuokite, jei naudojate LCD su pamainų registru.

// | | | _ Užrakto kaištis

// | / _ Laikrodžio kaištis

// / _ Data/Enable Pin

baitų bitaiOfResolution = 12; // įsakyta perteklinė raiška

nepasirašytas ilgas numSamplesToAvg = 20; // mėginių, kuriuos norite paimti, pavyzdžių skaičius, kurį norite paimti, ir vidurkis

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

plūdės šuntinė įtampa = 0,0; // Iš INA219

plūdės magistralės įtampa = 0,0; // Iš INA219

plūdės srovė_mA = 0,0; // Iš INA219

plūdės apkrovos įtampa = 0,0; // Iš INA219

plūdės arduinovoltage = 0,0; // Įtampos apskaičiavimas iš A0 kaiščio

Nepasirašytas ilgas A0analogReading = 0;

baitų analogasIn = A0;

float ma_mapped = 0.0; // Žemėlapio įtampa nuo A0 iki 4-20mA

void setup () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Modifikuota biblioteka, skirta didesniam mA tikslumui

LCD. pradžia (20, 4); // inicijuoti LCD ekraną

lcd.clear ();

lcd.home (); // eik namo

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

vėlavimas (2000 m.);

lcd.clear ();

}

tuštumos kilpa ()

{

nepasirašyta ilga srovėMillis = milis ();

const ilgas intervalas = 100;

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

Retkarčiais perskaitykite I2C įrenginius ir atlikite kai kuriuos skaičiavimus

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

if (currentMillis - previousMillis> = intervalas) {

previousMillis = dabartinisMillis;

Intervalas ();

}

Print_To_LCD (); // Man tikriausiai nereikia taip greitai atnaujinti LCD ir jį galima perkelti į žemiau Interval ()

}

tuštuma

Intervalas () {

shuntvoltage = ina219.getShuntVoltage_mV ();

magistralės įtampa = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

apkrovos įtampa = (magistralės įtampa + (šuntinė įtampa / 1000)) + 0,71; // +0,71 yra mano diodo įtampos kritimas

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5,0 * A0analogReading); // Apskaičiuota iki mV

ma_mapped = žemėlapis (arduinovoltage, 752, 8459, 30, 220) / 10,0; // Žemėlapyje negalima naudoti plūdžių. Už pridėtos vertės pridėkite 0 ir padalinkite iš 10, kad gautumėte plūdės rodmenis.

// Susiejimas pagal įtampos apskaičiavimą suteikia stabilesnį rodmenį, nei naudojant neapdorotą ADC rodmenį.

jei (šuntinė įtampa> = -0,10 && šuntinė įtampa <= -0,01) // Be apkrovos INA219 yra linkęs skaityti žemiau -0,01, gerai mano.

{

srovės_mA = 0;

magistralės įtampa = 0;

apkrovos įtampa = 0;

šuntinė įtampa = 0;

}

}

tuštuma

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Jei nėra srovės, tai yra mano mA rodmuo, todėl aš jį tiesiog atkišu.

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

}

Kitas {

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

}

lcd.setCursor (0, 1);

lcd.print ("Įrenginys:");

lcd.setCursor (10, 1);

if (susieta <1,25) {

lcd.print ("nėra įrenginio");

}

Kitas {

lcd.print (susieta);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Sukurti:");

lcd.setCursor (10, 2);

lcd.print (dabartinis_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Tiekimas:");

lcd.setCursor (10, 3);

lcd.print (apkrovos įtampa);

lcd.print ("V");

}

5 žingsnis: dar keletas nuotraukų

Dar kelios nuotraukos
Dar kelios nuotraukos

Stiprintuvo garsiakalbio terminalas. Šviesos diodas, varomas srovės generatoriaus (RTD). Analoginės kortelės laidai pakeis šviesos diodą.

Gnybtas kairėje yra skirtas tiekimui. Gnybtai dešinėje yra skirti įvesti prietaisą.

6 žingsnis: Įdėkite

Pritaikymas
Pritaikymas

Viskas lyg ir tinka. Naudojau silikoną, kad laikinai laikyčiau kai kuriuos daiktus. Apdailos puodelis yra silikonuotas viršuje dešinėje. Buvo išgręžta maža skylė. Galiu reguliuoti srovę iš dėžutės viršaus.

7 žingsnis: Tiesiog nuotraukos

Tiesiog Nuotraukos
Tiesiog Nuotraukos
Tiesiog Nuotraukos
Tiesiog Nuotraukos
Tiesiog Nuotraukos
Tiesiog Nuotraukos
Tiesiog Nuotraukos
Tiesiog Nuotraukos

8 žingsnis: paskutiniai žodžiai

Aš išbandžiau šio įrenginio išvestį su „Allan Bradley PLC“. Rezultatai buvo labai geri. Aš gavau visą diapazoną. Aš taip pat išbandžiau šį įrenginį su 4-20 mA slėgio jutikliu, turinčiu įmontuotą LCD ekraną. Vėlgi rezultatai buvo labai geri. Mano rodmenis nutraukė pora kablelių.

Skirtukuose rašau savo arduino kodą. PLC jie vadinami papildoma tvarka. Man palengvina derinimą.

Pridedami tų skirtukų teksto failai.

Rekomenduojamas: