Съдържание:

PID контролер VHDL: 10 стъпки
PID контролер VHDL: 10 стъпки

Видео: PID контролер VHDL: 10 стъпки

Видео: PID контролер VHDL: 10 стъпки
Видео: Lecture 73: Digital PID Control Implementation using Verilog HDL Programming 2024, Юли
Anonim
PID контролер VHDL
PID контролер VHDL
PID контролер VHDL
PID контролер VHDL

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

Консумативи

Симулация

Дизайн апартамент Vivado

Изпълнение (в скобите е използваното за моя проект)

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

Rig

  • Поликарбонатна тръба
  • 5V вентилатор
  • IR сензор
  • 3D Printed Base (Този урок документира конструкцията на платформата, сензорът е добавен, за да осигури обратна връзка, но платформата като цяло е същата)
  • 1k резистори
  • Платформа с 5V и GND шина

Стъпка 1: Основна теория на управлението

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

Мислех, че добавянето на някаква основна теория за управлението ще даде на всеки, който би искал да се опита да внедри този код, добра основа за начало.

Приложената диаграма е оформлението на контролер с един контур.

r- е препратката. Това определя къде контролерът желае да отиде.

е-грешката е. Това е разликата между стойността на вашия сензор и вашата справка. напр. e = r- (d+изход на сензора).

K-Това е контролерът. Контролерът може да се състои от три термина. Тези термини са P, I и D. И трите термина имат множители, наречени Kp, Ki и Kd. Тези стойности определят реакцията на контролера.

  • P-пропорционално. Строго P контролерът ще има изход пропорционален на текущата грешка. P контролерът е лесен за изпълнение и работи бързо, но никога няма да достигне зададената от вас стойност (справка).
  • I-интегрален. Строго интегрален контролер ще обобщи предишната грешка, която в крайна сметка ще достигне желаната справка. Този контролер обикновено е твърде бавен за изпълнение. Добавянето на P термин ще намали времето, необходимо за достигане на препратката. Времето, през което се взема проба от входния сигнал, трябва да се вземе предвид, че интегралният член е интегриран по отношение на времето.
  • D-производно. Производният термин ще има изход, който зависи от скоростта на промяна на грешката. Този термин обикновено се използва с термин P или с термин PI. Тъй като това е пропорционално на скоростта на промяна на грешката, тогава шумният сингъл ще има усилване на шума, което може да доведе до нестабилност на системата. Времето също трябва да се вземе предвид, тъй като деривативният термин също е по отношение на времето.

U- Това е управляващият сигнал. Този сигнал е вход за платформата. В случая на този проект u е PWM сигнал вход към вентилатора за промяна на скоростта.

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

d- Това е смущение, което се добавя към системата. Нарушаването е външни сили, които моделът на системата не отчита. Лесен пример за това би бил дрон, който бихте искали да се движите на 5 метра, порив на вятъра идва и изпуска дрона на 1 метър, контролерът ще премества дрона след настъпването на смущението. Това е известно като смущение, тъй като вятърът не се повтаря, така че това не може да бъде моделирано.

За да настроите контролера, има твърде много правила за назоваване, но някои добри, с които започнах, са Коен Кун и Зигер Никълс.

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

Тук трябва да има достатъчно информация, за да се разбере как работи контролерът, заедно с някои индивидуални изследвания и кодът под контролер с всяка комбинация от трите термина може да бъде приложен.

Стъпка 2: Писане на PID код

Писане на PID код
Писане на PID код

Основният принцип на кода, намерен на следната връзка, беше взет и променен, тъй като този код не работеше, но имаше много правилни принципи, които дадоха добра отправна точка. Оригинален PID Кодът имаше няколко грешки, като например

  • Непрекъсната работа - контролерът е по наследство дискретен, така че контролерът трябваше да бъде настроен да изчислява и трите термина само когато е наличен нов вход. Работата около тази симулация беше да се провери дали входът се е променил от последния път. това работи само за симулиране на кода, който работи правилно.
  • Времето на извадката няма ефект върху интегралния и деривативния термин - Контролерът също не взема предвид времето, през което се взема пробата, така че се добавя стойност, наречена делител за време, за да се гарантира, че интегралните и деривативните условия работят над правилното интервал.
  • Грешката може да бъде само положителна - при изчисляване на грешката също имаше проблем, тъй като грешката никога не би могла да има отрицателно значение, когато сигналът за обратна връзка е надхвърлил референтната стойност, че контролерът ще продължи да увеличава изхода, когато трябва да се намалява.
  • Придобитите стойности за 3 -те термина бяха цели числа - от моя опит винаги съм откривал, че стойностите за 3 -те термина в контролера винаги са числа с плаваща запетая поради това, че Basys 3 няма номер с плаваща запетая, на стойностите трябваше да се даде числова стойност и стойност на знаменателя, която би служила като работа за преодоляване на този проблем.

Кодът е приложен по -долу, има основната част от кода и тест, за да симулира кода. Папката zip съдържа кода и тестbench вече във Vivado, така че да може да се отвори, за да се спести време. има и симулиран тест на кода, който показва изхода за проследяване на препратката, която доказва, че кодът функционира по предназначение.

Стъпка 3: Как да промените за вашата система

Първо, не всички системи са еднакви, трябва да се анализират входовете и изходите на системата. В моя случай изходът на моята платформа, който ми даде стойност за позицията, беше аналогов сигнал, а входът от системата беше PWM сигнал. Това означава, че е необходимо преобразуване на ADC. За щастие Basys 3 има вграден ADC, така че това не беше проблем, изходът на IR сензора трябваше да бъде намален до 0V-1V, тъй като това е максималният обхват на вградения ADC. Това беше направено с помощта на верига с делител на напрежение, която беше направена от 1k резистори, настроени като 3k резистор последователно с 1k резистор. Аналоговият сигнал вече беше в обхвата на ADC. ШИМ входът към вентилатора може да се управлява директно от изхода на PMOD порт на Basys 3.

Стъпка 4: Възползвайте се от I/O на Basys 3

В Basys 3 има редица входно -изходни операции, които позволяват по -лесно отстраняване на грешки, когато кодът работи. I/O е настроен както следва.

  • Седемсегментен дисплей - Използва се за показване на стойността на препратката и стойността на ADC във волта. Първите две цифри на дисплея със седем сегмента показват двете цифри след десетичната запетая на стойността на ADC, тъй като стойността е между 0-1V. Цифрите три и четири на дисплея със седем сегмента показват референтната стойност във волта, това показва и първите две цифри след десетичната запетая, тъй като диапазонът също е между 0-1V.
  • 16 светодиода - Светодиодите бяха използвани за показване на стойността на изхода, за да се гарантира, че изходът се насища и изходът се променя правилно.

Стъпка 5: Шум на изхода на IR сензора

Имаше шум на изхода на сензора за отстраняване на този проблем, беше поставен блок за усредняване, тъй като това беше достатъчно и изискваше много малко работа за завършване.

Стъпка 6: Общо оформление на кода

Общо оформление на кода
Общо оформление на кода

Има една част от кода, за която все още не се говори. Този код е часовник разделител, наречен тригер. този бит код задейства ADC кода за проба. ADC кодът отнема максимум 2us, за да завърши, така че текущият вход и предишният вход са осреднени. 1us след това усредняване контролерът изчислява P, I и D условия. цялостното оформление на кода и взаимодействието е показано в импровизираната диаграма на свързване.

Стъпка 7: Тестване

Тестване
Тестване

Кодът беше разгърнат на Basys 3 и беше записан следният отговор. препратката се променя между 2 стойности. какъвто е случаят в попълнения приложен код на проекта. Прикаченото видео показва този отговор в реално време. Трептенията затихват по-бързо в горната част на тръбата, тъй като контролерът е проектиран за тази област, но контролерът не работи толкова по-надолу по тръбата, тъй като системата е нелинейна.

Стъпка 8: Промени за подобряване на проекта

Проектът работи по предназначение, но има няколко промени, които бих направил, ако проектът можеше да бъде удължен.

  • Внедрете цифров филтър, за да намалите напълно шума
  • настройте ADC кода, средния код и интеграционния код за последователно задействане.
  • използвайте различен сензор за обратна връзка, тъй като нелинейният отговор на този сензор причини голямо разнообразие от проблеми с този проект, но това е повече от контролната страна, а не от кодиращата страна.

Стъпка 9: Допълнителна работа

През лятото написах код за каскаден контролер и внедрих препоръчаните от мен модификации за PID контролер с един контур.

Промени, направени на обикновен PID контролер

· Реализиран шаблон на FIR филтър, коефициентите трябва да бъдат променени, за да се постигне желаната гранична честота. Настоящата реализация е филтър от ела с 5 докосвания.

· Времето на кода е настроено така, че филтърът да разпространява новата проба и когато изходът е готов, ще се задейства интегралният термин, което ще означава, че кодът може да бъде променен, за да работи на различни интервали от време с по -малко усилия за промяна код.

· Основният цикъл for, който задвижва програмата, също е намален, тъй като този цикъл for отне 7 цикъла преди това, което забави максималната работна скорост на контролера, но чрез намаляване на цикъла for 4 4 това означава, че основният блок код може да работи в рамките на 4 тактови цикъла.

Тестване

Този контролер беше тестван и изпълнен по предназначение. Не снимах това доказателство, тъй като тази част от проекта беше само за да поддържа ума активен. Кодът за тестване, както и testbench, ще бъде достъпен тук, така че можете да тествате програмата преди внедряването.

Защо да използвате каскаден контролер

Каскаден контролер контролира две части на системата. В този случай каскаден контролер ще има външен контур, който е контролер, който има обратна връзка от IR сензора. Вътрешният контур има обратна връзка под формата на време между импулсите от тахометъра, което определя скоростта на въртене на вентилатора. Чрез прилагане на контрол може да се постигне по -добра реакция извън системата.

Как работи каскадният контролер?

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

Изпълнение на модификации на платформата

За съжаление не успях да приложа тези модификации на платформата, тъй като нямах достъп до нея. Тествах ревизирания контролер с един цикъл, който работи по предназначение. Все още не съм тествал каскадния контролер. Сигурен съм, че контролерът ще работи, но може да изисква някои леки модификации, за да работи по предназначение.

Тестване

Не успях да тествам контролера, тъй като беше трудно да се симулират два входни източника. Единственият проблем, който мога да видя при каскадния контролер, е, че тъй като външният контур се опитва да увеличи зададената стойност, доставена към вътрешния контур, че по-голямата зададена точка всъщност е по-нисък RPS за вентилатора, но това може да се поправи лесно. вземете зададената точка от максималната стойност на сигнала за зададена стойност (4095 - зададена стойност - tacho_result).

Стъпка 10: Заключение

Като цяло проектът функционира така, както съм възнамерявал, когато проектът започна, така че съм доволен от резултата. Благодаря ви, че отделихте време да прочетете моя опит за разработване на PID контролер във VHDL. Ако някой се опитва да приложи някои вариации на това в система и изисква малко помощ за разбиране на кода, свържете се с мен, ще отговоря възможно най -скоро. Всеки, който опита допълнителната работа, която е компилирана, но не е изпълнена, моля, свържете се с мен за всяка ръка. Ще съм много благодарен, ако някой, който го приложи, ми каже как става.

Препоръчано: