Перейти к содержанию
    

ПИД-регуляция на СТМ32

Добрый день. Хочу сделать двухконтурную ПИД-регуляцию угла поворота и скорости вращения колес через двигатель. Я почитал немного форум и  некоторые статьи и понял, что следует как-то разобраться с выходным сигналом и скоростью его нарастания. Но я не совсем понимаю, какими условиями в коде можно ограничить скорость нарастания выходного сигнала, чтобы он не резко скакал. Как я понял, именно эти резкие скачки вывели комплектующие из строя. Можете помочь с примерным кодом для этого? (Язык С)

Также вопрос про выходной сигнал. Я задаю генерацию ШИМ через таймер. Его предделитель равен 24, а регистр ARR (Переполнения) - 1000. Частота тактирования APB равна 72 Мгц. То есть я получу 3000 Герцовый ПИД-регулятор. Именно в функции прерываний по ШИМ я написал свой ПИД. Последняя переменная (out_v) это и есть выходной сигнал. Я его ограничиваю от 0 до 1000, потому что регистр ARR только до 1000. 

В итоге я подаю сигнал с помощью TIM3 -> CCR1. Правильна ли эта реализация?

Скриншот 11-09-2022 124959.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если использовать разностную реализацию, то ограничения на градиент легко накладываются просто лимитами на эту дельту. Иначе нужно сравнивать новое значение ШИМ со старым, и ограничивать если выходит за рамки. По сути это одно и то же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 11.09.2022 в 17:41, Alex-lab сказал:

 По сути это одно и то же.

Добрый день, то есть просто в конце кода добавить ограничения на значения ШИМ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не на значения ШИМ, а на прирост. Если ограничить значения, вы просто сузите область регулирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, student23 сказал:

в конце кода добавить ограничения

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

А в Вашем случае есть ещё одна неприятность в виде неизвестной задержки сигнала в STM32, что добавляет в передаточную функцию ещё один полюс  на неизвестно какой частоте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...