- PVSM.RU - https://www.pvsm.ru -

Регулятор расхода газа в 5 раз дешевле коммерческих решений

image

Регуляторы расхода газа (РРГ) предназначены для поддержания заданного пользователем значения расхода. РРГ используются в промышленности и научно-исследовательских лабораториях для организации подачи газа из баллонов и магистралей. На рынке представлены устройства компаний Элточприбор, 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 л/мин, а также любых других регуляторов из аналогичных компонентов следует той же схеме, но может отличаться незначительными деталями.

Аппаратная часть

image

Аппаратная часть показана на рисунке и состоит из:

  1. Пропорционального клапана PVQ31
  2. Измерителя расхода PFM550
  3. Фильтра
  4. Блока питания (24V, 1A)
  5. Схемы управления силой тока
  6. Микроконтроллера Arduino Nano и схемы его питания

image

Электрическая схема подключения компонентов показана на рисунке. Для питания схемы используется источник постоянного тока на 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 и графического интерфейса пользователя, запускаемого на ПК.

Программа, загружаемая на микроконтроллер, циклически выполняет следующие действия:

  1. Опрашивает последовательный порт и считывает с него данные, вводимые пользователем
  2. Выводит данные, полученные с измерителя расхода в последовательный порт
  3. В зависимости от данных, полученных от пользователя и измерителя расхода определяет величину открытия пропорционального клапана и формирует необходимый ШИМ-сигнал

Система может работать в ручном и автоматическом режиме. При ручном режиме работы в последовательный порт должна быть отправлена величина желаемого открытия клапана, выражаемая переменной 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-программа выполняет следующие действия:

  1. Устанавливает соединение с последовательным портом микроконтроллера
  2. Через графический интерфейс получает от пользователя данные о требуемом режиме работы, значении желаемого расхода газа или величины открытия клапана, в различных единицах измерения
  3. Приводит полученные данные к диапазону 0-1023, принимаемому прошивкой микроконтроллера, по формулам пересчета
  4. Передает данные п.3 микроконтроллеру через последовательный порт
  5. Считывает из последовательного порта данные, полученные от измерителя расхода (значения 0-1023)
  6. Переводит данные п.5 в требуемые единицы измерения и отображает в числовом и графическом виде

Код, обеспечивающий установку соединения с последовательным портом, заимствован отсюда [17].

Для перевода из пользовательских единиц измерения в диапазон 0-1023 и обратно предназначен модуль units.py. Этот модуль позволяет легко добавлять новые единицы измерения. От пользователя требуется указать название единиц и формулу пересчета из 0-1023 в новые единицы измерения. Модуль снабжен подробными комментариями.

Данные полученные от измерителя расхода и выведенные прошивкой микроконтроллера в последовательный порт считываются с порта Python-программой и после перевода единиц измерения отображаются в текстовом и графическом виде. Для отрисовки графика текущего расхода используется библиотека pyqtgraph.

Результаты

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

image
На рисунке показан внешний вид графического интерфейса пользователя и график изменения расхода газа, полученный в автоматическом режиме и демонстрирующий переключение РРГ между разными значениями поддерживаемого расхода. Результаты приведены в единицах 0-1023.

Для демонстрации возможностей поддержания постоянного расхода газа был рассмотрен случай, когда расход при открытии пропорционального клапана на постоянную величину «плывет», как показано в левой части графика (x<950) на рисунке ниже. Результат работы режима автоматического поддержания заданного расхода можно видеть на правой части графика (x>1000). Тесты показали, что отклонение от заданного расхода в режиме автоматического удержания составляет не более 2%.

image

Замечания

Использование микроконтроллера 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