Termostat pre liahen
Moderátori: psichac, Moderátori
Termostat pre liahen
Tak prispejem niecim mensim.
Bol som osloveny s poziadavkou na opravu termostatu v domacej liahni. Jednalo sa o klasicku spolahlivu mechaniku - kombinacia mikrospinaca + duta membrana s nakym plynom + kontrolne neranie klasickym ortutovym teplomerom. Regulator ako taky fungoval, ale mal vacsiu hystereziu ako bolo dovolene (< 1°C). Obhliadkou bolo zistene, ze oprava povodneho riesenia je nerealna
Kedze bolo na to dost casu ( doviezol som to niekedy pred rokom ) priebezne som analyzoval rozne navrhy. Dolezite bolo aby sa dali vyuzit "suplikove zasoby", pripadne dostupny material. V dnesnej dobe vsak "dostupny material" je asi vsetko. Potom vystava otazka co volit z toho nepreberneho mnozstva. Preto vzislo niekolko navrhov, v ziadnom pripade si nemyslim ze prave najoptimalnejsich. Samotne zapojenie, konstrukcia ma tiez do dokonalosti daleko.
Navrh c.1
Najst "nieco"v malom puzdre s integrovanym meracom teploty a binarnym vystupom. To sa jednorazovo naprogramuje - hotovo. Podarilo sa mi nieco najst, ( nechcite po mne typ ) ale navrh zapadol pre komplikovane programovanie.
Navrh c.2
To same ako c.1, ale vyuzit k tomu integrovany snimac teploty v PIC - ku. Ako volba teploty by sluzil potenciometer s nakou stupnicou. Meranie teploty nemolo potrebne, elektronika by nahradzala povodny mechanicky termostat s porovnavanim nakej ciselnej hodnoty z tepelneho snimaca s polohou potenciometra. Mal som k dispozicii nake PIC 16F1xxx v DIL 16, ktore toto meranie malo integrovane. Skusanie dopadlo vcelku dobre, rozlisenie bolo zhruba 0.5 °C co pre dane ucely postacovalo. Problem bol vsak v zotrvacnosti. Tak prisiel pokus s PIC v puzdre DIL8. Zotrvacnost mensia, avsak stale velka. Povodne som uvazoval aj s SMD, ale k tomu uz nedoslo.
Navrh c.3
Tak nakoniec som otvoril suplik a nasiel z jedneho velmi stareho projektu nake snimace a jeden tento: http://www.analog.com/static/imported-f ... P03_04.pdf. Prve pokusy dopadli nad ocakavanie. Staci presne ociachovat oscilator a meria to na desatinu °C. Tak volba padla na klasiku MCU + LCD + .... Rozpocet som neriesil, bolo jasne ze oprava je absolutne nerentabilna a pustil som sa do toho skor ako studium moznosti PIC a ako nova vyzva - regulacia. Okolo regulacie teploty sa toho popisalo vela, projektikov som videl dost, ale nestretol som sa s dostatocnym dotiahnutim samotneho procesu regulacie, tak som si to chcel skusit.
Regulacia.
Uz ked prislo na riesenie c MCU a meranim teploty, regulacia sa dala zrealizovat akakolvek.
Dvojpolova ( zehlickova ) regulacia:
Velmi zauzivane pohodlne riesenie. Avsak ak tam je uz MCU pride mi to ako riesenie v casovej tiesni, inak len tak trosku lajdackost.
Spojita PID regulacia linearnych systemov.
Je pravda, ze pre dane ucely je tento sposob regulacie zbytocny, ale ako som spominal, islo skor o studijny projekt. O PID je popisane mnoho a ak uz mam v tych svaboch naky volny matematicky vykon, treba sa do nej pustit. Malo kedy sa vsak stretavam ( a zial aj v profesionalnej praxi ) o skutocne dotiahnutom odladenom systeme spojitej regulacie. Spojite riadenie vykonu tepelneho telesa som volil "PWM" spinanie s periodou (1/50Hz) * 255 samozrejme so spinanim v nule. Zapojenie je uplne bezne, nie je k tomu co dodat. Rozobral bych navrh samotneho PID regulatora.
Navrh PID.
Samotny navrh je slusna matematicka alchimia ( riesenie diferencialnych rovnic ), preto sa pokusim velmi zjednodusene popisat strucny navod ( nieco na studim: people.tuke.sk/ivo.petras/tar/spojite/TAR_SKR1a3.pdf )
Zaklad je dostatocna nalyza sustavy - poznanie co idem regulovat ( v nasom pripade "hrniec liahne" s vyhrievacou spiralou a meranim ). Pre tepelne deje postaci vysetrenie prechodovej charakteristiky ( ako sa zmeni teplota v case po zapnuti spiraly na X% z plneho vykonu ). Pri jej vysetrovani je potrebna funkcna cast PWM ovladania kurenia. Spustil som kurenie na 25%, nechal ustalit teplotu, zvysil na 75% a zaznamenaval teplotu az do ustalenia. O pociatocnych a konecnych hodnotach pri tomto vysetrovani sa literatury roznia. Je dolezite, aby sa tato ch-ka robila pri priblizne rovnakych podmienkach ako bude zariadenie pracovat. V mojom pripade sa tu vniesla urcita chyba, pretoze som to meral v chladnej dielni. Z tejto ch-ky sa priamo pomocou niektorej z metod ( Strejc, Broid,... ) najde "vzorec" reprezentujuci nasu sustavu, tkoru sa pokusime regulovat. Z predchadzajuceho studia som mal k dispozicii SW ( DP ), ktory umoznoval z nameranej prechodovej ch-ky vysetrit sustavu, urcit priamo koeficienty P,I,D, aj ich doladit pomocou vysledneho priebehu regulacie. Zial tento SW je nedotiahnuty, obsahuje chyby, takze parametre P, I, D som urcil len priblizne. Prisiel na rad vsemocny internet, nejake simulacne programy som nasiel, nic vsak co by riesilo moj projekt. Tu stoji za zmienku jediny kvalitny volne pristupny SW pre navrh PID avsak iba pre Raspberry-pi http://www.pidlab.com/cs/. Tak neostalo nic ine, len siahnut po nakej simulacii - dostal som tip na scilab. Takze nastudovat a modelovat. Vysledok z modelovania: a nasimulovany priebeh regulacie ( aky bude vyvoj teploty po zadani skokovej zmeny poziadavky - uz so zapojenym regulatorom! ) Zial ak je na projekt dostatok casu, clovek to stale odklada az do doby, nez je nan malo casu :--). Tos potom sa musi ponahlat a na tu najdolezitejsiu cast mi neostalo moc casu. Navrhnuta regulacia ( ku dnu prvej zmienky tu ) iba PI splnuje s prehladom poziadavky liahne ( po ca 60 minutach sa hodnota ustali na presnych nastavenych ( testoval som 35.0 ) dalej sa nemeni a nemeni sa podla simulacie ani integracna zlozka, avsak prechody potrebuju este dopracovat.
Bol som osloveny s poziadavkou na opravu termostatu v domacej liahni. Jednalo sa o klasicku spolahlivu mechaniku - kombinacia mikrospinaca + duta membrana s nakym plynom + kontrolne neranie klasickym ortutovym teplomerom. Regulator ako taky fungoval, ale mal vacsiu hystereziu ako bolo dovolene (< 1°C). Obhliadkou bolo zistene, ze oprava povodneho riesenia je nerealna
Kedze bolo na to dost casu ( doviezol som to niekedy pred rokom ) priebezne som analyzoval rozne navrhy. Dolezite bolo aby sa dali vyuzit "suplikove zasoby", pripadne dostupny material. V dnesnej dobe vsak "dostupny material" je asi vsetko. Potom vystava otazka co volit z toho nepreberneho mnozstva. Preto vzislo niekolko navrhov, v ziadnom pripade si nemyslim ze prave najoptimalnejsich. Samotne zapojenie, konstrukcia ma tiez do dokonalosti daleko.
Navrh c.1
Najst "nieco"v malom puzdre s integrovanym meracom teploty a binarnym vystupom. To sa jednorazovo naprogramuje - hotovo. Podarilo sa mi nieco najst, ( nechcite po mne typ ) ale navrh zapadol pre komplikovane programovanie.
Navrh c.2
To same ako c.1, ale vyuzit k tomu integrovany snimac teploty v PIC - ku. Ako volba teploty by sluzil potenciometer s nakou stupnicou. Meranie teploty nemolo potrebne, elektronika by nahradzala povodny mechanicky termostat s porovnavanim nakej ciselnej hodnoty z tepelneho snimaca s polohou potenciometra. Mal som k dispozicii nake PIC 16F1xxx v DIL 16, ktore toto meranie malo integrovane. Skusanie dopadlo vcelku dobre, rozlisenie bolo zhruba 0.5 °C co pre dane ucely postacovalo. Problem bol vsak v zotrvacnosti. Tak prisiel pokus s PIC v puzdre DIL8. Zotrvacnost mensia, avsak stale velka. Povodne som uvazoval aj s SMD, ale k tomu uz nedoslo.
Navrh c.3
Tak nakoniec som otvoril suplik a nasiel z jedneho velmi stareho projektu nake snimace a jeden tento: http://www.analog.com/static/imported-f ... P03_04.pdf. Prve pokusy dopadli nad ocakavanie. Staci presne ociachovat oscilator a meria to na desatinu °C. Tak volba padla na klasiku MCU + LCD + .... Rozpocet som neriesil, bolo jasne ze oprava je absolutne nerentabilna a pustil som sa do toho skor ako studium moznosti PIC a ako nova vyzva - regulacia. Okolo regulacie teploty sa toho popisalo vela, projektikov som videl dost, ale nestretol som sa s dostatocnym dotiahnutim samotneho procesu regulacie, tak som si to chcel skusit.
Regulacia.
Uz ked prislo na riesenie c MCU a meranim teploty, regulacia sa dala zrealizovat akakolvek.
Dvojpolova ( zehlickova ) regulacia:
Velmi zauzivane pohodlne riesenie. Avsak ak tam je uz MCU pride mi to ako riesenie v casovej tiesni, inak len tak trosku lajdackost.
Spojita PID regulacia linearnych systemov.
Je pravda, ze pre dane ucely je tento sposob regulacie zbytocny, ale ako som spominal, islo skor o studijny projekt. O PID je popisane mnoho a ak uz mam v tych svaboch naky volny matematicky vykon, treba sa do nej pustit. Malo kedy sa vsak stretavam ( a zial aj v profesionalnej praxi ) o skutocne dotiahnutom odladenom systeme spojitej regulacie. Spojite riadenie vykonu tepelneho telesa som volil "PWM" spinanie s periodou (1/50Hz) * 255 samozrejme so spinanim v nule. Zapojenie je uplne bezne, nie je k tomu co dodat. Rozobral bych navrh samotneho PID regulatora.
Navrh PID.
Samotny navrh je slusna matematicka alchimia ( riesenie diferencialnych rovnic ), preto sa pokusim velmi zjednodusene popisat strucny navod ( nieco na studim: people.tuke.sk/ivo.petras/tar/spojite/TAR_SKR1a3.pdf )
Zaklad je dostatocna nalyza sustavy - poznanie co idem regulovat ( v nasom pripade "hrniec liahne" s vyhrievacou spiralou a meranim ). Pre tepelne deje postaci vysetrenie prechodovej charakteristiky ( ako sa zmeni teplota v case po zapnuti spiraly na X% z plneho vykonu ). Pri jej vysetrovani je potrebna funkcna cast PWM ovladania kurenia. Spustil som kurenie na 25%, nechal ustalit teplotu, zvysil na 75% a zaznamenaval teplotu az do ustalenia. O pociatocnych a konecnych hodnotach pri tomto vysetrovani sa literatury roznia. Je dolezite, aby sa tato ch-ka robila pri priblizne rovnakych podmienkach ako bude zariadenie pracovat. V mojom pripade sa tu vniesla urcita chyba, pretoze som to meral v chladnej dielni. Z tejto ch-ky sa priamo pomocou niektorej z metod ( Strejc, Broid,... ) najde "vzorec" reprezentujuci nasu sustavu, tkoru sa pokusime regulovat. Z predchadzajuceho studia som mal k dispozicii SW ( DP ), ktory umoznoval z nameranej prechodovej ch-ky vysetrit sustavu, urcit priamo koeficienty P,I,D, aj ich doladit pomocou vysledneho priebehu regulacie. Zial tento SW je nedotiahnuty, obsahuje chyby, takze parametre P, I, D som urcil len priblizne. Prisiel na rad vsemocny internet, nejake simulacne programy som nasiel, nic vsak co by riesilo moj projekt. Tu stoji za zmienku jediny kvalitny volne pristupny SW pre navrh PID avsak iba pre Raspberry-pi http://www.pidlab.com/cs/. Tak neostalo nic ine, len siahnut po nakej simulacii - dostal som tip na scilab. Takze nastudovat a modelovat. Vysledok z modelovania: a nasimulovany priebeh regulacie ( aky bude vyvoj teploty po zadani skokovej zmeny poziadavky - uz so zapojenym regulatorom! ) Zial ak je na projekt dostatok casu, clovek to stale odklada az do doby, nez je nan malo casu :--). Tos potom sa musi ponahlat a na tu najdolezitejsiu cast mi neostalo moc casu. Navrhnuta regulacia ( ku dnu prvej zmienky tu ) iba PI splnuje s prehladom poziadavky liahne ( po ca 60 minutach sa hodnota ustali na presnych nastavenych ( testoval som 35.0 ) dalej sa nemeni a nemeni sa podla simulacie ani integracna zlozka, avsak prechody potrebuju este dopracovat.
0
Naposledy upravil/-a xmilos v 06 Mar 2014, 15:54, upravené celkom 2 krát.
Re: Termostat pre liahen
Schema ma jednu chybu, na vystup z U2 ( TMP03 ) je nutne zavesit do + este jeden odpor, PulUp nestaci.
Hodnoty su asi jasne.
Zaujemcom poskytnem zdrojak PCB, zial aj v nom je este chybicka. Privitam aktivnu ucast na upravach.
Hodnoty su asi jasne.
Zaujemcom poskytnem zdrojak PCB, zial aj v nom je este chybicka. Privitam aktivnu ucast na upravach.
0
Re: Termostat pre liahen
Pekná práca !
Ja len upozorním, do budúcna:
Nie je možné riešiť spojitý prenos (prenosová funkcia v "s" oblasti) v diskrétnych zariadeniach (uPC) takto napriamo. PID je spojitý regulátor (analógový) tj. je možné ho zostaviť napr. pomocou operačných zosilňovačov... Kdežto pre riadenie v uPC je potrebný tzv. PSD. Parametre PID (K,Ti,Td) sa dajú pomocou jednoduchých vzorcov prepočítať na par. PSD (q0,q1,q2 alebo ine označenia) ... Rozdiel je v tom že pri PSD sa počíta i s periódou vzorkovania celého systému, tá musí byť dostatočne nízka na to aby regulátor stíhal reagovať na zmeny, inak môžu nastať oscilácie. Tu to funguje - práve pre to, lebo tá liaheň je pomerne pomalá.
Inak čo sa týka identifikácie systému, tepelný systém sa zvyčajne aproximuje prenosovou f. 1. rádu, ak snímač a AČ nie sú lineárne, tak možno ešte 2. až 3. rádu (záleží od požiadaviek/presnosti atd.). Teda ak stačí 1 rád, tak najjednoduchšie je odmerať si prechodovú char. a pomocou Tu,Tn cez Ziegler -Nichols vypočítať PI parametre. Ak 2. rád tak nájsť inflexný bod -> Tu,Tn a potom ZN alebo iná.
Pri vyšších rádoch je už potrebná nejaká regresná metóda. V Matlabe to ide veľmi ľahko cez ARX / ARMAX, no myslím že free asi nie je (nepozeral som).
To len tak v skratke
Ja len upozorním, do budúcna:
Nie je možné riešiť spojitý prenos (prenosová funkcia v "s" oblasti) v diskrétnych zariadeniach (uPC) takto napriamo. PID je spojitý regulátor (analógový) tj. je možné ho zostaviť napr. pomocou operačných zosilňovačov... Kdežto pre riadenie v uPC je potrebný tzv. PSD. Parametre PID (K,Ti,Td) sa dajú pomocou jednoduchých vzorcov prepočítať na par. PSD (q0,q1,q2 alebo ine označenia) ... Rozdiel je v tom že pri PSD sa počíta i s periódou vzorkovania celého systému, tá musí byť dostatočne nízka na to aby regulátor stíhal reagovať na zmeny, inak môžu nastať oscilácie. Tu to funguje - práve pre to, lebo tá liaheň je pomerne pomalá.
Inak čo sa týka identifikácie systému, tepelný systém sa zvyčajne aproximuje prenosovou f. 1. rádu, ak snímač a AČ nie sú lineárne, tak možno ešte 2. až 3. rádu (záleží od požiadaviek/presnosti atd.). Teda ak stačí 1 rád, tak najjednoduchšie je odmerať si prechodovú char. a pomocou Tu,Tn cez Ziegler -Nichols vypočítať PI parametre. Ak 2. rád tak nájsť inflexný bod -> Tu,Tn a potom ZN alebo iná.
Pri vyšších rádoch je už potrebná nejaká regresná metóda. V Matlabe to ide veľmi ľahko cez ARX / ARMAX, no myslím že free asi nie je (nepozeral som).
To len tak v skratke
0
Teória bez praxe je nanič.
Re: Termostat pre liahen
Som rad, ze sa niekto fundovany ozval.
Ano operator (s) je pre spojite systemy. Ale tymto sposobom som opisal iba regulovanu sustavu ( ktora je analogova ) a riadim ju procesom, ktory som diskretizoval, bez pouzitia (z) . A to skor koli rychlosti, pretoze nemam scilab nastudovany a shcel som proces napodobnit kodu, ktory tam mam. Schemu v simulacii uz mam doplnenu o D zlozku, riesim este pociatocny stav I zlozky, resp optimalizujem Wind Up.
Myslis, ze bys mohol tuto situaciu na "matlabit" :--) ?
Mne z prechodovej ch-ky vysla sustava 2. radu. Na zaciatku je tam mierne oneskorenie ( pocitam zotrvacnost telesa ). Inak podla p. Cecha z uvedeneho web - u sa ma robit prechodovka na "drobnejsie" (0-20%, 20 - 40% ...)
Mno a zaujimavost, v skole nas ucili ze zosilnenie je (Yoo - Yo)/(Xoo - Xo) a asi to ma byt Yoo/Xoo.
Kedze som ziskal este tyzden, budem este optimalizovat.
Mal som jeden zaujimavy problem a chcel bych poziadat o radu:
pri zaruseni vystupu z U2 ( prstom ) okrem spatneho merania mi procesor nak havaroval. Nemam spusteny watch dog, kod nie je ani zdaleka optimalizovany. "PWM" z U2 je rozpoznavane Gate funkciou Timer1.
Ano operator (s) je pre spojite systemy. Ale tymto sposobom som opisal iba regulovanu sustavu ( ktora je analogova ) a riadim ju procesom, ktory som diskretizoval, bez pouzitia (z) . A to skor koli rychlosti, pretoze nemam scilab nastudovany a shcel som proces napodobnit kodu, ktory tam mam. Schemu v simulacii uz mam doplnenu o D zlozku, riesim este pociatocny stav I zlozky, resp optimalizujem Wind Up.
Myslis, ze bys mohol tuto situaciu na "matlabit" :--) ?
Mne z prechodovej ch-ky vysla sustava 2. radu. Na zaciatku je tam mierne oneskorenie ( pocitam zotrvacnost telesa ). Inak podla p. Cecha z uvedeneho web - u sa ma robit prechodovka na "drobnejsie" (0-20%, 20 - 40% ...)
Mno a zaujimavost, v skole nas ucili ze zosilnenie je (Yoo - Yo)/(Xoo - Xo) a asi to ma byt Yoo/Xoo.
Kedze som ziskal este tyzden, budem este optimalizovat.
Mal som jeden zaujimavy problem a chcel bych poziadat o radu:
pri zaruseni vystupu z U2 ( prstom ) okrem spatneho merania mi procesor nak havaroval. Nemam spusteny watch dog, kod nie je ani zdaleka optimalizovany. "PWM" z U2 je rozpoznavane Gate funkciou Timer1.
0
Re: Termostat pre liahen
Nemusíš nutne riešiť celu sústavu v "z" pokiaľ nechceš použiť algoritmy na priamy výpočet koef. PSD (Dead-Beat s/bez obmedzenia, PolePlacement, Modálne riadenie).
V niektorých prípadoch (ako aj tento) sa koef. môžu prepočítať. Tak dostaneš fyzikálne rovnocenný (ekvivalentný) diskrétny reg. k analogovému.
Počiatočné podmienky sa vzťahujú na počiatočný stav sústavy, tj. v čase 0. Preto ak sústava začína (zapne sa napájanie) napr. z izbovej teploty 20°C, udáva sa táto. Ale to sa udáva pre integračnú zložku - PP integrátora, v PSD je sumačná. (Ale prásknuť do kódu 20 nemusí fungovať, môžeš pracovať s inými "inžinierskymi jednotkami").
Anti-WindUp je len blbé orezanie - obmedzenie sumačnej/integračnej zložky regulátora aby regulátor sa "nezahltil" po rýchlom spáde teploty a teda nasčítavania regul. odchýlky, to spôsobuje to, že regulátor dáva na výstup maximum čo vie aby rýchlo vykompenzoval chybu, avšak i po zmenšení reg. odchýlky práska na výstup vysoké hodnoty lebo integračná zložka je stále veľká a klesá pomalšie. Z toho plynie záver že stačí tu sumačnú zložku jednoducho NULOVAŤ, a to vtedy ak vypočítané hodnoty akč. zásahu sú väčšie/menšie ako maximálne/min možné. Tj ak je vypočítaná hodnota 120 a výstup je v rozsahu 0 - 100 tak vynulujeme sum. zložku, to iste ak vyšlo -10.
Nasimulovať sa v Matlabe dá všetko ohľadom tohto.
Čo sa týka tej prechodovej charakteristiky, nie je tam zrejmá ustálená hodnota (trebalo počkať), viem, na tepelných systémoch to trvá i hodiny a medzitým sa zmenia vonkajšie podmienky.
A áno, so vším všudy (snímač + akčný člen + sústava) to vypadá na druhý rád.
To čo vás učili v škole je dobre, akurát je to pre odchýlkový model, tj. model pre konkrétny pracovný bod. Zosilnenie sa určuje ako pomer y(nekonečno) ku u(nekonečno).
Čo sa týka toho, koľko dať na vstup ako jednotkový skok. Matematicky je to jedno, tam sa to vynásobí, obmedzenie je jednak v HW, na 100% vstupu to asi dlhodobo nezvládne. Alebo narazíme na nelinearity - ustálená hodnota/model by bola príliš vzdialená od toho nášho pracovného bodu - pracovnej teplote.
Ak by si vypočítal hoc i 4 prenosovky pre 4 jednotkové skoky pri u(0.2) ,u(0.4),u(0.6) vyšli by ti mierne odlišné koefic. nie len kvôli šumu/rušeniu a zmenených vonkajších podm. ale i kvôli nelinearite samotného systému. Silne nelineárny systém je problém regulovať v celom rozsahu len s jednými koefic. PSD/PID. Preto sa linearizuje v pracovných bodoch , pre každý z nich iné koef. a rieši sa to napr i prepínaním koef. regulátora za behu. Ale to nie je tvoj problém, to len na okraj píšem.
Tu je napríklad mnou nameraný priebeh teploty mikropájky pre jednotkový vstup - 10,88V cca. Nie je to nijako kalibrované, len som to meral pre študijné účely, v čase keď som ešte mal čas si rozpracovávať projekt adaptívneho PSD regulátora teploty s fuzzy.
X osa je čas v sekundách, Y teplota v °C
EDIT: 1
V niektorých prípadoch (ako aj tento) sa koef. môžu prepočítať. Tak dostaneš fyzikálne rovnocenný (ekvivalentný) diskrétny reg. k analogovému.
Počiatočné podmienky sa vzťahujú na počiatočný stav sústavy, tj. v čase 0. Preto ak sústava začína (zapne sa napájanie) napr. z izbovej teploty 20°C, udáva sa táto. Ale to sa udáva pre integračnú zložku - PP integrátora, v PSD je sumačná. (Ale prásknuť do kódu 20 nemusí fungovať, môžeš pracovať s inými "inžinierskymi jednotkami").
Anti-WindUp je len blbé orezanie - obmedzenie sumačnej/integračnej zložky regulátora aby regulátor sa "nezahltil" po rýchlom spáde teploty a teda nasčítavania regul. odchýlky, to spôsobuje to, že regulátor dáva na výstup maximum čo vie aby rýchlo vykompenzoval chybu, avšak i po zmenšení reg. odchýlky práska na výstup vysoké hodnoty lebo integračná zložka je stále veľká a klesá pomalšie. Z toho plynie záver že stačí tu sumačnú zložku jednoducho NULOVAŤ, a to vtedy ak vypočítané hodnoty akč. zásahu sú väčšie/menšie ako maximálne/min možné. Tj ak je vypočítaná hodnota 120 a výstup je v rozsahu 0 - 100 tak vynulujeme sum. zložku, to iste ak vyšlo -10.
Nasimulovať sa v Matlabe dá všetko ohľadom tohto.
Čo sa týka tej prechodovej charakteristiky, nie je tam zrejmá ustálená hodnota (trebalo počkať), viem, na tepelných systémoch to trvá i hodiny a medzitým sa zmenia vonkajšie podmienky.
A áno, so vším všudy (snímač + akčný člen + sústava) to vypadá na druhý rád.
To čo vás učili v škole je dobre, akurát je to pre odchýlkový model, tj. model pre konkrétny pracovný bod. Zosilnenie sa určuje ako pomer y(nekonečno) ku u(nekonečno).
Čo sa týka toho, koľko dať na vstup ako jednotkový skok. Matematicky je to jedno, tam sa to vynásobí, obmedzenie je jednak v HW, na 100% vstupu to asi dlhodobo nezvládne. Alebo narazíme na nelinearity - ustálená hodnota/model by bola príliš vzdialená od toho nášho pracovného bodu - pracovnej teplote.
Ak by si vypočítal hoc i 4 prenosovky pre 4 jednotkové skoky pri u(0.2) ,u(0.4),u(0.6) vyšli by ti mierne odlišné koefic. nie len kvôli šumu/rušeniu a zmenených vonkajších podm. ale i kvôli nelinearite samotného systému. Silne nelineárny systém je problém regulovať v celom rozsahu len s jednými koefic. PSD/PID. Preto sa linearizuje v pracovných bodoch , pre každý z nich iné koef. a rieši sa to napr i prepínaním koef. regulátora za behu. Ale to nie je tvoj problém, to len na okraj píšem.
Tu je napríklad mnou nameraný priebeh teploty mikropájky pre jednotkový vstup - 10,88V cca. Nie je to nijako kalibrované, len som to meral pre študijné účely, v čase keď som ešte mal čas si rozpracovávať projekt adaptívneho PSD regulátora teploty s fuzzy.
X osa je čas v sekundách, Y teplota v °C
EDIT: 1
0
Naposledy upravil/-a Softy v 07 Mar 2014, 16:21, upravené celkom 1 krát.
Teória bez praxe je nanič.
Re: Termostat pre liahen
Softy
diky za prispevok.
Ano, co sa tyka krivky mohol som este pockat ( meranie trvalo 72 minut ), ten narast bol uz minimalny. Nemam presny obraz a problem je v okolitej teplote. Krivku som meral v dielni, kde je chladno, skusku som robil v byte a je to poznat.
S tym Wind - upom je pekny dokument: http://www.isep.pw.edu.pl/ZakladNapedu/ ... windup.pdf.
Tento dokument naznacuje, viacero rieseni. Zaujimave je ze nestaci iba obmedzit integracnu znozku, ale jej hodnota je "obrazom" e{t} a u(t). Simuloval som pre rozne pociatocne hodnoty integracnej zlozky ( podla schemy ) a kontroloval vyvoj samotnej I zlozky a samo vystupu. Ukazalo sa, ze pre rozne pozadovane teploty, resp rozne ocakavane konecne hodnoty I v ustalenom stave je potrebne menit jej pociatocnu hodnotu. Realizacia je jendoducha, bud staticky nahodit konstanty pre kazdu pozadovanu hodnotu zo simulacie, ziskat ich z prevadzky ( ukladat do eeprom po ustaleni ), alebo najst zavislost.
Simuloval som odozvu pre model so ciastocne zmenenou jednou konstantou a hladal naku zavislost ako inspiraciu pre adaptivnu regulaciu. Ono totiz pocas liahnutia sa pravdepodobne dost vyrazne menia podmienky.
Ale mal bych dalsiu otazku. Pri kontrole simulacie som narazil na potrebu digitalizacie ( zaokruhlenie na cele cislo ) integracnej zlozky mno a system prestava byt stabilny ( v ustalenej casti dochadza ku skokom + - 1 digit integracnej aj regulovanej hodnoty). Predpokladam, ze bude treba zvysit rozlisenie PWM akcneho clena.
Tvoj nazor?
diky za prispevok.
Ano, co sa tyka krivky mohol som este pockat ( meranie trvalo 72 minut ), ten narast bol uz minimalny. Nemam presny obraz a problem je v okolitej teplote. Krivku som meral v dielni, kde je chladno, skusku som robil v byte a je to poznat.
S tym Wind - upom je pekny dokument: http://www.isep.pw.edu.pl/ZakladNapedu/ ... windup.pdf.
Tento dokument naznacuje, viacero rieseni. Zaujimave je ze nestaci iba obmedzit integracnu znozku, ale jej hodnota je "obrazom" e{t} a u(t). Simuloval som pre rozne pociatocne hodnoty integracnej zlozky ( podla schemy ) a kontroloval vyvoj samotnej I zlozky a samo vystupu. Ukazalo sa, ze pre rozne pozadovane teploty, resp rozne ocakavane konecne hodnoty I v ustalenom stave je potrebne menit jej pociatocnu hodnotu. Realizacia je jendoducha, bud staticky nahodit konstanty pre kazdu pozadovanu hodnotu zo simulacie, ziskat ich z prevadzky ( ukladat do eeprom po ustaleni ), alebo najst zavislost.
Simuloval som odozvu pre model so ciastocne zmenenou jednou konstantou a hladal naku zavislost ako inspiraciu pre adaptivnu regulaciu. Ono totiz pocas liahnutia sa pravdepodobne dost vyrazne menia podmienky.
Ale mal bych dalsiu otazku. Pri kontrole simulacie som narazil na potrebu digitalizacie ( zaokruhlenie na cele cislo ) integracnej zlozky mno a system prestava byt stabilny ( v ustalenej casti dochadza ku skokom + - 1 digit integracnej aj regulovanej hodnoty). Predpokladam, ze bude treba zvysit rozlisenie PWM akcneho clena.
Tvoj nazor?
0
Re: Termostat pre liahen
K Anti-WinUp, to čo som napísal vyššie je reálne riešenie, ktoré sa používa. A ako som tiež napísal, zložka sa neobmedzuje (chápeme ako saturácia - v dokumente čo si zavesil, to sú riešenia dá sa povedať do 8 ) ale úplne sa nuluje. Riešenie 10 je +- riešenie čo som opisoval vyššie.
Počiatočné podmienky sme my nikdy nejako moc neriešili. To čo som napísal vyššie platí, ale nech nastavíš PP akékoľvek, systém sa sám po pár iteráciách dostane tam kde treba, v žiadnom prípade by to nemalo mať vplyv na ustálený stav - pracovný bod. Tj. ak nastavíš divoké PP tak pár iterácií od štartu budú hodnoty regulátora lietať ale ustália sa nakoniec. PP sa nastavujú len v integrátore a aj to len v spojitom! Ak budeš stále bežať v simulácií na spojitom, tak nesimuluješ ten HW čo máš...
Takto vypadá PSD v simulátore, ale nie je tam anti-windUp.(Akčný zásah sa vypočítava: u(k) = u(k-1) + delta u(k);)
Rozlíšenie AČ s tým súvis nebude mať. Dostatočné rozlíšenie potrebuješ vo výpočte akčného zásahu. Riešenie je buď počítať všetko ako 1000 násobok skutočnej hodnoty (dostaneš presnosť na 3 desatinné) v 16bit integer a výsledok potom už aplikovať na rozlíšenie AČ, alebo to počítať vo floatoch.
Počiatočné podmienky sme my nikdy nejako moc neriešili. To čo som napísal vyššie platí, ale nech nastavíš PP akékoľvek, systém sa sám po pár iteráciách dostane tam kde treba, v žiadnom prípade by to nemalo mať vplyv na ustálený stav - pracovný bod. Tj. ak nastavíš divoké PP tak pár iterácií od štartu budú hodnoty regulátora lietať ale ustália sa nakoniec. PP sa nastavujú len v integrátore a aj to len v spojitom! Ak budeš stále bežať v simulácií na spojitom, tak nesimuluješ ten HW čo máš...
Takto vypadá PSD v simulátore, ale nie je tam anti-windUp.(Akčný zásah sa vypočítava: u(k) = u(k-1) + delta u(k);)
Rozlíšenie AČ s tým súvis nebude mať. Dostatočné rozlíšenie potrebuješ vo výpočte akčného zásahu. Riešenie je buď počítať všetko ako 1000 násobok skutočnej hodnoty (dostaneš presnosť na 3 desatinné) v 16bit integer a výsledok potom už aplikovať na rozlíšenie AČ, alebo to počítať vo floatoch.
0
Teória bez praxe je nanič.
- burizon
- Pokročilý člen
- Príspevky: 571
- Dátum registrácie: 07 Nov 2007, 00:00
- Bydlisko: Vranov nad Topľou
Re: Termostat pre liahen
Chlapi,
vôbec som netušil, že kvôli termostatu pre liaheň sa bude viesť akademická diskusia. Myslel som, že na vyliahnutie kurčiat stačí hocijaký termostat, ktorý sa nastaví na potrebnú teplotu a je to vyriešené, ale po "letmom" prebehnutí tejto témy som v rozpakoch. Už v druhej vete som nevedel o čom je reč, takže ak chcem nejaký termostat, musím veľa študovať.
vôbec som netušil, že kvôli termostatu pre liaheň sa bude viesť akademická diskusia. Myslel som, že na vyliahnutie kurčiat stačí hocijaký termostat, ktorý sa nastaví na potrebnú teplotu a je to vyriešené, ale po "letmom" prebehnutí tejto témy som v rozpakoch. Už v druhej vete som nevedel o čom je reč, takže ak chcem nejaký termostat, musím veľa študovať.
0
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
Re: Termostat pre liahen
+ za vlastný návrh, tiež som čakal len regulátor s hysteréziou a niekto si dal záležať, čo sa cení
0
Re: Termostat pre liahen
Chúďa KVOČKA, ani len netuší ,aké je ona vlastne zložité zariadenie.
0
Lenivosť je matka pokroku.Lenivý človek rozmýšla,ako by si robotu uľahčil a tak niečo vynájde.
Ku každému čínskemu výrobku by mali pribaliť jedného číňana, aby som ho mohol nakopať do ....,ked sa to pokazí.
Ku každému čínskemu výrobku by mali pribaliť jedného číňana, aby som ho mohol nakopať do ....,ked sa to pokazí.
Re: Termostat pre liahen
Ano, je to risenie zbytocne komplikovane, pre povodne urcenie staci dvojpolohova regulacia.
Ale ako som spomenul, zobral som to tiez ako "studijny projekt" a ked som tam vopchal MCU, nech teda maka.
Urcite tiez ako priprava na dalsie projekty.
Mal som moznost mat v oprave jeden termostat a fakt som cumel. Nastavis 190°C tak je tam 190.
Ale ako som spomenul, zobral som to tiez ako "studijny projekt" a ked som tam vopchal MCU, nech teda maka.
Urcite tiez ako priprava na dalsie projekty.
Mal som moznost mat v oprave jeden termostat a fakt som cumel. Nastavis 190°C tak je tam 190.
0
Re: Termostat pre liahen
to som nepochopil , čo na ňom malo byť okrem nadstavenej teploty ?
Hádam je to normálne, že ak na termostate nadstavíš požadovanú teplotu, tak tam aj bude.
Hádam je to normálne, že ak na termostate nadstavíš požadovanú teplotu, tak tam aj bude.
0
osvitka: http://tinyurl.com/7e58nul
pec: http://tinyurl.com/zr3gw8t
maska: http://tinyurl.com/hodwv79
leptanie: http://tinyurl.com/gpsgq6g
prekovy: http://tinyurl.com/zr48jn2
pec: http://tinyurl.com/zr3gw8t
maska: http://tinyurl.com/hodwv79
leptanie: http://tinyurl.com/gpsgq6g
prekovy: http://tinyurl.com/zr48jn2
Re: Termostat pre liahen
Ide o to, ze pre svoju pracu nepotrebuje kolisat okolo nastavenej teploty.
Ale potreboval bych analyzu od asembleristov tejto funckie:
Preco tento kod pri zobrazeni vacsieho cisla ako 999 resetuje procesor ?
Je jasne, ze i presiahne rozmer pola a tym padom cita mimo rozsah, ale preco reset?
Ale potreboval bych analyzu od asembleristov tejto funckie:
Kód: Vybrať všetko
void displ_d(unsigned int val)
{
unsigned char i=0;
while(val >= 100){val -= 100; ++i;}
displ[2] = segm[i];
i = 0;
while(val >= 10) {val -= 10; ++i;}
displ[1] = segm[i];
displ[0] = segm[val];
}
Je jasne, ze i presiahne rozmer pola a tym padom cita mimo rozsah, ale preco reset?
0
- muziker
- Ultimate člen
- Príspevky: 6267
- Dátum registrácie: 10 Mar 2009, 00:00
- Bydlisko: BA, KE, RV, Praha, Toronto,
- Vek: 75
Re: Termostat pre liahen
No bežné termostaty mali v minulosti chybu +/- 0,1°C cez +/- 1°C až +/- 2 a viac°C. Hysterézia bola tiež rôzna. Myslím si však, že na liaheň bohato stačí hocaký termostat , lebo kvočka sediaca na vajciach má "chybu termostatu" aj "hysteréziu" podstatne vyššiu. Ale zaujímavé a sympatické na celom je to, že z primitívneho zariadenia akým je termostat v liahni kurčiat sa pri troche snahy môže stať niečo sofistikovanejšie, naviac riadené uPC a súce priam pre kozmický výskum.
0
muziker
Re: Termostat pre liahen
xmilos nie je to zrovna kod v asm, ale povedal by som ze ide o specificke spravanie uC pri danom type "nepovolenej" operacie. co je to za procak? mne kedysi davno dajaky motorolacny bazmek zalozeny na x51 robil to istexmilos napísal:Ide o to, ze pre svoju pracu nepotrebuje kolisat okolo nastavenej teploty.
Ale potreboval bych analyzu od asembleristov tejto funckie:
Preco tento kod pri zobrazeni vacsieho cisla ako 999 resetuje procesor ?Kód: Vybrať všetko
void displ_d(unsigned int val) { unsigned char i=0; while(val >= 100){val -= 100; ++i;} displ[2] = segm[i]; i = 0; while(val >= 10) {val -= 10; ++i;} displ[1] = segm[i]; displ[0] = segm[val]; }
Je jasne, ze i presiahne rozmer pola a tym padom cita mimo rozsah, ale preco reset?
edit: tak pozeram ze PIC . mno o tych vela neviem, tak snad sa vyjadri niekto fundovany ...
0
Drink coffee. Do stupid things faster with more energy...
Re: Termostat pre liahen
no nie je :--)
to mi nak doslo :--)
Som chcel od MPLAB - istov mrknut do listingu. Ale oki, davam sem. Je to pre 16F1826
ale tato verzia je uz s testom
to mi nak doslo :--)
Som chcel od MPLAB - istov mrknut do listingu. Ale oki, davam sem. Je to pre 16F1826
ale tato verzia je uz s testom
Kód: Vybrať všetko
1917 ;; *************** function _displ_d *****************
1918 ;; Defined at:
1919 ;; line 325 in file "main.c"
1920 ;; Parameters: Size Location Type
1921 ;; val 2 3[COMMON] unsigned int
1922 ;; Auto vars: Size Location Type
1923 ;; i 1 6[COMMON] unsigned char
1924 ;; Return value: Size Location Type
1925 ;; None void
1926 ;; Registers used:
1927 ;; wreg, status,2, status,0
1928 ;; Tracked objects:
1929 ;; On entry : 0/0
1930 ;; On exit : 0/0
1931 ;; Unchanged: 0/0
1932 ;; Data sizes: COMMON BANK0 BANK1 BANK2
1933 ;; Params: 2 0 0 0
1934 ;; Locals: 1 0 0 0
1935 ;; Temps: 1 0 0 0
1936 ;; Totals: 4 0 0 0
1937 ;;Total ram usage: 4 bytes
1938 ;; Hardware stack levels used: 2
1939 ;; Hardware stack levels required when called: 1
1940 ;; This function calls:
1941 ;; Nothing
1942 ;; This function is called by:
1943 ;; _main
1944 ;; This function uses a non-reentrant model
1945 ;;
1946
1947
1948 ;psect for function _displ_d
1949 0385 _displ_d:
1950
1951 ;main.c: 326: unsigned char i=0;
1952
1953 ;incstack = 0
1954 ; Regs used in _displ_d: [wreg+status,2+status,0]
1955 0385 01F6 clrf displ_d@i
1956
1957 ;main.c: 327: if(val > 999) val = 999;
1958 0386 3003 movlw 3
1959 0387 0274 subwf displ_d@val+1,w
1960 0388 30E8 movlw 232
1961 0389 1903 skipnz
1962 038A 0273 subwf displ_d@val,w
1963 038B 1C03 skipc
1964 038C 2B91 goto l1408
1965 038D 30E7 movlw 231
1966 038E 00F3 movwf displ_d@val
1967 038F 3003 movlw 3
1968 0390 00F4 movwf displ_d@val+1
1969 0391 l1408:
1970 ;main.c: 328: while(val >= 100){val -= 100; ++i;}
1971
1972 0391 3000 movlw 0
1973 0392 0274 subwf displ_d@val+1,w
1974 0393 3064 movlw 100
1975 0394 1903 skipnz
1976 0395 0273 subwf displ_d@val,w
1977 0396 1C03 btfss 3,0
1978 0397 2BA1 goto l1410
1979 0398 3064 movlw 100
1980 0399 02F3 subwf displ_d@val,f
1981 039A 3000 movlw 0
1982 039B 3BF4 subwfb displ_d@val+1,f
1983 039C 3001 movlw 1
1984 039D 00F5 movwf ??_displ_d
1985 039E 0875 movf ??_displ_d,w
1986 039F 07F6 addwf displ_d@i,f
1987 03A0 2B91 goto l1408
1988 03A1 l1410:
1989
1990 ;main.c: 329: displ[2] = segm[i];
1991 03A1 0876 movf displ_d@i,w
1992 03A2 3E35 addlw low (_segm| (0+32768))
1993 03A3 3184 movlp high __stringtab
1994 03A4 000A callw
1995 03A5 3183 pagesel $ ;select current page
1996 03A6 00F5 movwf ??_displ_d
1997 03A7 0875 movf ??_displ_d,w
1998 03A8 0020 movlb 0 ; select bank0
1999 03A9 00CD movwf _displ+2
2000
2001 ;main.c: 330: i = 0;
2002 03AA 01F6 clrf displ_d@i
2003 03AB l1418:
2004 ;main.c: 331: while(val >= 10) {val -= 10; ++i;}
2005
2006 03AB 3000 movlw 0
2007 03AC 0274 subwf displ_d@val+1,w
2008 03AD 300A movlw 10
2009 03AE 1903 skipnz
2010 03AF 0273 subwf displ_d@val,w
2011 03B0 1C03 btfss 3,0
2012 03B1 2BBB goto l1420
2013 03B2 300A movlw 10
2014 03B3 02F3 subwf displ_d@val,f
2015 03B4 3000 movlw 0
2016 03B5 3BF4 subwfb displ_d@val+1,f
2017 03B6 3001 movlw 1
2018 03B7 00F5 movwf ??_displ_d
2019 03B8 0875 movf ??_displ_d,w
2020 03B9 07F6 addwf displ_d@i,f
2021 03BA 2BAB goto l1418
2022 03BB l1420:
2023
2024 ;main.c: 332: displ[1] = segm[i];
2025 03BB 0876 movf displ_d@i,w
2026 03BC 3E35 addlw low (_segm| (0+32768))
2027 03BD 3184 movlp high __stringtab
2028 03BE 000A callw
2029 03BF 3183 pagesel $ ;select current page
2030 03C0 00F5 movwf ??_displ_d
2031 03C1 0875 movf ??_displ_d,w
2032 03C2 0020 movlb 0 ; select bank0
2033 03C3 00CC movwf _displ+1
2034
2035 ;main.c: 333: displ[0] = segm[val];
2036 03C4 0873 movf displ_d@val,w
2037 03C5 3E35 addlw low (_segm| (0+32768))
2038 03C6 3184 movlp high __stringtab
2039 03C7 000A callw
2040 03C8 3183 pagesel $ ;select current page
2041 03C9 00F5 movwf ??_displ_d
2042 03CA 0875 movf ??_displ_d,w
2043 03CB 00CB movwf _displ
2044 03CC 0008 return
2045 03CD __end_of_displ_d:
2046
2047 psect intentry
2048 0004 __pintentry:
0
Re: Termostat pre liahen
no asi ťa sklamem, silno pochybujem že by sa ti niekto v tom chcel hrbať , najme ak ide o funkčnú rutinu ... tvoj problém mi ale nepripadá ako matematický problém, lebo aj pri pretečení užívateľských registrov ti nehrozí RESET. Skôr to vidím na chybu programu a koli tomu sa obráť na C čkarov. Reset ti môže nastať z viacerých stavov, ale všetky by malo riešiť samotné C vo svojej podstate, teda pokiaľ si tam nespravil nejakú chybu.
Ešte nikdy sa mi nestalo, že by sa MCU resetol kôli pretečeniu registrov pri mat. výpočtoch. Samozrejme ak si v programe zle ukončil cyklus a pretiekol ti stack, tak to je o inom , ale to ti skontroluje C čkar.
Ešte nikdy sa mi nestalo, že by sa MCU resetol kôli pretečeniu registrov pri mat. výpočtoch. Samozrejme ak si v programe zle ukončil cyklus a pretiekol ti stack, tak to je o inom , ale to ti skontroluje C čkar.
0
osvitka: http://tinyurl.com/7e58nul
pec: http://tinyurl.com/zr3gw8t
maska: http://tinyurl.com/hodwv79
leptanie: http://tinyurl.com/gpsgq6g
prekovy: http://tinyurl.com/zr48jn2
pec: http://tinyurl.com/zr3gw8t
maska: http://tinyurl.com/hodwv79
leptanie: http://tinyurl.com/gpsgq6g
prekovy: http://tinyurl.com/zr48jn2
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Termostat pre liahen
Kód: Vybrať všetko
1990 ;main.c: 329: displ[2] = segm[i];
1991 03A1 0876 movf displ_d@i,w
1992 03A2 3E35 addlw low (_segm| (0+32768))
1993 03A3 3184 movlp high __stringtab
1994 03A4 000A callw
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Termostat pre liahen
Pretoze si prekrocil hranice pola. To ako programator nesmies. Vies co je za nim? Preco sa potom cudujes?xmilos napísal: Preco tento kod pri zobrazeni vacsieho cisla ako 999 resetuje procesor ?
Je jasne, ze i presiahne rozmer pola a tym padom cita mimo rozsah, ale preco reset?
Rypanie sa v assembleri je absolutne zbytocne.
Ked si do auta nalejes namiesto benzinu jablkovu stavu a auto nejde, rychlomer ukazuje nulovu rychlost, tak hadam nezacnes opravovat rychlomer.
0
Re: Termostat pre liahen
ak mozem, rad by som keby to citanie mimo rozsah pola niekto viac rozviedol. je mi jasne, ze je to programatorova chyba, ale nieje mi jasne, akym sposobom to pri citani moze sposobit "zabludenie" programu. jedine co ma napada je, ak je pole umiestnene na konci pamate. inak mi pripada, ze sa nanajvys nacita nezmysel. alebo nie ?
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 177 Odpovedí
- 10372 Zobrazení
-
Posledný príspevok od používateľa mr.dred
-
- 2 Odpovedí
- 698 Zobrazení
-
Posledný príspevok od používateľa yuslav
-
- 2 Odpovedí
- 1464 Zobrazení
-
Posledný príspevok od používateľa jaro12
-
- 2 Odpovedí
- 449 Zobrazení
-
Posledný príspevok od používateľa jaro12
-
- 0 Odpovedí
- 137 Zobrazení
-
Posledný príspevok od používateľa taphome