Кафедра АППиЭ

КОНФЕРЕНЦИИ => День науки АмГУ 2026. Секция Автоматика, управление, моделирование => Тема начата: 541-Ipatov от Четверг, марта 19, 2026, 01:45:28

Название: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек
Отправлено: 541-Ipatov от Четверг, марта 19, 2026, 01:45:28
Выполнил работу - Ипатов Константин Романович гр.541-об
Научный руководитель - Русинов Владислав Леонидович, СКБ "Промышленная робототехника и автоматизация"

Тема: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек

Актуальность:
В современной робототехнике и автоматизации ПИД-регулятор является стандартом де-факто для управления приводами, температурой и положением. Большинство начинающих разработчиков используют готовые библиотеки, что приводит к двум проблемам:



Таким образом, умение написать ПИД-регулятор «с нуля» -- это показатель квалификации инженера, который может адаптировать код под любые требования системы.


Цель работы: Продемонстрировать процесс создания дискретного ПИД-регулятора на языке C++ для платформы Arduino, объяснить назначение каждого блока кода и показать методы защиты регулятора от насыщения без использования сторонних библиотек.
План:


Вступление

Здравствуйте, уважаемые коллеги! Сегодня мы поговорим о том, как создать сердце любой системы автоматического регулирования -- ПИД-регулятор -- на платформе Arduino, не прибегая к стандартным библиотекам. Это позволит нам глубже понять математику процесса и получить полный контроль над кодом.
(https://studfile.net/html/2706/40/html_KuWj7cvUSG.yJ31/htmlconvd-EBay1U_html_2c7376afe49dea1e.png)
Зачем писать регулятор самому?
Стандартная библиотека PID -- это отличный инструмент, но иногда нам нужна кастомизация: специфические ограничения, нестандартная частота дискретизации или просто экономия памяти. Понимание внутренней структуры регулятора -- важный навык для инженера.

Листинг программы
Перед вами полностью рабочий самописный ПИД-регулятор.
(https://imgfy.ru/ib/DoDTu2rpBxxIAfM_1773819401.webp)
Разбор структуры кода

Первым делом мы объявляем глобальные переменные. Они делятся на три категории:
(https://imgfy.ru/ib/axs9K7ebGTVGEQM_1773819754.webp)
Коэффициенты настройки: Kp, Ki, Kd. В коде они инициализированы значением 0.1, но в реальном проекте их нужно будет подбирать под конкретную систему.



Основная магия происходит в функции loop(). Критически важный момент -- регулятор должен выполняться через строго равные промежутки времени Ts. В коде это реализовано через сравнение millis().

Когда наступает момент вычисления (if (milliss > (Ts*1000))), мы выполняем следующие шаги:


(https://studfile.net/html/1596/364/html_2OmVRu4G0c.bZBt/img-Km3N0R.png)
Важный элемент: Антивиндап и ограничения

В любой реальной системе выходной сигнал ограничен. Например, мы не можем подать на мотор напряжение выше 5V или мощность выше 100%. Без специальной обработки интегральная часть будет продолжать расти, пока система стоит на месте. Это явление называется интегральным насыщением.

Чтобы этого избежать, в коде реализованы две ступени защиты:



Заключение

Мы создали полноценный ПИД-регулятор «с нуля». Этот код дает нам гибкость: мы можем легко менять тип дифференцирования, динамически подбирать коэффициенты прямо во время работы системы и адаптировать регулятор под конкретную задачу.

Главный плюс такого подхода -- это полное понимание процессов. Вы не просто вызываете готовую функцию, вы точно знаете, что происходит в микроконтроллере в каждый момент времени.

Спасибо за внимание!
Название: Re: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек
Отправлено: ran от Четверг, марта 19, 2026, 04:55:44
Спасибо за доклад! Все строго по теме.
Есть небольшое дополнение. Реальные регуляторы ограничивают не выход интегральной составляющей, а общий выход регулятора. Поэтому интегральная составляющая не должна "жить сама по себе", ограничиваясь своим ограничением, а должна "подстраиваться" под ограничение на выходе регулятора. Это позволит быстро выйти из ограничения, когда для этого создадутся условия. Другими словами, интегратор должен "заморозиться" не "сам по себе", а при ограничении выходного сигнала регулятора.
Название: Re: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек
Отправлено: 541-Ipatov от Четверг, марта 19, 2026, 05:48:19
Спасибо за ответ, учту, просто как я понял у интегральной составляющей тоже должны быть границы что бы интеграл не уходил в бесконечность.
Название: Re: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек
Отправлено: ran от Четверг, марта 19, 2026, 07:03:13
Это правильно, но ограничение интегратора сработает "автоматически" при ограничении выходного сигнала. Не может же быть так, что выход интегратора - большой-большой-большой, а выход регулятора проде бы как приемлемый.
Название: Re: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек
Отправлено: 541-Ipatov от Четверг, марта 19, 2026, 08:07:27
понял, спасибо, учту.
Название: Re: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек
Отправлено: DenisAlekseevich от Среда, марта 25, 2026, 09:26:17
Хороший доклад.
К автору вопрос: ведь походы по реализации типовые, у меня например есть код и на ассемблере.
Есть ли что-то что можно было бы улучшить в коде? Расширить функционал, планы и т.п.?
Название: Re: Разработка ПИД-регулятора на микроконтроллере Arduino без встроенных библиотек
Отправлено: 541-Ipatov от Среда, марта 25, 2026, 22:27:34
Денис Алексеевич спасибо за ваш ответ. Улучшить можно многое: авто настройка пид, каскадный пид, компенсатор нелинейностей. Но моя работа заключалась в написании простого кода который объясняет базовый принцип действия пид регулятора.
В будущем рассмотрю данные улучшения для описания в докладе.