Встроенный контроль температуры ПИД-регулятора, часть 5: Регулировка усиления
Мы рассмотрим, как усиление P, I и D влияет на производительность системы, и в этом процессе мы найдем конфигурацию усиления, которая хорошо работает для нашего контроллера температуры.
Вспомогательная информация
- В этом проекте используется специально спроектированная печатная плата; обратитесь к разделу «Специальная конструкция печатной платы с микроконтроллером EFM8» для руководства по включению устройств EFM8 в ваше пользовательское оборудование.
- Вы можете найти краткий обзор термопар, а также некоторую общую информацию о MAX31855 в статье «Создание системы на основе EFM8 для мониторинга и анализа измерений термопар».
- Введение в системы управления: проектирование ПИД-регулятора с помощью инструмента SISO MATLAB
- Отрицательная обратная связь, часть 1: Общая структура и основные понятия
- В этой статье представлен Scilab.
- В двух предыдущих статьях представлена информация о включении USB-связи в проект EFM8: Связь с микроконтроллером EFM8 через USB и EFM8 Sound Synthesizer: воспроизведение мелодий через USB.
Предыдущие статьи в этой серии
- Встроенный контроль температуры ПИД-регулятора, часть 1: цепь
- Встроенный контроль температуры ПИД-регулятора, часть 2: интеграция на уровне платы
- Встроенный контроль температуры ПИД-регулятора, часть 3: Внедрение и визуализация
- Встроенный контроль температуры ПИД-регулятора, часть 4: графический интерфейс Scilab
Прежде чем мы начнем, вот диаграмма системы управления PID, представленная ранее:

И вот часть схемы, относящаяся к PID:


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

Как вы можете видеть, теперь у нас есть текстовые поля для усиления P, I и D. Эти значения отправляются в EFM8 так же, как заданное значение, то есть через команду USB, переданную в начале каждого запуска управления («запуск управления» начинается, когда вы нажимаете «Активировать ПИД-управление» и заканчивается, когда вы нажимаете « Halt PID Control ", график, показывающий измеренные температуры и линию уставки, очищается в начале нового прогона управления). Значения усиления ограничены целыми числами в диапазоне от 0 до 255. Давайте быстро рассмотрим две части сценария Scilab, которые имеют отношение к этой новой функциональности. Здесь мы преобразуем цифры в поля ввода текста в переменные, которые могут быть отправлены в EFM8 как простые двоичные числа (а не символы ASCII):

И так мы отправляем значения усиления в EFM8. Раньше здесь было всего две передачи: команда «S» для отправки заданного значения и команда «C» для запуска запуска управления. Теперь у нас есть третья, а именно команда «K» для отправки всех трех значений усиления.

Вот ссылка для загрузки нового графического интерфейса:
Сценарий GUI
Обновление прошивки
Конечно, эта новая функция графического интерфейса ничего не добьется, если прошивка EFM8 не знает, что делать с командой «K», поэтому давайте кратко рассмотрим изменения прошивки. Во-первых, нам нужно преобразовать K_proportional, K_integral и K_derivative из локальных переменных, определенных в функции main (), в глобальные переменные, которые будут доступны как для main (), так и для VCPXpress_API_CALLBACK (). Мы делаем это, определяя переменные вне любой функции, а затем объявляем их как «extern» в файле Project_DefsVarsFuncs.h. Теперь мы можем добавить код для обработки команды «K»:

Вот ссылка для загрузки всех исходных файлов и файлов проекта для прошивки, используемой на этом этапе проекта.
Файлы источника и проекта
Начните с P
Чтобы превратить ваш код PID в то, что фактически контролирует переменную, вам нужно найти разумное значение для коэффициента усиления P. Это не так просто, как можно было бы подумать, потому что в контексте низкоуровневой прикладной ПИД-системы (такой как наш контроллер температуры) значения усиления фактически переводят числовую информацию. Я имею в виду следующее: наша система имеет две отдельные числовые области - температуру (в градусах Цельсия) и цифровые отсчеты (что, в свою очередь, соответствует напряжению ЦАП, которое, в свою очередь, соответствует току возбуждения нагревателя, что, в свою очередь, соответствует количество тепла, создаваемого резистором). Эти два домена говорят на разных языках; нам нужно установить пропорциональный коэффициент усиления, чтобы он правильно переводил из одной числовой области в другую.
Вы можете сделать достойную работу, просто подумав о том, как именно работает система: мы считываем значение температуры из MAX31855 и вычисляем ошибку. Затем эта ошибка определяет количество тепла, создаваемого резистором. Мы получаем максимальную теплоту при значении ЦАП 200 (система поддерживает значения ЦАП до 255, но я выбрал 200 в качестве верхнего предела). Мы хотим максимальной теплоты, когда ошибка велика, т. Е. Когда измеренная температура далека от заданного значения. Однако в какой-то момент, когда измеренная температура приближается к заданной точке, тепловая мощность должна начинаться уменьшаться. Здесь вы просто выбираете значение, которое имеет смысл, а затем после нескольких контрольных прогонов вы можете при необходимости отрегулировать его. Предположим, мы хотим, чтобы нагреватель оставался на максимуме до тех пор, пока измеренная температура не достигнет 5 ° C от заданного значения: 200/5 = 40. Таким образом, мы начинаем с пропорционального усиления 40.
Помните, что выход ПИД-регулятора представляет собой значение ЦАП, и для вычисления ПИД-выхода мы умножаем пропорциональное усиление на «ошибку», что означает заданную температуру минус измеренная температура. Таким образом, до тех пор, пока ошибка будет больше или равна 5 ° C, нагреватель будет отключен. Когда измеренная температура приближается к заданному значению, ток нагревателя уменьшается пропорционально ошибке - при 4 ° C значение ЦАП равно 160, при 3 ° C значение ЦАП равно 120 и так далее. Это ваша отправная точка, и при необходимости вы можете настроить пропорциональное усиление на основе фактической производительности системы. Когда вы довольны пропорциональным коэффициентом усиления, вы можете перейти к интегральному и производному выигрышу.
Система P-Only
Вам действительно нужна интегральная и производная прибыль? Это зависит от ваших эксплуатационных требований (и характеристик вашей системы). Давайте посмотрим на прогон управления для системы P-only с K P = 40.

Как и ожидалось, система страдает от значительной стационарной неточности. Когда ошибка мала, коэффициент усиления P недостаточен, чтобы противостоять естественной тенденции резистора остыть до температуры окружающей среды. Можем ли мы исправить эту проблему, просто увеличив пропорциональный коэффициент усиления? Ну, вот четыре контрольных пробега P-only с K P = 70, 100, 150 и 200.




Подумайте об этих заговорах на минуту, и я думаю, вы начнете понимать слабость системы P-only. Если коэффициент усиления слишком низок, у вас есть основная фиксированная ошибка. По мере увеличения коэффициента усиления вы просто обмениваетесь стационарной ошибкой для колебаний. К тому времени, когда мы доходим до K P = 200, выход почти сосредоточен вокруг заданного значения, другими словами, средняя ошибка в установившемся состоянии очень мала, но мы сохраняем колебания довольно значительной амплитуды. Если вы удовлетворены этим выступлением, я полагаю, вы могли бы остановиться здесь. Но я не удовлетворен.
Принесите интеграл
Интегральный термин позволяет небольшим ошибкам постепенно накапливаться и, таким образом, оказывать большее влияние на выход ПИД-регулятора, чем в системе только P. Однако вы должны быть осторожны, поскольку интегральные ошибки могут быстро накапливаться и со слишком большим интегральным усилением система начинает действовать подобно тому, как маятниковая ошибка строится ниже заданного значения и приводит к слишком высокой температуре, тогда ошибка возникает выше заданного значения и приводит к слишком низкой температуре, тогда ошибка нарастает ниже заданного значения и слишком высокая ошибка ошибки и т. д.
Начнем с K I = 10 и посмотрим, что произойдет.

Очевидно, что это значение слишком велико, потому что у нас есть основное поведение маятника. (Мы знаем, что колебание вызвано интегральным усилением, а не пропорциональным усилением, поскольку система P-only с K P = 40 не колебалась.) Попробуем K I = 5.

Это все еще слишком большое интегральное усиление, но мы становимся ближе - с K I = 10 колебания составляли около 11 ° C от пика до пика, а при K I = 5 они составляли только около 6 ° C от пика до максимума, вершина горы. Вот графики для контрольных прогонов с K I = 3 и K I = 2.


Оба они хороши. Пробег K I = 3 имеет значительные колебания, но амплитуда явно уменьшается, поэтому мы можем предположить, что измеренная температура в конечном итоге найдет заданное значение и останется там. Пробег K I = 2 не имеет колебаний, но интегрального коэффициента усиления недостаточно для преодоления тенденции устойчивого состояния системы P-only. На данный момент мне нравится система K P = 40 / K I = 3, но было бы неплохо, если бы результат сходился быстрее. Для этого нам понадобится производная прибыль.
Закончить с помощью производного
Многие ПИД-системы фактически реализованы без получения прибыли. Как мы видели в предыдущем разделе, ПИ-контроллеры могут быть весьма эффективными. Кроме того, производная подвержена шуму, что приводит к тому, что краткосрочная скорость изменения несовместима с общим поведением выхода. Но в целом, ПИД-регулятор не будет полностью обладать потенциалом без какого-либо производного усиления. Производный термин делает систему более отзывчивой, поскольку она изменяет выход PID на основе будущего поведения системы. Подумайте об этом так: когда измеренная температура приближается к заданной точке, ошибка становится меньше. Таким образом, изменение ошибки (рассчитанное как текущая ошибка минус предыдущая ошибка) отрицательно. Это изменение ошибки затем умножается на (положительное) значение коэффициента производной и добавляется к выходу PID. Результат умножения отрицательный, поэтому он уменьшает выход ПИД-регулятора - производный термин уменьшает выход ПИД-регулятора в зависимости от ожидаемого приближения выходного сигнала к заданному значению, что приводит к меньшему перерегулированию. Обратное происходит, когда измеренная температура уменьшается к заданному значению: производный термин увеличивает выход ПИД-регулятора по мере приближения к заданному значению и, таким образом, уменьшает недокус.
Вот контрольные прогоны для K D = 1, 2 и 3:



Предположим, что выход сходится, когда температурная кривая остается в непосредственной близости от (или непосредственно сверху) зеленой линии уставки. При предыдущей конфигурации (K P = 40 / K I = 3 / K D = 0) выход никогда не сходился примерно через 430 секунд. При K D = 1 результаты примерно одинаковы. С K D = 2 мы имеем сходимость через 400 секунд, а система K D = 3, похоже, сходится немного быстрее.
Вывод
На этом этапе я доволен конфигурацией K P = 40 / K I = 3 / K D = 3. В следующей статье мы рассмотрим более формальный метод настройки значений усиления.
Следующая статья в серии: встроенный контроль температуры ПИД-регулятора, часть 6: настройка Ziegler-Nichols