Ahoj,
navrhuji PID regulátor teploty vody. Buď přidá teplou nebo chladnou a tak nastaví správnou hodnotu na výstupu s čidlem. Program pro řízení je takovýto:
kód:
Ek = zadana - skutecna; //výpočet chyby
sum = sum + Ek;
Pk = Kp * Ek; //např 8 * chyba
Ik = (Ki) * (sum); //vypocet integracni slozky
Dk = Kd * ((Ek) - (Ekp)); //vypocet derivacni slozky
Uk = (Pk + Ik + Dk); //vysledna regulace
Ekp = Ek; //ulozeni
Ek = 0;
pohon pro regulaci má konstatntní rychlost přetáčení. Zatím si to zkouším s potenciometrem místo senzoru. K konstanty se snažím nějak vhodně nastavit, ale steně výsledná hodnota (Uk) regulace má určité překmity. Když se totiž hodnota skutečná blíží reálné, při změně i o pouhý stupeň okamžitě na chvilku vyskočí složka derivační a změní smysl otáčení. Hned potom se zase hodnota vrátí k původní a otáčí správně. Jde mi o to, jestli je to normální chování, či něco nastavuji špatně. Do oscilace se to podle mě nedostane. Regulátor zasahuje po 1sec. Jde mi o to, jestli ty překmity mám řešit v konstanách PID, anebo dalším kódem. Je takové zvláštní, že by to chtělo otáčet jako že přidávat studenou a pak na vteřinu zase přidalo teplou a hned zase přidávalo studenou atd. do požadované teploty.
Je mi jasné, že v zapojení s vodou se konstanty změní, jde mi spíš o ty překmity.
V tom případě už je to jen P kontroler I složka je mi zde k ničemu, protože rychlost otáčení neovlivním. Derivační jsem tam chtěl mít z toho důvodu, protože při otáčení ventil přestřelí teplotu, je zde určité dopravní zpoždění.
Založen: Jan 17, 2007 Příspěvky: 6632 Bydliště: Milotice u Kyjova
Zaslal: pá říjen 11 2013, 12:43 Předmět:
Tak jsem si to pořádně přečetl ještě jednou. Rychlost otvírání a zavírání teplé/studené vody nemůžeš změnit. Zavírání a otvírání provádíš jednou za vteřinu. Je to tak? Pokud ano, nechápu, proč tam navrhuješ PID. Každopádně bych udělal třístavový regulátor, který bude dávat signál otáčení doleva, do prava, nebo off. Nic lepšího v takovém uspořádání stejně nezmůžeš.
Ani nechápu jak to, že ti mění derivační složka směr při změně žádané hodnoty. To není vlastnost regulátoru. Je to tím, že tam máš něco špatně a není to v kódu, který jsi zveřejnil.
Derivační složku tam chci použít pro to, že chci, aby to kousek před žádanou hodnotou už zastavovalo. protože jakmile to bude řídit absolutně, tak zase ta teplá voda ohřeje víc tu studenou a je to naprd teplota stoupne a zase to bude regulovat. tak že se to neustálí. jinak propočet je po jedné sekundě, řízení funguje v závislosti na odchylce. možná, kdyby byl krok třeba 2 sekundy a pak čekal, co se stane a přidal, a zase a zase, ale tím se ta regulace dost zpomalí.
zadana = 40 skutecna = 41 Ekp (předchozí teplota 42) = -1
derivační složka mění směr, když je Kp = 1 a rozdíl -1 st. tak Pk = -1 ale v případě Kd = 20 * ((-1)-(-1)) = 20 výsledné Uk = 19. jakmile teplota zůstane na těch 41 st. výsledek bude -1. Takže v mé případě se přepíná směr otáčení.
Založen: Jan 17, 2007 Příspěvky: 6632 Bydliště: Milotice u Kyjova
Zaslal: pá říjen 11 2013, 14:58 Předmět:
Derivační složka ti zrychluje odezvu a ne zpomaluje. To co chceš ti dělá integrační složka. Zmenši zesílení derivační složka na minimum. Nejlépe na nulu. Máš tam dopravní zpoždění jako blázen a derivační složku to samé -> cesta do pekel. Kd dej rovno nule a zkus funkci.
Nejlépe ale uděláš, když si nejdříve sestavíš model a pak navrhneš optimální regulátor - pak si s ním už laboruj.
Založen: Sep 19, 2007 Příspěvky: 3698 Bydliště: Praha
Zaslal: pá říjen 11 2013, 15:54 Předmět:
Ještě si uvědomte, že integrační i derivační složka je závislá na periodě, s jakou se to vzorkuje. Integrační konstanta se zvyšováním vzorkovacího kmitočtu zvyšuje a derivační snižuje. Pokud se akce opakuje 1x/s, tak je derivační složka značná, protože za 1 s se stane velká změna, kterou pak vynásobíte ještě Kd.
Jinak souhlas s Cust, derivační složka obvykle přináší do systému víc neklidu než užitku. Abyste derivační složku slušně uplatnil musíte vzorkovat řádově rychleji, než jsou časové konstanty. Nulovou odchylku vám zajistí astatismus - integrační složka, protože pořád sčítá (sebemenší) odchylku a použije ji na doregulování.
Pokud trváte na dané periodě vzorkování, tak nedělejte PID, ale skutečný číslicový regulační algoritmus. Viz například klasická publikace:
Vavřín, Zelina: Automatické řízení počítačem. SNTL, 1982
děkuji za odpovědi, přemýšlel jsem o tom, zkusím tedy použít proporcionální jen složku a prodloužit vzorkovací frekvenci. pohraji si s tím a pak napíšu, jak jsem dopadl.
Založen: Jan 17, 2007 Příspěvky: 6632 Bydliště: Milotice u Kyjova
Zaslal: út říjen 15 2013, 8:35 Předmět:
Nejsem si zcela jist co to je prodloužit frekvenci, ale obecně se dá říct, že čím vyšší vzorkovací frekvence vzorkování, tím líp. Taktéž dynamika regulátoru by měla být výš než dynamika řízeného systému. Nikdy ne vyšší než vzorkovací frekvence!!!
Pokud tam máš dopravní zpoždění, musíš s tím počítat!
zkoušel jsem regulátor a zjistil, že dopravní zpoždění je kolem 7 sekund. Regulátor se je rozkmitaný jak s D složkou tak bez. Tak mě napadlo. Vzorkovací frekvenci nechám na 1 sec. Bude tam asi regulační zásah 5 sec (otáčení ventilem), potom čekání 10 sec na ustálení, pak další. Když bude hodnota blízko požadované cca +- 3 stupně. Bude regulační zásah asi 1 sec a zase 10 sec čekání na ustálení. Nic lepšího mě k tomu nenapadá.
Hledal jsem nějakou literaturu ohledně číslicové regulace. Princip jsem pochopil, ale s realizací by to bylo težké, protože mi derivace a integrace moc nejdou. Navíc mám pocit, že to musí jít jednodušeji.
Vždycky jde počkat. Tady to bude zhruba 10 sec. I když bych rád, nic lepšího nevymyslím. Na to bych potřeboval znát polohu ventilu a možná i teplotu teplé a studené vody. S tím že, znám jen teplotu na výstupu, teplo buď přidám anebo uberu a to konstantní rychlostí, tak si nedovedu představit něco lepšího než čekat na to zpoždění. Kdyby tam bylo servo, dovedl bych si představit, že by se při velké odchylce pořádně otočilo a relativně rychle vracelo a tím teplotu dostavilo mnohem rychleji. Ale pořád si to představuji jako hurvínek válku, protože o regulacích nic moc nevím.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.