Оглавление:

ПИД-регулятор VHDL: 10 шагов
ПИД-регулятор VHDL: 10 шагов

Видео: ПИД-регулятор VHDL: 10 шагов

Видео: ПИД-регулятор VHDL: 10 шагов
Видео: Оконный интегратор на ПЛИС 2024, Ноябрь
Anonim
ПИД-регулятор VHDL
ПИД-регулятор VHDL
ПИД-регулятор VHDL
ПИД-регулятор VHDL

Этот проект был моим последним проектом для получения степени бакалавра с отличием в Технологическом институте Корка. Это руководство разбито на два раздела, первый из которых будет охватывать основную часть кода PID, который является основной целью проекта, а второй раздел касается взаимодействия кода, который был реализован на плате разработки Basys 3, а затем сопряжен с мячом для пинг-понга. левитационная установка. Теоретическая и построенная буровая установка показаны на прилагаемых изображениях.

Запасы

Моделирование

Дизайнерский люкс Vivado

Реализация (в скобках - то, что использовалось для моего проекта)

  • Плата FPGA, которая может вводить и выводить цифровые / аналоговые сигналы (Basys 3)
  • система, управляемая одним источником обратной связи (установка для левитации мяча для пинг-понга)

Буровая установка

  • Трубка из поликарбоната
  • Вентилятор 5V
  • ИК-датчик
  • Основание, напечатанное на 3D-принтере (в этом руководстве описывается конструкция установки, датчик был добавлен для обратной связи, но установка в целом была такой же)
  • Резисторы 1 кОм
  • Макетная плата с 5 В и шиной заземления

Шаг 1: Основная теория управления

Основная теория управления
Основная теория управления

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

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

r- это ссылка. Это определяет, куда нужно направить контроллер.

е-это ошибка. В этом разница между значением на вашем датчике и эталоном. например e = r- (d + выход датчика).

К-это контроллер. Контроллер может состоять из трех частей. Это P, I и D. Все три члена имеют множители, называемые Kp, Ki и Kd. Эти значения определяют реакцию контроллера.

  • P-пропорциональный. Контроллер со строго P будет иметь выходной сигнал, пропорциональный текущей ошибке. Контроллер P прост в установке и работает быстро, но никогда не достигнет установленного вами значения (ссылка).
  • Я-Интеграл. Строго интегральный контроллер суммирует предыдущую ошибку, которая в конечном итоге достигает желаемого значения. Этот контроллер обычно слишком медленный для реализации. Добавление P-члена уменьшит время, необходимое для достижения ссылки. Необходимо учитывать время, в течение которого вводится выборка, интегральный член интегрируется по времени.
  • D-производная. Член производной будет иметь результат, который зависит от скорости изменения ошибки. Этот термин обычно используется с термином P или с термином PI. Так как это пропорционально скорости изменения ошибки, то шумный одиночный сигнал будет иметь усиленный шум, что может привести к нестабильности системы. Время также должно быть принято во внимание, так как производный член также относится к времени.

U- это управляющий сигнал. Этот сигнал является входом в буровую установку. В случае этого проекта u - это входной сигнал ШИМ для вентилятора для изменения скорости.

G- Это система, которая находится под контролем. Эта система может быть смоделирована математически в S- или Z-области. Системы могут быть до n-го порядка, но для тех, кто начинает работать с управлением, вероятно, следует предположить, что система первого порядка, так как это намного проще вычислить. В Интернете можно найти огромное количество информации о системе моделирования. В зависимости от времени выборки датчика модель системы может быть дискретной или непрерывной. Это сильно влияет на контроллер, поэтому рекомендуется изучить оба варианта.

d- Это нарушение, которое добавляется в систему. Возмущение - это внешние силы, которые модель системы не учитывает. Простым примером этого может быть дрон, который вы хотели бы парить на высоте 5 метров, когда порыв ветра падает и опускает дрон на 1 метр, контроллер изменит его положение после того, как возникнет возмущение. Это известно как возмущение, поскольку ветер неповторим, поэтому его нельзя смоделировать.

Существует слишком много правил для настройки контроллера, но некоторые хорошие, с которых я начал, - это Cohen Coon и Zieger Nichols.

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

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

Шаг 2: Написание PID-кода

Написание PID-кода
Написание PID-кода

Основной принцип кода, представленного по следующей ссылке, был взят и изменен, поскольку этот код не работал, но в нем были правильные многие принципы, что послужило хорошей отправной точкой. Исходный PID В коде было несколько ошибок, таких как

  • Непрерывная работа - контроллер наследуется по наследству, поэтому его нужно было настроить так, чтобы вычислять все 3 члена, только когда был доступен новый вход. Обход этого моделирования состоял в том, чтобы проверить, не изменились ли входные данные с последнего раза. это работает только для имитации правильной работы кода.
  • Время выборки не влияло на интегральный и производный член - Контроллер также не учитывал время, в течение которого производилась выборка, поэтому значение, называемое делителем времени, было добавлено, чтобы гарантировать, что интегральные и производные члены работают в правильном интервал.
  • Ошибка могла быть только положительной - при вычислении ошибки также существовала проблема, поскольку ошибка никогда не могла быть отрицательной, что означает, что когда сигнал обратной связи превысит эталонное значение, контроллер продолжит увеличивать выходной сигнал, когда он должен уменьшаться.
  • Значения усиления для трех членов были целыми числами - по моему опыту я всегда обнаруживал, что значения для трех членов в контроллере всегда должны быть числами с плавающей запятой из-за того, что Basys 3 не имеет числа с плавающей запятой, значениям нужно было присвоить значение числителя и знаменатель, который послужит обходным решением этой проблемы.

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

Шаг 3: Как внести изменения в вашу систему

Во-первых, не все системы одинаковы, необходимо проанализировать входы и выходы системы. В моем случае выход моей установки, который дал мне значение для положения, был аналоговым сигналом, а входом от системы был сигнал ШИМ. Это означает, что необходимо преобразование АЦП. К счастью, Basys 3 имеет встроенный АЦП, так что это не было проблемой, выход ИК-датчика пришлось уменьшить до 0–1 В, поскольку это максимальный диапазон встроенного АЦП. Это было сделано с использованием схемы делителя напряжения, которая была сделана из резисторов 1 кОм, установленных как резистор 3 кОм, последовательно с резистором 1 кОм. Аналоговый сигнал теперь был в пределах диапазона АЦП. Вход ШИМ вентилятора может напрямую управляться выходом порта PMOD на Basys 3.

Шаг 4. Использование преимуществ ввода-вывода в Basys 3

В Basys 3 есть несколько операций ввода-вывода, которые позволяют упростить отладку во время выполнения кода. ввод / вывод был настроен следующим образом.

  • Семисегментный дисплей - используется для отображения значения задания и значения на АЦП в вольтах. Первые две цифры семисегментного дисплея показывают две цифры после десятичного разряда значения АЦП, поскольку значение находится в диапазоне 0–1 В. Цифры три и четыре на семисегментном дисплее показывают эталонное значение в вольтах, а также первые две цифры после десятичной точки, так как диапазон также находится в пределах от 0 до 1 В.
  • 16 светодиодов - светодиоды использовались для отображения значения выхода, чтобы гарантировать, что выход был насыщенным и выход изменялся правильно.

Шаг 5: шум на выходе ИК-датчика

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

Шаг 6: Общий макет кода

Общий вид кода
Общий вид кода

Есть один фрагмент кода, о котором еще не говорилось. Этот код представляет собой делитель часов, называемый триггером. этот бит кода запускает выборку кода АЦП. код АЦП занимает максимум 2 мксек, поэтому текущий вход и предыдущий вход усредняются. 1us после этого усреднения контроллер вычисляет члены P, I и D. Общий вид кода и интерфейса показан на импровизированной схеме подключения.

Шаг 7: Тестирование

Тестирование
Тестирование

Код был развернут на Basys 3, и был записан следующий ответ. ссылка изменилась между 2 значениями. что и есть в прилагаемом коде завершенного проекта. Прикрепленное видео показывает этот ответ в режиме реального времени. Колебания затухают быстрее в верхней части трубки, так как контроллер был разработан для этой области, но контроллер не работает так же хорошо в нижней части трубки, поскольку система является нелинейной.

Шаг 8: Модификации для улучшения проекта

Проект работал, как и предполагалось, но было несколько модификаций, которые я бы внес, если бы проект можно было продлить.

  • Реализуйте цифровой фильтр для полного подавления шума
  • установите код АЦП, средний код и код интеграции для последовательного запуска.
  • используйте другой датчик для обратной связи, поскольку нелинейный отклик этого датчика вызвал множество проблем с этим проектом, но это больше касается стороны управления, а не стороны кодирования.

Шаг 9: дополнительная работа

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

Модификации штатного ПИД-регулятора

· Реализован шаблон КИХ-фильтра, коэффициенты должны быть изменены для достижения желаемой частоты среза. Текущая реализация представляет собой еловый фильтр с 5 отводами.

· Синхронизация кода была настроена так, что фильтр будет распространять новую выборку, и когда выход будет готов, будет запущен интегральный член, что будет означать, что код может быть изменен для работы в разных временных интервалах с меньшими усилиями для изменения код.

· Основной цикл for, который управляет программой, также был сокращен, так как этот цикл раньше занимал 7 циклов, что замедляло максимальную скорость работы контроллера, но за счет уменьшения состояния цикла for t 4 это означает, что основной блок кода может работать. в течение 4 тактов.

Тестирование

Этот контроллер был протестирован и работал так, как задумано. Я не фотографировал это доказательство, так как эта часть проекта была просто для того, чтобы поддерживать разум в активном состоянии. Код для тестирования, а также тестовая среда будут доступны здесь, чтобы вы могли протестировать программу перед внедрением.

Зачем использовать каскадный контроллер

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

Как работает каскадный контроллер?

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

Выполнение доработок на буровой

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

Тестирование

Мне не удалось протестировать контроллер, так как было сложно смоделировать два источника входного сигнала. Единственная проблема, которую я вижу с каскадным контроллером, заключается в том, что, когда внешний цикл пытается увеличить заданное значение, подаваемое во внутренний цикл, более высокое заданное значение на самом деле является более низким RPS для вентилятора, но это можно легко исправить. взять заданное значение из максимального значения сигнала заданного значения (4095 - заданное значение - tacho_result).

Шаг 10: Заключение

В целом проект функционирует так, как я предполагал, когда он начинался, поэтому я доволен результатом. Спасибо, что нашли время прочитать мою попытку разработки ПИД-регулятора на VHDL. Если кто-то пытается реализовать какой-либо вариант этого в системе и требует некоторой помощи для понимания кода, свяжитесь со мной, я отвечу как можно скорее. Любой, кто пытается выполнить дополнительную работу, которая была выполнена, но не реализована, пожалуйста, свяжитесь со мной, чтобы получить любую руку. Я был бы очень признателен, если бы кто-нибудь, кто это реализовал, сообщил мне, как это происходит.

Рекомендуемые: