Skillnaden mellan ett modellbaserat reglersystem(MPC, LQR, MRAS, STR, GS) jämfört ett icke-modell modellbaserat reglersystem(PID, ON/OFF) är att det modellbaserade reglersystemet har en intern dynamisk modell i from av en ordinär differentialsekvation som kontinuerligt simuleras under körningens gång.
Modellen skall fungera som en idealisk prediktion av det verkliga systemet. Exempelvis om vi värmer en hink med vatten så kan vi mäta temperaturen i vattnet. När vi mäter temperaturen i vattnet så ser vi temperaturen öka. Om vi skulle ta samma beräknade signal till doppvärmaren i hinken och sätta in den i våran modell, så skulle vi få beräkna antingen samma temperatur eller liknande temperatur, förhållandet till våran mätutrustning.
Ett modellbaserat reglersystem är oftast digitalt idag. Det behöver dock inte vara, så som i Appollo-programmet 1969 där analog LQR användes flitigt tillsammans med analogt kalman-filter.
En fördel med analoga regler system är att dom beräknar på tiden 0. Det finns ju analoga PI-regulatorer också. Något som används i äldre Weller WECP-20 lödstationer.
En nackdel med digitala modellbaserade reglersystem är att dom är väldigt beräkningstunga. Jag kör bland annat en MPC-system med kontrollhorisonten N = 5 på ett första grads SISO system med beränsningar på både in-, out- och hastighetsberäknsingar på ut samt regularisering och slackvariabler i optimeringar samt integralfunktion. Detta kör jag på 498 ms per iteration, beroende på vart min modell befinner sig i sitt initiala tillstånd. Beroende på vilket tillstånd optimeringen befinner sig inom, så kan lösningen till optimerade insignaler variera i tid.
Fördelarna med modellbaserade reglersystem är att dom kan hantera störningar, olinjäriteter, dötider och ta hänsyn till systemets begräsningar på in- och utsignalen, vilket gör dom mera jordnära och realistiska än analoga reglersystem som förutsätter att systemet är idealiskt och det finns inga begräsningar. Idag så rekommenderas digitala reglersystem av rent kostnadsskäl då analoga reglersystem är väldigt dyra att konstruera.
Frågeställning:
Jag kommer presentera olika förslag på lösningarna:
Förslag 1:
Låt oss säga att ni har en regulator som tar mellan 0.5 till 2 sekunder på sig att beräkna styrsignaler. Hur gör ni för att kunna hålla fixerad iteration?
En lösning som jag har är att använda någon typ av mätning. Vi säger att jag vet att reglersystemet tar aldrig mer än 2 sekunder att beräkna, oavsett situation. Då mäter jag tiden det tar för att göra beräkningarna, och där efter så skapar jag en fördröjning. Om det tar 0.5 sekunder att beräkna insignalen, då lägger jag på en fördröjning på 1.5 sekunder om jag vill ha en iterationstid på 2 sekunder hela tiden. Är detta ett normalt sätt att göra i praktiken?
Kod: Markera allt
uint32 iteration_time_ms = tock - tick;
if(iteration_time_ms < 2000U){
HAL_Delay(2000U - iteration_time_ms);
}
/* Tick */
tick = HAL_GetTick();
uint32_t insignal = PID(argument.....);
/* Tock */
tock = HAL_GetTick();
Jag beräknar min modell och för varje sekund så uppdaterar jag styrsignalen via en interrupt.
Om modellen inte har beräknat fram sina styrsignaler, så återanvänder jag den föregående styrsignalen.
Då skiter jag i om MPC tar 1, 2 sekunder eller 1.5 sekunder på sig att beräkna fram styrsignalerna. Den får ta sin tid att uppdatera signalerna.