İçindekiler:

Arduino Kullanan 4-20ma Jeneratör/Test Cihazı: 8 Adım
Arduino Kullanan 4-20ma Jeneratör/Test Cihazı: 8 Adım

Video: Arduino Kullanan 4-20ma Jeneratör/Test Cihazı: 8 Adım

Video: Arduino Kullanan 4-20ma Jeneratör/Test Cihazı: 8 Adım
Video: YENİ ÜRÜNÜMÜZ SİNYAL JENERATÖRÜ 0-10V 4-20MA 2024, Haziran
Anonim
Arduino Kullanan 4-20ma Jeneratör/Test Cihazı
Arduino Kullanan 4-20ma Jeneratör/Test Cihazı

4-20mA jeneratörler ebay'de mevcuttur, ancak ben bir şeylerin DIY kısmını ve etrafta bıraktığım parçaları kullanmayı seviyorum.

Scada okumalarımızı doğrulamak ve 4-20mA enstrümanların çıkışını test etmek için PLC'mizin analog girişlerini test etmek istedim. Ebay'de arduino için bir sürü akım-gerilim dönüştürücüler ve voltaj-akım dönüştürücüler var, yine de kalibrasyona ihtiyaçları var. Bunu, ebay ve benzerlerinde bulunan dönüştürücülerden herhangi birini kalibre etmek için kullanabilirim.

Kendin yap bir jeneratör ve test cihazı yapmaya karar verdim. Bu noktada, hala devam eden bir çalışma ve bir prototip.

Kullanılmayan eski bir 2.1 ses sistemim vardı (küçük hoparlörler). Bu yüzden hoparlör kutularından birini muhafaza olarak kullandım. Ayrıca yıldırım nedeniyle ölen bir amplifikatörüm vardı, bir esinti yapmak için hoparlör terminalini o amplifikatörden çıkardım. Gelecekte bir PCB ve daha iyi bir muhafaza yapmayı planlıyorum.

Gereçler:

Parça listesi.

LCD // 20x4 (sizinki daha küçükse kodu uyarlayın)

LM7808 // 8 volt regülatör

LED // Herhangi bir tip veya boyutta

LED için Direnç // LED tipine uygun ve 8 volt

Seri olarak 100 ohm direnç + 47 ohm direnç // Şönt direnç olarak kullanılacaktır

10K direnç // Arduino analogu yüksek gerilime karşı korumada

22K direnç // A0'ın yüzmesini durdurmak için

Seri olarak Trimpot 100 ohm + 47 ohm direnç // PT100 simülatörü

35 volt kapasitör // Besleme voltajı dalgalanmalarını düşük tutmak için 470uF kullandım

RTD (PT100 dönüştürücü) //Span önemli değil (aralık)

DIODE (polarite koruması için)

INA219

Arduino

Aşama 1:

resim
resim

Şemayı takip ederek, parçaları nereye ekleyeceğiniz ve kabloları nereye bağlayacağınız konusunda başlamanız gerekir.

LM7808, PLC sistemleri için iyi olan maksimum 25 volt girişe izin verir, genellikle 24 volt güç kaynakları kullanırlar. Regülatöre bir soğutucu ekleyin ve uzun süre kullanmayın. 16 volt düşürmek, regülatörün çok fazla ısı üretmesine neden olur.

Giriş beslemesi regülatörü besler ve INA219 VIN'e bağlanır, bu konfigürasyonda INA219 ayrıca doğru besleme gerilimini diyottan gerilim düşüşü çıkarılarak ölçebilecektir. Doğru besleme voltajı okumasını elde etmek için diyot voltaj düşüşünüzü ölçmeli ve koda eklemelisiniz.

INA219 VOUT'dan RTD+'ya geçiş, RTD'yi çalıştırır. RTD- toprağa devreyi tamamlar.

Bir PLC analog kartını test etmek için, RTD-'yi analog karttaki girişe ve karttan arduino toprağına topraklama yapacaksınız. (Test edilen kanala bağlı herhangi bir aletin bağlantısını kestiğinizden emin olun).

R5 ve LED1, sistemin açık olduğunu gösterir.

Regülatör, arduino VIN'i besler (arduino, regülatörde 5 volt'a sahiptir).

Arduino 5V pini, yerleşik çipe güç sağlamak için INA219'a gider. INA219 GND'den arduino toprağına.

Trim pot sileceği RTD PIN1'e ve Trim pot pin 3'ten RTD pin 2'ye bir PT100 bağlantısını simüle eder. (Trim potunu saat yönünde çevirmek mA'yı artırmıyorsa kabloları değiştirin).

Adım 2: Cihaz Çıkış Testi

Cihaz çıkışını test etmek için bir şönt direnci gibi ekstra parçalara ihtiyaç vardır. Normal 0,25W dirençler işi gayet iyi yapacak. Cihaz çıkışını test etmek için şönt direnci bırakabilir ve ikinci bir INA219 ekleyebilirsiniz. Sadece bir tane kaldı, onun yerine bir direnç kullandım.

Şönt kullanarak test sadece cihazın negatif tarafında yapılabilir. Pozitif tarafı kullanırsanız, arduino'nuza izin verilen voltajın 4 katından fazlasını besler ve dumanın çıkmasına izin verirsiniz.

Enstrümanın negatif kablosuyla seri olarak şönt direnci ekleyin. Cihaza en yakın şant tarafı arduino için pozitif analog olacaktır. Şöntün güç kaynağına en yakın olan diğer tarafı, analog giriş devresini tamamlayan arduino toprağı olacaktır.

150 ohm şönt direnç, bir arduino kullanırken kullanılması gereken mutlak maksimum değerdir. Direnç, içinden akan mA'ya göre doğrusal bir voltaj düşüşüne sahiptir. mA ne kadar büyükse voltaj da o kadar büyük olur.

20mA akımda # 150ohm*0.02A = arduino'ya 3 volt.

4mA akımda # 150ohm*0,004A = 0.6 volt arduino'ya.

Şimdi, arduino'nun tüm ADC aralığını kullanabilmemiz için voltajın 5 volta daha yakın olmasını isteyebilirsiniz. (İyi bir fikir değil).

RTD'ler 30.2mA çıkışa ulaşabilir (Mine yapar). 150ohm*0.03A = 4.8 volt. Bu, olmak istediğim kadar yakın.

Başka bir web sitesi 250ohm direnç kullandığını belirtti.

20mA akımda # 250ohm*0.02A = arduino'ya 5 volt.

30mA akımda # 250ohm*0.03A = 7.5 volt arduino'ya.

ADC ve arduino'nuzu yakma riskiniz var.

Bir enstrümanı sahada test etmek için yanınıza 12 voltluk bir pil alın ve bunu besleme girişine bağlayın. Harici bir güç kaynağının kullanılması mevcut PLC kurulumunu etkilemeyecektir.

Bir analog giriş kartını sahada test etmek için yanınıza 12 voltluk bir pil alın. Aleti + devreden ayırın. Toprağı alet toprağına ve RTD-'yi bağlantısı kesilmiş alet kablosuna bağlayın.

Adım 3: Kalibrasyon

kalibrasyon
kalibrasyon

Şönt direnç okumanızı kalibre etmek için, RTD-'yi şönt Analog girişine bağlayın. Trim potunuzu, üretilen mA 4mA olacak şekilde ayarlayın. Cihazınızın mA değeri eşit değilse 84. satırdaki koddaki ilk değeri değiştirin. Bu değeri artırmak mA okumasını düşürür.

Ardından trim potunuzu 20mA üretecek şekilde ayarlayın. Cihazınızın mA'sı eşit değilse, 84. satırdaki koddaki ikinci değeri değiştirin.

Böylece 4-20mA'nız şimdi 0,6-3 volt (teorik) olacaktır. Yeterince fazla aralık. eRCaGuy kütüphanesini kullanarak, aşırı örnekleme size daha iyi ve istikrarlı bir okuma sağlayacaktır.

Umarım bunu okursun. Bu benim ilk dersim, bu yüzden bir yerde bir hata yaptıysam veya bir şeyi dışarıda bıraktıysam lütfen kolay gelsin.

Bu proje muhtemelen bunu yapmanın en iyi yolu değil, ama benim için işe yarıyor ve bunu yapmak eğlenceliydi.

Bazı fikirlerim ekstra…

Kutunun içindeki trim potunu döndürmek için bir servo ekleyin.

Servoyu sola veya sağa döndürmek için basmalı düğmeler ekleyin.

Tehlikeli ısıya karşı uyarmak için regülatör soğutucusuna bir dijital sıcaklık sensörü ekleyin.

Adım 4: Arduino'yu Programlama

#Dahil etmek

// #include // Kaydırmalı yazmaçlı bir LCD kullanıyorsanız açıklamayı kaldırın.

#Dahil etmek

#Dahil etmek

#Dahil etmek

#Dahil etmek

//A4 = (SDA)

//A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd(3, 4, 2); // Kaydırmalı yazmaçlı bir LCD kullanıyorsanız açıklamayı kaldırın.

// | | |_ Mandal Pimi

// | \_ Saat Pimi

// \_ Veri/Pini Etkinleştir

bayt bitsOfResolution = 12; // komut verilen aşırı örneklenmiş çözünürlük

imzasız uzun numSamplesToAvg = 20; // AŞIRI ÖRNEKLENMİŞ ÇÖZÜNÜRLÜKTE almak istediğiniz ve ortalamasını almak istediğiniz örnek sayısı

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

imzasız uzun öncekiMillis = 0;

şamandıra şönt voltajı = 0.0; //INA219'dan

şamandıra bara gerilimi = 0.0; //INA219'dan

kayan akım_mA = 0.0; //INA219'dan

şamandıra yük voltajı = 0.0; //INA219'dan

şamandıra arduinovoltajı = 0.0; //A0 pininden voltaj hesabı

İmzasız uzun A0analogReading = 0;

bayt analogIn = A0;

float ma_mapped = 0.0; //A0'dan 4-20mA'ya kadar harita voltajı

geçersiz kurulum() {

adc.setADCSpeed(ADCSpeed);

adc.setBitsOfResolution(bitsOfResolution);

adc.setNumSamplesToAvg(numSamplesToAvg);

uint32_t akımFrekans;

ina219.begin();

ina219.setCalibration_32V_30mA(); //mA'da daha fazla hassasiyet için değiştirilmiş kitaplık

lcd.başla(20, 4); // LCD'yi başlat

lcd.clear();

lcd.home (); // eve git

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

gecikme(2000);

lcd.clear();

}

boşluk döngüsü()

{

imzasız uzun akımMillis = millis();

const uzun aralık = 100;

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

I2C cihazlarını aralıklarla okuyun ve bazı hesaplamalar yapın

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

if (currentMillis - öncekiMillis >= aralık) {

öncekiMillis = şimdikiMillis;

Aralık();

}

Print_To_LCD(); // Muhtemelen LCD'yi bu kadar hızlı güncellemem gerekmiyor ve Interval()'in altına taşınabilir

}

geçersiz

Aralık() {

şöntvoltaj = ina219.getShuntVoltage_mV();

veriyolu voltajı = ina219.getBusVoltage_V();

current_mA = ina219.getCurrent_mA();

yük voltajı = (bara voltajı + (şönt voltaj / 1000)) + 0.71; // +0.71 diyot voltaj düşüşüm

A0analogReading = adc.newAnalogRead(analogIn);

arduinovoltaj = (5.0 * A0analogOkuma); //mV olarak hesaplandı

ma_mapped = harita(arduinovoltaj, 752, 8459, 30, 220) / 10.0; //Harita, kayan noktaları kullanamaz. Eşlenen değerin arkasına 0 ekleyin ve kayan nokta okuması almak için 10'a bölün.

//Voltaj hesaplamasından haritalama, ham adc okumasını kullanmaktan daha kararlı bir okuma sağlar.

if (şönt voltaj >= -0.10 && şönt voltaj <= -0.01) //Yüksüzken INA219 -0.01'in altında okuma eğilimindedir, benimki de öyle.

{

akım_mA = 0;

bara gerilimi = 0;

yük voltajı = 0;

şönt voltaj = 0;

}

}

geçersiz

Print_To_LCD() {

lcd.setCursor(0, 0);

if (ma_mapped < 1.25) { //Akım olmadan bu benim mA okumam, bu yüzden onu çöpe atıyorum.

lcd.print("* 4-20mA Jeneratör *");

}

Başka {

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

}

lcd.setCursor(0, 1);

lcd.print("Aygıt:");

lcd.setCursor(10, 1);

if (ma_mapped < 1.25) {

lcd.print("cihaz yok");

}

Başka {

lcd.print(ma_mapped);

}

lcd.print("mA");

lcd.setCursor(0, 2);

lcd.print("Oluştur:");

lcd.setCursor(10, 2);

lcd.print(current_mA);

lcd.print("mA");

lcd.setCursor(0, 3);

lcd.print("Tedarik:");

lcd.setCursor(10, 3);

lcd.print(yük voltajı);

lcd.print("V");

}

Adım 5: Daha Fazla Fotoğraf

Daha Fazla Fotoğraf
Daha Fazla Fotoğraf

Amplifikatör hoparlör terminali. Akım üreteci (RTD) tarafından sürülen LED. Analog kart kablolaması LED'in yerini alacaktır.

En soldaki terminal besleme girişi içindir. Sağdaki terminaller cihaz girişi içindir.

Adım 6: Yerleştirme

Yerleştirme
Yerleştirme

Her şey uygun görünüyor. Bazı şeyleri geçici olarak bir arada tutmak için silikon kullandım. Trim potu sağ üstte silikonlanmıştır. Küçük bir delik önceden delinmiştir. Akımı kutunun üstünden ayarlayabilirim.

7. Adım: Sadece Fotoğraflar

Sadece Fotoğraflar
Sadece Fotoğraflar
Sadece Fotoğraflar
Sadece Fotoğraflar
Sadece Fotoğraflar
Sadece Fotoğraflar
Sadece Fotoğraflar
Sadece Fotoğraflar

8. Adım: Son Sözler

Bu cihazın çıkışını bir Allan Bradley PLC ile test ettim. Sonuçlar çok iyiydi. Tam menzile sahibim. Bu cihazı ayrıca dahili bir LCD ekrana sahip 4-20mA basınç sensörü ile test ettim. Yine sonuçlar çok iyiydi. Okumalarım birkaç ondalık basamakla düştü.

Arduino kodumu sekmelere yazıyorum. PLC'lerde bunlara alt rutinler denir. Benim için hata ayıklamayı kolaylaştırır.

Ekli, bu sekmelerin metin dosyalarıdır.

Önerilen: