Оглавление:

Генератор / тестер 4-20 мА с использованием Arduino: 8 шагов
Генератор / тестер 4-20 мА с использованием Arduino: 8 шагов

Видео: Генератор / тестер 4-20 мА с использованием Arduino: 8 шагов

Видео: Генератор / тестер 4-20 мА с использованием Arduino: 8 шагов
Видео: Генератор токовой петли 2024, Июнь
Anonim
Генератор / тестер 4-20 мА с использованием Arduino
Генератор / тестер 4-20 мА с использованием Arduino

Генераторы 4-20 мА доступны на ebay, но я, например, люблю делать вещи своими руками и использовать детали, которые у меня есть.

Я хотел протестировать аналоговые входы нашего ПЛК, чтобы проверить наши показания scada и протестировать выход инструментов 4-20 мА. На ebay есть множество преобразователей тока в напряжение и преобразователей напряжения в ток для Arduino, но они нуждаются в калибровке. Я могу использовать это для калибровки любого из преобразователей, которые можно найти на ebay и т.п.

Решил, что сделаю генератор и тестер своими руками. На данный момент это все еще незавершенная работа и прототип.

У меня была старая звуковая система 2.1, которая не использовалась (маленькие колонки). Поэтому я использовал один из динамиков в качестве корпуса. У меня также был усилитель, который умер из-за удара молнии, я снял терминал динамика с этого усилителя, чтобы упростить подключение. Я намерен в будущем сделать печатную плату и лучший корпус.

Запасы:

Список деталей.

LCD // 20x4 (измените код, если ваш меньше)

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

LED // Любой тип и размер

Резистор для светодиода // Подходит для светодиода и 8 Вольт

Резистор 100 Ом + резистор 47 Ом последовательно // Будет использоваться как шунтирующий резистор

Резистор 10 кОм // аналог Arduino в защите от высокого напряжения

Резистор 22K // Чтобы остановить A0 от плавающего

Подстроечный резистор 100 Ом + 47 Ом последовательно // Имитатор PT100

Конденсатор на 35 вольт // Я использовал 470 мкФ, чтобы снизить колебания напряжения питания.

RTD (датчик PT100) // Диапазон не имеет значения (диапазон)

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

INA219

Ардуино

Шаг 1:

Изображение
Изображение

Следуя схеме, вы должны начать с того, где добавить детали и соединить их.

LM7808 допускает максимальное входное напряжение 25 вольт, что нормально для систем ПЛК, они обычно используют источники питания 24 вольт. Установите на регулятор радиатор и не используйте его в течение длительного времени. Падение напряжения на 16 вольт приводит к тому, что регулятор выделяет много тепла.

Входной источник питания питает регулятор и подключается к VIN INA219, в этой конфигурации INA219 также сможет измерять правильное напряжение питания за вычетом падения напряжения на диоде. Вы должны измерить падение напряжения на диоде и добавить его в код, чтобы получить правильное значение напряжения питания.

От INA219 VOUT к RTD + запитывает RTD. RTD- на землю замыкает цепь.

Чтобы протестировать аналоговую карту ПЛК, вы должны подключить RTD- ко входу аналоговой карты и заземление карты к земле Arduino. (Обязательно отсоедините все инструменты, подключенные к тестируемому каналу).

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

Регулятор питается от VIN Arduino (в Arduino встроен регулятор на 5 вольт).

Вывод Arduino 5V подключается к INA219 для питания встроенного чипа. INA219 GND на землю Arduino.

Грязесъемник триммера к контакту 1 резистивного датчика температуры (RTD) и контакт 3 потенциометра к контакту 2 резистивного датчика температуры (RTD) имитируют соединение PT100. (Поменяйте местами провода, если поворот потенциометра по часовой стрелке не увеличивает мА).

Шаг 2: Тест выходного сигнала прибора

Для проверки выхода прибора необходимы дополнительные детали, например, шунтирующий резистор. Обычные резисторы на 0,25 Вт отлично справятся с этой задачей. Вы можете оставить шунтирующий резистор и добавить второй INA219 для проверки выхода прибора. У меня остался только один, поэтому я использовал вместо него резистор.

Тестирование с помощью шунта можно проводить только на отрицательной стороне устройства. Если вы используете положительную сторону, вы обеспечите свой Arduino более чем в 4 раза допустимым напряжением и позволите дыму выйти.

Подключите шунтирующий резистор последовательно с отрицательным проводом прибора. Сторона шунта, ближайшая к устройству, станет положительным аналогом для Arduino. Другая сторона шунта, ближайшая к источнику питания, станет землей Arduino, замыкая аналоговую входную цепь.

Шунтирующий резистор 150 Ом - это абсолютный максимум, который следует использовать при использовании Arduino. На резисторе падение напряжения линейно зависит от протекающего через него мА. Чем больше мА, тем больше напряжение.

При токе 20 мА # 150 Ом * 0,02 А = 3 вольта на Arduino.

При токе 4 мА # 150 Ом * 0,004 А = 0,6 В на Arduino.

Теперь вы можете захотеть, чтобы напряжение было ближе к 5 вольт, чтобы вы могли использовать весь диапазон АЦП Arduino. (Не хорошая идея).

RTD может достигать выхода 30,2 мА (у меня). 150 Ом * 0,03 А = 4,8 вольт. Это настолько близко, насколько мне хотелось бы.

Другой веб-сайт указал на использование резистора 250 Ом.

При токе 20 мА # 250 Ом * 0,02 А = 5 вольт на Arduino.

При токе 30 мА # 250 Ом * 0,03 А = 7,5 В на Arduino.

Вы рискуете сжечь свой АЦП и ардуино.

Чтобы проверить прибор в полевых условиях, возьмите с собой аккумулятор на 12 В и подключите его к входу питания. Использование внешнего источника питания не повлияет на текущую настройку ПЛК.

Чтобы проверить карту аналогового ввода в полевых условиях, возьмите с собой аккумулятор на 12 В. Отсоедините прибор + от цепи. Подключите заземление к заземлению прибора, а RTD- к отсоединенному проводу прибора.

Шаг 3: Калибровка

Калибровка
Калибровка

Чтобы откалибровать показания шунтирующего резистора, подключите RTD- к аналоговому входу шунта. Установите подстроечный потенциометр так, чтобы генерируемый ток составлял 4 мА. Если значение мА вашего устройства не равно, измените первое значение в коде в строке 84. Увеличение этого значения приведет к снижению показания мА.

Затем установите регулятор на ток 20 мА. Если мА вашего устройства не равно, измените второе значение в коде в строке 84.

Таким образом, ваш 4-20 мА теперь станет 0,6-3 вольт (теоретически). Дальность более чем достаточная. Используя библиотеку от eRCaGuy, передискретизация даст вам лучшее и стабильное считывание.

Надеюсь, вы это прочитали. Это мое первое руководство, поэтому, пожалуйста, не торопитесь, если я где-то ошибся или что-то упустил.

Этот проект, вероятно, не лучший способ реализовать его, но он работает для меня, и мне было весело заниматься этим.

У меня есть дополнительные идеи…

Добавьте сервопривод, чтобы вращать горшок обрезки внутри коробки.

Добавьте кнопки для поворота сервопривода влево или вправо.

Добавьте цифровой датчик температуры к радиатору регулятора, чтобы предупредить об опасном нагреве.

Шаг 4: Программирование Arduino

#включают

// #include // Раскомментируйте, если вы используете ЖК-дисплей со сдвиговым регистром.

#включают

#включают

#включают

#включают

// A4 = (SDA)

// A5 = (SCL)

Adafruit_INA219 ina219;

ЖК-дисплей LiquidCrystal (12, 11, 5, 4, 3, 2);

// LiquidCrystal_SR lcd (3, 4, 2); // Раскомментируйте, если вы используете ЖК-дисплей со сдвиговым регистром.

// | | | _ Штифт защелки

// | / _ Значок часов

// / _ Данные / Включить пин

byte bitsOfResolution = 12; // заданное разрешение передискретизации

беззнаковое длинное numSamplesToAvg = 20; // количество отсчетов ПРИ ЗАБОРОЧЕННОМ РАЗРЕШЕНИИ, которое вы хотите взять и усреднить

ADC_prescaler_t ADCSpeed = ADC_DEFAULT;

беззнаковый длинный предыдущийМиллис = 0;

напряжение поплавкового шунта = 0,0; // Из INA219

напряжение на шине поплавка = 0,0; // Из INA219

float current_mA = 0,0; // Из INA219

напряжение поплавковой нагрузки = 0,0; // Из INA219

ардуиновое напряжение поплавка = 0,0; // Расчет напряжения с вывода A0

Беззнаковый длинный A0analogReading = 0;

byte analogIn = A0;

поплавок ma_mapped = 0.0; // Отображение напряжения от A0 до 4-20 мА

void setup () {

adc.setADCSpeed (ADCSpeed);

adc.setBitsOfResolution (bitsOfResolution);

adc.setNumSamplesToAvg (numSamplesToAvg);

uint32_t currentFrequency;

ina219.begin ();

ina219.setCalibration_32V_30mA (); // Модифицированная библиотека для большей точности по мА

lcd.begin (20, 4); // инициализируем ЖК-дисплей

lcd.clear ();

lcd.home (); // иди домой

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

задержка (2000);

lcd.clear ();

}

пустой цикл ()

{

беззнаковый длинный currentMillis = millis ();

const long interval = 100;

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

Считывайте устройства I2C через определенные промежутки времени и выполняйте некоторые вычисления.

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

if (currentMillis - previousMillis> = interval) {

previousMillis = currentMillis;

Интервал ();

}

Print_To_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); // Вычислено в мВ

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

// Отображение из расчета напряжения дает более стабильные показания, чем при использовании необработанного считывания АЦП.

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

{

current_mA = 0;

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

loadvoltage = 0;

шунтирующее напряжение = 0;

}

}

пустота

Print_To_LCD () {

lcd.setCursor (0, 0);

if (ma_mapped <1.25) {// Без тока это мое показание в мА, поэтому я просто отбрасываю его.

lcd.print («Генератор * 4-20мА *»);

}

еще {

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 («мА»);

lcd.setCursor (0, 2);

lcd.print ("Создать:");

lcd.setCursor (10, 2);

lcd.print (ток_мА);

lcd.print («мА»);

lcd.setCursor (0, 3);

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

lcd.setCursor (10, 3);

lcd.print (нагрузка-напряжение);

lcd.print ("V");

}

Шаг 5. Еще несколько фотографий

Еще несколько фотографий
Еще несколько фотографий

Терминал динамика усилителя. Светодиод управляется генератором тока (RTD). Проводка аналоговой карты заменяет светодиод.

Клемма слева предназначена для ввода питания. Клеммы справа предназначены для инструментального ввода.

Шаг 6: установка

Установка в
Установка в

Вроде все подходит. Я использовал силикон, чтобы временно скрепить что-то вместе. Вверху справа декоративный горшок покрыт силиконом. Было предварительно просверлено небольшое отверстие. Я могу регулировать силу тока сверху коробки.

Шаг 7. Только фотографии

Просто фото
Просто фото
Просто фото
Просто фото
Просто фото
Просто фото
Просто фото
Просто фото

Шаг 8: Заключительные слова

Я протестировал выход этого устройства с ПЛК Allan Bradley. Результаты были очень хорошими. Я получил полный диапазон. Я также тестировал это устройство с датчиком давления 4-20 мА, который имеет встроенный ЖК-дисплей. И снова результаты были очень хорошими. Мои показания были отклонены на пару десятичных знаков.

Я пишу свой код arduino во вкладках. В ПЛК они называются подпрограммами. Облегчает отладку моих файлов.

Прилагаются текстовые файлы этих вкладок.

Рекомендуемые: