Archief - regeltechnisch vraagje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

gamer1

Legacy Member
Voor de mensen die iets van regeltechniek kennen.
Ik zit met een vrij complex simulink model van een koppel komende van een motor, dat via een overbrenging naar een bandenmodel ingaat. In dat bandenmodel wordt dan ook de slip van het wiel berekend. Nu wou ik een tractiecontrole voor dit wiel erin zetten en dus een gewenste slipwaarde geven en daarop regelen met een PI regelaar. De uitgang van de PI regelaar is een waarde tussen 0 en 1 die vermenigvuldigd wordt met het koppel geleverd aan de wielen.
Dus de gewenste slip gaat erin, daarvan wordt de teruggekoppelde slip afgestrokken, dat resultaat gaat de PI in en die uitgang gaat het systeem in.
In het subsysteem waar de slip berekend wordt kan ik niet in, ik kan wel aan de uitgang ervan (slipwaarde). Het blok van waarin het koppel berekend wordt kan ik wel in.
De vraag is nu of ik hiervan op een eenvoudige manier toch de transferfunctie van het systeem kan bepalen, zodat ik de Kp en Ki bepalen kan, nodig voor de PI regelaar.

NotoriousP

Legacy Member
Je hebt een proces in simulink hé? Kan je dan niet gewoon een systeemidentificatie uitvoeren? Toon anders eens een afbeelding met aangeduid wat je precies wilt kennen...

aXl_

Legacy Member
Je zou misschien in simulink verschillende testen kunnen runnen met veel verschillende ingangsfrequenties om zo een bodeplot te fabriceren (met wat je krijgt aan de uitgang). Dan zou je een 2de of 3de orde transfer functie kunnen opstellen die de belangrijkste polen/zero's modelleert.

edit: dus met een sinus generator aan de ingang waarvan je de frequentie variabel maakt. Als je dan de testen kunt runnen vanuit je workspace in matlab moet er wel een manier zijn om automatisch verschillende sims te runnen met telkens een hogere ingangs freq.

Ik heb dit weliswaar nog nooit in simulink gedaan :p

edit2: als je er niet uit geraakt is er nog steeds trial en error. Automatiseer in een m-script simulaties met verschillende Ki en Kp parameters (in een bepaalde range met bepaalde stap) en kijk welke combinaties in de buurt komen van je settling time/overshoot voorwaarden.
En vergeet in dat geval ook niet te kijken dat je gekozen waarden niet ongelofelijk sensitive zijn. Het transiënt gedrag van uw systeem zou niet teveel mogen schommelen met kleine perturbaties op uw gekozen parameter waarden.

gamer1

Legacy Member
NotoriousP zei:
Je hebt een proces in simulink hé? Kan je dan niet gewoon een systeemidentificatie uitvoeren? Toon anders eens een afbeelding met aangeduid wat je precies wilt kennen...

Heb even een schets gemaakt. Thuis kan ik niet aan de software, en daar kan ik niet aan dit forum.
Het tyre model kan ik niet in. Er komen een hoop dingen uit, waarvan 1 de slip is.
Kan ik Matlab/Simulink zo'n systeemidentificatie laten uitvoeren?

http://img686.imageshack.us/img686/8154/systeem.jpg

NotoriousP

Legacy Member
En het is van het hele systeem dat je de transferfunctie wilt, juist?

Gewoon de PI eruit halen, een stap aanleggen en 1 van de methoden voor systeemidentificatie uitvoeren, hiervoor moet je wel de simulink grafiek afprinten.

Ik raad de verbeterde strejc methode aan, hier zal je normaal gezien wel een nauwkeurige transferfunctie vinden.

gamer1

Legacy Member
Ja, van het hele systeem (rood omkaderd).
Een stap aanleggen aan de ingang van het systeem (zonder dus de gemeten waarde ervan af te trekken)?
Met die systeemidentificatie, bedoel je daarmee manueel onderzoeken wat er allemaal inzit (uit bode plot ofzo), of is er hiervoor een matlabcommand ofzo?

@ Axl: heb al wat trial and error geprobeerd, maar kwam niet echt snel tot een deftige oplossing. m-script ervoor schrijven is ook niet zo eenvoudig aangezien het niet om een los simulink model gaat. Het is een deel van een zeer groot model in een softwarepacket. Is wel simulink model, maar ge kunt niet zomaar overal aan.

NotoriousP

Legacy Member
gamer1 zei:
Ja, van het hele systeem (rood omkaderd).
Een stap aanleggen aan de ingang van het systeem (zonder dus de gemeten waarde ervan af te trekken)?
Met die systeemidentificatie, bedoel je daarmee manueel onderzoeken wat er allemaal inzit (uit bode plot ofzo), of is er hiervoor een matlabcommand ofzo?

Ja zonder de gemeten waarde af te trekken.

En ja manueel maar niet met een bode diagramma, enkel met de gemeten waarde van het proces waar je een methode (zoals strejc) op toepast.

gamer1

Legacy Member
Hmm zou interessant kunnen zijn. Bij punt 2 onderaan, is die 'my_model', bedoelen ze dqqr het volledige simulink model mee? In dat geval zal ik dus een .mdl bestand moeten maken waarin enkel de dingen zitten die ik in mn systeem gedefinieerd had, benieuwd of dat mogelijk zal zijn?
Code:
[A,B,C,D] = linmod('my_model');
sys = ss(A,B,C,D)
bode(sys)

Indien niet, dan zal ik de verbeterde strecj methode eens moeten bekijken en toepassen.
In ieder geval al bedankt he mannen, mochten er nog andere mogelijke oplossingen te binnen schieten, laat dan maar iets weten.

aXl_

Legacy Member
ik heb het eens voor u uitgeprobeerd ;).

hier 2 screenshots van voorbeelden. Simulink model staat er alsook de matlab commands.

http://users.skynet.be/bs939021/voorbeeld1.jpg
http://users.skynet.be/bs939021/voorbeeld2.jpg

in voorbeeld 1 heb ik het eens uitgeprobeerd met een simpel TF blokje (coefficienten in TF in matlab workspace zijn gewoon gedeeld door 3).
In voorbeeld 2 heb ik eens gekeken of het ook voor een gecombineerd blokje ging door gewoon een feedback lusje te maken. Zoals je kan zien in de controle klopt het ook daar.

Je moet gewoon zien dat je een input/output blokje voorziet aan het stuk waarvan je de TF wilt kennen. In jouw geval kan je dan volgens mij dat blokje kopieren naar een nieuw mdl, er een input/output aan hangen en linmod gebruiken.

Als dit u een 12de orde systeem geeft voor uw onbekend blokje, probeer het dan wel wat te vereenvoudigen. Polen die mijlenver in het OLHV liggen zijn niet echt relevant voor uw model. Je kan bv een bode plot van de TF maken en kijken of je een 2de of 3de orde transfer functie daarop kan fitten.

Tristan

Legacy Member
aXl_ zei:
edit: dus met een sinus generator aan de ingang waarvan je de frequentie variabel maakt. Als je dan de testen kunt runnen vanuit je workspace in matlab moet er wel een manier zijn om automatisch verschillende sims te runnen met telkens een hogere ingangs freq.

Dit lijkt me ook de beste methode :)

Beginnen met een frequentie waarbij ingang en uitgang net 180° verschoven zijn tov elkaar en dan steeds de frequentie verlagen.
Bij de verschillende waarden neem je telkens het faseverschil en de amplitude van je uitgangssinus op.
Eenmaal je dat hebt, kun je er een bode karakteristiek van plotten.
En éénmaal je die bode hebt, zou je in principe gemakkelijk je polen, nullen, dode tijd en integratoren van je proces moeten kunnen bepalen :)

Laat weten hoe je het opgelost hebt ;)

gamer1

Legacy Member
@ axl: Ik vrees dat ik niet de dingen waarvan ik de TF wil bepalen in een apart bestand kan zetten. Er komen zoveel inputs van allerhande submodels dat ik die niet zomaar even apart kan zetten. Daarenboven is het wel een simulink model, maar in dSPACE (=commercieel pakket voor automotive modellen, maar onderliggend is het simulink. Zitten wel paar aparte dingen tussen zodat t niet zomaar te gebruiken/bewerken valt met simulink.)

Bij die methodes om een stap of sinus aan te leggen als input, moet ik daarvoor ook de betreffende dingen uit het volledige model halen, of maken die andere invloeden niet uit (vermits ge toch eigenlijk enkel met de in- en outputsignalen werkt)?

Probleem is een beetje dat dit een klein onderdeel is en dat ik er niet teveel tijd in kan/mag verliezen. Morgen bespreken met begeleider hoever ik hierin mag/kan gaan.

gamer1

Legacy Member
Eindelijk terug hierbij aanbeland (na een deel andere dingen gedaan te moeten hebben).
Vooraleer verder in te gaan op het ontwerpen van de regelaar, zou ik eens willen weten/proberen of het mogelijk is om het "gemeten" signaal te filteren.
Het model is hier te vinden:
Motor model
Let niet op de rommel die er nog instaat, zijn wat uitprobeersels.
Ik zou dus de afzonderlijke slip signalen, of de uitgang van de equivalent slip willen filteren. Die weighted sample time was maar een probeersel en mag eruit. Die 4 lookup tables erna (TC_FL2, TC_FR2, TC_RL en TC_RR) zouden voor een gepaste uitgang moeten zorgen bij een (gemeten) slipwaarde. In laatste model is er een kleine verandering (geen equivalente slip, maar 8 lookup tables na de 8 slipwaarden), maar principe blijft hetzelfde.

Probleem met deze manier van "regelen" is dat er een nogal hoog frequent signaal is bij de slip, dit is te zien op volgende figuren (2e meer ingezoomed):
gemeten slip
gemeten slip ingezoomed

Mijn vraag is nu dus of er een eenvoudig filter blokje is wat ik kan gebruiken om die ruis eruit te krijgen. Of misschien een soort van resample blokje waarmee de sampling frequency van die slip omlaag gebracht kan worden ofzo. Via transfer functie is niet zo eenvoudig aangezien het systeem niet gekend is, dus bij voorkeur een eenvoudigere oplossing.

aXl_

Legacy Member
Je regelt met een look-up table? Het lijkt me dat je hoog frequente ruis net daarvan afkomstig is. Wat wil je precies filteren dan? Je gemeten slip-signaal? Dat is helemaal geen oplossing lijkt mij.

In plaats van te regelen met zo'n look-up table kan je daar een PID regelaar in de plaats zetten en instellen mbv de ziechler-nichols methode.

section 8.5.3 in http://www.nt.ntnu.no/users/preisig/Repository/TKP_4140_process_control/TUE_script/TUE lecture.pdf

Je lus kan je volgens mij openbreken na het blokje met uitgang "equivalent slip" waarna je de unit-step-response stimuli daar kan aanleggen. De parameters van de PID regelaar vul je in met behulp van de waarden die je uit de unit-step-response kan aflezen volgens de ZN methode.

(en for the record, je system identification kan je volgens mij evengoed uitvoeren door de lus op die plek open te breken.)

gamer1

Legacy Member
Is een beetje een praktische keuze voor de lookup table. Moet nl. niet altijd op gewenste waarde regelen, maar sommige ook op max waarde en die flexibiliteit heb ik gemakkelijk ter beschikking met lookup table. Ook was voor deze manier gekozen in een ander simulink model van wege de eenvoud (geen nood om echte regelaar te ontwerpen) en daar werkt die lookup methode goed.

En een low pass filter plaatsen met dan een bepaalde frequentie waarboven de versterking serieus daalt, zou dat geen oplossing kunnen zijn?

Of een soort van online resampling functie zodat ik voor de regelaar even de sampling frequency na beneden haal, bestaat dat? Wanneer ik de downsample functie van matlab wou toevoegen in zo'n simulink blokje (matlab fcn of zoiets) kreeg ik melding dat dat niet mogelijk was met de downsample functie.

aXl_

Legacy Member
wat zou jij dan precies low pass filteren?

Die hoog frequente oscillaties worden volgens mij veroorzaakt omdat je regel algo snel tussen een aantal waarden in je lookup table zit te switchen. Als je je systeem een setpunt geeft, en je systeem heeft een bepaald transiënt gedrag waardoor die eerst een paar oscillaties rond dat setpunt veroorzaakt vooraleer er naar toe te convergeren (overshoot dus), dan zou je regelalgoritme dat al kunnen interpreteren als te laag/te hoog en een andere output doorgeven (ik weet niet of dat is wat er gebeurt maar ik vermoed dat). Ik zie niet in hoe je met een lookup table het transiënt gedrag van je systeem kan beïnvloeden (daarvoor zou je er een regelaar in de plaats zetten).

Wat je wel kan doen is na het opgeven van een setpunt lang genoeg wachten om transiënt gedrag van je systeem te laten uitsterven vooraleer je je regelsysteem toelaat een nieuwe output te geven. Dit doe je dan inderdaad door je regelsysteem lager te laten klokken (hoeveel lager is afhankelijk van de dynamische eigenschappen van het systeem dat je probeert te regelen). Misschien heb je wel een sample-and-hold blokje om voor je regel-look-up-table-systeem te zetten.

gamer1

Legacy Member
Ik vrees dat het inderdaad gewoon het signaal is dat hoog frequent is, geen ruis ofzo.
Ben na wat zoekwerk iets anders tegengekomen. Dit lijkt me wel iets doenbaars, signal smoothing. Weet iemand toevallig of er zoiets al in een simulink blokje bestaat, of is dat er al ooit eens in gezet?
Signal-Smoothing Algorithms
Heb een modelletje gevonden, maar die is niet geschikt voor mijn toepassing. Lijkt eerder iets voor laagfrequente signalen.
MATLAB/SIMULINK Blocksets for Matlab 7.5(R2007b) for Windows32 and newer
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan