PID-reglering + stanna motor exakt
Re: PID-reglering + stanna motor exakt
Reglerloopen kör var 13'e mS nu, så ~75 ggr per sekund. Kollar man på de förstorade graferna ovanför så ser man att varvtalet kan ibland ändras typ 100-200RPM på de 13mS, så av den anledningen känns det ju inte som om man skall förlänga den tiden. Men det är ju en balansgång mellan uppdateringsfrekvens och upplösning.. Jag får se senare om jag behöver bättre upplösning, då kan jag nog förbättra läsgaffelanordningen så att jag klan få lite fler pulser. Jag skall leka lite till med detta nu, sen skall jag gå på nöten att få motorn att stanna efter rätt antal varv
(tänker göra en till PID-regler loop som arbetar mot antal önskade varv, sen tar jag det pidOut-värdet som är lägst och lägger det till PWM-modulens DC-register).
Re: PID-reglering + stanna motor exakt
Jo men eftersom upplösningen är så låg så kan ju det faktiska varvtalet ändra sig nästan 100rpm utan att regulatorn ens märker det. Så det är inte så konstigt att den svajjar lite. Den får ju inte en chans att göra nått åt saken förrän hastigheten ÄR minst 100rpm fel - för regulatorn så är ju hastigheten "dead on" ända tills den ser ett fel på "ett" vilket betyder ju i det här fallet betyder 100rpm. Ja, du förstår vad jag menar.
Re: PID-reglering + stanna motor exakt
Håller med H.O om att det ser ut som att upplösningen är lite för dålig, framförallt när du kör långsamt och då är det ju derivatan som blir mest lidande av det. Du kanske skulle kunna prova med att filtrera signalen. Behåll P och I som nu men kör ett lågpassfilter innan du beräknar derivatan. Enklaste varianten är väl någon form av medelvärde så kan du se om det hjälper.
Re: PID-reglering + stanna motor exakt
En lågpassfiltreing inför ju en fördröjning i reglersystemet som kan trilskas. Ett annat sätt att förbättra D delen när man har en en kod-skiva är att mäta den faktiska tiden mellan enkoder omslagen. T.ex. ha en högupplöst timer som läses av i interrupt-rutinen som sköter enkoder räkaren. Du vet ju vinkelskillnaden mellan två enkoder-counts. Dividerar du med den faktiska tidsdiffen så får du ett bättre hastightsvärde.
Re: PID-reglering + stanna motor exakt
Jag har inte pysslat så mycket med att reglera motorer så denna tråd är väldigt intressant att följa.
Andax, du skriver "Ett annat sätt att förbättra D delen när man har en en kod-skiva är att mäta den faktiska tiden mellan enkoder omslagen."
Detta ger utrymme för tolkning eller kanske snarare fundering på vad du egentligen menar. Eftersom kodskiva är ett korrekt sammansatt ord väljer jag att använda detta.
Menar du en kodskiva, det vill säga ett stycke kodskiva eller menar du när man använder kodskiva? hm..., krångligt att förklara. Jag skriver om din mening som jag tolkar den. Är nedanstående tolkning rätt?
Ett sätt att förbättra D-funktionen i regleringen när man använder kodskiva är att mäta tiden mellan enkoder omslagen.
Andax, du skriver "Ett annat sätt att förbättra D delen när man har en en kod-skiva är att mäta den faktiska tiden mellan enkoder omslagen."
Detta ger utrymme för tolkning eller kanske snarare fundering på vad du egentligen menar. Eftersom kodskiva är ett korrekt sammansatt ord väljer jag att använda detta.
Menar du en kodskiva, det vill säga ett stycke kodskiva eller menar du när man använder kodskiva? hm..., krångligt att förklara. Jag skriver om din mening som jag tolkar den. Är nedanstående tolkning rätt?
Ett sätt att förbättra D-funktionen i regleringen när man använder kodskiva är att mäta tiden mellan enkoder omslagen.
Re: PID-reglering + stanna motor exakt
Jag var lite otydlig. Här kommer ett nytt försök: squiz3r använder en spaltskiva med läsgaffel som han fångar omslagsflankerna i en interrup-rutin. I den interrupt-rutinen räknar han sedan upp en räknare som senare används som vinkelmått (man vet ju hur många spalter/varv man har). Sedan tittar han på hur mycket räknaren hunnit ändra sig mellan två avläsningar för att skatta hastighet mm. Problemet är att eftersom hans reglerloop jobbar på 75 Hz och asynkront mot spalt-interrupten. Alltså får han jitter när han läser av värdena. Speciellt vid låga hastigheter då det är få omslag mellan avläsningar så blir skattningen dålig.
Om man istället loggar en precis tid när omslaget sker i interrupten och sedan tittar på tidsskillnaden mellan denna tid och föregående tid så kan man få mycket noggrannare beräkning av vinkelhastigheten eftersom jittret blir mindre.
eller som du Labmaster skriver det: "Ett sätt att förbättra D-funktionen i regleringen när man använder kodskiva är att mäta tiden mellan enkoder omslagen."
Vinkelhastigheten w = (v2-v1)/(t2-t1), där v1 och v2 är vinkelräknaren vid tidpunkterna t1 resp t2 (loggat i interrupt-rutinen).
Om man istället loggar en precis tid när omslaget sker i interrupten och sedan tittar på tidsskillnaden mellan denna tid och föregående tid så kan man få mycket noggrannare beräkning av vinkelhastigheten eftersom jittret blir mindre.
eller som du Labmaster skriver det: "Ett sätt att förbättra D-funktionen i regleringen när man använder kodskiva är att mäta tiden mellan enkoder omslagen."
Vinkelhastigheten w = (v2-v1)/(t2-t1), där v1 och v2 är vinkelräknaren vid tidpunkterna t1 resp t2 (loggat i interrupt-rutinen).
Re: PID-reglering + stanna motor exakt
Hej Andax, tack för bekräftelsen att jag tolkat din mening rätt. Ibland blir det lite otydligt när man skriver. Gör samma misstag själv emellanåt och när jag lite senare läser det jag skrivit så upptäcker jag att det finns tolkningsutrymme på grund av dålig meningsuppbyggnad i texten.
Din bakgrundsbeskrivning av problemet hade jag redan formulerat i mina tankar baserat på min tolkning av rubricerad mening, men det finns ju flera som läser tråden som kan ha nytta av den.
Ta dig en bra dag
Din bakgrundsbeskrivning av problemet hade jag redan formulerat i mina tankar baserat på min tolkning av rubricerad mening, men det finns ju flera som läser tråden som kan ha nytta av den.
Ta dig en bra dag
