PID regulátor

daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton »

Jo jo tady to je
http://uloz.to/xfcUDH9F/pokus-o-simulaci-pid-xls

ale upozorňuji že je to moje představa o modelu funkce PID, tedy možná bude třeba ji korigovat dle doporučení zkušenějších členů, za což jim předem děkuji :)
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: PID regulátor

Příspěvek od AlesH »

Simulace mi připadá OK. PID matematika takto funguje. Jen mi není jasné, odkud se vzaly hodnoty ve sloupci B ("skutečná").
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton »

No je to model tak že jsem zkoušel modelovat :D
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton »

Abych to uvedl na pravou míru sloupec B jsou předpokládané hodnoty například snímané rychlosti kola nebo jiného seezoru ktery přímo vypovídá o komponentě která se řídí.
Ještě dotaz na AleseH, píšete že
že v programu bude možnost měnit (nastavovat) ty "konstanty" přímo za chodu (při běhu algoritmu) pomocí nějakých nastavovacích tlačítek (na robotu) nebo třeba pomocí příkazů ze sériové linky
Jak by se tu přes tu seriovou linku dělalo? Zatím jsem přes to posílal pouze data do seriového LCD ale obráceně jsem o tom ještě nepřemýšlel.
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: PID regulátor

Příspěvek od AlesH »

OK, sloupci B už rozumím, ale musím připomenout, že ve skutečnosti musí ta hodnota dost přímo záviset na vypočítaných hodnotách ve sloupci "I" ("výsl Cel") [a samozřejmě i na dalších vlastnostech systému, např. na hmotnosti robota, síle motorů, ...].

Ohledně té sériové linky to myslím tak, že program v robotu alespoň občas čte znaky ze sériové linky (posílané z počítače "ručně" přes programovací kabel, nebo třeba přes bluetooth adaptér [pokud ho má robot k dispozici]). A podle těch přijatých znaků pak program mění hodnoty proměnných P, I a D. Např. tak, že třeba přijatý znak "q" zvedne hodnotu P o 10% a znak "a" sníží hodnotu P o 10%. Atd.
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton »

Zdravím
JO to je pravda předpokládal jsem závislost výsledku na vstupu ale právě na tom modelu je vidět jak v grafu vstupu a výstupu jdou hodnoty proti sobě tedy jak překmit ve skutečnosti odráží v elektronice obrácenou odchylku která ten překmit kompenzuje, což tam je dobře vidět protože kdyby tomu tak nebylo ty kmity by byly o dost vyšší a strmější a to je právě to důležité pro naladění systému tedy alespoň já si to tak vysvětluji. Přímá korelace se vstupem tak není při dobře naladěném systému možná nebo jen v absolutních hodnotách odchylek.
Napadlo mne že by to mohl být základ k simulaci. Kdyby se podařilo k arduinu připojit eeprom a během jízdy ukládat hodnoty ze vstupu PID regulátoru, pak by bylo možno simulovat odchylky a alespoň v modelu nasimulovat nejlepší konstatnty a vyladit systém jednak podle reálu i podle modelu.
Sice netuším s jakou frekvencí se u robota generují hodnoty pro PID regulátor, ale asi to bude hodně proto by potom bylo nutné neukládat každou hodnotu ale třeba jen každou 5 nebo i víc aby model při simulaci nebyl nepřijatelně velký.
Další problém by byl jestli by to šlo vůbec udělat, já jsem ještě s ukládáním dat do eeprom neexperimentoval sice už jsem to chtěl ale nenašel jsem zatím vhodný jednoduchý příklad odkud bych si vzal mustr na kod.
Ještě jsem přemýšlel o tom jestli je skutečně třeba na každý motor jeden regulátor jestli by nestačil pouze jeden a , který by byl pro zatáčení a druhý pro rychlost přičemž ten na zatáčení by měl dva výstupy jeden normální a druhý invertovaný a oba by se sčítaly s tím druhým výstupem z pid pro rychlost. Jen zatím nevím jak bych to invertoval.
Uživatelský avatar
gilhad
Příspěvky: 262
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: PID regulátor

Příspěvek od gilhad »

U robota se hodnoty pro PID generuji s frekvenci, ktera zavisi 1) na frekvenci snimace hodnot (rychlejsi to byt nemuze), 2) na tom, jak casto je z toho snimace ctes (coz zavisi na spouste veci - cteni samotne ma nejakou rezii, pak tam mas i jiny kod, ktery chces provadet (treba ten PID) a pak se muzes rozhodnout nevyuzit teto maximalni mozne rychlosti a cist je jen tak casto, jak potrebujes)

Cili je jakasi maximalni rychlost, co ti dovoli HW + knihovny + dalsi zatez CPU + tvoje schopnosti, je jakasi minimalni, kdy to jeste ma smysl (1x za hodinu je pro rizeni malo), s trochou stesti je maximalni vyssi nez minimalni a pak si v tom rozsahu volis dle sveho uvazeni.

Pokud ti jde o hodnoty pro simulaci, tak si je ukladej do RAM, posilej do velkeho pocitace (treba PC) nejlip prez drat (kvuli rychlosti), chvilku chod s robotkem a tan drat mu drz, at mu nezavazi a ziskas dat dle libosti (PC ma vetsi HDD nez Arduino EEPROM). Pak to nejak vyhodnotis a pro "skutecnou" fuknci robota uz pouzijes jen ty vysledky.

(Pripadne tam muzes dat dalsi "koprocesor", klidne zas Arduino, k nemu pridat nejakou "velkokapacitni" pamet ( treba http://www.gme.cz/pameti ci libovolnou jinou), nechat ho snimat/cist jen "zadani", "rizeni" a "vysledek" - nebo mu to posilat z hlavniho CPU) a pak nekdy v klidu tuhle RAM informacne vytezit. Nebo to tam cpat prubezne a a tim "koprocesorem" pocitat korekce a obcas poslat hlavni CPU update "konstatnt". "Koprocesor" aby ses nemusel v hlavnim cyklu zabyvat podruznostmi typu rizeni pameti a zpracovani sttistik - samozrejme, pokud mas program jednoduchy, malo obsazenych pinu a rad pises slozite programy, zvladne to i hlavni procesor sam)

Zkratka moznosti je spousta.


prace s EEPROM z meho programu:

Kód: Vybrat vše

#include <EEPROM.h>
int slot=0;

setup() {
CelkovaDoba=EEPROM.read(slot);
...
}
loop(){
.... // spoctu slot a CelkovouDobu)
if (CelkovaDoba != EEPROM.read(slot)) EEPROM.write(slot,CelkovaDoba); // nechci opotrebovavat EEPROM opakovanymi zapisy stejne hodnoty
}
Co se tyka scitani PID regulatoru (a invertovani,. cili odcitani) - porad jsi v programu, udelej to tam:

Kód: Vybrat vše

o1=PID(p1,i1,d1, z1,v1) ; //parametry pidu p,i,d a zadani, stup
o2=PID(p2,i2, d2, z2,v2) ; // druhy pid

leve=o1+o2;
prave=o1-o2;
jen nevidim vyhodu dvou pid (pro zataceni a pro jizdu) nad dvema pidy (pro leve a prave kolo) - ale mozna mas nejaky navrh, kde snadno ziskas rychlost a zataceni, zatimco otacky kol bys ziskal obtizneji - jde to delat mnoha zpusoby.

(je opet pripomenu - cely slavny PID je par radku programu, nikoli draha soucastka, jde jich nasekat spousta a jdou kombinovat a upravovat po libosti - je to jen kod)
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: PID regulátor

Příspěvek od daton »

No to je pravda možná se na to dívám špatně je pravda že je to jen kod, dík za náměty k přemýšlení ;)
Odpovědět