Mündəricat:

Arduino istifadə edərək 4-20ma Generator/Tester: 8 addım
Arduino istifadə edərək 4-20ma Generator/Tester: 8 addım

Video: Arduino istifadə edərək 4-20ma Generator/Tester: 8 addım

Video: Arduino istifadə edərək 4-20ma Generator/Tester: 8 addım
Video: Как использовать оптопару Mosfet HW-532 для управления скоростью двигателя постоянного тока до 30 В или нагрузкой с помощью Arduino 2024, Noyabr
Anonim
Arduino istifadə edərək 4-20ma Generator/Tester
Arduino istifadə edərək 4-20ma Generator/Tester

Ebay-da 4-20mA generatorlar mövcuddur, amma mən bir şeyi sevirəm ki, əşyaların DIY hissəsini və ətrafa qoyduğum hissələri istifadə edirəm.

Scada oxunuşlarımızı yoxlamaq və 4-20mA alətlərinin çıxışını yoxlamaq üçün PLC-nin analoq girişlərini sınamaq istədim. Ebayda arduino üçün gərginlik çeviricilərinə və cərəyan çeviricilərinə gərginlik var, buna baxmayaraq kalibrləmə lazımdır. Bunu ebayda və bəyənmələrdə tapılan çeviricilərdən hər hansı birini kalibr etmək üçün istifadə edə bilərəm.

Bir generator və test cihazı DIY edəcəyimə qərar verdim. Bu nöqtədə hələ də davam edən bir iş və bir prototipdir.

İstifadə edilməyən köhnə 2.1 səs sistemim vardı (kiçik dinamiklər). Beləliklə, karnay kimi dinamik qutularından birini istifadə etdim. İldırımdan ölən bir gücləndiricim də var idi, bir külək bağlamaq üçün dinamikin terminalını həmin gücləndiricidən çıxartdım. Gələcəkdə bir PCB və daha yaxşı bir örtük etmək niyyətindəyəm.

Təchizat:

Parça siyahısı.

LCD // 20x4 (kodunuz daha kiçikdirsə uyğunlaşdırın)

LM7808 // 8 volt tənzimləyici

LED // İstənilən növ və ya ölçü

LED üçün rezistor // LED tipi və 8 volt üçün uyğundur

100 ohm müqavimət + 47 ohm rezistor seriyada // Şunt müqaviməti olaraq istifadə ediləcək

10K rezistor // Yüksək gərginliyə qarşı qorunan Arduino analoqu

22K rezistor // A0 -un üzməsini dayandırmaq üçün

Trimpot 100 ohm + 47 ohm müqavimət seriyası // PT100 simulyatoru

35 voltluq kondansatör // 470uF istifadə etdim, sadəcə təchizat gərginliyinin dalğalanmasını aşağı salmaq üçün

RTD (PT100 çeviricisi) // Aralığın əhəmiyyəti yoxdur (diapazon)

DIODE (polariteyi qorumaq üçün)

INA219

Arduino

Addım 1:

Şəkil
Şəkil

Sxemdən sonra hissələri haradan əlavə edəcəyinizi və tel bağlayacağınıza başlamalısınız.

LM7808, PLC sistemləri üçün ən uyğun olan maksimum 25 volt girişə imkan verir, ümumiyyətlə 24 volt güc təchizatı istifadə edirlər. Tənzimləyiciyə soyuducu əlavə edin və uzun müddət istifadə etməyin. 16 volt düşməsi tənzimləyicinin çox istilik istehsal etməsinə səbəb olur.

Giriş təchizatı tənzimləyicini qidalandırır və INA219 VIN -ə qoşulur, bu konfiqurasiyada INA219, dioddan gerilim düşməsini çıxarmaqla düzgün təchizat gərginliyini ölçə biləcək. Diod geriliminin düşməsini ölçməlisiniz və koda əlavə etməlisiniz ki, düzgün təchizat gərginliyi oxunuşunu əldə edəsiniz.

INA219 VOUT -dan RTD+ -ya qədər RTD -ni gücləndirir. RTD- yerə dövrə tamamlayır.

Bir PLC analoq kartını sınamaq üçün RTD-ni analog kartın girişinə və kartdan arduino topraklamasına bağlayardınız. (Test edilən kanala bağlı olan hər hansı bir cihazı ayırdığınızdan əmin olun).

Sistemin işə salındığını göstərən R5 və LED1.

Tənzimləyici arduino VIN -ə daxil olur (arduino 5 voltluq tənzimləyiciyə malikdir).

Arduino 5V pin, çipi gücləndirmək üçün INA219-a gedir. INA219 GND arduino zəminə.

RTD PIN1 -ə qədər qab təmizləyicisi və RTD pin 2 -ə qədər qazma sancağı PT100 bağlantısını simulyasiya edəcək. (Döşəmə qabını saat yönünde çevirmək mA -nı artırmırsa telləri dəyişdirin).

Addım 2: Alət Çıxış Testi

Cihazın çıxışını yoxlamaq üçün şant rezistoru kimi əlavə hissələrə ehtiyac var. Normal 0.25W rezistorlar işi yaxşı yerinə yetirəcək. Şönt rezistorundan çıxıb cihazın çıxışını yoxlamaq üçün ikinci INA219 əlavə edə bilərsiniz. Məndə yalnız bir ədəd qaldı, buna görə rezistor istifadə etdim.

Bir şant istifadə edərək test yalnız cihazın mənfi tərəfində edilə bilər. Müsbət tərəfi istifadə etsəniz, arduino -ya icazə verilən gərginliyin 4 qatından artıq təmin edəcək və tüstünü buraxacaqsınız.

Alətin mənfi teli olan şönt rezistorunu əlavə edin. Şantın cihaza ən yaxın tərəfi arduino üçün müsbət analoq olacaq. Enerji təchizatına ən yaxın olan şantın digər tərəfi analog giriş dövrəsini tamamlayan arduino zəminə çevriləcəkdir.

150 ohm şunt rezistoru, bir arduino istifadə edərkən istifadə edilməli olan mütləq maksimumdur. Rezistorun içərisindən axan mA -ya doğru bir gerilim düşməsi var. MA nə qədər böyükdürsə, gərginlik də o qədər yüksəkdir.

20mA cərəyanda # 150ohm*0.02A = 3 volt arduino.

4mA cərəyanında # 150ohm*0.004A = 0.6 volt arduino.

İndi arduinonun bütün ADC aralığını edə biləcəyiniz üçün gərginliyin 5 volta yaxın olmasını istəyə bilərsiniz. (Yaxşı fikir deyil).

RTD -lər 30.2mA çıxışa çata bilər (Mənimki belədir). 150ohm*0.03A = 4.8 volt. İstədiyim qədər yaxındır.

Başqa bir veb sayt 250ohm müqavimət istifadə etdiyini göstərdi.

20mA cərəyanda # 250ohm*0.02A = 5 volt arduino.

30mA cərəyanda # 250ohm*0.03A = 7.5 volt arduino.

ADC və arduino yandırmaq riski var.

Bir aləti sınamaq üçün özünüzlə 12 voltluq bir batareya götürün və onu girişə qoşun. Xarici enerji mənbəyinin istifadəsi mövcud PLC quruluşuna təsir etməyəcək.

Sahədə analoq giriş kartını sınamaq üçün özünüzlə 12 voltluq bir batareya götürün. Aləti + dövrədən ayırın. Zəmini cihazın torpağına və RTD-ni kəsilmiş alət telinə qoşun.

Addım 3: Kalibrləmə

Kalibrləmə
Kalibrləmə

Şant rezistorunuzun oxunmasını kalibr etmək üçün, RTD- telini Analog şantına daxil edin. Yaranan mA-nı 4mA-dır. Cihazınız mA bərabər deyilsə, 84 -cü sətirdəki kodun ilk dəyərini dəyişdirin. Bu dəyəri artırmaq mA oxunuşunu azaldacaq.

Sonra trim qazanınızı 20mA yaratmaq üçün qurun. Cihazınız mA bərabər deyilsə, 84 -cü sətirdə kodun ikinci dəyərini dəyişdirin.

Beləliklə, 4-20mA-nız 0.6-3 volt olacaq (nəzəri). Kifayət qədər aralıq. ERCaGuy kitabxanasından istifadə edərək, həddindən artıq nümunə götürmə sizə daha yaxşı və sabit bir oxu verəcək.

İnşallah bunu oxuyarsınız. Bu mənim ilk təlimatımdır, buna görə bir yerdə səhv etmişəmsə və ya bir şey buraxmışamsa, sakitləşin.

Bu layihə, yəqin ki, bu işin ən yaxşı yolu deyil, amma mənim üçün işləyir və bunu etmək çox əyləncəli idi.

Əlavə fikirlərim var …

Qutunun içindəki qazanı döndərmək üçün servo əlavə edin.

Servo sola və ya sağa çevirmək üçün düymələr əlavə edin.

Təhlükəli istidən xəbərdar olmaq üçün tənzimləyicinin soyuducusuna rəqəmsal temperatur sensoru əlavə edin.

Addım 4: Arduino proqramlaşdırılması

#daxil edin

// #daxil edin // Bir keçid qeydli LCD istifadə edirsinizsə şərh yazmayın.

#daxil edin

#daxil edin

#daxil edin

#daxil edin

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Dəyişdirmə qeydli bir LCD istifadə edirsinizsə şərh yazmayın.

// | | | _ Mandal Pin

// | / _ Saat Pin

// / _ Məlumat/Pin aktivləşdir

bayt bitsOfResolution = 12; // həddindən artıq seçilmiş qətnamə əmr etdi

işarəsiz uzun numSamplesToAvg = 20; // götürmək istədiyiniz və ÇOX ÖLMƏK QƏDƏRDƏN nümunələrin sayı

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

işarəsiz uzun əvvəlkiMillis = 0;

float şunt gərginliyi = 0.0; // INA219 -dan

şamandıra gərginliyi = 0.0; // INA219 -dan

float current_mA = 0.0; // INA219 -dan

float yük gərginliyi = 0.0; // INA219 -dan

float arduinovoltage = 0.0; // A0 pinindən gərginliyin hesablanması

İmzasız uzun A0analogReading = 0;

bayt analogIn = A0;

float ma_mapped = 0.0; // Xəritə gərginliyi A0-dan 4-20mA-a qədər

boş quraşdırma () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // MA haqqında daha dəqiqlik üçün dəyişdirilmiş kitabxana

lcd.begin (20, 4); // LCD -ni işə salın

lcd.clear ();

lcd.home (); // evə get

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

gecikmə (2000);

lcd.clear ();

}

boşluq döngəsi ()

{

işarəsiz uzun cariMillis = millis ();

const uzun interval = 100;

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

I2C cihazlarını aralıqlarla oxuyun və bəzi hesablamalar aparın

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

if (currentMillis - previousMillis> = interval) {

əvvəlkiMillis = cariMillis;

Aralıq ();

}

Print_To_LCD (); // Yəqin ki, LCD -ni bu qədər tez yeniləməyimə ehtiyac yoxdur və Aralıqdan aşağıya köçürülə bilər ()

}

boş

Aralıq () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

cari_mA = ina219.getCurrent_mA ();

yük gərginliyi = (busvoltage + (shuntvoltage / 1000)) + 0,71; // +0.71 mənim diod gərginliyimdir

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analOxu); // mV -ə hesablanır

ma_mapped = xəritə (arduinovoltage, 752, 8459, 30, 220) / 10.0; // Xəritə floatlardan istifadə edə bilməz. Xəritədə göstərilən dəyərin arxasına 0 əlavə edin və 10 -a bölün, üzgüçülük oxunuşunu əldə edin.

// Gərginlik hesablamasından eşleme, xam adc oxunuşundan istifadə edərək daha sabit bir oxu verir.

əgər (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // INA219 yüklənmədən -0.01 -dən aşağı oxumağa meyllidirsə, mənimki də oxuyur.

{

cari_mA = 0;

avtobus gərginliyi = 0;

yük gərginliyi = 0;

şunt gərginliyi = 0;

}

}

boş

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Heç bir cərəyan olmadan bu mənim mA oxunuşumdur, ona görə də onu uzaqlaşdırıram.

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

}

başqa {

lcd.print ("** Analog Test cihazı **");

}

lcd.setCursor (0, 1);

lcd.print ("Cihaz:");

lcd.setCursor (10, 1);

əgər (ma_mapped <1.25) {

lcd.print ("cihaz yoxdur");

}

başqa {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Yarat:");

lcd.setCursor (10, 2);

lcd.print (cari_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Təchizat:");

lcd.setCursor (10, 3);

lcd çap (yük gərginliyi);

lcd.print ("V");

}

Addım 5: Daha Bir neçə Şəkil

Daha Bir neçə Foto
Daha Bir neçə Foto

Gücləndirici dinamik terminalı. Cari generator (RTD) tərəfindən idarə olunan LED. Analog kart kabelləri LED -i əvəz edəcək.

Ən soldakı terminal təchizat girişi üçündür. Sağdakı terminallar cihaz girişi üçündür.

Addım 6: Daxil edin

Daxil etmək
Daxil etmək

Hər şey uyğun görünür. Bəzi şeyləri müvəqqəti bir yerdə saxlamaq üçün silikondan istifadə etdim. Döşəmə qabı sağ üst silikonla örtülmüşdür. Kiçik bir çuxur əvvəlcədən deşilmişdi. Qutunun yuxarı hissəsindən cərəyanı tənzimləyə bilərəm.

Addım 7: Yalnız Şəkillər

Sadəcə Şəkillər
Sadəcə Şəkillər
Sadəcə Şəkillər
Sadəcə Şəkillər
Sadəcə Şəkillər
Sadəcə Şəkillər
Sadəcə Şəkillər
Sadəcə Şəkillər

Addım 8: Son sözlər

Bu cihazın çıxışını Allan Bradley PLC ilə sınaqdan keçirdim. Nəticələr çox yaxşı idi. Mən bu cihazı 4-20mA təzyiq sensoru ilə quraşdırılmış LCD displeyə malik sınaqdan keçirdim. Yenə də nəticələr çox yaxşı oldu. Oxumalarım bir neçə ondalıkla bitdi.

Arduino kodumu nişanlara yazıram. PLC -də onlara alt rutinlər deyilir. Hata ayırmağı mənim üçün asanlaşdırır.

Bu nişanların mətn faylları əlavə olunur.

Tövsiyə: