Baksteen schreef:De moeilijkheid zit in het dynamisch gedrag van de machine. Alle 'simpele' regeltechniek gaat er van uit dat het systeem lineair is. Zodra je backlash hebt is het echter gedaan met de lineariteit, je moet dan een regelaar ontwerpen die weet waar in de hystereselus je je bevindt.
Ja OK, maar dat is een kwestie van slim(mer) regelen. In de praktijk zijn vrijwel alle systemen niet-lineair, al is het maar omdat de hoeveelheid bijsturing in de echte wereld beperkt is.
Neem een simpele temperatuurregeling bijvoorbeeld. Een regelaar die een 1kW verwarming aanstuurt om temperatuur te regelen kan op een gegeven moment wel 10kW willen om een fout weg te werken, maar die 10kW is er gewoon niet, dus weg lineariteit. Moet je zelfs bij een simpele PI(D)-controller al met windup-compensatie aan de gang.
Je hoeft in dit geval eigenlijk ook geen generieke controller voor 'onbekende lineaire systemen' zoals klassiek PID te gebruiken, maar je kunt een model inbrengen.
Zelfde geintje met m'n stepperdrives trouwens. Gisteravond maakte de motor z'n eerste stapjes, wat betekent dat de stroomregeling voor de spoelstromen z'n werk goed doet. Die regellus is nu ook gebaseerd op een PID-controller (yep, inclusief de D), simpelweg omdat ik daar stevig geoptimaliseerde code voor had.
Opzich een acceptabele manier van spoelstroom regelen, en al vele malen beter dan dat 'mixed decay'-gekunstel van de meeste stappenmotordriver-IC's die helemaal geen voorkennis van het systeem hebben. Maar het is zeker niet de slimste manier. Je weet immers de huidige stroom door de winding, de stroom die je graag zou willen, de inductie van de winding, de weerstand van de winding, de busspanning en de back-EMF van de motor.
Dan weet je dus eigenlijk alles wat er nodig is om 'precies' te kunnen berekenen hoe je die motorwinding aan moet sturen om zo rap en nauwkeurig mogelijk op de gewenste stroom uit te komen binnen de fysieke grenzen van het systeem.
De reden dat ik het niet doe is (behalve omdat ik lui ben en de noodzaak nog niet inzie) dat het executeren van een PID-regelaar-stap maar grofweg een microseconde in beslag neemt. Met de rest van de administratie en rekenwerk erbij kan ik de 2 winding-stroomregelaars makkelijk op ca. 70kHz draaien en nog genoeg processortijd overhouden voor de andere taken zoals de stapinterpolator (lage stapfrequenties -> stappen interpoleren en meer microsteppen -> soepelere motorloop. Hoge stapfrequenties -> minder microsteppen -> langer behoud van motorkoppel).
Ga ik over op een compleet motormodel voor de stroomsturing ipv een simpele PID, dan heb ik geheid meer rekenwerk nodig per stap, gaat de bandbreedte van de regeling alsnog omlaag omdat ik minder vaak 'bij kan sturen', en schiet ik er per saldo niks mee op.
Doe je dat niet dan is er een variabel verschil tussen het moment dat je gaat bijsturen op de lineaal en het moment dat dat bijsturen effect heeft op de positie van de lineaal. Er ontstaat dus een onzeker faseverschil tussen actuatie en respons hetgeen bij hogere frequenties de zaak grondig in de war stuurt (oscillaties), temeer omdat je 'ruis' op de lineaal zult hebben door het verspanen.
Bij (vrijwel) alle regelingen met negatieve terugkoppeling moet je ervoor zorgen dat de gain van systeem+controller kleiner dan 1 is op het punt/frequentie dat de totale fasedraaiing de 180 graden bereikt.
Daarom zul je een (software) laagdoorlaatfilter in je regeling moeten opnemen.
Da's 1 manier om te voorkomen dat je bij 180 graden faseverschuiving een gain>1 hebt. Maar dat als enige maatregel gebruiken is wederom niet slim; word je systeem traag en gevoelig voor overshoot van.
Om te weten waar je in de backlashhystereselus zit heb je zowel de spindelhoek als de lineaalpositie nodig (en de posities/richtingen van de asomkeringen).
Linki schreef:Er zijn besturingen die lossen dit op door gebruik te maken van een z.g. dual loop systeem.
De encoder achter op de motor voor de snelheids informatie, en de encoder op de glaslinaal voor de positie informatie.
Spindelhoek weet je, want stappenmotor. Missschien heeft die een stapje gemist of wat dan ook, maar onzekerheden en het omgaan daarmee zijn zowiezo onderdeel van elk 'echte wereld' systeem.
Lineaalpositie weet je ook.
Ik zit me alleen te bedenken dat je de regeling tegelijk op alle assen uit wilt voeren, en niet op losse assen onafhankelijk van elkaar. Als er 1 as door z'n hystereselus aan het regelen is moeten de anderen daar ook op reageren omdat anders je XYZ positie niet meer is wat je verwacht.
Hmm....
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'