Короткий вопрос
Существует ли распространенный способ обработки очень больших аномалий (порядка величины) в пределах иначе однородной контрольной области?
Предпосылки
Я работаю над алгоритмом управления, который управляет двигателем через в целом однородную область управления. При отсутствии / минимальной загрузке ПИД-регулятор работает отлично (быстрый отклик, перерегулирование практически отсутствует). Проблема, с которой я сталкиваюсь, заключается в том, что обычно будет как минимум одно место с высокой нагрузкой. Положение определяется пользователем во время установки, поэтому у меня нет разумного способа узнать, когда и где его ожидать.
Когда я настраиваю PID для обработки места с высокой нагрузкой, это вызывает большие перегрузки на незагруженных участках (что я полностью ожидал). Хотя это нормально , чтобы перерегулирование середины путешествие, нет никаких механических жестких остановок на корпусе. Отсутствие стойких поверхностей означает, что любое значительное превышение может привести к тому, что рычаг управления будет отключен от двигателя (что приведет к остановке агрегата).
Вещи я прототип
- Вложенные PID (очень агрессивные, когда далеко от цели, консервативные, когда рядом)
- Фиксированное усиление, когда далеко, PID, когда близко
- Консервативный PID (работает без нагрузки) + внешнее управление, которое ищет PID для остановки и подачи дополнительной энергии до тех пор, пока либо не будет достигнута цель, либо не будет обнаружена быстрая скорость изменения (т. Е. Выход из области высокой нагрузки)
Ограничения
- Определено полное путешествие
- Hardstops не может быть добавлен (на данный момент)
- Ошибка, скорее всего, никогда не обнулится
- Высокая нагрузка могла быть получена из-за менее чем 10% хода (что означает отсутствие «запуска»)
источник
Начальное решение
stalled_pwm_output = PWM / | ΔE |
ШИМ = Макс. Значение ШИМ
ΔE = last_error - new_error
Исходное соотношение успешно увеличивает выходную мощность ШИМ на основании отсутствия изменений в двигателе. См. График ниже для примера вывода.
Этот подход делает для ситуации, когда неагрессивный PID остановился. Тем не менее, он имеет неприятную (и очевидную) проблему, заключающуюся в том, что когда неагрессивный PID способен достичь заданного значения и пытается замедлить, stalled_pwm_output увеличивается. Это нарастание вызывает большой выброс при движении в незагруженном положении.
Текущее решение
теория
stalled_pwm_output = (kE * PID_PWM) / | ΔE |
kE = Константа масштабирования
PID_PWM = Текущий запрос ШИМ от неагрессивного ПИД
ΔE = last_error - new_error
Мои текущие отношения все еще используют концепцию 1 / ΔE, но используют неагрессивный выход PID PID для определения stall_pwm_output. Это позволяет ПИД регулировать уровень stall_pwm_output, когда он начинает приближаться к целевому заданному значению, и в то же время позволяет выводить 100% ШИМ при остановке. Константа масштабирования kE необходима для обеспечения того, чтобы ШИМ попал в точку насыщения (более 10000 на графиках ниже).
Псевдокод
Обратите внимание, что результат из cal_stall_pwm добавляется к выходу PID PWM в моей текущей логике управления.
Выходные данные
Задержка выхода ШИМ
Обратите внимание, что на графике вывода остановленного ШИМ внезапное падение ШИМ на уровне ~ 3400 является встроенной функцией безопасности, которая активируется, потому что двигатель не смог достичь положения в течение заданного времени.
Ненагруженный ШИМ-выход
источник
Вы не говорите, что вы контролируете ... скорость двигателя? должность? Что бы это ни было, первым шагом будет определение допустимой ошибки. Например, если управление для скорости, может быть установлена максимальная ошибка в пределах 1% от цели. Без определения допустимой ошибки вы не сможете определить, какое разрешение вам нужно для АЦП или счетчика ШИМ. Без этого компенсация ПИД могла бы быть идеальной, но все равно имела бы колебания предельного цикла.
Тогда вам нужно знать динамику разомкнутой системы. Без этого вы не сможете узнать, какие усиления нужны для пропорциональной (P), интегральной (I) и производной (D) частей цикла. Вы можете измерить динамику с помощью шага ввода (шаг изменения уровня привода или ШИМ) или изменения шага в нагрузке (кажется, это будет иметь отношение к вам).
Использование изменения ошибки от цикла к циклу в знаменателе вашего алгоритма управления для изменения значения ШИМ гарантирует, что цикл никогда не установится. Это обеспечивает ограничение цикла колебаний в управлении. Большинство клиентов не смирится с этим.
P-часть цикла заботится о немедленной ошибке (быстро реагирует на ошибку). Но он будет иметь конечное усиление, поэтому некоторая ошибка останется. I-часть цикла медленно реагирует с течением времени, применяя бесконечное усиление (бесконечное время для бесконечного усиления), чтобы исправить ту ошибку, которая была оставлена P-частью.
Поскольку партия I медленная, она может сдвинуться с фазы с корректировкой, необходимой для минимизации ошибок, даже если для нее установлено правильное усиление. Таким образом, он заводится, требуя много времени, чтобы прийти в себя. Или это оставлено в оппозиции к части P.
Лучший способ справиться с намоткой - это ограничить максимальное сохраненное значение в интеграторе чуть больше, чем необходимо для исправления пропорциональной ошибки в худшем случае. Если интегратор выходит из фазы и находится в оппозиции к P, лучше всего установить нулевое значение интегратора. Алгоритм может быть спроектирован так, чтобы определять это и при необходимости сбрасывать интегратор.
источник