Мазмуну:

4-20ma Generator/Tester Arduino колдонуу: 8 кадам
4-20ma Generator/Tester Arduino колдонуу: 8 кадам

Video: 4-20ma Generator/Tester Arduino колдонуу: 8 кадам

Video: 4-20ma Generator/Tester Arduino колдонуу: 8 кадам
Video: Как использовать оптопару Mosfet HW-532 для управления скоростью двигателя постоянного тока до 30 В или нагрузкой с помощью Arduino 2024, Ноябрь
Anonim
4-20ma Generator/Tester Arduino колдонуу
4-20ma Generator/Tester Arduino колдонуу

Ebayде 4-20мА генераторлор бар, бирок мен өзүмдүн колумдан келген нерселердин бөлүгүн жана тегерегимдеги бөлүктөрдү колдонууну жакшы көрөм.

Мен биздин PLC аналогдук кириштерибизди текшерип, scada окуубузду текшерип, 4-20мА приборлордун чыгарылышын текшергим келди. Ebayде arduino үчүн чыңалуу өзгөрткүчтөрүнө жана учурдагы конвертерлерге чыңалуу бар, бирок алар калибрлөөнү талап кылат. Мен муну ebayде жана жактырууларда табылган конверторлордун бирин калибрлөө үчүн колдоно алам.

Мен генератор менен тестиерди DIY кылам деп чечтим. Убакыттын өтүшү менен бул дагы эле уланып жаткан жумуш жана прототип.

Менде колдонулбай турган эски 2.1 үн тутуму бар болчу (кичине колонкалар). Ошентип, мен спикерлердин кутучаларынын бирин корпус катары колдондум. Менде дагы чагылгандын айынан каза болгон күчөткүч бар болчу, желди туташтыруу үчүн динамиктин терминалын ошол күчөткүчтөн алып салдым. Мен келечекте ПХБ жасоону жана жакшы корпус жасоону көздөп жатам.

Берилиштер:

Бөлүктөр тизмеси.

LCD // 20x4 (эгер кодуңуз кичине болсо)

LM7808 // 8 вольттуу жөнгө салуучу

LED // Ар кандай түрү же өлчөмү

LED үчүн резистор // LED түрүнө жана 8 вольтко ылайыктуу

100 Ом резистору + 47 Ом резистору серияда // Шунт резистору катары колдонулат

10K каршылыгы // Arduino аналогу жогорку чыңалуудан коргоодо

22K каршылыгы // A0дун сүзүүсүн токтотуу үчүн

Trimpot 100 ом + 47 ом каршылыгы сериясында // PT100 тренажери

35 вольт конденсатор // Мен 470uF колдондум, жөн эле камсыздоо чыңалуусунун төмөндөшүн кармап туруу үчүн

RTD (PT100 которгуч) // Span мааниге ээ эмес (диапазон)

DIODE (полярдык коргоо үчүн)

INA219

Arduino

1 кадам:

Сүрөт
Сүрөт

Схемага ылайык, тетиктерди кайда кошуп, зым менен жабуу керектигин башташыңыз керек.

LM7808 PLC системалары үчүн эң жакшы 25 вольтту киргизүүгө мүмкүндүк берет, алар жалпысынан 24 вольттук электр булактарын колдонушат. Муздаткычты жөнгө салгычка кошуңуз жана аны узак убакыт бою колдонбоңуз. 16 вольтту түшүрүү регулятордун көп жылуулукту пайда болушуна алып келет.

Киргизүү булагы регуляторду азыктандырат жана INA219 VINге туташат, бул конфигурацияда INA219 ошондой эле диоддун чыңалуусунун түшүүсүн эске алуу менен туура жеткирүү чыңалуусун өлчөй алат. Сиз диоддун чыңалуусунун төмөндөшүн өлчөп, аны кодго кошушуңуз керек, ошондо сиз туура чыңалуу окуусун аласыз.

INA219 VOUTтан RTD+ га чейин RTDди иштетет. RTD- жерге айланууну бүтүрөт.

PLC аналогдук картасын тестирлөө үчүн сиз RTD- аналогдук картанын киришине жана картадан arduino жерге чейин туташтырмаксыз. (Сыналып жаткан каналга тиркелген аспапты ажыратканыңызды текшериңиз).

R5 жана LED1, көрсөтүү системасы иштетилген.

Регулятор arduino VIN менен азыктанат (arduino 5 вольтко чейин жөндөгүчкө курулган).

Arduino 5V пин чипти иштетүү үчүн INA219га барат. INA219 GND arduino жерге.

RTD PIN1 үчүн казан тазалагыч жана RTD пин 2 үчүн казан казык 3, PT100 туташуусун туурайт. (Эгерде тримерди сааттын жебеси боюнча айлантуу мАны жогорулатпаса, зымдарды алмаштырыңыз).

2 -кадам: Инструменттерди чыгаруу тести

Аспаптын чыгышын текшерүү үчүн шунт каршылыгы сыяктуу кошумча бөлүктөр керек. Жөнөкөй 0.25W резисторлор бул ишти жакшы аткарышат. Сиз шунт каршылыгын таштап, прибордун өндүрүшүн текшерүү үчүн экинчи INA219 кошо аласыз. Менде бирөө калды, анын ордуна резистор колдондум.

Шунтту колдонуу менен тестирлөө түзмөктүн терс тарабында гана жүргүзүлүшү мүмкүн. Эгерде сиз позитивдүү жагын колдонсоңуз, анда ардуиноңузга уруксат берилген чыңалуудан 4 эсе көп камсыздап, түтүндү чыгарасыз.

Прибордун терс зымы менен катар шунт каршылыгын кошуңуз. Шунттун түзмөккө эң жакын жагы arduino үчүн оң аналог болуп калат. Энергия менен камсыздоого жакын шунттун экинчи тарабы аналогдук киргизүү схемасын аяктаган arduino жерге айланат.

150 Ом шунт резистору - бул ардуино колдонууда колдонулушу керек болгон абсолюттук максимум. Резистордо мАга карай сызыктуу чыңалуу төмөндөшү бар. МА канчалык чоң болсо, чыңалуу ошончолук чоң болот.

Учурда 20mA учурдагы # 150ohm*0.02A = 3volt to arduino.

Учурда 4mA учурдагы # 150ohm*0.004A = 0.6volt to arduino.

Эми сиз чыңалуунун 5 вольтко жакын болушун каалашыңыз мүмкүн, ошондо сиз бизге ардуинонун ADC диапазонун толук бере аласыз. (Эмес, жакшы ой).

RTD'лер 30.2mA кубаттуулугуна жетиши мүмкүн (Меники кылат). 150ohm*0.03A = 4.8 вольт. Бул мен каалагандай жакын.

Дагы бир веб -сайтта 250 Ом резистор колдонулушу көрсөтүлгөн.

Учурда 20mA # 250ohm*0.02A = 5volt to arduino.

Учурда 30mA # 250ohm*0.03A = 7.5volt to arduino.

Сиздин ADC жана arduino күйүп кетүү коркунучу бар.

Аспапты талаада сынап көрүү үчүн, өзүңүз менен 12 вольттук батареяны алып, аны камсыздоо киришине туташтырыңыз. Тышкы энергия булагын колдонуу учурдагы PLC орнотуусуна таасир этпейт.

Талаада аналогдук кирүү картасын текшерүү үчүн 12 вольттук батареяны алыңыз. Аспапты + чынжырдан ажыратыңыз. Аспапты жерге жана RTDди ажыратылган прибордун зымына туташтырыңыз.

3 -кадам: Калибрлөө

Калибрлөө
Калибрлөө

Шунт резисторунун окуусун калибрлөө үчүн, RTD- аналогуна шунт коюңуз. Жасалган идишти 4 мА кылып орнотуңуз. Эгерде сиздин түзмөк mA бирдей эмес болсо, анда 84 -саптагы коддун биринчи маанисин өзгөртүңүз. Бул маанини жогорулатуу мАнын көрсөткүчүн төмөндөтөт.

Андан кийин 20мА генерациялоо үчүн идишти коюңуз. Эгерде сиздин түзмөк mA барабар болбосо, анда 84 -саптагы коддун экинчи маанисин өзгөртүңүз.

Ошентип, сиздин 4-20мА азыр 0.6-3 вольт болуп калат (теориялык). Жетишээрлик диапазон. ERCaGuy китепканасын колдонуп, ашыкча тандоо сизге жакшыраак жана туруктуу окууну берет.

Сиз муну окуйсуз деп үмүттөнөбүз. Бул менин биринчи үйрөткүчүм, андыктан бир жерден ката кетирип же бир нерсени калтырып койсом, жайыраак кабыл алыңыз.

Бул долбоор, балким, бул тууралуу айтуунун эң жакшы жолу эмес, бирок ал мен үчүн иштейт жана муну кылуу кызыктуу болду.

Менде кошумча идеялар бар …

Корпустун ичиндеги кооз идишти айландыруу үчүн servo кошуңуз.

Сервону солго же оңго буруу үчүн баскычтарды кошуңуз.

Санарип температура сенсорун жөнгө салгычка кошуп, коркунучтуу ысыкты эскертүү.

4 -кадам: Arduino программалоо

#кошуу

// #кошуу // Комментарий бербөө, эгерде сиз сменалык реестр менен ЖКны колдонсоңуз.

#кошуу

#кошуу

#кошуу

#кошуу

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

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

// LiquidCrystal_SR lcd (3, 4, 2); // Комментарий жазбаңыз, эгерде сиз сменалык реестр менен ЖКны колдонсоңуз.

// | | | _ бекитүү пин

// | / _ Саат пин

// / _ Берилиштер/Иштетүү пин

байт bitsOfResolution = 12; // буйрук oversampled токтом

белгисиз узун numSamplesToAvg = 20; // сиз алгысы келген жана орточо алгандагы OVERSAMPLED RESOLUTION үлгүлөрүнүн саны

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

unsigned long previousMillis = 0;

float shuntvoltage = 0.0; // INA219дан

калкып чыгуучу шинанын чыңалуусу = 0,0; // INA219дан

float current_mA = 0.0; // INA219дан

калкып чыгуучу вольт = 0.0; // INA219дан

float arduinovoltage = 0.0; // A0 пинден чыңалууну эсептөө

Кол коюлбаган узун A0analogReading = 0;

байт analogIn = A0;

float ma_mapped = 0.0; // Картанын чыңалуусу A0дон 4-20мАга чейин

жараксыз орнотуу () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // MA боюнча көбүрөөк тактык үчүн өзгөртүлгөн китепкана

lcd.begin (20, 4); // ЖКны баштоо

lcd.clear ();

lcd.home (); // үйгө баруу

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

кечигүү (2000);

lcd.clear ();

}

боштук цикл ()

{

белгисиз узак currentMillis = millis ();

const узак аралыгы = 100;

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

I2C түзмөктөрүн интервал менен окуп, кээ бир эсептөөлөрдү жасаңыз

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

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

previousMillis = currentMillis;

Interval ();

}

Print_To_LCD (); // Мен, балким, LCDди ушунчалык тез жаңыртуунун кажети жок жана аны Интервалдын астына жылдырса болот ()

}

жараксыз

Интервал () {

shuntvoltage = ina219.getShuntVoltage_mV ();

busvoltage = ina219.getBusVoltage_V ();

current_mA = ina219.getCurrent_mA ();

жүк чыңалуусу = (busvoltage + (shuntvoltage / 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;

busvoltage = 0;

жүк чыңалуусу = 0;

shuntvoltage = 0;

}

}

жараксыз

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Агым жок болсо бул менин МА окуум, ошондуктан мен аны алып салдым.

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

}

башка {

lcd.print ("** аналогдук сыноочу **");

}

lcd.setCursor (0, 1);

lcd.print ("Түзмөк:");

lcd.setCursor (10, 1);

эгер (ma_mapped <1.25) {

lcd.print ("түзмөк жок");

}

башка {

lcd.print (ma_mapped);

}

lcd.print ("mA");

lcd.setCursor (0, 2);

lcd.print ("Generate:");

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 -кадам: Дагы бир нече сүрөттөр

Дагы Фотолор
Дагы Фотолор

Күчөткүчтүн терминалы. Учурдагы генератор (RTD) тарабынан башкарылган LED. Аналогдук карта зымдары LEDди алмаштырат.

Терең сол жактагы терминал камсыздоо үчүн. Оң жактагы терминалдар инструменттерди киргизүү үчүн.

6 -кадам: Орнотуу

Орнотуу
Орнотуу

Баары ылайыктуу окшойт. Мен кээ бир нерселерди убактылуу кармоо үчүн силикон колдондум. Трим казаны жогорку оңго силикон менен капталган. Кичинекей тешик алдын ала тешилген. Мен кутунун башынан токту тууралай алам.

7 -кадам: Жөн гана сүрөттөр

Жөн гана сүрөттөр
Жөн гана сүрөттөр
Жөн гана сүрөттөр
Жөн гана сүрөттөр
Жөн гана сүрөттөр
Жөн гана сүрөттөр
Жөн гана сүрөттөр
Жөн гана сүрөттөр

8 -кадам: Акыркы сөздөр

Мен бул түзмөктүн өндүрүшүн Allan Bradley PLC менен сынап көрдүм. Жыйынтыгы абдан жакшы болду. Мен толук диапазонго ээ болдум. Мен бул түзмөктү 4-20мА басым сенсору менен сынап көрдүм, ал ЖК дисплейде орнотулган. Дагы жыйынтыктар абдан жакшы болду. Менин окууларым бир нече ондуктар менен өчүрүлдү.

Мен arduino кодумду баракчаларга жазам. PLCде алар суб күн тартиби деп аталат. Мүчүлүштүктөрдү оңдоону жеңилдетет.

Ошол өтмөктөрдүн текст файлдары тиркелет.

Сунушталууда: