
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04

Генераторы 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 во вкладках. В ПЛК они называются подпрограммами. Облегчает отладку моих файлов.
Прилагаются текстовые файлы этих вкладок.
Рекомендуемые:
Тестер емкости аккумулятора с использованием Arduino [Lithium-NiMH-NiCd]: 15 шагов (с изображениями)
![Тестер емкости аккумулятора с использованием Arduino [Lithium-NiMH-NiCd]: 15 шагов (с изображениями) Тестер емкости аккумулятора с использованием Arduino [Lithium-NiMH-NiCd]: 15 шагов (с изображениями)](https://i.howwhatproduce.com/images/010/image-27076-j.webp)
Тестер емкости аккумулятора с использованием Arduino [Lithium-NiMH-NiCd]: Особенности: Определение поддельной литий-ионной / литий-полимерной / никель-кадмиевой / никель-металлогидридной батареи Регулируемая нагрузка постоянного тока (также может быть изменена пользователем) Возможность измерения емкости почти аккумулятор любого типа (ниже 5 В) Простота пайки, сборки и использования
Генератор - генератор постоянного тока с использованием геркона: 3 шага

Генератор - генератор постоянного тока, использующий геркон: простой генератор постоянного тока Генератор постоянного тока (DC) - это электрическая машина, которая преобразует механическую энергию в электричество постоянного тока. Важно: генератор постоянного тока (DC) может использоваться в качестве двигателя постоянного тока без какой-либо конструкции. изменения
Тестер микросхем, операционный усилитель, тестер таймера 555: 3 шага

Тестер ИС, Операционный усилитель, Тестер таймера 555: все плохие или заменяемые ИС валяются, но если они смешались друг с другом, требуется много времени, чтобы определить плохой или хороший.В этой статье мы узнаем о том, как мы можем сделать ИС. тестер, давайте продолжим
Тональный генератор «Джимикки Каммал» с использованием Arduino Pro Mini: 5 шагов

Тональный генератор "Jimikky Kammal" с использованием Arduino Pro Mini: это простой проект тонального генератора с использованием Arduino Pro Mini. Фрагмент суперхита "Jimikky Kammal" фильма "Velipadinte Pusthakam" разворачивается в монотонном режиме. Музыкальные ноты встречаются в природе как плавные и катящиеся синусо
Тестер емкости литий-ионных аккумуляторов (литиевый тестер мощности): 5 шагов

Тестер емкости литиево-ионных аккумуляторов (литиевый тестер мощности): =========== ВНИМАНИЕ & ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ ========== Литий-ионные батареи очень опасны при неправильном обращении. НЕ ЗАРЯЖАЙТЕ / НЕ СЖИГАЙТЕ / НЕ ОТКРЫВАЙТЕ литий-ионные батареи Все, что вы делаете с этой информацией, является вашим собственным риском ====== =====================================