Mundarija:

Arduino yordamida 4-20ma generator/sinovchi: 8 qadam
Arduino yordamida 4-20ma generator/sinovchi: 8 qadam

Video: Arduino yordamida 4-20ma generator/sinovchi: 8 qadam

Video: Arduino yordamida 4-20ma generator/sinovchi: 8 qadam
Video: Arduino 4-20 mA мА подключение гидростатического датчика уровня 2024, Iyun
Anonim
Arduino yordamida 4-20ma generator/sinovchi
Arduino yordamida 4-20ma generator/sinovchi

Ebayda 4-20mA generatorlar mavjud, lekin men o'zimning DIY qismini yaxshi ko'raman.

Men skada ko'rsatkichlarini tekshirish va 4-20 mA asboblar chiqishini sinab ko'rish uchun PLC analog kirishlarini sinab ko'rmoqchi edim. Ebayda arduino uchun kuchlanish konvertorlariga oqim va oqim konvertorlariga kuchlanish bor, lekin ular sozlanishi kerak. Men buni ebay va shunga o'xshashlardan topilgan konvertorlarning har birini kalibrlash uchun ishlatishim mumkin.

Men DIY generatori va sinov qurilmasini yasashga qaror qildim. Hozirgi vaqtda bu hali ham davom etayotgan ish va prototip.

Menda ishlatilmaydigan eski 2.1 ovozli tizim bor edi (kichik dinamiklar). Shunday qilib, men karnay qutilaridan birini korpus sifatida ishlatardim. Menda chaqmoq tufayli vafot etgan kuchaytirgich bor edi, men shamolni ulash uchun dinamikni shu kuchaytirgichdan olib tashladim. Men kelajakda tenglikni yasashni va undan yaxshi korpus yasamoqchiman.

Ta'minot:

Qismlar ro'yxati.

LCD // 20x4 (agar sizniki kichik bo'lsa, kodni moslashtiring)

LM7808 // 8 voltli regulyator

LED // Har qanday turdagi yoki o'lchamda

LED uchun rezistor // LED turi va 8 volt uchun mos

100 ohmli rezistor + 47 ohmli qarshilik ketma -ket // Shunt qarshilik sifatida ishlatiladi

10K rezistor // Arduino analogi yuqori kuchlanishdan himoyalanishda

22K qarshilik // A0 ning suzishini to'xtatish uchun

Trimpot 100 ohm + 47 ohmli qarshilik ketma -ket // PT100 simulyatori

35 voltli kondansatör // Men 470uF dan foydalanardim, faqat kuchlanish voltajining pasayishini ushlab turish uchun

RTD (PT100 o'tkazgich) // Span muhim emas (diapazon)

DIOD (qutblarni himoya qilish uchun)

INA219

Arduino

1 -qadam:

Rasm
Rasm

Sxemadan so'ng siz qismlarni qaerga qo'shish va simlarni ulashni boshlashingiz kerak.

LM7808 maksimal 25 voltli kirishga ruxsat beradi, bu PLC tizimlari uchun yaxshi, ular odatda 24 voltli quvvat manbalaridan foydalanadilar. Sovutgichni regulyatorga qo'shing va uni uzoq vaqt ishlatmang. 16 voltni tushirish regulyatorga juda ko'p issiqlik ishlab chiqarishga olib keladi.

Kirish manbai regulyatorni oziqlantiradi va INA219 VIN -ga ulanadi, bu konfiguratsiyada INA219 shuningdek, dioddan kuchlanish tushishini hisobga olmaganda, to'g'ri etkazib berish voltajini o'lchash imkoniyatiga ega bo'ladi. Siz diodli kuchlanish pasayishini o'lchashingiz va uni kodga qo'shishingiz kerak, shunda siz kuchlanishning to'g'ri o'qilishini olasiz.

INA219 VOUT -dan RTD+ ga qadar RTD -ni quvvatlaydi. RTD- erga o'tish davri tugaydi.

PLC analog kartasini sinab ko'rish uchun siz RTD- ni analog kartadagi kirishga va kartani erdan arduino-ga ulashingiz kerak. (Tekshirilayotgan kanalga ulangan har qanday asbobni uzib qo'yganingizga ishonch hosil qiling).

R5 va LED1, signalizatsiya tizimi yoqilganligini ko'rsatadi.

Regulyator arduino VIN -ga kiradi (arduino 5 voltli regulyatorga o'rnatilgan).

Arduino 5V pin, chipni quvvatlantirish uchun INA219 ga o'tadi. INA219 GND arduino erga.

Idish tozalagichni RTD PIN1 ga, 3 -pinli RTD pinigacha, PT100 ulanishini simulyatsiya qiladi. (Agar trim potini soat yo'nalishi bo'yicha aylantirish mA ni oshirmasa, simlarni almashtiring).

2 -qadam: asboblar chiqish testi

Qurilmaning chiqishini sinab ko'rish uchun rezistor kabi qo'shimcha qismlar kerak bo'ladi. Oddiy 0,25 Vt rezistorlar ishni yaxshi bajaradi. Siz manevr qarshiligini qoldirib, asboblar chiqishini tekshirish uchun ikkinchi INA219 ni qo'shishingiz mumkin. Menda faqat bittasi qoldi, buning o'rniga rezistor ishlatardim.

Shunt yordamida sinov faqat qurilmaning salbiy tomonida amalga oshirilishi mumkin. Agar siz ijobiy tomondan foydalansangiz, siz arduino -ga ruxsat etilgan kuchlanishdan 4 barobar ko'proq etkazib berasiz va tutunni chiqarib yuborasiz.

Qurilmaning manfiy simli ketma -ket manevr qarshiligini qo'shing. Shuntning qurilmaga eng yaqin tomoni arduino uchun ijobiy analogga aylanadi. Quvvat manbaiga yaqinroq bo'lgan shuntning boshqa tomoni analog kirish sxemasini to'ldiruvchi arduino zaminiga aylanadi.

150 ohmli shuntli rezistor - bu arduino ishlatilganda ishlatilishi kerak bo'lgan mutlaq maksimal. Rezistor mA ga to'g'ri keladigan kuchlanish pasayishiga ega. MA qanchalik katta bo'lsa, kuchlanish shunchalik katta bo'ladi.

20mA oqimda # 150ohm*0,02A = 3 voltli arduino.

4mA oqimida # 150ohm*0,004A = 0,6 volt arduino.

Endi siz kuchlanish 5 voltga yaqin bo'lishini xohlashingiz mumkin, shunda siz bizga arduino -ning to'liq ADC diapazonini bera olasiz. (Yaxshi fikr emas).

RTD 30,2 mA quvvatga ega bo'lishi mumkin (meniki). 150 ohm*0,03A = 4,8 volt. Bu men xohlagan darajada yaqin.

Boshqa veb -sayt 250 ohmli rezistordan foydalanishni ko'rsatdi.

20mA oqimda # 250ohm*0,02A = 5 volt arduino.

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

Siz ADC va arduino -ni yoqishingiz mumkin.

Asbobni maydonda sinab ko'rish uchun siz bilan 12 voltli batareyani olib, uni quvvat manbaiga ulang. Tashqi quvvat manbaidan foydalanish joriy PLC sozlamalariga ta'sir qilmaydi.

Dalada analog kirish kartasini sinab ko'rish uchun siz bilan 12 voltli batareyani oling. Asbobni + sxemasidan uzing. Topraklama asbobini erga va RTDni uzilgan asbob simiga ulang.

3 -qadam: Kalibrlash

Kalibrlash
Kalibrlash

Shlangi rezistor o'qilishini kalibrlash uchun RTD- simini Analog shlangga ulang. Ishlatiladigan idishni 4 mA ga teng qilib sozlang. Agar sizning qurilmangiz ma teng bo'lmasa, kodning birinchi qiymatini 84 -satrda o'zgartiring. Agar bu qiymatni oshirsangiz, mA o'qilishi kamayadi.

Keyin trim idishni 20mA ishlab chiqarishga sozlang. Agar sizning qurilmangiz mA teng bo'lmasa, 84 -qatorda kodning ikkinchi qiymatini o'zgartiring.

Shunday qilib, sizning 4-20mA hozir 0,6-3 voltsga aylanadi (nazariy). Etarli oraliq. ERCaGuy kutubxonasidan foydalanib, ortiqcha namuna olish sizga yaxshiroq va barqaror o'qish imkonini beradi.

Umid qilamanki, siz buni o'qidingiz. Bu mening birinchi o'rgatuvchim, shuning uchun agar biror joyda xato qilgan bo'lsam yoki biror narsani qoldirgan bo'lsam, xotirjam bo'ling.

Bu loyiha, ehtimol, buni amalga oshirishning eng yaxshi usuli emas, lekin bu men uchun ishlaydi va buni qilish juda qiziqarli edi.

Menda qo'shimcha fikrlar bor …

Qutidagi qutini aylantirish uchun servo qo'shing.

Servo chapga yoki o'ngga aylantirish uchun tugmachalarni qo'shing.

Xavfli issiqlik haqida ogohlantirish uchun regulyator sovutgichiga raqamli harorat sensori qo'shing.

4 -qadam: Arduino dasturlash

#qo'shing

// #include // Shift registrli LCD displeydan foydalansangiz, izoh bermang.

#qo'shing

#qo'shing

#qo'shing

#qo'shing

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Shift registrli LCD displeydan foydalansangiz, izoh bermang.

// | | | _ Mandal pin

// | / _ Soat pin

// / _ Ma'lumotlar/Pinni yoqish

bayt bitsOfResolution = 12; // ortiqcha namuna olingan qarorni buyurdi

imzosiz uzun numSamplesToAvg = 20; // siz tanlamoqchi bo'lgan namunalar soni va o'rtacha

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

imzosiz uzoq oldingiMillis = 0;

suzuvchi shunt kuchlanish = 0,0; // INA219 dan

suzuvchi avtobus kuchlanish = 0,0; // INA219 dan

float current_mA = 0.0; // INA219 dan

suzuvchi yuk kuchlanish = 0,0; // INA219 dan

float arduinovoltaj = 0,0; // A0 pinidan kuchlanishni hisoblash

Imzolanmagan uzun A0analogReading = 0;

bayt analogIn = A0;

float ma_mapped = 0.0; // A0 dan 4-20mA gacha bo'lgan kuchlanish xaritasi

bo'sh o'rnatish () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // MA ga aniqlik kiritish uchun kutubxona o'zgartirildi

lcd.begin (20, 4); // LCD -ni ishga tushiring

lcd.clear ();

lcd.home (); // uyga bor

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

kechikish (2000);

lcd.clear ();

}

bo'sh halqa ()

{

belgisiz uzun oqimMillis = millis ();

const uzoq interval = 100;

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

I2C qurilmalarini vaqti -vaqti bilan o'qing va ba'zi hisob -kitoblarni bajaring

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

if (currentMillis - previousMillis> = interval) {

oldingiMillis = joriyMillis;

Interval ();

}

Print_To_LCD (); // Menga LCD displeyni tezda yangilashning hojati yo'q va uni Interval () ostiga ko'chirish mumkin.

}

bo'sh

Interval () {

shuntvoltaj = ina219.getShuntVoltage_mV ();

avtobus kuchlanish = ina219.getBusVoltage_V ();

joriy_mA = ina219.getCurrent_mA ();

yuk kuchlanish = (busvoltage + (shuntvoltage / 1000)) + 0,71; // +0.71 - bu mening diodli kuchlanish pasayishi

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analogO'qish); // mV ga hisoblangan

ma_mapped = xarita (arduinovoltaj, 752, 8459, 30, 220) / 10.0; // Xarita floatlardan foydalana olmaydi. Olingan qiymatning ortiga 0 qo'shing va 10 ga bo'ling.

// Voltajni hisoblash xaritasi xom adc o'qish yordamida barqaror o'qishni beradi.

agar (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // INA219 yuklanmagan bo'lsa -0.01 dan past o'qiladi, meniki ham shunday.

{

joriy_mA = 0;

avtobus kuchlanish = 0;

yuk kuchlanish = 0;

shunt kuchlanish = 0;

}

}

bo'sh

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Oqimsiz bu mening mA o'qishim, shuning uchun men uni o'chirib tashlayman.

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

}

boshqa {

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

}

lcd.setCursor (0, 1);

lcd.print ("Qurilma:");

lcd.setCursor (10, 1);

agar (ma_ xaritasi <1.25) {

lcd.print ("qurilma yo'q");

}

boshqa {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Yaratish:");

lcd.setCursor (10, 2);

lcd.print (joriy_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Ta'minot:");

lcd.setCursor (10, 3);

lcd.print (yuk kuchlanish);

lcd.print ("V");

}

5 -qadam: Boshqa rasmlar

Yana bir qancha rasmlar
Yana bir qancha rasmlar

Kuchaytirgich karnay terminali. LED joriy generator (RTD) tomonidan boshqariladi. Analog karta simlari LEDni almashtiradi.

Chap tarafdagi terminal etkazib berish uchun mo'ljallangan. O'ng tarafdagi terminallar asboblarni kiritish uchun mo'ljallangan.

6 -qadam: O'rnatish

O'rnatish
O'rnatish

Hamma mos keladiganga o'xshaydi. Vaqti -vaqti bilan ba'zi narsalarni ushlab turish uchun silikon ishlatardim. Trim idish yuqori o'ng tomonda silikon bilan qoplangan. Kichik teshik oldindan burg'ulash qilingan. Men oqimni qutining yuqori qismidan sozlashim mumkin.

7 -qadam: faqat rasmlar

Faqat Rasmlar
Faqat Rasmlar
Faqat Rasmlar
Faqat Rasmlar
Faqat Rasmlar
Faqat Rasmlar
Faqat Rasmlar
Faqat Rasmlar

8 -qadam: Yakuniy so'zlar

Men bu qurilmaning chiqishini Allan Bredli PLC bilan sinab ko'rdim. Natijalar juda yaxshi bo'ldi. Men to'liq diapazonga ega bo'ldim, shuningdek, bu qurilmani 4-20 mA bosim sensori bilan sinovdan o'tkazdim, u LCD displeyga ega. Yana natijalar juda yaxshi bo'ldi. Mening o'qishlarim bir necha o'nlik sonlar bilan o'chirilgan.

Men arduino kodimni yorliqlarga yozaman. PLC -da ular "sub -routines" deb nomlanadi. Men uchun disk raskadrovka qilishni osonlashtiradi.

Ushbu yorliqlarning matnli fayllari biriktirilgan.

Tavsiya: