Fórum témák
» Több friss téma |
Fórum » PIC PID library
Ahogy modellezgetem pont úgy van ahogy mondod.
Mikor bekapcsolom a PID algoritmust, a hiba jellemzően pozitív. Error = Setpoint - Input; És mivel : ITerm+= (ki * error); Ez elszalad a fenébe ! Csak akkor fog csökkenni, ha hiba negatívra vált. Vagyis mindenképpen túllövésbe kell mennie, ahhoz, hogy az I hatás ne nyomja folyamatosan fölfelé a kimenetet. Hosszútávon egy hullámzást generál. Ez meg olyan kicsi és +-, hogy az I tényleg mindig cibálni fogja. Mindenesetre betettem :
Ezzel nem halmozódik fel az I akkor sem ha korán bekapcsolom a PID-et. A múltbeli nyolc érték, meg elég infót ad. Egyébként ugyanilyet csak 4 elemre betettem a D-re is. Mivel átlagol ez egy aluláteresztő szűrő lesz a D-n. Majd meglátom. Ez csak elvi gond, mert úgyis 100%-al fűtök amíg meg nem közelíti a Setpoint körüli szabályozási sávot. Ez nagyon jó : Building PID Controls in Software Meg ez is hasznos lehet : BME PID modellezés
Inkább az I-nek olyan értéket kéne adni, ami a körödnek megfelelő változást okoz(nagy érték valószínű, bár ha a legutóbbi képletet használod, akkor nagyon kicsi!) és korlátozni az Ymax-hoz, Ymin-hez...
Ezek a kitalációk csak tévútra vezetnek. Neked nem kell elvileg kitalálni semmit, csak megérteni a működést és megfelelő paramétereket beállítani... A hozzászólás módosítva: Jan 8, 2014
Sziasztok!
Az utóbbi időben sikerült működésre bírnom egy PID-es szabályozót PIC mikrovezérlővel (a mikrovezérlő kimenete PWM volt). Kicsit furcsának találtam az általam használt függvényeket és példakódot, ugyanis a PID kimenete egy olyan szám volt, ami végül hozzá volt adva (negatív előjel esetén kivonva) a PWM periféria kitöltési tényezőjéhez. Tehát a PID kimenete a kitöltési tényező változását adta ciklusonként. Javítsatok ki ha tévedek, de egy hagyományos PID-es szabályozásnál jelen esetben nem a PID kimenetének kéne jelentenie az új PWM kitöltési tényezőt? A szabályozott folyamat egy elektromos fojtószelep (rugó húzza vissza zárt állapotba) szabályozása. Tehát az alapjel gyakorlatilag a kívánt nyitási szög analóg fesz. értéke, az ellenőrző jel a fojtószelepbe integrált potméter fesz. kimenete. Igazából működik az áramkör, sikerült beállítani. Csak igazából én magamtól a "másik" módszer szerint oldottam volna meg a szabályzót. Üdv.
A PID három függvény összege és a beavatkozójelet(Y) állítja elő, azaz itt a PWM-et. Mindegy hogyan van megvalósítva a három matematikai összefüggés és mindegy milyen együtthatókat kell alkalmazni a P, I, D helyén, végül mind egyformán fog működni. Sajnos nincs szabvány, ezért elég nagy a káosz a megvalósítások között, de lényegét tekintve, mind egy elven működik. Ha valaki megérti a PID működési elvét, mi hogyan hat az Y-ra, maga is tud PID-et programozni másolás nélkül...
A hozzászólás módosítva: Máj 3, 2014
Helló!
Az én kérdésem inkább a beavatkozójel felhasználására irányult. Ha nem tévedek, akkor annak 0-nak kell lennie, ha nincs hiba, és nincs szükség beavatkozásra. Az én példámban gondolom ezért a beavatkozójel a ciklusonkénti változása a PWM kitöltésének (ezért van hozzáadva), viszont egy pozició-szabályozási feladatban (ahol pl. nem hat külső nyomaték a motorra) közvetlenül a PWM kitöltését jelentené. Üdv.
Hello!
Tudnátok segiteni? A pid szabályzásnál hogyan kell kiszámolni hogy a P I és D konstansok értéke mekkora legyen? És azt hogy az I nél hány mintavételig visszamenőleg összegezze a hibajeleket? Meg hogy a D nél mennyi idő legyen a minták közt (mostani és előző)? Hogyan lehet ezeket kiszámolni? Ha tudtok segíteni nagyon hálás lennék. Olvastam a PID ről de ezeket nem értem...
Nem feltétlenül 0 a kimenet, ha az SP=PV, sőt, a legtöbb esetben nem 0! A P tag Y része, (nevezzük P_Y-nak) 0, de a I_Y annyi, amennyi összegyűlt a beállás alatt, vagy amennyi szükséges volt a korrekcióhoz, hogy beálljon az SP (kívánt érték).
Üdv!
A behangolásra a relés módszert javaslom. Lásd csatolt pdf az elvért, és a két képet, hogy ez miképp működik a gyakorlatban.
Valami jó regisztrátor progit nem tudtok ?
Csak a SerialtChart-ot találtam ! Jobb híján az Excel. Csak ez nem on-line.
Üdv!
Az Excel tun online lenni, attól függ honnan jön az adat. Nálam pl. PLC-ből jön, a formátum XML, HTTP protokoll, valami ilyen makróval:
Az XML ilyen:
A PLC az XML-ben kicseréli a mért értéket és a setpoint-ot mindig az aktuális értékre. Ha neked RS232-ből jön az adat, a neten vannak rá példák, bár nem próbáltam, de szerintem az is működik, szóval tudsz RS232-ből adatot kinyerni online Excel-be. Imi.
Köszi..erre nem is gondoltam.
Hirtelen rákerestem és vannak találatok... Biztos kell vele görcsölni de megoldható. A SerialChart frankó, csak nem log-ol. Nincs valaki VB-Excel mágus akinek ez nem gond ?
watt !!!
Már eddig is sokat segítettél....köszi még egyszer, de ha belefér az idődbe ránézhetnél a csatolt XLS-re. Ez egy kb. 2 kW-os hőprés. A tulaj nagyon elégedett, jobb mint az eddigi OMRON hőfokszabályozás és a PLC-s megoldás. Jól látszik a 3 préselés. A valós programban ez a hőelvonás persze korrigálva van. Az elvárás a +- 0.5 fok szabályozás lenne. PIC18F46K80 12 bit AD, PT100 XTR105 4...20mA távadóval. 4.096 V referencia. PWM 0...100% 10 msec osztással és így 1 sec a PID ciklusidő. A matek 32 bites double, de a mért hőfok le van csapva 1 tizedesre. Nagyon sokat görcsöltem, de hőmérséklet mérés mindig zajos. Átlagolok, diszkrét LowPassFilter stb. Az alsó pár bit zsizsikel. Ha eldobom a legalsót akkor sem jobb sokkal, de akkor már nem tud 0.1 fokot. Már mindenféle fúrmányokat bevetettem pl. : Felvettem a setpoint körül egy +-0.5 fok-os határt. // Ha fűtés van és csökken és az előző mérés már a határon felül van akkor az előzővel számol // Ha fűtés nincs és növekszik és az előző mérés már a határon alul van akkor is az előző Ettől jobb lett. A görbékből különösen a D-ből és persze a PWM-ből jól látszik a zaj. Végül is jól jól működik, de hátha lehet javítani rajta !
Én egy digitális szűrést tennék bele. pl. 10mérés, két szélső érték kidobva, maradék összeadva, majd osztva 8-al. Amíg a mérés nem stabil, nem lehet jól szabályozni rá.
A másik az áramköri kialakítás. Külső referencia fesz kell és az analog GND-t külön kell huzalozni a forrástól és szokott segíteni, ha 1..10ohm körüli ellenállással van összekötve a digit GND-vel. Emellett mindent hidegíteni kell kerámia kondikkal(SMD jobb), nagyon rövid vezetékekkel. Itt nem sok a több...
Az áramkör jelenleg adott. A régi dolgokhoz kellett csatlakoznom. A földelés sajnos nem ideális.
A 4-20 mA-t egy 200 ohm fogadja. Ide jön az áram bemenet és az XTR105-ről föld. A 200 ohm-al parallel 10µF majd jön egy soros 1K majd 10 µF-a földrel. Amit terveztem vezérlőt azon csillag a földelés. Minden analóg csatorna saját ágon megy be a puffer kondihoz. A táp 24->5V buck MPS1591. Ez is rászórhat kicsit. A gépen belül a régi XTR105-ös panelen van közösítve a föld. Most készül egy új interfész panel a vezérlő fenekére ( szendvics szerkezet), azon már rajta lesz az XTR105. Remélem jobb lesz. A következő fejlesztési változat már MAX 31865 vagy NAU7802 lesz. A szoftver először pont ugyanolyan mozgóátlagos volt amit javasoltál. Az előző projektben ami egy NTC-s mérő volt és ott bevált. Itt nem volt elég. Ami a legjobbat adja, az most 10 msec-enként ADC olvasás és rögtön egy 8 as tömbben átlagolás. Ez csak pár usec...nem gond. Ezt megkapja egy digitális szűrő.
A hozzászólás módosítva: Máj 30, 2014
Nézted már az MCP3424-et? Elég jól használható, ha nem szükséges túl gyors mérés. Előnye, hogy nem kell külön erősítő, közvetlenül ráköthető a hőelem. Hátránya, hogy saját hőelem referenciatáblázatot kell használni, ami helyigényes, de egy külső EEPROM-al, vagy nagy memóriával rendelkező PIC-el ez megoldható. Elég olcsó és 4 hőelemet kiszolgál. Tized pontosan még nem használtam, (eleve egy hőelem effektív pontossága 1,5fok), de 18 biten képes nagyobb felbontásra.
Igazad lehet, viszont pt100-ra is jó.
Sziasztok!
Szeretnék segítséget kérni egy PID szabályozó behangolásához. A Kp, Ki, Kd, Kt konstansokat kellene megállapítanom. Addig világos, hogy az I és D konstansok 0-k és a p-t állítom be először. Valaki aki tapasztalt leírná nekem, hogy lépésről lépésre hogyan kell behangolni?
Elkezded alacsony P-vel, megvárod, hogy beálljon. Aztán magasabbra állítod és megint megvárod hogy beálljon. Ezt addig csinálod amíg nem találsz egy olyan értéket amivel állandó amplitúdóval kezd oszcillálni a rendszer. Ekkor megnézed a periódusidőt és Ziegler-Nichols alapján beállítod a P, I, D értékeket.
Szia!
Nem írod, hogy mi a szabályozott szakasz, azaz mit szabályozol. Elvileg a szabályozott szakasz átviteli függvényétől függ elsősorban, hogy mit és hova kell állítani. Villamos hajtásoknál (áramszabályzókör, fordulatszám-szabályzókör) a gyakorlatban egységugrás jelre vizsgáljuk a rendszert, és addig hangoljuk, amíg a leggyorsabb túllendülés nélküli beállást el nem érjük. Célszerűen kis erősítésről nagy integrálási időállandóval indulunk általában. Először csak kicsi ugrásokkal, majd a végén a névleges értékkel ellenőrizzük.
Szia!
Egy fűtőtest hőmérsékletét szabályozom. Nos kipróbáltam. Addig növeltem a P-t (2-essével 0-32ig), amíg el nem kezd oszcillálni. Sajnos elértem 32-ig, tehát nem oszcillált. Nagyon kis mértékben viszont igen, kb 1-2 volt az amplitudó és 1 másodperc a periódusidő (vagy 0,75).
Ha nekem kellene megoldanom, akkor keresnék egy megfelelő regisztrátort vagy szkópot vagy bármi mást, ami az időben értékelhető módon felrajzolja a hőmérséklet beállását.
Így egységugrás jelre láthatod a rendszer válaszát, és a kapott eredmény szerint módosítasz. Ha nagyon nagy a hőtehetetlenség (egy nagyobb kemencénél ez akár órás nagyságrendű is lehet), akkor bizony ez igencsak sziszifuszi munka, több napig is eltarthat. Megpróbálhatod azt az utat, amit Holex ajánlott, bár nekem ez új volt. A periódus időt pontosabban kellene megmérni, többnek az átlagolásából. Ha beállítottad, akkor is ellenőrizd le egységugrással, mert az így beállított szabályzó korrigálására szükség lehet. Azt nem írtad, hogy a szabályzót te készítetted-e vagy gyári. Ha te készítetted, akkor lehet hogy szükség lesz a paraméterek értéktartományának módosítására. Arányos erősítés értékét már előzetesen is célszerű lett volna úgy felvenni, hogy legalább 100-ig tudd állítani.
Én készítettem az algoritmust. Egy makróval állítható be a max erősítés. Viszont egy másik ilyen fűtőtesthez használt konstansokkal jól működik, de szeretném én magam behangolni. Viszont ott egyik konstans sincs 25 felett.
A belengést meg tudom mérni és uarton ki tudom küldeni de tényleg nem oszcillál csak 1-2 amplitudóval. Vagy az oszcillációhoz lehet hogy akár 50-es erősítésre is szükség lesz a p taghoz?
Szeretném hangsúlyozni, hogy ezen az úton (Ziegler-Nichols alapján) én még a gyakorlatban nem állítottam be szabályzót. A leírások szerint nem kell feltétlenül nagy amplitúdójú lengéseket várni, nem is szükséges, hiszen a frekvenciaválaszra vagyunk kíváncsiak, azaz nem szétverni akarjuk a szabályzókört, csak a jellemző frekvenciáját megkeresni. A számítási eljárás szerint az arányos erősítést a belengési értékének kb. a felére vissza kell venni, ezért ha ez a formula szerint ideális a beállítás, akkor kb. a kétszeres értéknél várható a lengés.
Szerintem vedd fel az egységugrásra adott választ. Ha kellően gyors, nincs jelentős túllövése, és aperiodikus a beállása, akkor nem érdemes tovább állítgatni. Ha valamilyen elvárásnak nem felel meg, akkor viszont érdemes elmélyülni benne.
Üdv...kicsit döglött a topik
Hagyományos PID-em hőfokszabályozásra nagyon szépen muzsikál. Kicsi barkácsolással ( I esetén ) minimális az induló túllövés (180 C esetén max 1.5 C ). Végül is beál +- 0.1...0.2 C-ra. A fűtés kb. 20 %-on megy a szinten tartáshoz. Akarok csinálni egy velocity C tipusu PID-et. Azt irják az okosok, hogy ez jobb ! BESTune CO(k) = CO[k-1] - Kp*(PV[k] - PV[k-1]) + Ki*Ts *e[k] - Kd/Ts*( PV[k] - 2*PV[k-1] + PV[]k-2]) PID Controller Calculus CO[k] = CO[k-1] + Kc*( (PV[k-1] - PV[k]) + Ts/Ti*e[k] + Td/Ts*(2*PV[k-1] - PV[k] - PV[k-2]) ) e[k] = SP - PV[k] Ez a kimenet változását számolja. De nem igazán tudom összehozni ! A D csak akkor hat, ha nem egyenletes a változás. Gyorsul vagy lassul. Gondolom a neve is ebből van. A P a változást szorozza. Kb. +0.2 C/sec. Vagyis ha nő akkor visszavesz, de nagyon kicsit. I mindenképpen kell (csak P-vel nem indul el). Az I miatt viszont a kiment rögtön 100% lesz. Ha nagyon kicsi az I akkor meg nagyon lehül az SP alá. Csinált már valaki ilyet ? Azt hogy lehet kiküszöbölni, hogy sokkal lassabban hül a rendszer mint ahogyan felmelegszik? Köszi a segítséget előre is.
Szia!
Hol találtál anyagot erről a "velocity C típusú PID"-ről? Jó lenne, ha az értelmezést segítenéd; CO gondolom a szabályzó kimenete (?Controller Output?), Amit nem látok, hogy mi lenne az alapjel és a visszacsatolt jel? Egy visszacsatolt huroknál rendszerint az alapjelből kivonjuk a visszavetett jelet, és ezzel a hibajellel számolunk tovább. Esetleg ez lenne a PV? Ha így van, akkor ez lényegileg a hagyományos PID szerinti eredményt adja, csak talán egyszerűbb a számítás. Ha felírod a hagyományos PID számítás k-ra és k-1-re és kivonod egymásból, némi átrendezéssel a fenti sorok jönnek ki. Az integráló tag szerepét az előző kimeneti érték veszi át, és a hibajel változással korrigálja. Szerintem működnie kellene csak arányos taggal is. A melegedés és hűlés sebessége közötti különbségből adódó szabályozási problémákat változó paraméterű szabályzóval lehetne mérsékelni (külön paraméter ha a hibajel pozitív, másik ha a hibajel negatív).
Irodalom is ott van !
Google : PID Bestune illetve PID Controller Calculus A hagyományos PID pedig Arduino Beginner’s PID A Bestune-on a V-PID-re van 3 képlet is. A,B,C tipusú. Az irják a C a legjobb. Általában igy használják : SP Set Point CO Controller Output e Error PV Process Value Mivel most sör illetve Whisky főzőt akarok csinálni és a minőséghez nagyon fontos a maláta pontos hőfokon tartása próbálok kicsit görcsölni. Egyébként a mostani PID OK, csak a szakmai érdeklődés is hajt. A hagyományos PID esetén nagy gáz a zaj a D tagban. PT100 ról 4..20mA jön a ADC-re és elégé zajos. Nagyon sokat vacakoltam a zajjal. Többféle digitális szűrőt próbáltam. Ez azért mégiscsak egy 8 bites PIC18f46k80-as proci. Jelenleg ha nincs bekapcsolva a fűtés, akkor +- 0.1 fokot ugrál. Ha beindul a fűtőlap akkor néha 0.5 fokot is ugrik. A mostani alkalmazást 180-200 (max 230) fokra kell felfűteni. 200 foknál 190 fokig 100% PWM utánna bekapcsol a PID 202 fok után 0% a fűtés. Hagyományos PID esetén beállítom a P-t hogy ne lőjjön túl. Majd növelem az I-t hogy beáljon az SP. A D hab a tortán ez csak jósolja a jövőt, kicsit csökkenti a túllövést és a hullámzást. V-PID nél a csak P nem valósítható meg. Ha a Ki = 0 és Kp csak a változásból növekszik ami nagyon kicsi és nem tud működni. Ráadásul a zaj is itt jelentkezik leginkább. Normál PID algoritmussal mindig nagyon túllő és lassan hül le. Ideális hangolásnál legalább 10 fokkal. Ez nem lehet ! Korlátoztam az integrálást. És amint felfűtéskor átlépi az SP+0.2 fokot integrált 0 ra teszem. Amikor lehül pedig egy beállítható értékre. Ez is segit a túllövésben lásd kicsit feljebb : http://www.hobbielektronika.hu/forum/topic_post_1561740.html#1561740. A V-PID esetében ez a módszer bukta, hiszen az algoritmus a változást számítja ! Most beírtam a programba különböző állapot státuszokat és a CO-t státuszváltozásnál átállítom. // Ha fűt és +0.2 akkor CO=0 (nem megy nagyon fel) pid.CO = pid.CO_SP_over; // Ha hül és SP akkor CO-t pozitívba teszi (nem megy nagyon le) pid.CO = pid.CO_init; // Túllövés után sáv fölött van pid.CO = pid.CO_SP_over; // Felfűtéskor még sáv alatt van pid.CO = pid.CO_SP_under; // Felfűtéskor belép a sávba pid.CO = 0; Még nem próbáltam ki, majd hétfőn. Gőzöm sincs, hogy a gyári szabályozókban ezt hogyan csinálják. Igazából vannak módszerek a holtidő kiküszöbölésére. pl. Smith predictor - ilyen szintű matekot 30 éve tanultam. Mivel ez is igényel plusz paraméterezés, és rossz beállítás inkább ront, csak bonyolítja a helyzetet. Fuzzy szabályozó is jó lehetne, de ott is precízen be kell a tagsági fügvényeket paraméterezni, hogy igazán jó legyen. Valami lepogramozható automatikus finomhangálási algoritmus kellene. Láttam olyat, hogy a PID paramétereket fuzzy logika változtatja. Ehhez viszont már doktorátus is jó lenne. A PID beállítása meg csak gyakorlati úton is viszonylag egyszerű. Az is érdekes, ha összejön, hogy majd egyforma paraméterek kellenek-e ? A 2 képlet különböző. A 2.-ban Kc val szorozza ID részt is. Nem tudom a gyári szabályozókban ez hogy van, de nem tartom valószínőleg, hogy van azonosan működő de különböző gyártó piacon. Ha csak nem klón. Nálunk Omron PID hőfokszabályzók vannak, de tök másként van beállítva egy adott fűtőlapra mint egy unitronics PLC. A hozzászólás módosítva: Jún 12, 2015
A V-PID egyenlőre a fiók aljába került. 3 napi kínlódás után sem tudom úgy kézben tartani, mint a hagyományosat.
A gond a holtidő. Érdekes, hogy pont a sörfőzénél használják, ahol nagyon nagy a holtidő. A hagyományos PID esetében az I manipulálásával, viszonylag jól kezelhető a kezdeti túllövés és hullámzás. Itt még megpróbálog a D tagra egy pótlólagos szűrést. |
Bejelentkezés
Hirdetés |