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)