Съдържание:

4-20ma генератор/тестер, използващ Arduino: 8 стъпки
4-20ma генератор/тестер, използващ Arduino: 8 стъпки

Видео: 4-20ma генератор/тестер, използващ Arduino: 8 стъпки

Видео: 4-20ma генератор/тестер, използващ Arduino: 8 стъпки
Видео: 4 to 20 mA Transmitter Circuit Operation - Instrumentation Tools 2024, Юни
Anonim
4-20ma генератор/тестер, използващ Arduino
4-20ma генератор/тестер, използващ Arduino

4-20mA генератори се предлагат в ebay, но аз отначало обичам DIY част от нещата и използвам части, които имам около.

Исках да тествам аналоговите входове на нашия PLC, за да проверя нашите показания за scada и да тествам изхода на 4-20mA инструменти. Има много преобразуватели на ток в напрежение и преобразуватели на напрежение в ток за arduino в ebay, но те се нуждаят от калибриране. Мога да използвам това, за да калибрирам всеки от тези конвертори, намерени в ebay и подобни.

Реших, че ще си направя генератор и тестер. В този момент той все още е в процес на разработка и е прототип.

Имах стара 2.1 звукова система, която не се използва (малки високоговорители). Затова използвах една от кутиите за високоговорители като кутия. Имах и усилвател, който умря поради мълния, премахнах терминала на високоговорителя от този усилвател, за да направя свързването лесно. Възнамерявам да направя печатна платка в бъдеще и по -добро заграждение.

Консумативи:

Списък с части.

LCD // 20x4 (адаптирайте кода, ако вашият е по -малък)

LM7808 // 8волтов регулатор

LED // Всеки тип или размер

Резистор за LED // Подходящ за LED тип и 8 волта

100 ома резистор + 47 ома резистор последователно // Ще се използва като шунт резистор

10K резистор // Arduino аналог в защита срещу високо напрежение

22K резистор // За да спре A0 да плава

Trimpot 100 ohm + 47 ohm резистор в серия // PT100 симулатор

35 -волтов кондензатор // Използвах 470uF, само за да намаля колебанията на захранващото напрежение

RTD (PT100 преобразувател) // Обхватът няма значение (обхват)

ДИОД (за защита на полярността)

INA219

Arduino

Етап 1:

Образ
Образ

Следвайки схемата, трябва да започнете къде да добавите частите и да ги свържете.

LM7808 позволява максимум 25 волта вход, което е добре за PLC системи, те обикновено използват 24 -волтови захранвания. Добавете радиатор към регулатора и не го използвайте продължително време. Падането на 16 волта кара регулатора да генерира много топлина.

Входното захранване подава регулатора и се свързва с VIN на INA219, в тази конфигурация INA219 също ще може да измерва правилното захранващо напрежение минус спада на напрежението от диода. Трябва да измерите спада на напрежението на диода и да го добавите към кода, така че да получите правилното отчитане на захранващото напрежение.

От INA219 VOUT до RTD+ захранва RTD. RTD- към земята завършва веригата.

За да тествате PLC аналогова карта, трябва да свържете RTD- към входа на аналоговата карта и земята от картата към земята arduino. (Не забравяйте да изключите всички инструменти, свързани към тествания канал).

R5 и LED1, индикаторната система е включена.

Регулаторът се подава във VIN на arduino (arduino има вграден регулатор до 5 волта).

Arduino 5V щифт отива към INA219 за захранване на вградения чип. INA219 GND към земята arduino.

Подстригването на чистачките към RTD PIN1 и подрязването на щифт 3 към RTD щифт 2 ще симулират PT100 връзка. (Разменете проводниците, ако завъртането на гарнитурата по посока на часовниковата стрелка не увеличава mA).

Стъпка 2: Тест на изхода на инструмента

За тестване на изхода на инструмента са необходими допълнителни части, като шунтиращ резистор. Нормалните 0.25W резистори ще се справят добре. Можете да оставите шунтиращия резистор и да добавите втори INA219 за тестване на изхода на инструмента. Остана ми само един, затова използвах резистор.

Тестването с помощта на шунт може да се извърши само от отрицателната страна на устройството. Ако използвате положителната страна, ще захранвате вашия arduino с повече от 4 пъти допустимото напрежение и ще изпускате дима.

Добавете шунтиращия резистор последователно с отрицателен проводник на инструмента. Страната на шунта, най -близо до устройството, ще се превърне в положителен аналог за arduino. Другата страна на шунта, най -близо до захранването, ще стане земята arduino, завършваща аналоговата входна верига.

150 ома шунтиращ резистор е абсолютният максимум, който трябва да се използва при използване на arduino. Резисторът има спад на напрежението, линеен на mA, преминаващ през него. Колкото по -голям е mA, толкова по -голямо е напрежението.

При 20mA ток # 150ohm*0.02A = 3volt към arduino.

При 4mA ток # 150ohm*0.004A = 0.6volt към arduino.

Сега може да искате напрежението да бъде по -близо до 5 волта, за да можете да ни предоставите пълния диапазон на ADC на arduino. (Не е добра идея).

RTD могат да достигнат 30.2mA изход (моят го прави). 150ohm*0.03A = 4.8 волта. Това е толкова близо, колкото бих искал да бъда.

Друг уебсайт посочва използването на 250ohm резистор.

При 20mA ток # 250ohm*0.02A = 5volt към arduino.

При 30mA ток # 250ohm*0.03A = 7.5volt към arduino.

Рискувате да изгорите ADC и arduino.

За да тествате инструмент на полето, вземете със себе си 12 -волтова батерия и я свържете към захранващия вход. Използването на външен източник на захранване няма да повлияе на текущата настройка на PLC.

За да тествате аналогова входна карта на полето, вземете със себе си 12 -волтова батерия. Изключете инструмента + от веригата. Свържете заземяването към масата на инструмента и RTD- към изключения проводник на инструмента.

Стъпка 3: Калибриране

Калибриране
Калибриране

За да калибрирате отчитането на вашия шунтиращ резистор, свържете RTD- към шунта Аналогов вход. Настройте вашия гарнитура за подстригване така, че генерираната mA да е 4mA. Ако mA на вашето устройство не е равно, променете първата стойност в кода на ред 84. Увеличаването на тази стойност ще намали отчитането на mA.

След това настройте подстригването си да генерира 20mA. Ако mA на вашето устройство не е равно, променете втората стойност в кода на ред 84.

Така че вашите 4-20mA сега ще станат 0,6-3 волта (теоретично). Повече от достатъчен обхват. Използвайки библиотеката от eRCaGuy, свръхдискретизацията ще ви даде по -добро и стабилно отчитане.

Дано прочетете това. Това е първият ми инструктаж, така че моля по -спокойно, ако съм направил грешка някъде или съм пропуснал нещо.

Този проект вероятно не е най -добрият начин да го направя, но ми действа и ми беше забавно да го правя.

Някои идеи имам допълнително …

Добавете серво, за да завъртите тапицерията в кутията.

Добавете бутони за завъртане на серво наляво или надясно.

Добавете цифров температурен сензор към радиатора на регулатора, за да предупредите за опасна топлина.

Стъпка 4: Програмиране на Arduino

#включва

// #include // Uncomment, ако използвате LCD с регистър за смяна.

#включва

#включва

#включва

#включва

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Декомментирайте, ако използвате LCD с регистър за смяна.

// | | | _ Заключващ щифт

// | / _ Часовник

// / _ Данни/Активиране на ПИН

байт bitsOfResolution = 12; // заповядана разделителна способност с извадка

без подпис дълъг numSamplesToAvg = 20; // брой проби ПРЕЗ РАЗРЕШЕНИЕТО НА ПРЕПОРЪЧЕНОТО, което искате да вземете, и средно

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

без подпис дълъг предишенMillis = 0;

плаващо шунтиращо напрежение = 0,0; // От INA219

напрежение на плаващата шина = 0,0; // От INA219

поплавъчен ток_mA = 0,0; // От INA219

напрежение на натоварване на поплавък = 0,0; // От INA219

ардуиново напрежение с поплавък = 0,0; // Изчисляване на напрежение от щифт A0

Неподписан дълъг A0analogReading = 0;

байт analogIn = A0;

float ma_mapped = 0.0; // Напрежение на картата от A0 до 4-20mA

void setup () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Модифицирана библиотека за по -голяма точност на mA

lcd.begin (20, 4); // инициализираме LCD дисплея

lcd.clear ();

lcd.home (); // прибирай се

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

забавяне (2000);

lcd.clear ();

}

void loop ()

{

без знак дълъг токMillis = millis ();

const дълъг интервал = 100;

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

Четете I2C устройства на интервали и направете някои изчисления

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

if (currentMillis - previousMillis> = интервал) {

previousMillis = currentMillis;

Интервал ();

}

Print_To_LCD (); // Вероятно няма нужда да актуализирам LCD дисплея толкова бързо и мога да го преместя под Interval ()

}

невалиден

Interval () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

напрежение на натоварване = (напрежение на шината + (шунтиращо напрежение / 1000)) + 0,71; // +0,71 е моят диоден спад на напрежението

A0analogReading = adc.newAnalogRead (analogIn);

arduinovoltage = (5.0 * A0analogReading); // Изчислено до mV

ma_mapped = карта (arduinovoltage, 752, 8459, 30, 220) / 10,0; // Картата не може да използва поплавъци. Добавете 0 зад нанесената стойност и разделете на 10, за да получите плаващо отчитане.

// Картографирането от изчисляване на напрежението дава по -стабилно отчитане, след което се използва необработеното отчитане на ADC.

if (shuntvoltage> = -0.10 && shuntvoltage <= -0.01) // Без товар INA219 има тенденция да чете по -долу -0.01, моят го прави.

{

current_mA = 0;

напрежение на шината = 0;

напрежение на натоварване = 0;

шунтово напрежение = 0;

}

}

невалиден

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Без ток това е моето отчитане на mA, така че просто го изхвърлям.

lcd.print (" * 4-20mA генератор *");

}

иначе {

lcd.print ("** Аналогов тестер **");

}

lcd.setCursor (0, 1);

lcd.print ("Устройство:");

lcd.setCursor (10, 1);

if (ma_mapped <1.25) {

lcd.print ("без устройство");

}

иначе {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Генериране:");

lcd.setCursor (10, 2);

lcd.print (current_mA);

lcd.print ("mA");

lcd.setCursor (0, 3);

lcd.print ("Доставка:");

lcd.setCursor (10, 3);

lcd.print (напрежение на натоварването);

lcd.print ("V");

}

Стъпка 5: Още няколко снимки

Още няколко снимки
Още няколко снимки

Терминал за високоговорител на усилвател. LED, задвижван от генератора на ток (RTD). Окабеляването на аналоговата карта ще замени светодиода.

Терминалът вляво е за вход за захранване. Клемите вдясно са за вход на инструменти.

Стъпка 6: Вграждане

Вграждане
Вграждане

Всичко сякаш си пасва. Използвах силикон, за да държа временно някои неща заедно. Подреждането е силиконово в горния десен ъгъл. Малка дупка беше предварително пробита. Мога да регулирам тока от горната част на кутията.

Стъпка 7: Само снимки

Само Снимки
Само Снимки
Само Снимки
Само Снимки
Само Снимки
Само Снимки
Само Снимки
Само Снимки

Стъпка 8: Заключителни думи

Тествах изхода на това устройство с PLC на Allan Bradley. Резултатите бяха много добри. Получих пълен обхват. Тествах и това устройство със сензор за налягане 4-20mA, който има вграден LCD дисплей. Отново резултатите бяха много добри. Показанията ми бяха изключени с няколко десетични знака.

Пиша кода си arduino в раздели. В PLC те се наричат подпрограми. Улеснява отстраняването на грешки за мен.

Прикачени са текстови файлове на тези раздели.

Препоръчано: