Страница 1 из 1
Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 05 янв 2026, 18:45
Siberian
Привет, Парни!
Кто-то пробовал использовать как альтернативу ПИД, Fuzzy Logic (Нечёткая логика) ?
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 05 янв 2026, 19:28
WildCat
Тут на форуме есть такая тема
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 05 янв 2026, 19:29
WildCat
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 06 янв 2026, 01:14
novel
Я пробовал с год назад, не мог решить задачу пид регулятором управляя сервой 0-10в на водяном калорифере. Делал климат для грибницы и нужна была точность в 1 градус, но инерция системы огромная + износ оборудования. Удалось запустить алгоритм на Fuzzy.h и решить задачу из двух таблиц по 5 наборов неточности. Правда система всё равно получилась гибридная ПИД+Фуззи.
В двух словах: есть два датчика температуры - один в камере целевая температура для пид регулятора и его результат является целевым (почти абстрактным) значением температуры для фуззи, и второй непосредственно после нагревателя - опорная температура для фуззи. Из этих двух температур мы получаем разницу и эта разница является основой для набора карт.
Вот пример для простоты из трех карт (обозначения условные):
Для входной температуры (Tcrnt):
Определение диапазоны для "холодно", "нормально" и "горячо".
Холодно: от 0.0 до T_target - 2.0
Нормально: от T_target - 2.0 до T_target + 2.0
Горячо: от T_target + 2.0 до 50.0 (или любой разумный максимум)
Для выходного PWM:
Установить диапазоны PWM для низкой, средней и высокой мощности. Пример:
Низкая мощность: от 0 до 85 (0-33%)
Средняя мощность: от 85 до 170 (33-66%)
Высокая мощность: от 170 до 255 (66-100%)
Собственно, что получил (речь о зимнем времени года): нечёткая логика моментально выводит калорифер в узкий диапазон рабочих температур без перегрева и недогрева, а пид уже тонко дорегулирывает. В итоге система в баланс выходить начала раз в 10 быстрее, чем на голом пид.
А проблема с пид была в том, что если целевая температура будет по помещению, то сначала подаваемый воздух круто перегревается пока камера доберется до заданной температуры (портя грибницы), а потом полностью кран закрывается и летит холодный воздух пока камера не остынет, а потом начинаются качели. А если выставить очень плавное пид регулирование, то прогрев ооочень медленный (грибница тоже находится не в лучшем состоянии, что прямо влияет на рост урожая) и если днем, к примеру условно тепло, то ночью система может провалиться в минус и очень долго выходить на заданные параметры. А если пид выставить по температуре приточного воздуха, то с учетом теплопотерь помещения, установленной температуры тоже не добиться. Пробовал сначала решать задачу последовательно двумя пидами, и был на пол пути к успеху, но тоже не осилил - оочень много времени потратил и баланса не добился )))
ДОПОЛНЮ: Еще важный момент - все диапазоны наборов нужно выставлять с небольшим перекрытием, в противном случае в логике появляются мертвые зоны и выходной шим будет с дырами (полное отключение)
Из интересного: Когда разбирался с алгоритмом выяснил что на фуззи работают сигвеи, моноколеса, колесная робототехника (удержание траектории поворота, ведь пидом при изменении траектории невозможно динамически следовать изменению углу поворота без виляния), ну и, собственно, ракеты тоже летают используя фуззи.
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 06 янв 2026, 07:36
lfgjikjjyj
Я ставлю разгонные тэны быстрый Старт за десяток градусов отрубается дальше более слабым Теном удерживается через пид
Ещё как вариант делал для автоклавов можно такой принцип использовать разгон относительно времени масштабирование температуры к нему как приставка к пиду который не даёт ни завысить не упасть но при этом без качелек
Долго конечно но для автоклава там и не надо быстро даже нельзя быстро
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 06 янв 2026, 09:46
novel
В моём случае котел только один на несколько камер и все они работают по своему циклу роста грибов, изменение мощности магистрального теплоносителя выводит из баланса все камеры. А фуззи реально как кран с горячей водой, под которым моешь руки: сначала ледяная вода ты открываешь на максимум, она прогревается - ты уменьшаешь до комфорта. Руки доберутся, хочу в стареньком автомобиле сделать климат на нечеткой логике (сейчас там обычный пид и он очень медленно работает, так как чуть избыточное перерегулирование и из печки не комфортные 30-35 градусов летит а сразу под 70), главное найти где старые проекты задевались.
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 06 янв 2026, 10:03
Siberian
novel писал(а): 06 янв 2026, 09:46
В моём случае котел только один на несколько камер и все они работают по своему циклу роста грибов, изменение мощности магистрального теплоносителя выводит из баланса все камеры. А фуззи реально как кран с горячей водой, под которым моешь руки: сначала ледяная вода ты открываешь на максимум, она прогревается - ты уменьшаешь до комфорта. Руки доберутся, хочу в стареньком автомобиле сделать климат на нечеткой логике (сейчас там обычный пид и он очень медленно работает, так как чуть избыточное перерегулирование и из печки не комфортные 30-35 градусов летит а сразу под 70), главное найти где старые проекты задевались.
Есть блок фуззи для FLProg ?
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 06 янв 2026, 11:04
novel
Ну вот нужно найти, возможно в старом ноутбуке, но там черт голову сломит - это мой первый блок и нужно самому разобраться, вспомнить что к чему делал, поудалять лишнее, комментарии везде сделать и пояснения. Точно помню что скетч незамысловатый на Fuzzy.h, но там гора входов и выходов. Как говорил выше - хочу в старом авто климат новый сделать и буду, вероятно, с нуля новый блок делать со всеми пояснениями, его и выложу.
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 07 янв 2026, 12:11
novel
Вот пример использования блока фуззи вместе с ПИД в флп 9.6.9, постарался внутри весь скетч прокомментировать, чтоб можно было под себя делать правки и менять наборы. Еще добавил для удобства промежуточный блок для конвертации двух наборов нечёткой логики в 4. Это всё у меня крутилось на mega2560 со скадой и хотелось максимально сократить количество переменных. Еще долго пытался сделать чтоб блок мог воспринимать значения наборов на лету, но получилось сделать только через отдельную запись. В комплекте библиотека на которой всё работает.
Если будут тонкие вопросы по настройке наборов, скорее всего помочь не смогу - это долгий тернистый путь )) а за год уже подзабылось как делал. Все примеры настроек переменных живут в скаде, её нет под руками.
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 07 янв 2026, 18:57
Siberian
novel писал(а): 07 янв 2026, 12:11
Вот пример использования блока фуззи вместе с ПИД в флп 9.6.9, постарался внутри весь скетч прокомментировать, чтоб можно было под себя делать правки и менять наборы. Еще добавил для удобства промежуточный блок для конвертации двух наборов нечёткой логики в 4. Это всё у меня крутилось на mega2560 со скадой и хотелось максимально сократить количество переменных. Еще долго пытался сделать чтоб блок мог воспринимать значения наборов на лету, но получилось сделать только через отдельную запись. В комплекте библиотека на которой всё работает.
Если будут тонкие вопросы по настройке наборов, скорее всего помочь не смогу - это долгий тернистый путь )) а за год уже подзабылось как делал. Все примеры настроек переменных живут в скаде, её нет под руками.
Я сделал блок, сейчас тестю и дорабатываю.
Без библиотеки, собственно это не фуззи, но что-то подобное.
Делаю для инкубатора.
ВХОДЫ
En (Bool) - включение регулятора
In (Float) - текущая температура
Set (Float) - заданная температура
MinPwm (UInt16) - минимальный ШИМ (0-4095)
MaxPwm (UInt16) - максимальный ШИМ (0-4095)
UpdateTime (UInt16) - время обновления (50-1000 мс)
Hysteresis (Float) - гистерезис (0.05-1.0°C)
MaxPower (Float) - максимальная мощность (10-100%)
MinPower (Float) - минимальная мощность (0-50%)
IdlePower (Float) - мощность в зоне поддержания (10-90%)
PowerRamp (Float) - скорость изменения мощности (10-100 %/°C)
ColdZone (Float) - Разница Температуры (между уставкой и фактической (от 0.3 до 2.5 градуса) ниже которой мощность = 100%
ВЫХОДЫ БЛОКА:
PWM (UInt16) - выход ШИМ (0-4095)
Error (Float) - ошибка температуры
Filtered_Temp (Float) - отфильтрованная температура
Power (UInt16) - текущая мощность в %
Heating_Active (UInt16) - флаг активности нагрева (1/0)
Работает нормально, держит в пределах гистерезиса, нужно еще кое-что дорабатывать.
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 07 янв 2026, 19:22
novel
Я тоже пробовал без библиотек, но что-то результатом не был доволен - не мог получить нелинейную аппроксимацию, и как следствие плавающую температуру, но здорово, что нашлось подходящее решение.
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 07 янв 2026, 19:27
Siberian
novel писал(а): 07 янв 2026, 19:22
Я тоже пробовал без библиотек, но что-то результатом не был доволен - не мог получить нелинейную аппроксимацию, и как следствие плавающую температуру, но здорово, что нашлось подходящее решение.
У меня тоже плавает немного, но когда устаканится, то примерно в пределах гистерезиса 0.05 - 0.07.
Понятно, что у каждого датчика своя погрешность не меньше 0.1, но всё равно три знака после запятой.
Блок и реагирует на этот гистерезис.
Re: Fuzzy Logic альтернатива ПИД-Регулятора
Добавлено: 09 янв 2026, 17:49
genii86
Привет. Могу подсказать решение твоей проблемы с помощью регулирования только Пид. Итак, для начала нам понадобятся два температурных датчиков. Одним мы замеряем температуру в помещении, а вторым замеряем температуру теплоносителя. Суть сводится к тому что ты суммируешь обе температуры и эту сумму подаешь на вход пид регулятора. Тебе надо будет вручную найти баланс когда определенная температура теплонасителя, будет потдерживать температуру в помещении. Эту сумму ты и введешь в качестве задания в Пид регуляторе. Таким способом Пид регулятор будет меньше раскачивать систему. Допустим какой-то из датчиков изменил температуру, пид сразу на это реагирует. Так как у температуры в помещении большая инерция, Пид сильно раскачивает систему. А по второму датчику он будет работать типа с обратной связью. Удачи.