Расходомер импульсный, Гибридный расчет.

Пользовательские блоки дополняющие возможности стандартных блоков из разделов Математика и Алгебра, а так-же различные цифровые фильтры
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
VNL64T
Рядовой
Сообщения: 71
Зарегистрирован: 22 янв 2024, 05:37
Имя: Алекс
Благодарил (а): 3 раза
Поблагодарили: 20 раз

Расходомер импульсный, Гибридный расчет.

Сообщение VNL64T »

Гибридный профессиональный алгоритм измерения расхода (расчёт за период и мгновенный по частоте) объединение через комплиментарный фильтр.

Не проверен в деле!!! Наработки будущего проекта...

T_in Период времени подсчета импульсов для усреднения (мс)
K_flow Коэффициент расходомера (мл/импульс)
alpha Коэффициент фильтра (0-1)
PinN Номер цифрового пина.
usePullUp = true Использовать внутренний подтягивающий резистор
boardType 1=UNO, 2=MEGA2560, 3=LEONARDO

Выход Q_final ml/sec

Выбор параметра Альфа находится в диапазоне от 0 до 1.
- Если альфа близка к 1, то фильтр больше доверяет мгновенным показаниям (F_inst). Это дает быстрый отклик на изменения расхода, но показания могут быть "шумными" и прыгать.
- Если альфа близка к 0, то фильтр больше доверяет усредненным показаниям (F_avg). Это дает очень стабильные и плавные показания, но медленный отклик на изменения расхода.
На практике для измерения расхода обычно выбирают альфа в диапазоне 0.1 до 0.3.

// Таблица соответствия пинов и прерываний для разных плат
* Arduino UNO:
* Пин 2 -> INT0 (прерывание 0)
* Пин 3 -> INT1 (прерывание 1)

* Arduino Leonardo:
* Пин 2 -> INT0 (прерывание 0)
* Пин 3 -> INT1 (прерывание 1)
* Пин 7 -> INT4 (прерывание 4)
* Пин 8 -> INT5 (прерывание 5)

* Arduino MEGA2560:
* Пин 2 -> INT0 (прерывание 0)
* Пин 3 -> INT1 (прерывание 1)
* Пин 21 -> INT2 (прерывание 2)
* Пин 20 -> INT3 (прерывание 3)
* Пин 19 -> INT4 (прерывание 4)
* Пин 18 -> INT5 (прерывание 5)

Описание... блока..
Гибридный профессиональный алгоритм измерения расхода
Составляющие:
Точное усреднение (Фон): Мы используем подсчет импульсов за длительный интервал (например, 10-60 секунд) для получения эталонного, точного значения средней частоты F_avg.( Расход за время)
Быстрый отклик (Передний план): Мы постоянно измеряем период между последними импульсами для расчета мгновенной частоты F_inst. (Мгновенный расход)
Слияние данных (Фильтр): Мы "подтягиваем" мгновенные показания к эталонным, но позволяем им отклоняться при реальных изменениях расхода.
Преимущества этого гибридного метода:
Высокая точность на низких расходах:
Достигается за счет длительного интервала усреднения T_in.
Отсутствие скачков "±1 импульс": Погрешность усреднения составляет ±1 / T_in импульс. Например 30 секунд это всего ±0.033 импульса что ничтожно мало.
Быстрая реакция на изменение расхода:
Как только поток начинает меняться, F_inst изменяется сразу же, и комплиментарный фильтр начинает плавно "вести" точное значение F_avg за собой.
Плавность показаний: Фильтр эффективно убирает шумы и скачки, связанные с дискретностью импульсов и турбулентностью потока.

1,Причина редактирования, подобраны незначительные хвосты в коде , добавлено описание внутри кода на русском..
2. Добавлено включение подтягивающего резистора.. :smile390:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
VNL64T
Рядовой
Сообщения: 71
Зарегистрирован: 22 янв 2024, 05:37
Имя: Алекс
Благодарил (а): 3 раза
Поблагодарили: 20 раз

Re: Расходомер импульсный, Гибридный расчет.

Сообщение VNL64T »

К сожалению в железе не заработало у меня, разбираюсь...

Текущая реализация не работает поскольку частота импульсов с моего расходомера (не верный выбор расходомера :smile44: ) крайне мала таким образом если импульсы поступают реже чем 1 в секунду то на выходе будет всегда 0. :smile37:
Из этого следует что в других случаях код в принципе должен работать корректно...

А в моем случае требуется иной подход или иное железо (в данном случае агрегат собран и подключен смена железа видится проблемой)
из этого следует что я должен изменить методы расчета для малой частоты обновления (сверх малого расхода по меркам текущего железа)
Решение изменить тип фонового накопления с текущей реализации где F_avg вычисляется как количество импульсов за последние T_in и деленное на T_in. Теоретически можно увеличить время до приемлемого для расчета но F_avg обновляется только раз в T_in.. это будет крайне медленно..

Перейдём на более приемлемый вариант в текущем случае, на экспоненциальное скользящее среднее(EMA) для F_avg, чтобы она могла обновляться даже при редких импульсах и все также объединить через комплементарный фильтр..
Anatoliy33
Рядовой
Сообщения: 1
Зарегистрирован: 09 сен 2025, 21:58
Имя: Анатолий
Благодарил (а): 1 раз

Re: Расходомер импульсный, Гибридный расчет.

Сообщение Anatoliy33 »

Здравствуйте! Подскажите, для Arduino Nano (ATmega328) не подойдет ?
Ответить

Вернуться в «Блоки для рассчетов и цифровые фильтры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость