Привет, Хабр.

Некоторое время назад я публиковал ElectroKit - Браузерный расчётчик электрики, полностью работающий в одном HTML-файле. Благодаря вашим комментариям удалось исправить множество неточностей и значительно улучшить проект, но я всё ещё работаю над ним

Появилась идея сделать похожую вещь для PID-регуляторов. Опять же неудобно - онлайн калькуляторы,где-то посчитать коэффициенты, отдельно переходный процесс, искать очередную реализацию PID и захотелось чтобы всё это было в одном месте как в ElectroKit и так появился PID Toolkit. И как всегда, любимая мне идея - локально, без установки, регистрации, смс и подключения к Интернету.(хотя про интернет это уже не так важно).

Live Demo:  PID Toolkit

GitHub:  DarkenAmber/PIDToolkit

Почему вообще появился этот проект

Всё, что удалось найти это PID-калькуляторы которые умеют лишь вычислять коэффициенты по одному выбранному методу и потом всё равно приходится сравнивать разные методы,\ настройки, моделировать переходный процесс, оценивать устойчивость системы, писать код PID-регулятора под свою платформу и помнить про derivative kick(резкий скачок управляющего сигнала при изменении уставки из-за дифференциальной составляющей), anti-windup (защита интегратора от накопления ошибки при насыщении выходного сигнала регулятора) и многое другое

Теперь к самому инструменту.

В основе лежит модель FOPDT (First Order Plus Dead Time). Пользователь задаёт три параметра объекта коэффициент усиления K, постоянную времени T, время запаздывания L.

После этого инструмент сразу рассчитывает настройки несколькими методами:

Ziegler–Nichols (Open Loop); Ziegler–Nichols (Closed Loop); CHR (0% Overshoot); CHR (20% Overshoot); ITAE Servo; ITAE Regulator; Lambda / IMC.

Все результаты отображаются в одной таблице, которую можно сортировать по Kp, Ki, Kd

Для каждого варианта настройки строится переходная характеристика. График анимирован как осциллограф - кривая постепенно разворачивается слева направо, благодаря чему легче оценить скорость реакции, перерегулирование и затухание. После изменения параметров модель автоматически пересчитывается и никаких Calculate нажимать не требуется. Кроме этого строится диаграмма Боде с вычислением Phase Margin и Gain Margin - что позволяет посмотреть переходный процесс и оценить запас устойчивости.

Решил сразу добавить экспорт кода, после выбора подходящего метода можно сразу получить реализацию PID регулятора для Arduino, ESP32 + FreeRTOS, MicroPython, во всех вариантах используются одинаковые инженерные решения.

D on Measurement

Сразу решил делать D по измерению, а не по ошибке. Так нет derivative kick при изменении уставки и в реальных проектах такой вариант встречается чаще.

Conditional Anti-Windup

Добавил и anti-windup. Если выход уже упёрся в ограничение, интегратор перестаёт накапливаться. Без этого после насыщения регулятор ещё долго приходит в себя.

Ещё добавил несколько мелочей

Чтобы инструмент был не просто калькулятором коэффициентов, сделал несколько подсказок.

  • если L/T большое - предупреждает, что Ziegler - Nichols может быть слишком агрессивным.

  • если используется D без фильтра - напоминает про шум датчика.

  • если объект очень быстрый - советует обратить внимание на частоту дискретизации.

Мелочь, но помогает уберечь от странного поведения регулятора.

Добавил семь типовых объектов - температура, давление, уровень и четыре типа моторов. Можно выбрать любой пресет и сразу посмотреть, как разные методы настройки влияют на поведение системы.

Техническая сторона

Сделал максимально простым - Один HTML-файл. Vanilla JavaScript, Canvas 2D API, localStorage для сохранения настроек, URL Hash для передачи параметров по ссылке. Переключение En/Ru интерфейсов.

В ближайших версиях планирую добавить - Learn Mode, рядом с каждым коэффициентом будет показан полный ход вычислений с подстановкой чисел, например

Kp = 1.2 × T / (K × L)
Kp = 1.2 × 10 / (1 × 2)
Kp = 6

В планах реализовать

  • Auto Tuning Wizard - Автоматическая настройка параметров PID-регулятора с помощью пошагового мастера.

  • Nichols Chart - Построение диаграммы Николса для анализа устойчивости и частотных характеристик системы.

  • Monte Carlo Robustness - Оценка робастности регулятора с помощью моделирования случайных изменений параметров системы.

Проект пока сырой. Но основные функции уже работают и формулы проверены, уверен, что ещё многое можно улучшить как в алгоритмах, так и в интерфейсе. Буду очень рад любым замечаниям, предложениям и конструктивной критике. Если найдёте ошибку, спорное инженерное решение или увидите возможность сделать инструмент удобнее - обязательно напишите. Можно критиковать без ограничений, буквально - рвать в клочья. Благодаря вашим и замечаниям комментариям мой предыдущий проект ElectroKit стал намного лучше, и очень надеюсь, что с PID Toolkit получится так же.

Комментарии (13)


  1. Brazil
    02.07.2026 07:09

    Смысл-то в чём?
    PID - один из десятков возможных алгоритмов управления, и застревать на нём - плохая идея.

    Мне Fable5 сейчас предложил сделать на ADRC (Active Disturbance Rejection Control), а может и MPC организовать - всё сразу под железо, включая оптимизацию. Надо просто снять и дать Fable лог.

    Крутить коэффициенты PID руками на сегодняшний день - просто трата времени.


    1. DarkenAmber Автор
      02.07.2026 07:09

      Если в проекте можно использовать MPC - это здорово. Но в большинстве реальных систем всё ещё работает обычный PID, и именно для них сделан этот инструмент.


      1. Brazil
        02.07.2026 07:09

        Это тоже здорово.
        Но про большинство реальных систем мне кажется Fable знает лучше.
        Во всяком случае мне еще в прошлом году слабенький Sonnet сделал отличное управление на основе Калмана прямо в железе вообще без всяких симуляторов.


        1. Arastas
          02.07.2026 07:09

          Калман это не управление.


          1. Brazil
            02.07.2026 07:09

            Ну почему же, если он стоит в обратной связи?
            Просто Fable лучше оценит что нужно для управления.

            Зачем делать калькуляторы для PID, когда столько возможностей просто взглянуть на проблему выше?


            1. Arastas
              02.07.2026 07:09

              Потому что после Калмана может стоять почти что угодно. Фраза “управление на основе Калмана” не говорит об управлении почти ничего, кроме того, что используются оценки состояния. Как было бы и при любом другом наблюдателе.


              1. Brazil
                02.07.2026 07:09

                Ладно.
                Назовем так " P-регулятор по калмановской оценке"
                А то сейчас начнем спорить ни о чем.


    1. iBuilder
      02.07.2026 07:09

      ADRC и другие "математические" алгоритмы - это конечно здорово, но какой смысл тратить на них вычислительные ресурсы и разбираться, если у тебя "что-то простое, типа управления температурой пола", когда и PID работает более чем приемлемо, вычислительно элементарен, понимается интуитивно.


      1. Brazil
        02.07.2026 07:09

        Ну так Fable и подскажет какой алгоритм применить.
        PID у нужны четкие чистые данные без задержек.
        Есть более эффективные алгоритмы не требуещие таких чистых данных. И тогда да, на пару умножений дольше, зато датчики сильно дешевле.

        Те же чувствительные автоматические двери с нелинейной упрощенной механической передачей. Вполне себе хороший объект для нейросетевых алготимов.

        Да даже теплый пол. Человека не интересует какая температура самого пола. Ему нужен комфорт. Ну угадайте PID-ом когда человеку комфортно.


        1. iBuilder
          02.07.2026 07:09

          Что-то у вас всё в кучу:

          PID у нужны четкие чистые данные без задержек.

          Откуда вы это взяли? До сих пор уйма промышленной автоматизации работает на PID. Я, конечно, давно уже использовал и может чего забыл, но точно помню, что для условного теплого пола, вентиляции с регулировкой температуры, хватало свойств PID даже если получалась задержка на фильтрации датчика. Если не хватало - ставили примитивный наблюдатель, но это редко, и так всё работало.

          Вполне себе хороший объект для нейросетевых алготимов.

          Не совсем понял, при чем тут нейросетевые, это их другой области. Для дверей может и нечеткой логики хватит, там хоть понятно, как настраивать интуитивно.

          Человека не интересует какая температура самого пола. Ну угадайте PID-ом когда человеку комфортно.

          Вообще не понял, о чем речь. Человек ставит температуру, PID ему её с приемлемой точностью установит, в чем проблема? В куче простых контроллерах теплого пола стоят PID регуляторы, но может разве что с функцией автонастройки - сами прогревают пол, смотрят инерцию и считают сами параметры PID по простым формулам один раз, при первой настройке пола.

          В чем сила PID - если всё сделано правильно "по книжкам", то он офигенно устойчивый и даёт приемлемый результат если объект сильно меняется, а параметры настроены даже если "на глазок". И при этом он простой, интуитивно понятный. Я что-то более сложно мутил только если для этого были причины, когда PID в принципе не устраивал.


    1. Arastas
      02.07.2026 07:09

      Мне Fable5 сейчас предложил сделать на ADRC

      Предложил сделать что? Управление линейным FOPDT с известными параметрами на model-free ADRC? А зачем, в чём преимущество более сложной схемы?


  1. iBuilder
    02.07.2026 07:09

    Что ещё имеет смысл - ссылки на литературу и источники информации, мне кажется будут полезны.


    1. DarkenAmber Автор
      02.07.2026 07:09

      Спасибо, хорошая идея. Обязатель добавлю в следующей версии README