Урок 76. ПИД-регулятор скорости вращения двигателя постоянного тока. Проверка работы, настройка на быстродействие и устойчивость.

Программа настройки ПИД-регулятора

В уроке настроим ПИД-регулятор, оптимизируем его под разные показатели качества регулирования.

Предыдущий урок     Список уроков     Следующий урок

Настройка регулятора – это выбор коэффициентов: пропорционального, интегрального и дифференциального.

 

В программе они заданы в следующих строках.

#define K_P 0.1  // пропорциональный коэффициент
#define K_I 0.01  // интегральный коэффициент
#define K_D 0.0 // дифференциальный коэффициент

У любого регулятора есть критерии оценки качества регулирования или показатели качества. Основные:

  • Быстродействие или скорость регулирования – время уменьшения ошибки рассогласования до допустимой величины.
  • Точность – ошибка рассогласования в установившемся режиме.
  • Устойчивость – отсутствие колебаний параметра регулирования.

Интегральное звено ПИД-регулятора сводит ошибку рассогласования к 0. Т.е. точность ПИД-регулятора в статическом режиме настроить невозможно. Она определяется только погрешностью измерения и вычисления.

А вот два других критерия качества регулирования противоречат друг другу. При высоком быстродействии, как правило, регулятор обладает низкой устойчивостью. И, наоборот, при высокой устойчивости регулятор работает медленно.

Т.е. ПИД-регулятор может быть настроен:

  • на высокое быстродействие;
  • на устойчивость к возмущающим воздействиям;
  • конечно, может быть и компромиссный вариант.

Теорию автоматического управления (ТАУ) в институте мне преподавал очень квалифицированный, известный в стране специалист Савин Михаил Михайлович. Он, не заглядывая в тетрадки или учебники, выписывал на доске громадные формулы. Значительную часть курса ТАУ Михаил Михайлович посвящал определению устойчивости системы регулирования.

Оказывается устойчивость системы можно рассчитать теоретически. Основным показателем он считал критерий устойчивости Найквиста. Формулируется он так: линейная динамическая система, устойчивая в разомкнутом состоянии, устойчива и в замкнутом состоянии, если амплитудно-фазовая частотная характеристика (АФЧХ) разомкнутой системы при изменении частоты от 0 до бесконечности не охватывает на комплексной плоскости точку с координатами (-1, j0).

Попробуйте сообразите, что это такое, посчитайте, постройте АФЧХ. Не говоря о том, что в систему входит двигатель, а его электрические и механические параметры нам  неизвестны.

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

 

Программа верхнего уровня для настройки ПИД-регулятора.

Оптимально настроить ПИД-регулятор можно только наблюдая его реакцию на разного рода возмущения. Для этого необходим инструмент – регистратор изменения параметров регулятора в реальном времени.

Я разработал программу верхнего уровня, которая выполняет такие функции.

Установка и запуск программы ничем не отличается от других программ верхнего уровня курса уроков Ардуино.

Необходимо:

Загрузить архив PidMotorReg.zip.

 

Зарегистрируйтесь и оплатитеВсего 60 руб. в месяц за доступ ко всем ресурсам сайта!
 

Разархивировать его.

Скопировать папку PidMotorReg в удобное место.

Подключить к компьютеру плату Ардуино с программой регулятора.

Запустить файл PidMotorReg.exe.

При первом запуске, если COM порт задан неверно, появится сообщение.

Предупреждение

Нажимаете OK.

Открывается основное окно программы. Программа данные считать не может, поэтому отображаются прочерки.

Основное окно программы монитора

Нажимаете закладку верхнего меню ”Выбор порта”.

Окно выбор порта

Выбираете ваш порт, закрываете окно выбора порта. Может потребоваться перезапустить программу. Номер порта запоминается, больше устанавливать его нет необходимости.

Если все работает нормально, то красный квадратик рядом с надписью ”Обмен” большую часть времени светится зеленым цветом, периодически мигая красным.

Программа отображает основные параметры в реальном времени.

Основное окно программы монитора

Также каждые 0,2 сек происходит запись параметров в регистратор. Для просмотра необходимо нажать кнопку ”Регистратор”. Откроется окно с диаграммами.

Окно регистратора

Регистрация продолжается и при открытом окне регистратора. Кривые отрисовываются в реальном времени.

  • Синяя кривая – заданная скорость.
  • Красная – измеренная скорость.
  • Зеленая – ШИМ.

Первые 2 параметра отображаются относительно левой вертикальной оси, а ШИМ – относительно правой.

Чтобы сбросить данные регистратора, надо нажать кнопку ”Сброс”.

Удобно расположить на экране в видимой зоне одновременно основное окно и окно регистратора. Вся информация будет доступна.

 

Оценка устойчивости регулятора.

Как мы будем оценивать работу регулятора.

В окне регистратора, прежде всего, нас интересуют 2 линии:

  • синяя – заданная скорость и
  • красная – измеренная скорость.

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

Зеленая линия  (ШИМ) позволяет нам оценить, как реагирует сам регулятор. Отставание красной линии от зеленой показывает инерционность двигателя.

Общая задача любого регулирования:

  • На систему воздействуют возмущения – внешние воздействия, которые стремятся изменить регулируемый параметр.
  • Система возвращает параметр к заданному значению.

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

В нашем случае есть 2 типа возмущения:

  • входное – изменение заданного значения;
  • выходное – изменение механической нагрузки двигателя.

Включение и выключение контроллера внешним сигналом приравнивается к входному возмущению. По сути, заданная скорость изменяется от 0 до заданного значения.

Конечно, есть еще возмущения связанные с изменением температуры окружающей среды, нестабильностью питания двигателя и т.п. Но они незначительны. Мы ими пренебрегаем.

Кстати, если бы двигатель питался от нестабилизированного источника питания, то изменение питающего напряжения было бы реальным возмущением системы. Нам пришлось бы проверять реакцию и на него. Регулятор должен отрабатывать, в том числе и нестабильность питания.

Итак, что мы должны оценивать:

  • Отсутствие колебаний в статическом режиме. Прошло достаточное время, система установила регулируемый параметр, но идут колебания.

Колебания

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

Могут быть затухающие колебания.

Затухающие колебания

  • Реакция регулятора на возмущения.

В этом случае на интересует задержка регулирования, т.е. насколько измеренное значение скорости отстает от заданного.

Задержка регулирования

Еще раз повторю, что в эту задержку входит время разгона или торможения двигателя.

Обратите внимание, что на этой диаграмме измеренная скорость плавно приближается к заданной, не перескакивая ее.

А на следующей диаграмме происходит значительный переход через заданное значение. Этот выброс в ТАУ называется перерегулированием.

Перерегулирование

Допустимо ли перерегулирование – зависит от конкретной задачи. Быстрый регулятор без перерегулирования создать сложно.

 

Первичная оценка устойчивости регулятора.

Начинаем настраивать наш регулятор. Оценим сначала работу пропорционального звена.

Отключаем интегральную часть, устанавливаем пропорциональный коэффициент 0,1.

#define K_P 0.1 // пропорциональный коэффициент
#define K_I 0.0 // интегральный коэффициент

Загружаем, проверяем.

Окно регистратора

Регулятор быстро отрабатывает ошибку рассогласования. Обратите внимание, что зеленая линия ШИМ мгновенно реагирует на разницу между заданным и измеренным значением скорости.

В установившемся режиме, при заданной скорости 2000 измеренная скорость равна 1200. Но так и должно быть. Пропорциональный регулятор никогда не отрабатывает ошибку рассогласования полностью. Но ШИМ для этих 1200 об/мин будет сформирован мгновенно. Остальные обороты добавит интегральная частью

Колебания, даже затухающие не возникают. Пропорциональный коэффициент можно увеличивать.

Удивительно, но на моем двигателе колебания появляются при пропорциональном коэффициенте большем 1. Вот диаграмма для K_I=1.5.

Окно регистратора

Видно, как пошел в разнос ШИМ.

Отключим пропорциональное звено, интегральный коэффициент установим 0,01.

Окно регистратора

Видно, что в устоявшемся режиме ошибка рассогласования равна 0. Регулятор стал работать точно. Но на изменение заданной скорости появилась задержка, не только измеренной скорости, но и ШИМ.

 

Окончательная настройка.

Включаем оба звена. Настраиваем регулятор на отсутствие перерегулирования. Я поставил коэффициенты K_P=0,5, K_I=0,01.

Окно регистратора

Регулятор быстро отрабатывает большую часть изменения скорости, а затем медленно дотягивает красную линию до синей. Надо увеличить интегральный коэффициент. Вот диаграмма для коэффициентов K_P=0,5, K_I=0,05.

Окно регистратора

Появилось небольшое перерегулирование в нескольких местах, но регулятор стал быстрее компенсировать ошибку рассогласования. Меня такая работа вполне устраивает.

Проверяем реакцию на изменение механической нагрузки.

Окно регистратора

Пластиковой ручкой отвертки я надавливал на диск двигателя. Видно, что скорость начала падать, ШИМ увеличиваться. Скорость вернулась к заданной. Кривая скорости корявая из-за того, что я не смог обеспечить равномерную механическую нагрузку.

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

В середине диаграммы я сильно надавил на диск, ШИМ возрос до максимального значения 255, но этого не хватило. Мощности двигателя недостаточно для такой механической нагрузки.

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

Игорь проверил работу ПИД-регулятора на своем 500 ваттном двигателе. Вот короткий ролик об этом.

У него тоже все работает. Он уже эксплуатирует регулятор в составе сверлильного станка.

Я еще не написал этот урок, а в комментариях появились советы добавить к устройству защиту по току и температуре. Вполне разумно. Но для не особенно мощных двигателей в качестве защиты по току можно использовать самовосстанавливающиеся PTC-предохранители. Защита по температуре не всегда необходима.

 

Есть мысли добавить в устройство индикатор, для отображения скорости, реализовать защиту двигателя и выложить в рубрике “Проекты Ардуино”.

 

Предыдущий урок     Список уроков     Следующий урок

2

Автор публикации

не в сети 2 недели

Эдуард

280
Комментарии: 1936Публикации: 197Регистрация: 13-12-2015

Один комментарий на «Урок 76. ПИД-регулятор скорости вращения двигателя постоянного тока. Проверка работы, настройка на быстродействие и устойчивость.»

  1. Здравствуйте.
    Нашел еще одну причину для контроля тока двигателя. Если подмешать на вход в ПИД, реакция на изменение нагрузки будет сразу, уменьшится задержка на инерционность системы.

    0
    • Здравствуйте!
      Ну, так мы скоро дойдем до оптимальных и адаптивных регуляторов.
      Хотя обратная связь по току для регуляторов двигателей встречается. Но у нас достаточно простой регулятор. Мы решаем чисто практическую задачу и стремимся решить ее проще.

      0
  2. Эдуард, я прикрутил ваш ПИД регулятор к коллекторному шпинделю 12000 об/мин при 48 вольтах (200вт) для станка с ЧПУ. На верхний торец вала шпинделя прикрепил два магнита в паре с датчиком Холла 3144. Более менее устойчиво работает при Kp = 0.001 Ki = 0.005 Kd = Kd = 0.005, но очень большая задержка при разного рода нагрузках (шпиндель инертен), хотя заполнение ШИМ почти мгновенно. Вопрос, можно ли настроить в принципе регулятор так, чтоб он отрабатывал любую нагрузку без задержек. Может нужно увеличить число импульсов на оборот двигателя и уменьшить время периода работы ПИД регулятора?
    Мне от регулятора нужны скорости от 3 до 12 тыс.об/мин. в зависимости от фрезеруемого материала.

    0
    • Здравствуйте!
      А реакция скорости вращения двигателя на изменение ШИМ? Может быть сам двигатель очень инерционный?
      Попробуйте оставьте только пропорциональное звено. Полного регулирования не будет, но регулятор в таком режиме отрабатывает мгновенно.

      0
  3. Здравствуйте!Не совсем складывается в голове.Входные параметры ПИДа — обороты.Выходные — ШИМ.Как одно клеится к другому?С помощью коэффициентов?Ну тогда и температуру в градусах загнать (в Вашу функцию ПИДа)можно а коэффициентами настроить нужную реакцию ПИДа?Трудно перевариваю рассогласование единиц измерения входа и выхода.

    0
    • Здравствуйте!
      Все просто. Регулировать надо обороты. Изменяются обороты за счет изменения ШИМ. Поэтому мы измеряем обороты, а изменяем ШИМ.

      0
  4. Здравствуйте Эдуард! Большое спасибо за вашу разработку.Не могли вы дописать ваш скетч для отображения скорости на LCD дисплее 16-2.

    0
    • Здравствуйте!
      Я собирался подключить LED-дисплей. Тогда и установку скорости надо делать энкодером.
      LCD только для отображения скорости подключить просто. Посмотрите урок 23. Там даже функции вывода остаются неизменными. Только класс меняется от Serial на класс библиотеки LiquidCrystal. lcd.print(measuredVelocity);.

      0
  5. Отличненько!

    Как раз собираю такую штуку.
    Силовая часть отсюда:
    https://www.motor-r.info/p/blog-page_28.html

    Так же там реализована защита по току, только без ардуино.

    Подскажите пожалуйста, как прикрутить защиту по току, если в качестве ШИМ контролера — Ардуино?

    0
    • Здравствуйте!
      Добавить датчик тока. Если защита медленная, то использовать АЦП микроконтроллера. Если нужна быстрая, то можно использовать транзистор как пороговый элемент. А его коллектор подключить к сбросу микроконтроллера. Так сделано в контроллере элемента Пельтье. Урок 36.
      По хорошему, еще надо датчик температуры двигателя добавить. При механической перегрузке именно он покажет перегрев двигателя.

      0
  6. Доброго времени суток.

    Огромная благодарность за статью.

    Все работает, управление вентилятором ПК. датчик оборотов — оптический.

    но идут сильные колебания. как не подбирал p, i, d результата особо нет.

    скрин (в облаке mail.ru): https://cloud.mail.ru/public/CPSa/T2MpSECen

    0
    • Здравствуйте!
      А при вращении двигателя без стабилизации скорости (скетч в предыдущих уроках) скорость измеряется правильно, без бросков?

      0
      • Со скетчем «sketch_74_1.zip», при достижении PWM = 12 (4.70%) мотор раскручивается на максимальные обороты. Регулирования нет.
        Простым выводом:
        «analogWrite(11,(map(analogRead(A0),0,1023,0,255)));» — обороты регулируются.

        0
          • Измеряются стабильно.
            Изменил частоту ШИМ на 1 953 Гц — появилась регулировка оборотов. На низких оборотах мотор малость пищит.

            0
          • На частоте 1 953 Гц, система стабилизируется нормально.
            Скрин: https://cloud.mail.ru/public/72pv/Xht2dgE6d

            Если частота выше — опять начинаются колебания.

            0
  7. Подскажите пожалуйста, как можно ограничить максимальное заполнение ШИМ в два раза, так как шпиндель на 110 Вольт?
    И еще вопрос: при замыкании и размыкании «PIN_ON» (sketch_75_3), организовать плавный разгон и останов двигателя.
    Заранее спасибо.

    0
    • Здравствуйте!
      Максимальное значение ШИМ задается в строке
      #define MAX_PWM 255 // максимальное значение ШИМ
      А разве вывод PIN_ON не включает и выключает двигатель?
      Начальное значение запуска задается в INT_BEGIN.
      if( digitalRead(PIN_ON) == HIGH ) {
      // отключен
      intPart= INT_BEGIN;
      valPwm= 0;
      analogWrite(11, 0);
      }

      0
      • Да, включает и отключает. но при повторном замыкании PIN_ON значение ШИМ не начинается с 0, что приводит к резкому запуску двигателя, а не плавному…
        Хотя строка » valPwm= 0;» сбрасывает значение в 0.

        0
          • Уменьшил до 0.
            Но все равно, при размыкании PIN_ON, значение шим прыгает на максимум, потом опускается на уровень поддержания оборотов.

            0
  8. Здравствуйте, а если вместо привода электромотора использовать сервопривод для управления дросселем ДВС?

    0
  9. Сервик управляет дросселем ДВС, датчик холла читает обороты, потенциометр задает желаемые обороты ДВС. В чем разница?

    0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".