Опубликовано 2026-03-18
Часто ли вы сталкиваетесь с такой ситуацией, играя ссервоприводs: вы хотите, чтобы стабилизатор был направлен на цель, но он продолжает трястись; или вы хотите, чтобы он повернулся на заданный угол, но он всегда не может повернуться на месте? На самом деле это типичное ПИД-регулятор, который не настроен должным образом. Многие друзья, впервые знакомые с STM32, считают PID слишком сложным. По сути, это набор математических методов, которые помогают нам решить, «как сделатьсервоприводпослушный». Сегодня мы поговорим о том, как использовать STM32 для написания PID-программы, которая может сделатьсервоприводточно соблюдайте инструкции, гарантируя, что вы сможете их понять и использовать.
Проще говоря, ПИД — это суперумный «корректор». Представьте, что вы хватаете руками движущийся объект. Ваши глаза видят положение объекта (значение обратной связи). Ваш мозг рассчитает, где находится объект и с какой скоростью он движется, а затем направит руку на корректировку (вывод). Это то, что делает ПИД. Он вычисляет разницу между целевым положением и текущим фактическим положением в реальном времени, а затем сообщает вам, какое усилие необходимо применить для исправления разницы. P – доля, определяющая интенсивность коррекции; I является интегральным, что помогает устранить долговременно накопившиеся ошибки; D – это дифференциал, который позволяет заранее определить изменяющиеся тенденции и предотвратить перерегулирование.
Это самая неприятная проблема. В большинстве случаев это происходит потому, что значение P настроено слишком высоко. Пропорциональное управление похоже на то, когда вы едете и видите перед собой машину: значение P определяет, насколько сильно вы нажимаете на педаль газа. Если P слишком велико, вы нажмете на педаль газа, как только увидите, что расстояние немного велико, и пролетите мимо. Затем вы нажимаете на тормоза. Если так ездить вперед и назад, машина будет раскачиваться вперед и назад. То же самое относится и к сервоприводу. Если P слишком велико, это заставит его колебаться вперед и назад в целевом положении. В это время необходимо соответствующим образом уменьшить P или ввести дифференциальное управление D. D может сыграть «демпфирующую» роль, подавить эти колебания и сделать рулевой механизм устойчивым.
Это не сложно. Основной код на самом деле состоит всего из нескольких строк. Вам необходимо сначала определить три параметра (Kp, Ki, Kd) и несколько переменных (целевое значение, текущее значение, последняя ошибка, интегральный член). В основном цикле постоянно считывается текущее положение сервопривода (обычно значение АЦП, возвращаемое потенциометром), а затем вычисляется ошибка. Пропорциональный член P = ошибкаКП. Интегральный член I = совокупный интегральный член + ошибкаКи, которая может помочь вам постепенно компенсировать небольшие отклонения, вызванные трением и другими причинами. Дифференциальный член D = (текущая ошибка - последняя ошибка) * Kd. Наконец, выходное значение ШИМ = P + I + D. Назначьте рассчитанное значение ШИМ таймеру, чтобы заставить сервопривод вращаться. На этом базовое управление с обратной связью завершено.
Для управления рулевым механизмом мы обычно используем позиционный ПИД-регулятор. Позиционный ПИД-регулятор вычисляет абсолютное положение (рабочий цикл ШИМ), которое вы хотите в конечном итоге передать сервоприводу. Это интуитивно понятно и легко понять. Он буквально говорит вам: «Теперь вам следует пойти под этот угол». Инкрементный ПИД-регулятор вычисляет «изменение» текущего выхода относительно предыдущего выхода. Он подходит для таких сценариев, как шаговые двигатели, которые требуют точного контроля количества шагов, выполняемых каждый раз. При управлении сервоприводом нас волнует то, где он останавливается, а не то, как он движется, поэтому позиционный ПИД-регулятор больше соответствует потребностям, а реализация кода проще и не подвержена проблемам насыщения интеграла.
Вы усердно работали весь день и, наконец, добились стабильности сервопривода. Вы не можете сбрасывать его каждый раз, когда отключается электричество, верно? Для этого необходимо использовать внутреннюю симуляцию Flash STM32 или подключить внешний чип. В программе вы можете определить три настроенных параметра Kp, Ki и Kd как структуры. По завершении отладки по нажатию кнопки срабатывает функция сохранения и данные этой структуры записываются по указанному Flash-адресу. При следующем запуске системы прочитайте данные с этого адреса в коде инициализации и назначьте их трем параметрам PID. Таким образом, параметры сохраняются при отключении питания, а результаты отладки сохраняются навсегда.
Для этого необходимо использовать прием «интегрального разделения». При использовании традиционного ПИД-регулятора, когда ваш сервопривод только начинает вращаться и ошибка положения велика, интегральный член I отчаянно накапливает большое значение. Когда сервопривод приближается к цели, это огромное интегральное значение приведет к серьезному «перелету», вызывающему перелет сервопривода. Решение состоит в том, чтобы установить порог. Например, когда ошибка превышает 50 градусов, мы очищаем интегральный член I и не позволяем ему работать. Только когда ошибка меньше 50 градусов и сервопривод почти на месте, позвольте интегральному члену I вмешаться, чтобы устранить последнюю небольшую статическую разницу. Это обеспечивает быстрый запуск и точность на месте.
Хорошо, что касается программы PID для управления сервоприводом STM32, основные идеи и шаги, вероятно, таковы. При фактической настройке настройка параметров — это процесс, который требует терпения и может занять больше времени, чем написание самого кода. Не знаю, предпочитаете ли вы использовать позиционный ПИД при работе над проектом или пробовали другие, более интеллектуальные алгоритмы управления? Добро пожаловать, чтобы поделиться своим опытом в области комментариев. Если вы считаете, что эта статья полезна для вас, не забудьте поставить ей лайк, сохранить ее и переслать друзьям, которые играют в сервомашинки!
Время обновления: 18 марта 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.