This is an old revision of the document!


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 joone pealt välja sõita. Sujuvamaks liikumiseks on võimalik lisada juurde andureid, et joonel olekut paremini kontrollida, kuid see lisab juurde palju riistvara ja võib tekitada rohkem probleeme. Parem lahendus on lisada olemasolevale riistvarale tarkvarasse PID regulaator. Nii saab olemasolevate anduritega roboti väga sujuvalt joont järgima panna. PID regulaatori kasutamisel on põhi raskuspunktiks regulaatori komponentide mõju seadistamine. PID regulaatori puhul on 3 komponenti

  • proportsionaalne (P) - otsene viga seadesuurusest
  • integraalne (I) - aja jooksul summeeruv viga
  • 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: P, PI, PD, I, ID.

PID regulaatori komponentide mõju süsteemile
  • Proportsionaalne
PID regulaatori lisamine joonejärgimise programmi

Seadesuurus ja vea arvutamine
Seadesuurus (Setpoint) on joonejärgija roboti puhul positsioon, kus joone kulgemise telg ühtib roboti keskteljega. Selle suuruse järgi leiab vea ehk nihke soovitud positsioonist:

viga = hetke_positsioon - seadesuurus;

3pi roboti andurite summa on vahemikus 0 kuni 4000. Keskoht ehk soovitud seadesuurus on seega 2000. Andurite summa muutub siis antud valemi järgi vahemikus -2000 kuni 2000.

PID komponendid
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:

integraalne = integraalne + viga;

Derivatiivne komponent eeldab eelmise PID regulaatori tsüklist otsese vea meelde jätmist. Selleks tuleb pärast derivatiivse komponendi arvutamist lisada rida eelmise vea meelde jätmiseks. Derivatiivse komponendi arvutamine ise on järgmine:

derivatiivne = eelmine_derivatiivne - derivatiivne;
eelmine_viga = viga;

Võimendustegurid
PID regulaatori komponentide mõju kiireks ja lihtsamaks seadistamiseks on kõige parem kasutada võimendustegureid, mis suurendavad või vähendavad komponendi mõju. ATmega328p on võimeline arvutama ujukoma arve aga on selle tegemise juures palju aeglasem kui täisarvude puhul. Seega on efektiivsem arvutada täisarvude korrutamise ja jagmisega. Selle tõttu on iga komponendi kohta 2 võimendustegurit.

#define KP 1
#define KP_ 20
#define KI 1
#define KI_ 10000
#define KD 3
#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:

 output = viga*KP/KP_ + integraalne*KI/KI_ + derivatiivne*KD/KD_;

Väljundit tuleb piirata, et see ei ületaks mootorite maksimaalset kiirust.

if(output > motor_max_speed) output = motor_max_speed;
if(output < -motor_max_speed) output = -motor_max_speed;

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 tagastatavat summat 0-4000 (0 vasakul ja 4000 paremal), siis tuleb negatiivse väljundi puhul pidurdada vasakut ja positiivse korral paremat ratast. 3pi mootorite juhtimisel on võimalik kasutada väärtuseid -255 kuni 255.

if(output > 0)
{
      mootor_vasak = motor_max_speed;
      mootor_parem = motor_max_speed - output;
}
else
{
      mootor_vasak = motor_max_speed + output;
      mootor_parem = motor_max_speed;
}

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. Varuda kannatust PID võimendustegurite seadistamisel, sest ainult pideva katsetamisega saab parima tulemuse. Korraga on soovitav muuta ainult ühte parameetrit, et muutus oleks paremini jälgitav. Alustada võib nende väärtustega, mis on välja toodud ülevalpool ja kiirus panna umbes poole peale maksimumist. Kui väiksema kiiruse peal on hea tulemus kätte saadud, siis edasi võib järjest kiirust suurendada. Võimendustegurite seadistamise jaoks leidub guugeldades mitmeid näpunäiteid, kuid täpset juhendit selle jaoks ei ole, sest iga süsteem on eriline ja toimib teisiti. Samuti esineb hästi toimivate parameetrite kombinatsioone väga palju erinevaid.

et/projects/3pi/pid.1441787119.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0