Мазмұны:

VHDL PID контроллері: 10 қадам
VHDL PID контроллері: 10 қадам

Бейне: VHDL PID контроллері: 10 қадам

Бейне: VHDL PID контроллері: 10 қадам
Бейне: О PID регуляторе простым языком (что такое ПИДы) 2024, Шілде
Anonim
PID контроллері VHDL
PID контроллері VHDL
PID контроллері VHDL
PID контроллері VHDL

Бұл жоба менің Қорқыт технологиялық институтының бакалавр дәрежесін алу бойынша соңғы жобам болды. Бұл оқу құралы екі бөлімге бөлінген, біріншісі жобаның негізгі мақсаты болып табылатын PID кодының негізгі бөлігін қамтиды, ал екінші бөлім Basys 3 әзірлеу тақтасында енгізілген, содан кейін теннис теннисі допымен байланыстырылған кодтың интерфейсін қамтиды. левитациялық қондырғы. Теориялық және құрастырылған қондырғы бекітілген суреттерде көрсетілген.

Жабдықтар

Симуляция

Vivado дизайн жиынтығы

Іске асыру (жақшада менің жобам үшін қолданылған)

  • Сандық/аналогтық сигналдарды енгізуге және шығаруға болатын FPGA тақтасы (Basys 3)
  • бір кері байланыс көзі арқылы басқарылатын жүйе (Ping Pong Ball Levitation Rig)

Риг

  • Поликарбонат құбыры
  • 5В желдеткіш
  • IR сенсоры
  • 3D басып шығарылған негіз (бұл оқулық кері байланыс үшін сенсор қондырғысының құрылысын құжаттайды, бірақ қондырғы әдетте бірдей болды)
  • 1k резисторлар
  • 5V және GND рельсі бар тақта

1 -қадам: Басқарудың негізгі теориясы

Басқарудың негізгі теориясы
Басқарудың негізгі теориясы

Мен басқарудың кейбір негізгі теориясын қосу осы кодты қолданғысы келетіндердің бәріне жақсы негіз береді деп ойладым.

Қосылған диаграмма - бұл бір циклды реттегіштің орналасуы.

r- сілтеме. Бұл контроллер қайда барғысы келетінін анықтайды.

e-қате. Бұл сенсордағы және сілтемедегі мән арасындағы айырмашылық. мысалы 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 -ші рет бойынша болуы мүмкін, бірақ бақылауды бастаған адам үшін бірінші ретті жүйе болуы мүмкін, себебі оны есептеу әлдеқайда оңай. Бұл Интернеттен табуға болатын модельдеу жүйесі туралы ақпараттың Plethora. Сенсордың іріктеу уақытына байланысты жүйе моделі дискретті немесе үздіксіз болады. Бұл контроллерге қатты әсер етеді, сондықтан екеуін де зерттеу ұсынылады.

d- Бұл жүйеге қосылған бұзушылық. Бұзушылық - бұл жүйенің моделі есепке алмайтын сыртқы күштер. Бұған қарапайым мысал ретінде сіз 5 метр қашықтықта жел соққысы келетін ұшқышсыз ұшақ болады, ал дронды 1 метрге түсірсе, диспетчер бұзылғаннан кейін дронның орнын ауыстырады. Бұл бұзылу деп аталады, өйткені жел қайталанбайды, сондықтан оны модельдеуге болмайды.

Контроллерді баптау үшін атау үшін көптеген ережелер бар, бірақ мен бастаған жақсы ережелер - Коэн Кун мен Зигер Николс.

Жүйені модельдеу, әдетте, ең маңызды бөлігі болып табылады, оның нақты моделі болмаса, контроллер қалағанша жауап бермейді.

Бұл жерде контроллердің жеке зерттеулермен бірге қалай жұмыс істейтінін түсіну үшін жеткілікті ақпарат болуы керек және контроллердің астындағы код үш терминнің кез келген комбинациясын жүзеге асыруға болады.

2 -қадам: PID кодын жазу

PID кодын жазу
PID кодын жазу

Келесі сілтемеде табылған кодтың негізгі принципі қабылданды және өзгертілді, себебі бұл код жұмыс істемеді, бірақ көптеген принциптерге ие болды, бұл жақсы бастау нүктесін берді. Бастапқы PID кодында бірнеше қателер болды, мысалы

  • Үздіксіз жұмыс - контроллер мұрагерлік түрде дискретті болып табылады, сондықтан контроллерді жаңа кіріс болған кезде барлық 3 терминді ғана есептейтін етіп реттеу керек болды. Бұл модельдеудің жұмысы кіріс соңғы рет өзгергенін тексеру болды. бұл кодтың дұрыс жұмыс істеуін модельдеу үшін ғана жұмыс істейді.
  • Үлгі уақыты интегралды және туынды терминге әсер етпеді - Контроллер үлгі алынатын уақытты да ескермеді, сондықтан интеграл мен туынды терминдердің дұрыс жұмыс жасауын қамтамасыз ету үшін уақытты бөлгіш деп аталатын мән қосылды. интервал
  • Қате тек позитивті болуы мүмкін - қатені есептегенде проблема да болды, өйткені кері байланыс сигналы анықтамалық мәннен асып кеткенде, қате ешқашан теріс мағынаға ие бола алмайды, бұл контроллер шығуды азайту кезінде ұлғайтуды жалғастырады.
  • 3 терминнің мәні бүтін сандар болды - менің тәжірибемде мен әрқашан контроллердегі 3 терминнің мәндері Basys 3 -тің өзгермелі нүкте санына ие болмауына байланысты әрқашан өзгермелі нүкте сандары болатынын анықтадым. бұл мәселені айналып өтуге көмектесетін бөлгіш мән.

Код төменде бекітілген, онда кодтың негізгі бөлігі және кодты модельдеуге арналған тест алаңы бар. Zip қалтасында уақытты үнемдеу үшін ашуға болатын Vivado -да код пен testbench бар. Сондай -ақ, кодтың модельденген сынағы бар, ол шығуды қадағалауды көрсетеді, бұл код ойдағыдай жұмыс істейтінін дәлелдейді.

3 -қадам: Сіздің жүйеңізді қалай өзгертуге болады

Біріншіден, барлық жүйелер бірдей емес, жүйенің кірісі мен шығысын талдау қажет. Менің жағдайда позицияның мәнін берген қондырғының шығысы аналогтық сигнал, ал жүйеден кіру PWM сигналы болды. Бұл ADC түрлендіру қажет екенін білдіреді. Бақытымызға орай, Basys 3 қондырылған ADC-ге ие, сондықтан IR сенсорының шығысын 0В-1В дейін төмендетуге тура келді, себебі бұл борттық ADC максималды диапазоны. Бұл кернеуді бөлу схемасы көмегімен жасалды, ол 1к резисторы бар 3к резисторы ретінде орнатылған. Аналогтық сигнал енді ADC ауқымында болды. Желдеткішке PWM кірісі Basys 3 -тегі PMOD портының шығысымен тікелей басқарылуы мүмкін.

4 -қадам: Basys 3 енгізу -шығару артықшылығын пайдалану

Basys 3 -те код жұмыс істеп тұрған кезде отладтауды жеңілдетуге мүмкіндік беретін бірнеше енгізу -шығару саны бар. енгізу -шығару келесі түрде орнатылды.

  • Жеті сегменттің дисплейі - бұл ADC сілтемесі мен мәнін вольтпен көрсету үшін пайдаланылды. Жеті сегменттің дисплейінің алғашқы екі цифры ADC мәнінің ондық таңбасынан кейінгі екі цифрды көрсетеді, себебі мән 0-1В аралығында. Жеті сегменттің дисплейіндегі үш және төрт цифрлар вольтпен сілтеме мәнін көрсетеді, сонымен қатар ондық бөлшектен кейінгі алғашқы екі цифрды көрсетеді, өйткені диапазон 0-1В аралығында.
  • 16 жарық диоды - жарықдиодтар шығудың қаныққанына және шығудың дұрыс өзгергеніне көз жеткізу үшін шығыс мәнін көрсету үшін пайдаланылды.

5 -қадам: IR сенсорының шығысындағы шу

Бұл мәселені шешу үшін сенсордың шығысында шу болды, орташа блок орнатылды, себебі бұл жеткілікті болды және оны аяқтау үшін өте аз жұмыс қажет болды.

6 -қадам: кодтың жалпы орналасуы

Кодтың жалпы орналасуы
Кодтың жалпы орналасуы

Әлі талқыланбаған кодтың бір бөлігі бар. Бұл код - триггер деп аталатын сағат бөлгіш. кодтың бұл биті ADC кодын үлгіге әкеледі. ADC кодын толтыру үшін ең көбі 2us қажет, сондықтан ағымдағы кіріс пен алдыңғы кіріс орташа болады. 1us осыдан кейін контроллер P, I және D мүшелерін есептейді. код пен интерфейстің барлық орналасуы қосылу схемасында көрсетілген.

7 -қадам: тестілеу

Сынақ
Сынақ

Код Basys 3 -те орналастырылды және келесі жауап жазылды. сілтеме 2 мән арасында өзгерді. бұл аяқталған жобалық кодта көрсетілген. Қосылған бейнеде бұл жауап нақты уақытта көрсетіледі. Тербеліс түтіктің жоғарғы бөлігінде тезірек ыдырайды, себебі контроллер осы аймаққа арналған, бірақ контроллер түтіктің төменгі жағында жұмыс істемейді, себебі жүйе сызықты емес.

8 -қадам: Жобаны жақсарту үшін өзгертулер

Жоба жоспарланғандай жұмыс істеді, бірақ егер жобаны ұзартуға болатын болса, мен бірнеше өзгерістер енгізер едім.

  • Шуды толығымен азайту үшін сандық сүзгіні қолданыңыз
  • ADC кодын, орташа кодты және интеграция кодын реттілікпен іске қосу үшін орнатыңыз.
  • кері байланыс үшін басқа сенсорды қолданыңыз, себебі бұл сенсордың сызықты емес жауабы бұл жобада көптеген мәселелер туғызды, бірақ бұл кодтау жағында емес, бақылау жағында.

9 -қадам: Қосымша жұмыс

Жаз бойы мен каскадты контроллерге код жаздым және бір циклды PID контроллері үшін ұсынылған өзгертулерді енгіздім.

Кәдімгі PID контроллеріне өзгертулер енгізілді

· Қажетті жиілікке жету үшін енгізілген FIR сүзгі үлгісі коэффициенттерді өзгертуі керек. Ағымдағы енгізу-бұл 5 крандық шырша сүзгісі.

· Кодтың уақыты сүзгі жаңа үлгіні тарататындай етіп орнатылды, ал шығыс дайын болғанда интегралды термин іске қосылады, бұл кодты әр түрлі уақыт аралықтарында жұмыс істеу үшін өзгертуге аз күш жұмсауға мүмкіндік береді. код

· Бағдарламаны басқаратын циклдің негізгі бөлігі де қысқартылды, себебі бұл цикл 7 циклды құрады, бұл бұрын контроллердің максималды жұмыс жылдамдығын баяулатады, бірақ цикл t үшін азайту арқылы бұл кодтың негізгі блогы жұмыс істей алатынын білдіреді. 4 сағаттық цикл ішінде.

Сынақ

Бұл контроллер тексерілді және ойластырылған түрде орындалды, мен бұл дәлелді суретке түсірмедім, өйткені жобаның бұл бөлігі ақыл -ойды белсенді ұстау үшін ғана болды. Testbench сияқты тестілеу коды осында қол жетімді болады, сондықтан сіз бағдарламаны іске қоспас бұрын тексере аласыз.

Неліктен каскадты контроллерді қолдану керек

Каскадты контроллер жүйенің екі бөлігін басқарады. Бұл жағдайда каскадты контроллердің сыртқы ілмегі болады, ол ИҚ сенсорынан кері байланысы бар контроллер болады. Ішкі циклде тахометрден импульстар арасындағы уақыт түрінде кері байланыс бар, ол желдеткіштің айналу жылдамдығын анықтайды. Бақылауды енгізу арқылы жүйеден жақсы жауап алуға болады.

Каскадты контроллер қалай жұмыс істейді?

Контроллердің сыртқы циклы импульстер арасындағы ішкі цикл контроллеріне дейінгі уақытты береді. Бұл контроллер импульстер арасындағы қажетті уақытқа жету үшін жұмыс циклін көбейтеді немесе азайтады.

Бұрғылау қондырғысына модификацияларды енгізу

Өкінішке орай, мен бұл өзгертулерді қондырғыда қолдана алмадым, себебі оған қол жеткізе алмадым. Мен мақсатты түрде жұмыс жасайтын қайта қаралған бір контурлық контроллерді сынап көрдім. Мен каскадты контроллерді әлі сынамадым. Мен контроллер жұмыс істейтініне сенімдімін, бірақ жұмыс істеу үшін сәл өзгертулер қажет болуы мүмкін.

Сынақ

Мен контроллерді тексере алмадым, себебі екі кіріс көзін модельдеу қиын болды. Мен каскадты контроллермен көре алатын жалғыз мәселе-сыртқы цикл ішкі циклге берілген мәнді ұлғайтуға тырысқанда, үлкенірек нүкте желдеткіш үшін төменгі RPS болып табылады, бірақ оны оңай түзетуге болады. белгіленген нүкте сигналының максималды мәнінен белгіленген нүктені алыңыз (4095 - белгіленген нүкте - tacho_result).

10 -қадам: Қорытынды

Жалпы, жоба мен жоспарлағандай жұмыс істейді, сондықтан мен нәтижеге ризамын. VHDL -де PID контроллерін жасау әрекетін оқуға уақыт бөлгеніңіз үшін рахмет. Егер біреу жүйеде осы нұсқаны енгізуге тырысса және кодты түсіну үшін біраз көмек қажет болса, менімен хабарласыңыз, мен тез арада жауап беремін. Кім жиналған, бірақ орындалмаған қосымша жұмысты орындауға тырысса, кез келген қол үшін маған хабарласыңыз. Егер оны жүзеге асыратын кез келген адам маған оның қалай жүріп жатқанын айтса, мен өте ризамын.

Ұсынылған: