Spisu treści:

Generator / tester 4-20ma za pomocą Arduino: 8 kroków
Generator / tester 4-20ma za pomocą Arduino: 8 kroków

Wideo: Generator / tester 4-20ma za pomocą Arduino: 8 kroków

Wideo: Generator / tester 4-20ma za pomocą Arduino: 8 kroków
Wideo: How to Interface Industrial Sensors with Arduino Nano 2024, Listopad
Anonim
Generator / tester 4-20ma za pomocą Arduino
Generator / tester 4-20ma za pomocą Arduino

Generatory 4-20mA są dostępne na ebayu, ale z jednej strony uwielbiam części do majsterkowania i używanie części, które mam wokół.

Chciałem przetestować wejścia analogowe naszego PLC, aby zweryfikować nasze odczyty SCADA i przetestować wyjście instrumentów 4-20 mA. W serwisie eBay jest mnóstwo konwerterów prądu na napięcie i konwerterów napięcia na prąd dla arduino, ale wymagają one kalibracji. Mogę użyć tego do skalibrowania dowolnego z konwerterów znalezionych w serwisie eBay i tym podobnych.

Postanowiłem, że zrobię majsterkowanie generatora i testera. W tej chwili jest to wciąż praca w toku i prototyp.

Miałem stary system dźwiękowy 2.1, który nie był używany (małe głośniki). Użyłem więc jednego z pudełek głośnikowych jako obudowy. Miałem też wzmacniacz, który zginął od pioruna, usunąłem terminal głośnikowy z tego wzmacniacza, aby podłączenie było proste. W przyszłości zamierzam zrobić płytkę PCB i lepszą obudowę.

Kieszonkowe dzieci:

Lista części.

LCD // 20x4 (dostosuj kod, jeśli Twój jest mniejszy)

LM7808 // regulator 8 V

LED // Dowolny typ lub rozmiar

Rezystor do LED // Odpowiedni do typu LED i 8volt

Rezystor 100 omów + rezystor 47 omów szeregowo // Będzie używany jako rezystor bocznikowy

Rezystor 10K // Arduino analog w ochronie przed wysokim napięciem

Rezystor 22K // Aby zatrzymać A0 przed pływaniem

Trimpot 100 ohm + 47 ohm rezystor szeregowo // symulator PT100

Kondensator 35 V // Użyłem 470uF, żeby ograniczyć wahania napięcia zasilania

RTD (przetwornik PT100) //Rozpiętość nie ma znaczenia (zakres)

DIODA (do ochrony polaryzacji)

INA219

Arduino

Krok 1:

Obraz
Obraz

Postępując zgodnie ze schematem, powinieneś zacząć od tego, gdzie dodać części i je okablować.

LM7808 pozwala na wejście maksymalnie 25 woltów, co jest w porządku dla systemów PLC, zwykle używają zasilaczy 24 woltów. Dodaj radiator do regulatora i nie używaj go przez dłuższy czas. Spadek 16 woltów powoduje, że regulator generuje dużo ciepła.

Zasilanie wejściowe zasila regulator i łączy się z VIN INA219, w tej konfiguracji INA219 będzie również w stanie zmierzyć prawidłowe napięcie zasilania minus spadek napięcia z diody. Należy zmierzyć spadek napięcia diody i dodać go do kodu, aby uzyskać prawidłowy odczyt napięcia zasilania.

Od INA219 VOUT do RTD+ zasila RTD. RTD-do ziemi zamyka obwód.

Aby przetestować kartę analogową PLC, należy podłączyć RTD- do wejścia na karcie analogowej i uziemienia z karty do uziemienia arduino. (Pamiętaj, aby odłączyć wszelkie instrumenty podłączone do testowanego kanału).

R5 i dioda LED1, wskazujące, że system jest zasilany.

Regulator zasila arduino VIN (arduino ma wbudowany regulator do 5 woltów).

Pin Arduino 5V idzie do INA219, aby zasilić wbudowany układ scalony. INA219 GND do masy arduino.

Dopasuj wycieraczkę do styku 1 RTD, a styk 3 potencjometru do styku 2 RTD będą symulować połączenie PT100. (Zamień przewody, jeśli obrócenie potencjometru w prawo nie zwiększa mA).

Krok 2: Test wyjścia instrumentu

Aby przetestować wyjście instrumentu, potrzebne są dodatkowe części, takie jak rezystor bocznikowy. Normalne rezystory 0,25 W sprawdzą się dobrze. Możesz zostawić rezystor bocznikowy i dodać drugi INA219, aby przetestować wyjście przyrządu. Został mi tylko jeden, więc zamiast tego użyłem rezystora.

Testowanie za pomocą bocznika można przeprowadzić tylko po ujemnej stronie urządzenia. Jeśli użyjesz strony dodatniej, dostarczysz swojemu arduino ponad 4-krotność dopuszczalnego napięcia i wypuścisz dym.

Dodaj rezystor bocznikowy szeregowo z ujemnym przewodem przyrządu. Strona bocznika najbliżej urządzenia stanie się pozytywnym analogiem dla arduino. Druga strona bocznika najbliżej zasilacza stanie się uziemieniem arduino, uzupełniając obwód wejścia analogowego.

Rezystor bocznikowy 150 omów to absolutne maksimum, którego należy użyć podczas korzystania z arduino. Rezystor ma spadek napięcia liniowy do przepływającego przez niego mA. Im większe mA, tym większe napięcie.

Przy prądzie 20mA #150ohm*0.02A = 3volt do arduino.

Przy prądzie 4mA # 150ohm * 0,004A = 0,6 wolta do arduino.

Teraz możesz chcieć, aby napięcie było bliższe 5 woltom, abyś mógł korzystać z pełnego zakresu ADC arduino. (Nie jest to dobry pomysł).

RTD może osiągnąć wyjście 30,2mA (moje tak). 150 omów * 0,03 A = 4,8 wolta. To jest tak blisko, jak bym chciał.

Inna strona internetowa wskazała na użycie rezystora 250 omów.

Przy prądzie 20mA #250ohm*0.02A = 5volt do arduino.

Przy prądzie 30mA # 250ohm * 0,03 A = 7,5 V do arduino.

Ryzykujesz spalenie swojego ADC i arduino.

Aby przetestować instrument w terenie, weź ze sobą baterię 12 V i podłącz ją do wejścia zasilania. Korzystanie z zewnętrznego źródła zasilania nie wpłynie na bieżącą konfigurację sterownika PLC.

Aby przetestować kartę wejścia analogowego w terenie, weź ze sobą baterię 12 V. Odłącz przyrząd + od obwodu. Podłączyć uziemienie do uziemienia przyrządu, a RTD- do odłączonego przewodu przyrządu.

Krok 3: Kalibracja

Kalibrowanie
Kalibrowanie

Aby skalibrować odczyt rezystora bocznikowego, podłącz RTD- do wejścia analogowego bocznikowego. Ustaw potencjometr trymera tak, aby generowane mA wynosiło 4 mA. Jeśli prąd w Twoim urządzeniu nie jest równy, zmień pierwszą wartość w kodzie w linii 84. Zwiększenie tej wartości obniży odczyt mA.

Następnie ustaw potencjometr na 20 mA. Jeśli w twoim urządzeniu mA nie jest równe, zmodyfikuj drugą wartość w kodzie w wierszu 84.

Więc twoje 4-20 mA będzie teraz wynosić 0,6-3 V (teoretycznie). Więcej niż wystarczający zasięg. Korzystając z biblioteki eRCaGuy, oversampling zapewni lepszy i stabilny odczyt.

Mam nadzieję, że to przeczytałeś. To jest moja pierwsza instrukcja, więc proszę, uspokój się, jeśli gdzieś popełniłem błąd lub coś pominąłem.

Ten projekt prawdopodobnie nie jest najlepszym sposobem na to, ale dla mnie działa i było fajnie go robić.

Kilka pomysłów mam dodatkowe…

Dodaj serwo, aby obrócić potencjometr w pudełku.

Dodaj przyciski, aby obrócić serwo w lewo lub w prawo.

Dodaj cyfrowy czujnik temperatury do radiatora regulatora, aby ostrzegać o niebezpiecznym cieple.

Krok 4: Programowanie Arduino

#włączać

// #include //Odkomentuj jeśli używasz LCD z rejestrem przesuwnym.

#włączać

#włączać

#włączać

#włączać

//A4 = (SDA)

//A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd(3, 4, 2); //Odkomentuj jeśli używasz LCD z rejestrem przesuwnym.

// | | |_ Zatrzask

// | \_ Zegar Pin

// \_ Dane/Włącz pin

bajt bitsOfResolution = 12; //polecona rozdzielczość nadpróbkowania

unsigned long numSamplesToAvg = 20; //liczba próbek W ROZDZIELCZOŚCI OVERSAMPLED, którą chcesz pobrać i uśrednić

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

napięcie bocznikowe pływaka = 0,0; //Z INA219

napięcie szyny podtrzymującej = 0,0; //Z INA219

pływak prąd_mA = 0,0; //Z INA219

napięcie obciążenia pływakowego = 0,0; //Z INA219

napięcie arduino pływaka = 0,0; //Obliczanie napięcia z pinu A0

Unsigned long A0analogReading = 0;

bajt analogowyIn = A0;

pływak ma_mapowany = 0.0; //Odwzorowanie napięcia od A0 do 4-20mA

pusta konfiguracja () {

adc.setADCSpeed(ADCSpeed);

adc.setBitsOfResolution(bitsOfResolution);

adc.setNumSamplesToAvg(numSamplesToAvg);

uint32_t bieżąca częstotliwość;

ina219.begin();

ina219.setCalibration_32V_30mA(); //Zmodyfikowana biblioteka dla większej precyzji w mA

lcd.początek(20, 4); // inicjalizuj LCD

lcd.clear();

lcd.home (); // idź do domu

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

opóźnienie (2000);

lcd.clear();

}

pusta pętla()

{

unsigned long currentMillis = millis();

const długi interwał = 100;

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

Odczytaj urządzenia I2C w odstępach czasu i wykonaj kilka obliczeń

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

if (currentMillis - previousMillis >= interwał) {

poprzedni Millis = obecny Millis;

Interwał();

}

Drukuj_Na_LCD(); // Prawdopodobnie nie muszę tak szybko aktualizować wyświetlacza LCD i można go przesunąć poniżej Interval()

}

próżnia

Interwał() {

napięcie bocznikowe = ina219.getShuntVoltage_mV();

napięcie szyny = ina219.getBusVoltage_V();

prąd_mA = ina219.getCurrent_mA();

napięcie obciążenia = (napięcie szyny + (napięcie bocznikowe / 1000)) + 0,71; // +0.71 to mój spadek napięcia diody

A0analogReading = adc.newAnalogRead(analogIn);

napięcie arduino = (5,0 * A0odczyt analogowy); //W przeliczeniu na mV

ma_mapped = mapa(arduinonapięcie, 752, 8459, 30, 220) / 10,0; //Mapa nie może używać pływaków. Dodaj 0 za mapowaną wartością i podziel przez 10, aby uzyskać odczyt zmiennoprzecinkowy.

//Mapowanie z obliczeń napięcia daje bardziej stabilny odczyt niż przy użyciu surowego odczytu ADC.

jeśli (napięcie bocznikowe >= -0,10 && napięcie bocznikowe <= -0,01) //Bez obciążenia INA219 ma tendencję do odczytywania poniżej -0,01, a mój tak.

{

prąd_mA = 0;

napięcie szyny = 0;

napięcie obciążenia = 0;

napięcie bocznikowe = 0;

}

}

próżnia

Drukuj_do_LCD() {

lcd.setCursor(0, 0);

if (ma_mapped < 1,25) { //Bez prądu to jest mój odczyt w mA, więc po prostu go wyrzucam.

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

}

w przeciwnym razie {

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

}

lcd.setCursor(0, 1);

lcd.print("Urządzenie:");

lcd.setCursor(10, 1);

jeśli (ma_mapowane < 1,25) {

lcd.print("brak urządzenia");

}

w przeciwnym razie {

lcd.print(ma_mapped);

}

lcd.print("mA");

lcd.setCursor(0, 2);

lcd.print("Generuj:");

lcd.setCursor(10, 2);

lcd.print(current_mA);

lcd.print("mA");

lcd.setCursor(0, 3);

lcd.print("Dostawa:");

lcd.setCursor(10, 3);

lcd.print (napięcie obciążenia);

lcd.print("V");

}

Krok 5: Więcej zdjęć

Więcej zdjęć
Więcej zdjęć

Terminal głośnikowy wzmacniacza. Dioda LED napędzana przez generator prądu (RTD). Okablowanie karty analogowej zastąpi diodę LED.

Terminal po lewej stronie służy do wejścia zasilania. Zaciski po prawej stronie służą do wejścia instrumentu.

Krok 6: Dopasowanie

Pasuje
Pasuje

Wszystko wydaje się pasować. Użyłem silikonu, aby tymczasowo trzymać razem niektóre rzeczy. Doniczka jest pokryta silikonem w prawym górnym rogu. Wywiercono mały otwór. Mogę regulować prąd od góry pudełka.

Krok 7: Tylko zdjęcia

Tylko zdjęcia
Tylko zdjęcia
Tylko zdjęcia
Tylko zdjęcia
Tylko zdjęcia
Tylko zdjęcia
Tylko zdjęcia
Tylko zdjęcia

Krok 8: Ostatnie słowa

Testowałem wyjście tego urządzenia ze sterownikiem PLC Allan Bradley. Wyniki były bardzo dobre. Mam pełny zakres. Przetestowałem również to urządzenie z czujnikiem ciśnienia 4-20mA, który ma wbudowany wyświetlacz LCD. Ponownie wyniki były bardzo dobre. Moje odczyty różniły się o kilka miejsc po przecinku.

Kod arduino piszę w zakładkach. W sterownikach PLC są one nazywane podprogramami. Ułatwia dla mnie debugowanie.

W załączeniu pliki tekstowe tych zakładek.

Zalecana: