This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:projects:3pi:pid [2015/09/09 07:42] – kaupo.raid | et:projects:3pi:pid [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PID regulaator ====== | ====== PID regulaator ====== | ||
- | 3pi roboti lihtsa joonejärgimise algoritmi kasutamisel on näha, et robot sõidab mööda joont kergelt sikk sakk meetodil. Lisaks võib suurematel kiirustel robot kergelt | + | 3pi roboti lihtsa joonejärgimise algoritmi kasutamisel on näha, et robot sõidab mööda joont kergelt sikk-sakk meetodil. Lisaks võib suurematel kiirustel robot kergesti |
* proportsionaalne (P) - otsene viga seadesuurusest | * proportsionaalne (P) - otsene viga seadesuurusest | ||
* integraalne (I) - aja jooksul summeeruv viga | * integraalne (I) - aja jooksul summeeruv viga | ||
* diferentseeriv (D) - vea muutumise kiirus ehk tõus | * diferentseeriv (D) - vea muutumise kiirus ehk tõus | ||
- | Regulaator ei pea alati sisaldama kõiki kolme parameetrit. Olenevalt süsteemist on lihtsam piirduda ühe parameetri või kahe kombinatsiooniga: | + | Regulaator ei pea alati sisaldama kõiki kolme parameetrit. Olenevalt süsteemist on lihtsam piirduda ühe parameetri või kahe parameetri |
- | ==PID regulaatori komponentide mõju süsteemile== | + | =====PID regulaatori komponentide mõju süsteemile===== |
- | * Proportsionaalne | + | |
- | ==PID regulaatori lisamine joonejärgimise programmi== | + | ==== Proportsionaalne komponent ==== |
+ | Otsene mõju juhtimisele ehk mida kaugemal on robot seatud olekust, seda suurem on mõju. Tegemist on üldjuhul esmase komponendiga, | ||
- | **Seadesuurus ja vea arvutamine**\\ | + | ====Integraalne komponent==== |
+ | Veale liidetakse enne PID arvutamise tsüklit juurde uus viga ehk kokkuvõttes võib integraalne komponent kasvada väga kiirelt väga suureks (olenevalt kui kaua võtab üks PID tsükkel aega). Integraalset komponenti kasutatakse staatilise vea vähendamiseks ehk kui robot ei suuda piisavalt kiirelt joonele tagasi jõuda, siis integraalne osa aitab seda kiirendada. Üldiselt integraalne osa on üsna väike suurus võrreldes teiste komponentidega, | ||
+ | |||
+ | ====Diferentseeriv komponent==== | ||
+ | Arvutab iga tsükli korral välja vea muutumise tõusu, et ennustada ette vea muutust. Diferentseeriv komponent on kasulik juhtudel kui robot jääb P ja I regulaatori korral veel joonel liikudes võnkuma. Joonest liiga kiirelt kaugenedes diferentseeriv komponent suurendab väljundit ja liiga kiirelt lähenedes vähendab väljundit, et joonest üle ei läheks. | ||
+ | |||
+ | =====PID regulaatori lisamine joonejärgimise programmi===== | ||
+ | |||
+ | ====Seadesuurus ja vea arvutamine==== | ||
Seadesuurus (// | Seadesuurus (// | ||
- | < | + | < |
- | 3pi roboti andurite summa on vahemikus 0 kuni 4000. Keskoht | + | 3pi roboti andurite summa on vahemikus 0 kuni 4000. Keskkoht |
- | **PID komponendid**\\ | + | ====PID komponendid==== |
Proportsionaalne komponent on juba leitud eelmises punktis ehk on võrdne otsese veaga. | Proportsionaalne komponent on juba leitud eelmises punktis ehk on võrdne otsese veaga. | ||
- | Integraalse komponendi puhul liidetakse iga PID regulaatori tsükli läbimisel veale juurde uus viga: < | + | Integraalse komponendi puhul liidetakse iga PID regulaatori tsükli läbimisel veale juurde uus viga: < |
- | Derivatiivne komponent eeldab eelmise PID regulaatori tsüklist otsese vea meelde jätmist. Selleks tuleb pärast derivatiivse komponendi arvutamist lisada | + | Derivatiivne komponent eeldab eelmise PID regulaatori tsüklist otsese vea meelde jätmist. Selleks tuleb pärast derivatiivse komponendi arvutamist lisada |
- | < | + | < |
- | eelmine_viga = viga; | + | derivatiivne = eelmine_viga |
+ | |||
+ | eelmine_viga = viga; // programmis lisada pärast output arvutamist | ||
</ | </ | ||
- | **Võimendustegurid**\\ | + | ====Võimendustegurid==== |
- | PID regulaatori komponentide mõju kiireks | + | PID regulaatori komponentide mõju kiiremaks |
<code c> | <code c> | ||
#define KP 1 | #define KP 1 | ||
#define KP_ 20 | #define KP_ 20 | ||
#define KI 1 | #define KI 1 | ||
- | #define KI_ 100 | + | #define KI_ 10000 |
#define KD 3 | #define KD 3 | ||
#define KD_ 2 | #define KD_ 2 | ||
</ | </ | ||
- | **PID regulaatori väljund**\\ | + | |
- | PID väljundiks on ka täisarv, sest mootorite juhtimisel ei kasutata ujukoma arve. PID regulaatori tulemus on kõigi komponentide summa: | + | ====PID regulaatori väljund==== |
- | < | + | PID väljundiks on täisarv, sest mootorite juhtimisel ei kasutata ujukoma arve. PID regulaatori tulemus on kõigi komponentide summa: |
+ | < | ||
Väljundit tuleb piirata, et see ei ületaks mootorite maksimaalset kiirust. | Väljundit tuleb piirata, et see ei ületaks mootorite maksimaalset kiirust. | ||
<code c> | <code c> | ||
if(output < -motor_max_speed) output = -motor_max_speed;</ | if(output < -motor_max_speed) output = -motor_max_speed;</ | ||
- | **Mootorite juhtimine**\\ | + | ====Mootorite juhtimine==== |
- | Mootorite juhtimine on erinev negatiivse ja positiivse PID regulaatori väljundi puhul. Kasutatakse negatiivse tagasisidega juhtimist, mis tähendab, et üks ratas liigub täiskiirusel ja vastavalt väljundi suurusele pidurdatakse teist. Arvestades 3pi andruite | + | Mootorite juhtimine on erinev negatiivse ja positiivse PID regulaatori väljundi puhul. Kasutatakse negatiivse tagasisidega juhtimist, mis tähendab, et üks ratas liigub täiskiirusel ja vastavalt väljundi suurusele pidurdatakse teist. Arvestades 3pi andrurite |
<code c> | <code c> | ||
if(output > 0) | if(output > 0) | ||
Line 59: | Line 70: | ||
</ | </ | ||
+ | ====Programmi kokkupanek ja seadistamine==== | ||
+ | Kõigi programmi osade kokkupanekul olemasoleva joonejärgimise algoritmiga tekib PID regulaatoriga robot, mis suudab saavutada joonel püsides suuremaid kiirusi. PID võimendustegurite seadistamisel tuleb varuda kannatust, sest ainult pideva katsetamisega saab parima tulemuse. Korraga on soovitav muuta ainult ühte parameetrit, |