Nu har jag jobbat med en lite mer verklighetsbaserad integrator, jag förstår er om ni bara suckar och inte orkar läsa.
Integratorn ska motsvara den externa kraften som påverkar motorn men istället för att basera den på hur mycket fel motorn står så har jag valt att basera den på skillnaden mellan bör-acceleration(BörAcc) och verklig acceleration(ÄrAcc).
Den metoden är teoretiskt så nära verkligheten att man kan få fram den korrekta kraften direkt varje pid-loop (fungerar dock bara i teorin).
Det jag ser som ett problem med en integrator som baseras på positions-felet är att för att ha så hög I som behövs för snabba kompenseringar måste även D och kanske även P ökas för att kontrollern ska bli stabil och med så hög D får man mycket brus som gör att motorn inte går bra.
En integrator som baseras på acceleration påverkar inte P och D så dessa kan kallibreras till låga värden sammtidigt som I får påverka kontrollern mycket.
För att få fram BörAcc räknar jag ut medelvärdet av dom senaste 8 PD-summorna, Jag använder medelvärde för att basera skillnaden mellan BörAcc och ÄrAcc på en längre tid än en pid-loop.
För att kunna göra beräkningar med accelerationen måste jag ha hastigheten med väldigt hög upplösning.
Jag gjorde så att jag kollar encodern 64gr varje pid-loop och räknar ut medel-positionen(på så vis får jag en position med decimaler till priset att positionen är en halv pid-loop gammal) och räknar ut differansen mellan varje pid-loop.
Det är hastigheten och för att räkna ut accelerationen så räknar jag ut hur mycket värdet förändras mellan varje pid-loop.
Då har jag accelerationen men det värdet har ganska låg upplösning och mycket brus så jag räknar ut medelvärdet av accelerationen från dom senaste 8 pid-looparna(samma som BörAcc), att accelerationen blir några pid-loopar gammal gör inte så mycket.
För att accelerationsvärdet ska matcha BörAcc så multiplicerar jag det med lämpligt värde.
Sen Räknar jag ut skillnaden mellan BörAcc och ÄrAcc, jag kallar den ErrAcc.
Första testet är en PD kontroller med friktions-komp, ingen integrator alls.
Lila färg är BörAcc.
Grön färg är ÄrAcc.
Blå färg är ErrAcc, den ska jag basera integratorn på.
Motorn är obelastad och det ser ganska bra ut, i teorin ska blå vara 0 hela tiden.
http://ake.myftp.org/forum/ServoTest7_U ... VisarR.gif
Nästa test är samma som innan men med bromsad motor.
Vi ser att det hela inte är så teoretiskt korrekt som man vill att det ska vara.
http://ake.myftp.org/forum/ServoTest7_U ... _Kraft.gif
Jag testade att använda ErrAcc för att sätta I direkt vilket ska vara teoretiskt möjligt men det blev inte alls bra, har ingen bild på det.
Så jag provade att göra en vanlig integrator men baserad på ErrAcc, typ såhär: I=I+ErrAcc*0.05
Det fungerar iaf men det är knappast någon förbättring jämfört med en integrator baserad på felet.
Det stämde dock att I inte påverkar PD-kontrollerns egenskaper och kan trimmas oberoende av varandra.
Motorn låter ganska bra och ser ut att gå ganska bra men det hela självsvänger mer ju snabbare man låter I förändras av ErrAcc, det är inte tillräckligt bra för att jag ska vara nöjd + att hela metoden är väldigt jobbig att implementera och trimma så även om det skulle vara lite bättre är det ändå inte värt det.
En orsak till självsvängningen är nog att värdet från accelerationen är några pid-loopar gammal och att ErrAcc inte har ett tillräckligt teoretiskt korrekt värde.
PD-kontroller + integrator som baseras på ErrAcc + friktions-komp.
Så här ser det ut med obelastad motor.
Blå är integrator-värdet.
http://ake.myftp.org/forum/ServoTest7_M ... I_MedF.gif
Och med belastning.
http://ake.myftp.org/forum/ServoTest7_M ... _Kraft.gif
Motorn försöker stå still och jag bråkar med den.
http://ake.myftp.org/forum/ServoTest7_M ... Kraft2.gif
Det är för tidigt för att komma med en slutsats om den här metoden, man kan säkert förändra sättet som ErrAcc påverkar I och få det hela att fungera bättre.
Jag har iaf provat och är nöjd för stunden, nu ska jag istället prova att förbättra en vanlig pid-kontroller med diverse filter på väl valda ställen.
Fortsättning följer men ni kan naturligtvis ställa frågor, kommentera eller ifrågasätta.