Например TDA7294

Форум РадиоКот • Просмотр темы - Что лучше: PID регулятор, или Fuzzy logic?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт июн 06, 2025 01:25:29

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Пн мар 28, 2022 13:32:51 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
Хочу спросить у сообщества, кто имел дело с регулятором на нечёткой логике (Fuzzy logic regulator)?
Какие впечатления?
Я недавно занялся этим вопросом и просто в восторге. В двух моих проектах регулятор на Fuzzy logic положил на обе лопатки ПИД регулятор. Причём настройка регулятора на нечёткой логике оказалась на порядок проще и понятнее.
В моём блоге я обрисовал сравнение более подробнее, но хочу спросить, есть ли ещё кто-нибудь, кто занимался нечёткой логикой?
И почему при таких преимуществах (быстрое регулирование, отсутствие вынужденных колебаний, лёгкость настройки) нечёткая логика не заменила ПИД в устройствах регулирования?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Пн мар 28, 2022 14:50:45 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 2152
Зарегистрирован: Чт янв 26, 2012 16:44:29
Сообщений: 18517
Откуда: Таксимо
Рейтинг сообщения: 0
Продолжайте наблюдение. Если все так красиво то это переворот просто. Кроме шуток. А по коду, больше или меньше чем у пид регулятора?

_________________
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вт мар 29, 2022 06:36:20 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1395
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7297
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Fuzzy логтикой не занимался, но читал в книжке Валвано (книжку не рекомендую). Там в 17-й главе обзорно рассмотрены типы регуляторов, начиная от релейных и заканчивая этой нечеткой логикой. Да, расписано красиво, но я вынес из этой главы, что чтобы это реально работало, нужно достаточно хорошо знать контролируемую систему. Иначе заполучить возбуждение и все остальные прелести - раз плюнуть. А если систему хорошо знаешь - тот же ПИД работает хорошо.

Это я к тому, что природу не обманешь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вт мар 29, 2022 06:49:05 
Друг Кота
Аватар пользователя

Карма: 5
Рейтинг сообщений: 61
Зарегистрирован: Ср сен 30, 2020 16:51:47
Сообщений: 4609
Откуда: РФ
Рейтинг сообщения: 0
А по коду, больше или меньше чем у пид регулятора?


Вопрос скорее в другом. Является код общедоступным из открытых источников или нет. Если код общедоступен, то тогда возможно тестирование таких устройств независимыми специалистами. А если нет, то тогда это очередной "сименс".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вт мар 29, 2022 11:02:25 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
Добрый день. По размеру кода вполне сопоставимо с ПИД регулятором.
Поскольку Fuzzy logic регулятор разработан в рамках контрактных обязательств, раскрыть его пока не могу. Но есть два нюанса:
1) по ссылке в статье есть открытая реализация регулятора. Она тоже вполне применима.
2) Моя библиотека сделана на Float переменных, чтобы избежать масштабирования входных и выходных параметров. Я хочу перевести её на целочисленную логику, чтобы ускорить работу. Правда придётся отказаться от экспоненциальной функции. Тогда нужно масштабировать переменные, но эта библиотека будет открытой, так как сделана вне работы.
Правила нечёткой логики могут реализовывать достаточно сложные функции регулирования, совершенно недоступные ПИД регулятору. Например, вхождение в траекторию, или принятие решений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вт мар 29, 2022 11:07:39 
Друг Кота
Аватар пользователя

Карма: 5
Рейтинг сообщений: 61
Зарегистрирован: Ср сен 30, 2020 16:51:47
Сообщений: 4609
Откуда: РФ
Рейтинг сообщения: 0
регулятор разработан в рамках контрактных обязательств


Тогда это очередной "сименс". То есть решение может и неплохое, но оценить его реальную эффективность невозможно.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Ср апр 20, 2022 22:07:32 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
Перевёл библиотеку на целочисленную логику.
Теперь её можно использовать на микроконтроллерах без поддержки float.
Это заняло некоторое время, так как нужно было приводить величины к масштабным единицам +-127 и 0..255.
Также нужно было протестировать все новые функции и написать шпаргалку в хедере.
Но теперь всё оформил так, как сам понимаю.
Поскольку эта версия библиотеки не используется на работе, я её выложил в открытый доступ на гит:
https://github.com/Garmin59/Fuzzy_logic_integer
Подробнее описание будет у меня в блоге несколько позже, сюда также выложу информацию.
Если кому будет интересно посмотреть и попробовать, пишите мнения и вопросы в эту ветку, буду отвечать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Чт апр 21, 2022 08:54:39 
Грызет канифоль

Зарегистрирован: Вс ноя 13, 2011 11:21:23
Сообщений: 252
Откуда: Горловка.
Рейтинг сообщения: 0
Совпадение, не иначе... Несколько дней ищу в интернете практические примеры реализации данного алгоритма, что бы можно было поручить выполнять это микроконтроллеру.Абсолютно случайно попалась на глаза ваша тема.Позвольте высказать свое мнение.
Большей частью, людям хватает простых регуляторов "релейного" типа с гистерезисом, максимум ПИ-регулятр.
Будем честны, зависимость эта и потребность обусловлена областью применения.Для бытовых нужд типа, подогрев рассады, регулировка температуры в помещении, инкубаторы и т.д. хватит примитивного алгоритма и будет работать.Разумеется, для максимального комфорта и эффективности можно ввести "умные регуляторы", но в тоже время и без них будет работать...
К чему я подвожу, тема действительно Очень и интересная и незаслуженно обделена вниманием и если на зарубежных сайтах она хоть мало мальске затрагивается, то у нас с этим проблема.Не смотря на это есть предчувствие, что тема не сыскает популярность.В данном конкретном случае как у вас, эта система оправдана, для автопилота RC моделей она актуальна, для многого она избыточна.Мало у кого получается правильно настроить коэффициенты ПИД-регулятора...
Субъективное мнение, впрочем как и выше, приведите пример, ну предположим термостата под управлением нечеткой логики, что бы люди могли попробовать без сильного погружения в "науку", а кто оценит, тот пойдет дальше.
Повторюсь, тема действительно интересная и не раскрытая!Поэтому желаю удачи в творчестве!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор или Fuzzy logic?
СообщениеДобавлено: Чт апр 21, 2022 12:04:35 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
Написал простейшую программу П регулятора.
Нагреватель начинает уменьшать нагрев при разнице температур 10 градусов. Можно подобрать под свойства реального нагревателя
Вначале формируем правила оценки разницы температур.
Затем правила управлением нагревателем. Поскольку параметр один, то и логические функции передают первый параметр на выход без изменений.
Спойлер
Код:
********************* P heating regulator sample code ***********************/
// Input temperature in degree - t_measure variable -127..127
// Setup temperature in degree - t_setup variable   -127..127
// output value = 0 - cold, 100 - full hot 100%
// one input variable

#define IN_COLD     -10
#define IN_HOT      0

#define OUT_COLD    0
#define OUT_HOT     100

#define NULL_PARAM      (0)


// Input fuzzification rules
//          name,     ffunc,    [n],  a,        b,      c,              next       
MAKE_FFUNC (d_cold,   low,      0,    IN_COLD,  IN_HOT, NULL_PARAM,     d_hot);   // холодно     
MAKE_FFUNC (d_hot,    high,     0,    IN_COLD,  IN_HOT, NULL_PARAM,     d_cold);  // тепло

// Output fuzzy rules
//        name,     A,      OPER,   B,        fin,       output,    next rule
MAKE_RULE (rule_01, d_cold, F_A,    d_cold,   true,      OUT_HOT,   rule_02);   // греем
MAKE_RULE (rule_02, d_hot,  F_A,    d_hot,    true,      OUT_COLD,  rule_01);   // не греем

int8_t in_scaling (int16_t in)
{
    return (lim_s8 (in));   // no need input scaling
}

int16_t out_scaling (int8_t out)
{
    return (int16_t)out;    // no need output scaling
}


int16_t heat_control (int16_t t_measure, int16_t t_setup)
{
    static int8_t delta_in;
    static int8_t out_control;
    int16_t delta16;
    fuzzy_param fuzzy =
    {
        .in_array    = &delta_in,   // входная переменная
        .start_ffunc = &d_cold,     // первое правило фуззификации
        .start_rule  = &rule_01,    // первое правило управления
    };

    delta16 = t_setup - t_measure;
    delta_in = in_scaling (delta16);
    out_control = process_fuzzy_logic (&fuzzy);
    return (out_scaling (out_control));
}

/****************** end ******************************************************/

Правила простейшие: если холодно, то греем, если тепло, то не греем.
Правила зацикливаем.

Специально усложнил код преобразованиями входных и выходных величин.
Сам код в три строчки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вс май 01, 2022 12:57:02 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
Прошло десять дней, и ни одного отзыва.
Никто не попробовал применить у себя нечёткую логику? Или тема трудна для понимания?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вс май 01, 2022 14:04:47 
Это не хвост, это антенна
Аватар пользователя

Карма: -16
Рейтинг сообщений: -136
Зарегистрирован: Чт фев 19, 2015 12:41:04
Сообщений: 1406
Рейтинг сообщения: 0
Ни

_________________
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вс май 01, 2022 17:20:02 
Опытный кот

Карма: -9
Рейтинг сообщений: 28
Зарегистрирован: Пт янв 27, 2012 20:07:54
Сообщений: 859
Откуда: Томск
Рейтинг сообщения: 0
Ну, тема наверное сложна, надо читать-изучать.

Сходу замечу, что приведенный пример "Написал простейшую программу П регулятора." у меня так и не заработал.
Я его пытался вкорячить в 8051 проц.. Вкорячил. Но не работает.
Ради проверки вкорячил за десять минут в ардуину. Тоже выдает нули.

fuzzy_logic.c/fuzzy_logic.h взяты с github-а


Спойлер#include "fuzzy_logic.h"
#include "fuzzy_logic.c"

#define IN_COLD -10
#define IN_HOT 0

#define OUT_COLD 0
#define OUT_HOT 100

#define NULL_PARAM (0)

// Input fuzzification rules
// name, ffunc, [n], a, b, c, next
MAKE_FFUNC (d_cold, low, 0, IN_COLD, IN_HOT, NULL_PARAM, d_hot); // холодно
MAKE_FFUNC (d_hot, high, 0, IN_COLD, IN_HOT, NULL_PARAM, d_cold); // тепло

// Output fuzzy rules
// name, A, OPER, B, fin, output, next rule
MAKE_RULE (rule_01, d_cold, F_A, d_cold, true, OUT_HOT, rule_02); // греем
MAKE_RULE (rule_02, d_hot, F_A, d_hot, true, OUT_COLD, rule_01); // не греем

void heat_control()
{
static int8_t delta_in;
static int8_t out_control;

fuzzy_param fuzzy = {&delta_in, &rule_01, &d_cold};
// {
//.in_array = &delta_in, // входная переменная
//.start_ffunc = &d_cold, // первое правило фуззификации
//.start_rule = &rule_01 // первое правило управления
//};

delta_in = 90 - 20;
out_control = process_fuzzy_logic (&fuzzy);

Serial.println(out_control);
}


void setup() {
Serial.begin(19200);
Serial.println("Started.");
heat_control();
heat_control();
heat_control();
heat_control();
heat_control();
heat_control();
heat_control();
heat_control();
}

void loop() {}


Результат:

Код:
Started.
0
0
0
0
0
0
0
0


Добавлено after 22 minutes 38 seconds:
Блин, а ведь это работает :-)

Оказывается там знак перепутан в примере.
Надо наоборот, delta16 = t_measure - t_setup;

Теперь работает:

Изображение

Если "принудительно охлаждать объект", то резко пытается греть его.
Если не охлаждать, то держит на определенном уровне.

Целевая Т выставлена в 90C, т.е. действительно работает, примерно как П-регулятор с Кп=10.

Добавлено after 12 minutes 16 seconds:
#define IN_COLD -10
#define IN_HOT 0

#define OUT_COLD 0
#define OUT_HOT 100

Учитывая что эти коэффициенты как раз и дают Кп = 10 как (100-0) / (0 - (-10)) --, то на таком примере преимущество нечеткой логики не очевидно.
Какая разница, для какого регулятора потребуется подобрать Кп = 10 - для П-регулятора или регулятора на нечеткой логике?


Вложения:
image.png [20.94 KiB]
Скачиваний: 1101
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вс май 01, 2022 18:04:22 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
Отлично, что у вас заработало на 51 процессоре! Библиотеку проверял на пк в Vision Studio Code. Опечатку поправлю.
Насчёт примера - это ведь первый "HELLO world" в использовании регулятора.
Количество правил и входных переменных неограничено.
Например, можно добавить интегральную или дифференциальную ошибку и добавить правила для полного ПИД реглятора.
Когда в голове складываются "правила по данным эксперта", то можно сделать управление всем, чем угодно.
Сейчас, например, отлаживаем управление курсом сельхоз. трактора на поле по линии.
Две переменные - расстояние до линии и курс трактора. На выходе - угол поворота передних колёс.
Пять состояний в каждой переменной, двадцать пять правил.
Описывают подход к линии, постепенный въезд в неё и поддержание отклонения не более 2 см.
Другие пилят управление коптером или моделью самолёта.
Преимущество нечёткой логики в том, что можно построить нелинейные правила, больше всего подходящие к данному процессу управления.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вс май 01, 2022 19:16:28 
Опытный кот

Карма: -9
Рейтинг сообщений: 28
Зарегистрирован: Пт янв 27, 2012 20:07:54
Сообщений: 859
Откуда: Томск
Рейтинг сообщения: 0
Да, я бегло прочитал ссылку на блог.
вопросы :)

1) Зачем в функциях есть строка "(void)p3;" ? Просто чтобы компилятор не ругался?
2) Где бы наискать информацию для дальнейшего изучения, чтобы сделать регулятор посложнее-поточнее.

----

Цитата:
Отлично, что у вас заработало на 51 процессоре!


Ну это не так радостно, на самом деле. Я правил код в Keil, и ограничений этого компилятора это специфическое развлечение.
Код заработал в том числе [вероятно] благодаря удалению p3 из-за особенностей передачи аргументов в функцию.
В аппноте https://www.keil.com/appnotes/files/apnt_129.pdf страница 4 указано, что аргументы функции, вызываемой через указатель на функцию,
должны размещаться в регистрах, а это не более трех аргументов. Поэтому более сложные правила, чем low/high, которым будет нужен p3, сходу не пойдут.

Кстати, вот так можно избавиться от переменной start и чуть сократить машинный код.

Спойлерf1 = f = fuzzy->start_ffunc;
while (1)
{
f->y = f->func(fuzzy->input, f->a, f->b, f->c);
f = f->next;
if (f == f1)
break;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Вс май 01, 2022 21:55:20 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
вопросы
1) Зачем в функциях есть строка "(void)p3;" ? Просто чтобы компилятор не ругался?

В некоторых функциях нужны три переменные, например трапеция. Если они не нужны, убираем предупреждение компилятора
Цитата:
2) Где бы наискать информацию для дальнейшего изучения, чтобы сделать регулятор посложнее-поточнее.

Я искал в гугле, пару ссылок оставил в блоге, остальное не сохранил, на английском находил толковые статьи.
Для меня самое сложное было понять, как из нечётких результатов получать чёткое решение :) Потом понял про весовые коэффициенты, и паззл сложился.
Для оценки правил отлично подошёл вариант построения трёхмерной поверхности из результатов и входных переменных. Сразу показывает, где ошибся в правилах:
Изображение
Цитата:
Код заработал в том числе [вероятно] благодаря удалению p3 из-за особенностей передачи аргументов в функцию.

В вашем случае можно использовать только один указатель, на структуру параметров, но надо править код библиотеки
Цитата:
Кстати, вот так можно избавиться от переменной start и чуть сократить машинный код.

Конечно можно, это моя фобия - избегать break.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Пн май 02, 2022 15:57:25 
Опытный кот

Карма: -9
Рейтинг сообщений: 28
Зарегистрирован: Пт янв 27, 2012 20:07:54
Сообщений: 859
Откуда: Томск
Рейтинг сообщения: 0
А как PI регулятор сделать? Для нагревателя.
Вход: Уставка, температура. Выход: % мощности нагревателя, 0-1000 (шаг 0.1%).

В статье на хабре https://habr.com/ru/post/500268/ есть вроде как подходящая "база правил для регулятора" (если заменить "скорость" на "отклонение температуры"):

если отклонение больше или (отклонение норма (0) и скорость растет), то воздействие больше.
если отклонение в норме, то воздействие 0.
если отклонение меньше или (отклонение норма (0) и скорость падает), то воздействие меньше.

Но тут непонятный момент - "воздействие больше/ноль/меньше" - т.е. получается, что на выходе такого регулятора надо реализовать интегратор?
В принципе это не проблема.

Но основной вопрос - как в принципе всё это описать в функциях и правилах?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
СообщениеДобавлено: Пн май 02, 2022 17:54:42 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 910
Откуда: от туда
Рейтинг сообщения: 0
Тут всё просто.
Три шага:
1) Входные величины - это ошибка в данный момент, и разность ошибок сейчас и некоторое время назад. Это две входные переменные (отклонение и скорость).
Их заносим во входной массив с индексами 0 и 1 соответственно.
Теперь надо определится с правилами фуззификации: "отклонение в норме" это от куда до куда. Например, от -5 до +5 градусов. Можно применить треугольную функцию с центром 0 и базой 5 градусов. Можно взять и кубическую аппроксимацию Гаусса с сигмой 2,5 но пока не нужно.
"меньше" тогда будет ниже 5 градусов. Возьмём функцию low с параметрами -5 и 0. Похоже будет "больше".
Три функции для параметра отклонение.
Для ваших правил нужны ещё две функции для параметра скорость. Думаю, нужно будет умножать на 10, так как скорость будет в величинах меньше единицы. Вот и повод использовать функцию in_scaling. Определите в числах, сколько и в какой функции будет "скорость растёт" и "скорость падает" (функции low и high подойдут).
Итого пять правил, определяющих понятия входных переменных.
Кстати, всё это описано в fuzzy_logic.h, просто почитайте внимательно.
2) Теперь определите выходные воздействия. Например, "больше" это 100, "ноль"-0, "меньше" -100.
3) И напишите ваши три правила в пять строк, так как сложные правила пишутся последовательными бинарными выражениями. Всё это тоже есть в примере на гите.
Насчёт интергатора на выходе - можете попробовать применить, никто не запрещает.
Запускайте ваш регулятор - получаете результат.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y