Brushed DC motoraansturing

Arco

Special Member

Ik wil een kleine dc motor in een platenspeler aansturen met pwm. Op zich geen probleem, maar ik vroeg me af wat de beste manier van aansturen is.
Belangrijkste is een zeer stabiel toerental. (er zit een tacho generator aan, dus dat zou moeten lukken)
Echter wil ik ook dat de motor zo snel mogelijk op toeren is, zonder overshoot te krijgen. Is dit een kwestie van trial-and-error, of is er ook een methodische aanpak voor?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Een PID regelaar maken met een PWM uitgang.
De feedback komt van de tacho.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Arco

Special Member

Zijn daar standaard te gebruiken parameters voor? Vooral het snel opstarten zonder overshoot lijkt me tricky...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
EricP

mét CE

Kun je in je regeling niet botweg de 'laatste parameters' (van de vorige keer) opslaan? Als je dan 'vol vermogen' begint en je tacho zit op 80% ofzo van wat het zijn moet, pak je de PWMrate van de laatste keer. Aardige kans dat je dan meteen 'aardig goed' zit. Met het variëren van die 80% kun je dan undershoot / overshoot nog wat 'recht' trekken.

Op 14 september 2014 20:58:19 schreef Arco:
Zijn daar standaard te gebruiken parameters voor? Vooral het snel opstarten zonder overshoot lijkt me tricky...

Ja, je kunt een PID autotunen of de parameters bepalen als je de stapresponsie meet.
Zoek maar eens op "PID parameter tuning" of op Ziegler-Nichols methode.

Vooral de D factor is belangrijk om de optimale respons te krijgen.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.

Wat Henri62 zegt, maar let goed op de anti-windup van de integrator; tijdens het opstarten geeft een PID regelaar waarbij een output van meer dan 100%, die je dus moet clampen, maar dan loopt je integrator weg. Daarnaast zou je eventueel verschillende gainsets kunnen gebruiken voor steady-state en het opstarten, maar ook daar wordt het niet eenvoudiger van.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Klopt van de windup, maar een goede PID formule is op het web te vinden die al deze onoverkomelijkheden niet heeft.

Ik heb ergens ooit wat links gevonden naar een hele goede uitleg en uitgewerkte code in meerdere stappen.
Hier zijn ze:

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-in…
http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library/

De bovenste is een serie van artikelen die je echt eens moet lezen, erg netjes uitgelegd met grafiekjes en zo.

[Bericht gewijzigd door henri62 op zondag 14 september 2014 22:24:33 (12%)

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.
Arco

Special Member

Bedankt voor de links. Ik ga me er eens in verdiepen...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Elke PID regelaar heeft dat potentiële probleem, en er zijn een aantal "standaard" oplossingen voor, maar welke de handigste is, is afhankelijk van de situatie; in alle gevallen trek je de regelaar uit zijn normale werkgebied.

Een PID regelaar kun je in 3 regels schrijven. Automagisch tunen is leuk, maar werkt de helft van de tijd niet, en dat is zeker niet de manier als je nog moet leren hoe dit soort regelaars werken, want je hebt dan meteen een flink stuk code die bijna niet te doorgronden is als je de basis niet heel goed begrijpt.

De Ziegler-Nichols methode is lekker simpel, en daarmee kun je vrij snel een redelijke instelling vinden, die je vervolgens kunt gaan tunen. Het is wel echt belangrijk dat je kunt zien wat er gebeurd, doordat je ofwel met de microcontroller data kunt loggen en achteraf kunt plotten, of door de diverse parameters (proceswaarde, setpoint, regelaar output, etc.) op een scope zichtbaar te maken.

@Arco: ik neem tenminste aan dat je van plan was een microcontroller te gebruiken.

Je kunt proberen het allemaal in 1 regelaar te vangen, of je zou er een cascade regeling van kunnen maken, met een regelaar voor de snelheid, een voor de versnelling, en een voor de motorstroom (en dus het koppel). Dit klinkt ingewikkeld, maar het is betrekkelijk eenvoudig te implementeren, en aangezien alle 3 de regelaars een min of meer lineair proces besturen, zijn ze wat gemakkelijker in te stellen. Eventueel zou je de regelaar voor de versnelling misschien wel weg kunnen laten, maar het lijkt me wel verstandig om de motorstroom te meten en closed-loop te regelen.

Met 3 regelaars in cascade kun je ook wat gemakkelijker feed-forward inbouwen, voor de tegen-EMK en de weerstand van de motor, de weerstand van het gehele loopwerk, en het (getransformeerde) massatraagheidsmoment. Op die manier hoeft de regelaar alleen de verstoringen weg te regelen, en kun je hem een stuk agressiever instellen zonder dat het meteen instabiel wordt.

Eigenlijk is hetgeen wat je wilt een volwaardige servoregelaar; die bestaat ook uit een cascade van regelaars (positie -> snelheid -> torque).

Je kunt overwegen om, zeker in het begin, een weerstand in serie te zetten met de motor, dat maakt het regelen van de motorstroom een stuk eenvoudiger.

EDIT: ik heb het artikel over de Arduino PID net gelezen, en ik moet zeggen dat dat uitzonderlijk helder geschreven is! Wellicht is dat toch de eenvoudigste manier om te beginnen, en als dat eenmaal werkt, eventueel nog te proberen het dynamische gedrag te verbeteren, zoals ik hierboven heb beschreven.

Zelfs als je het niet direct gaat gebruiken, zou ik je toch aanraden een voorziening te maken om de motorstroom te kunnen meten, ik verwacht dat je die echt nodig gaat hebben.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

@SparkyGSX: Ik ben blij dat je het artikel gelezen hebt en dat het je met me eens bent dat het een goede serie artikelen is.

Verder is een goede PID regelaar niet in 3 regels te maken, maar dat zei je later zelf ook al.
Er zijn meer wegen die naar Rome leiden.
Feedforward regeling, en versnelling regelingen en dat soort trukendozen zijn allemaal mogelijk maar maken het er in het begin niet makkelijker op.

En wat betreft autotuning en de Z&N methode: Het blijft een benadering voor de eerste stap. Manual tuning is en blijft vaak altijd nodig. Een meting van de snelheid en je input waarde is dan wel een noodzaak om te zien of de (step) response goed is.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.

Precies; ik gebruik de Z&N methode zelf ook vooral om een redelijk startpunt te hebben voor handmatig tunen; de gevonden gains kun je met een beetje trial and error vrij snel een acceptabele instelling vinden, en vaak zijn de gains die je daarmee vind wel goed genoeg. Hoewel ik absoluut met je eens ben dat de D actie voor een snelle respons belangrijk is, probeer ik het meestal eerst met alleen Kp en Ki <> 0 op te lossen, aangezien die D actie ook gemakkelijk voor ellende kan zorgen als er wat ruis en transients aanwezig zijn. Een klein low-pass filter (eerste orde IIR) kan ook helpen om een getemde D actie te krijgen, maar die filterconstante is ook weet een extra parameter die goed ingesteld moet worden, en maakt daarmee het instellen weer ingewikkelder.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken