- PVSM.RU - https://www.pvsm.ru -
Регуляторы расхода газа (РРГ) предназначены для поддержания заданного пользователем значения расхода. РРГ используются в промышленности и научно-исследовательских лабораториях для организации подачи газа из баллонов и магистралей. На рынке представлены устройства компаний Элточприбор, MKS, Bronkhorst и др. Стоимость таких приборов составляет 1000-2500 USD. Целью настоящей работы является создание регулятора расхода газа из более доступных компонентов. Идея состоит в организации системы с обратной связью, включающей в себя пропорциональный клапан и измеритель расхода. Ниже приведено краткое описание аппаратной и программной части системы, позволяющее воспроизвести ее всем, кто использует РРГ в своей деятельности. Все исходные коды доступны на GitHub [1].
Использовались изделия компании SMC, клапаны серии PVQ и измерители расхода серии PFM5 без индикации. Было собрано два РРГ с диапазонами регулируемых расходов 0.2-5 л/мин (PVQ13 + PFM510) и 1-50 л/мин (PVQ31 + PFM550), показанные на рисунке. Стоимость одного регулятора расхода можно оценить сверху как 100 USD (клапан PVQ31) + 80 USD (измеритель PFM5) + 20 USD (микроконтроллер Arduino Nano, блок питания и радиодетали) = 200 USD. Все описанное ниже относится к РРГ 1-50 л/мин. Создание регулятора 0.2-5 л/мин, а также любых других регуляторов из аналогичных компонентов следует той же схеме, но может отличаться незначительными деталями.
Аппаратная часть показана на рисунке и состоит из:
Электрическая схема подключения компонентов показана на рисунке. Для питания схемы используется источник постоянного тока на 24 В, 1 А, которого более чем достаточно, учитывая потребление клапана менее 200 мА и измерителя менее 35 мА. Пропорциональные клапаны серии PVQ управляются силой тока. В соответствии с документацией не рекомендуется управлять ими путем контроля напряжения. Управление силой тока может быть реализовано с помощью схемы обсуждавшейся здесь [2], здесь [3] и более подробно здесь [4]. Схема управления силой тока выделена на общей электрической схеме (Рис.3) пунктирным прямоугольником. Клапаны серии PVQ подключаются двумя проводами питания: красный — DC+, черный — DC-.
Сила тока регулируется с помощью ШИМ сигнала, выдаваемого аналоговым пином микроконтроллера. По умолчанию контроллеры на базе ATmega328 (Arduino UNO/Nano/Pro Mini) генерируют 8 битный (значения 0-255) ШИМ сигнал на частоте 488 или 976 Гц, в зависимости от пина. Малая разрядность ШИМ сигнала снижает точность регулировки клапана. Низкая частота приводит к его гудению. Эти величины могут быть увеличены программно до 10 бит (0-1023) и 15.6 кГц, соответственно. Мы использовали частоту 7.8 кГц. Описание команд, которые необходимо вставить в функцию setup()
прошивки Arduino приведено здесь [5] и здесь [6].
Измерители расхода серии PFM5 имеют 2 сигнальных провода (черный — аналоговый выход, белый — установка времени отклика (не используем)) и два провода питания (коричневый — DC+, синий — DC-). Питание от источника постоянного тока 24 В. Измеритель расхода выдает аналоговый сигнал в диапазоне 1-5 В. Значение 1 В соответствует нулевому расходу газа, 5 В — максимальному для данного измерителя. Согласно документации зависимость между расходом и напряжением линейная. Между тем представляется нелишним проведение регулярной тарировки расходомера. Аналоговый сигнал с измерителя расхода (черный провод) принимается 10 битным (0-1023) аналоговым пином Arduino для обработки и отображения. Белый провод предназначен для установки времени отклика, мы его не используем. В этом случае время отклика 50 мс.
Питание платы Arduino следует осуществлять через пин 5V, напряжение питания не должно превышать 5.5 В. Такое питание может быть организовано от БП клапана и расходомера через стабилизатор L7805, как показано на схеме (Рис.3). Скорее всего будет нужен радиатор на стабилизатор. Питание от USB порта компьютера, использованное во время тестирования (Рис.2) не желательно так как в этом случае опорное напряжение при использовании АЦП нестабильно. Более подробно про питание платы см. здесь [7].
Программная часть
Программная часть состоит из прошивки микроконтроллера Arduino Nano и графического интерфейса пользователя, запускаемого на ПК.
Программа, загружаемая на микроконтроллер, циклически выполняет следующие действия:
Система может работать в ручном и автоматическом режиме. При ручном режиме работы в последовательный порт должна быть отправлена величина желаемого открытия клапана, выражаемая переменной valve
(0<=valve
<1023). Значение этой переменной определяет заполненность ШИМ-сигнала, который отправляется через аналоговый выход микроконтроллера на схему контроля силы тока и пропорциональный клапан командой analogWrite(valvepin, valve)
. После открытия, клапан остается в заданном положении до получения новой команды через последовательный порт.
Для перехода в автоматический режим работы в последовательный порт необходимо отправить отрицательное число -targetflow
. Значение переменной targetflow
лежит в интервале 0-1023 и определяет расход газа, который следует поддерживать. Реальный расход газа, определяется показаниями расходомера, которые считываются с аналогового входа микроконтроллера командой realflow = analogRead(fmpin)
(0<=realflow
<1023). В автоматическом режиме система стремиться поддерживать равенство между targetflow
и realflow
управляя пропорциональным клапаном. Величина открытия клапана рассчитывается с помощью пропорционального-интегрально-дифференцирующего (ПИД) регулятора. Про ПИД-регулятор можно почитать здесь [8], здесь [9] и здесь [10]. Для реализация регулятора используется библиотека GyverPID [11] с некоторыми изменениями и дополнениями. Так как библиотека была модифицирована, используйте библиотеку прилагаемую к настоящему коду, а не скачанную по ссылке выше.
Для использования ПИД-регулятора необходимо подобрать коэффициенты пропорциональной Kp
, интегральной Ki
и дифференциальной Kd
составляющих, а также время итерации dtpid
. Значение переменной dtpid
надо подбирать в зависимости от инертности системы. Чем более инертна система тем больше должно быть dtpid
. Исходя из оценок и результатов тестирования для рассматриваемого устройства мы выбрали значения dtpid
= 100-330 мс. Коэффициенты Kp
, Ki
, Kd
подбираются при фиксированном значении dtpid
и существенно зависят от системы. Рекомендации по подбору коэффициентов можно найти здесь [12], здесь [13] и здесь [14].
Итак, алгоритм, циклично выполняемый микроконтроллером выглядит следующим образом:
if(в последовательном порту есть данные)
считать в переменную inp
if(inp >= 0 && inp < 1023)
выключить автоматический режим
открыть клапан на величину inp
if(inp <= 0 && inp >= -1023)
включить автоматический режим
установить желаемое значение расхода равным -inp
if(автоматический режим && с прошлого включения регулятора прошло dtpid мс)
расчитываем величину открытия клапана с помощью ПИД-регулятора
открываем клапан на расчитанное значение
if(с прошлого чтения расход прошло dt мс)
считываем данные с расходомера
выводим в последовательный порт
обновляем текушее значение расхода
Графический интерфейс пользователя написан на языке Python с использованием графического фреймворка PyQt. Дизайн создан в программе Qt Designer, после чего код .ui-файла конвертировался в Python-файл. Введение в разработку графического интерфейса и использование PyQt см. здесь [15] и здесь [16].
Графический интерфейс взаимодействует с прошивкой Arduino через последовательный порт с помощью библиотеки pyserial
. Python-программа выполняет следующие действия:
Код, обеспечивающий установку соединения с последовательным портом, заимствован отсюда [17].
Для перевода из пользовательских единиц измерения в диапазон 0-1023 и обратно предназначен модуль units.py
. Этот модуль позволяет легко добавлять новые единицы измерения. От пользователя требуется указать название единиц и формулу пересчета из 0-1023 в новые единицы измерения. Модуль снабжен подробными комментариями.
Данные полученные от измерителя расхода и выведенные прошивкой микроконтроллера в последовательный порт считываются с порта Python-программой и после перевода единиц измерения отображаются в текстовом и графическом виде. Для отрисовки графика текущего расхода используется библиотека pyqtgraph
.
Для начала работы с РРГ необходимо: прошить микроконтроллер, подключить питание, запустить Python-программу, установить соединение с последовательным портом. После этого пользователь может выбирать ражим работы (ручной или автоматический) и задавать требуемую величину открытия клапана в ручном режиме работы или поддерживаемое значение расхода в автоматическом. Текущий расход газа выводится в соответствующем поле и отображается на графике. График обновляется циклически, после достижения заданного количества точек график очищается и отрисовка начинается сначала. Пользователь может выбрать используемые единицы измерения.
На рисунке показан внешний вид графического интерфейса пользователя и график изменения расхода газа, полученный в автоматическом режиме и демонстрирующий переключение РРГ между разными значениями поддерживаемого расхода. Результаты приведены в единицах 0-1023.
Для демонстрации возможностей поддержания постоянного расхода газа был рассмотрен случай, когда расход при открытии пропорционального клапана на постоянную величину «плывет», как показано в левой части графика (x<950) на рисунке ниже. Результат работы режима автоматического поддержания заданного расхода можно видеть на правой части графика (x>1000). Тесты показали, что отклонение от заданного расхода в режиме автоматического удержания составляет не более 2%.
Использование микроконтроллера Arduino Nano излишне так как задействована лишь малая часть его пинов. С другой стороны было бы лучше использовать микроконтроллеры с большей разрядностью аналоговых входов/выходов для повышения точности измерения и регулировки. При смене типа микроконтроллера может потребоваться своя реализация ПИД-регулятора, это не должно вызвать затруднений так как алгоритм простой.
На этапе разработки электрическая схема была собрана на макетной плате (см. Рис.2). Для дальнейшего использования необходимо спаять схему и поместить в корпус.
Авторы статьи не являются ни электронщиками, ни программистами, поэтому конструктивные советы по улучшению приветствуются.
Исходные коды прошивки Arduino и Python-программы, а также документацию на используемые измерители расхода и пропорциональные клапаны выложены на GitHub [1]
Мы благодарны нашим коллегам за идею системы, реализованной в этой работе. AlexGyver и другим пользователям, щедро делящимся своим опытом, за информацию которую мы использовали в работе.
Использование системы с обратной связью, состоящей из пропорционального клапана, измерителя расхода и микроконтроллера, позволяет сделать РРГ для поддержания заданного расхода газа. Тесты продемонстрировали отклонение расхода от требуемого в пределах менее 2%. Стоимость системы составила менее 200 USD. Собранный прототип показал работоспособность в широком диапазоне условий. Дальнейшее использование может требовать доводки, включающей распайку схем, изготовление корпуса и т.п.
Автор: f_rom
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/345905
Ссылки в тексте:
[1] GitHub: https://github.com/furs-lab/MFC
[2] здесь: https://electronics.stackexchange.com/questions/262172/problem-with-arduino-controlled-constant-current-supply-with-mosfet-npn?rq=1
[3] здесь: https://electronics.stackexchange.com/questions/55643/constant-current-circuit-with-transistors-mosfets-design-comparison
[4] здесь: https://www.instructables.com/id/Circuits-for-using-High-Power-LED-s/
[5] здесь: https://alexgyver.ru/lessons/pwm-overclock/
[6] здесь: http://mypractic.ru/urok-37-shirotno-impulsnaya-modulyaciya-v-arduino.html
[7] здесь: https://alexgyver.ru/lessons/arduino-power/
[8] здесь: https://odinelectric.ru/knowledgebase/chto-takoe-pid-regulyator-dlya-chajnikov
[9] здесь: http://we.easyelectronics.ru/Theory/pid-regulyatory--dlya-chaynikov-praktikov.html
[10] здесь: https://onion.io/2bt-pid-control-python/
[11] GyverPID: https://alexgyver.ru/gyverpid/
[12] здесь: http://lazysmart.ru/osnovy-avtomatiki/nastrojka-pid-regulyatora/
[13] здесь: http://we.easyelectronics.ru/Theory/prostoy-metod-nastroyki-pid-regulyatora.html
[14] здесь: https://www.bookasutp.ru/Chapter5_5.aspx
[15] здесь: https://tproger.ru/translations/python-gui-pyqt/
[16] здесь: https://pythonworld.ru/gui/pyqt5-widgets.html
[17] отсюда: https://habr.com/ru/post/443326/
[18] Источник: https://habr.com/ru/post/487402/?utm_source=habrahabr&utm_medium=rss&utm_campaign=487402
Нажмите здесь для печати.