Tutorial · Gevorderd · 30 min
Verdraaispeling in tandwielkasten: meten en verhelpen
De speling in elke tandwieloverbrenging die een arm laat doorzakken en de odometrie doet drijven. Meet die van jou in graden en kies: verhelpen of leren werken.
Inleiding
Er is een familie robotstoringen die zich allemaal hetzelfde voordoen: de machine gaat de ene kant op goed en de andere kant op verkeerd. De arm bereikt hetzelfde punt van links en van rechts en komt op twee verschillende posities terecht. De balancerende robot schudt rond de verticale lijn en komt niet tot rust, hoe je hem ook afstelt. De koers van de doolhofrobot is na elke draai een graad mis, en na de hele rit vijftien.
Geen van die dingen zijn afstelproblemen, en ze hebben allemaal dezelfde oorzaak. Tussen je motor en het ding dat hij aandrijft zit een tandwieloverbrenging, en een tandwieloverbrenging moet een spleet tussen de tanden hebben, anders zou hij vastlopen. Die spleet heet verdraaispeling, en dat betekent dat de uitvoer bij elke richtingswisseling van de motor helemaal niet beweegt tot de tanden de spleet oversteken en aan de andere kant tegen elkaar aanliggen.
Deze site noemt verdraaispeling op zeven pagina’s als de reden dat er iets niet werkt. Dit is de pagina die het uitleegt.
Wat het werkelijk is
Verdraaispeling is geen wrijving, en het is geen vertraging. Het is een dode zone met geheugen.
Stel je de aandrijvende tand voor tegen de ene flank van de aangedreven tand. Duw je, en de uitvoer volgt de invoer exact — geen enkele fout. Keer je nu om. De aandrijvende tand laat die flank los en overbrugt de spleet, en tijdens die hele oversteek blijft de uitvoer precies staan waar hij stond. Bij contact op de andere flank begint de uitvoer weer te volgen, met een permanente verschuiving van de breedte van de spleet.
Twee gevolgen vloeien direct uit die beschrijving, en dat zijn de twee om te onthouden:
- Verdraaispeling kost je niets zolang je in één richting beweegt. Het is een belasting op elke richtingswisseling, eenmaal per wisseling, hoe ver je daarna ook nog rijdt. De duurste wisseling die een robot maakt is een noodstop, waarbij de speling vrije beweging is die direct bij de remafstand komt.
- De fout hangt af van de kant waar je vandaan komt. Dat maakt er een hysterese van in plaats van een simpele verschuiving, en daarom kan een kalibratieconstante hem niet verwijderen.
De vorm die hij maakt
Bestuur een gewricht met 4° speling heen en weer en zet uit wat de uitvoer doet.
Het onderste paneel is het nuttige beeld, omdat het de twee takken duidelijk maakt. Bij het omhooggaan zit de uitvoer een halve spleet achter. Bij het omlaaggaan zit hij een halve spleet voor. Daartussenin staat de uitvoer waar je hem gelaten had.
Meet die van jou in tien minuten
Je kunt niet om een getal heen ontwerpen dat je niet hebt, en elke tandwielkast is anders. Er zijn twee manieren om eraan te komen.
Met de hand, voor alles. Schakel de motor uit en houd het chassis stil. Plak een strookje tape op de rand van het wiel of het uiteinde van de arm en wiebel de uitvoer voorzichtig tussen de twee aanslagen — niet hard genoeg om iets te verbuigen, alleen tot waar hij elke kant weerstand ontmoet. Markeer beide uitersten en meet de boog ertussen. Reken dat om:
backlash (°) = arc / (π · D) × 360
Herhaal dat op vier of vijf posities rond een volledige omwenteling van de uitvoer en bewaar de slechtste. Variatie van tand op tand en excentriciteit van de as zijn reëel, en de plek waar je toevallig het eerst meet is niet noodzakelijk representatief.
Met een encoder, nauwkeuriger. Heeft je motor een encoder op de motoras — een N20 encodermotor wel — bestuur hem dan zeer langzaam één kant op tot de uitvoer net gaat bewegen, zet de teller op nul, keer om en tel tot de uitvoer opnieuw beweegt. Dat aantal is de spleet:
backlash (°) = counts / counts-per-output-rev × 360
Voor een N20 met 7 pulsen per kanaal per motoromwenteling, gedecodeerd ×4, achter een verhouding van 1:100, is dat 2800 tellingen per omwenteling van de uitvoer — dus 31 tellingen zijn 4°. Ruim genoeg resolutie om iets te meten dat je bijna niet ziet.
Waar de encoder staat bepaalt wat je kunt zien
Dit is het stuk dat mensen verrast, en het bepaalt of het getal dat je net hebt gemeten een probleem is dat je in software kunt verhelpen.
Een encoder op de motoras zit voor de tandwielkast. Tijdens de oversteek meldt hij dat de motor prima draait, want de motor draait prima. Het wiel niet. Je positieschatting zegt dat je hebt bewogen; dat deed je niet. Verdraaispeling is onzichtbaar voor een encoder aan de motorkant en komt in je odometrie terecht als zuivere, ongecorrigeerde fout.
Een encoder op de uitvoeras zit achter de tandwielkast en meldt de waarheid — maar juist daarom leest hij tijdens de oversteek nul, en daarom gebruik je juist de encoder aan de motorkant om verdraaispeling te meten. De encoder die er niet voor kan corrigeren is degene die hem wel kan zien.
Dus de eerlijke samenvatting voor een hobbyrobot: bij vrijwel allemaal zit de encoder op de motor, en is verdraaispeling ongemeten fout in de positieschatting. Al het onderstaande gaat over die fout klein maken, of er irrelevant aan maken.
Wat het je kost
Speling op een gewricht is een hoek; wat ze kost is een afstand, en de hefboom bepaalt hoeveel. Dezelfde 4° speling, drie robots:
| Plek | Hefboom | Kosten per richtingswisseling |
|---|---|---|
| Schouder van een robotarm | 150 mm hefboom | 10,5 mm bij de grijper |
| Aandrijfwiel | 65 mm wiel | 2,27 mm beweging |
| Micromouse-wiel | 42 mm wiel | 1,47 mm beweging |
De armregel is waarom gearticuleerde armen het meeste lijden bij hobbytoleranties: de speling van de schouder wordt met de hele lengte van de arm vermenigvuldigd voordat hij het gereedschap bereikt. Eén graad op de schouder van een 150 mm hefboom is al 2,6 mm bij de grijper.
De wielregels lijken onschadelijk tot je de wisselingen gaat tellen. Een micromouse draait bij elke kruising ter plaatse, en zo’n draai keert elke keer één wiel om. Met 42 mm wielen op 90 mm spoorbreedte is 4° speling 0,93° koersfout per draai — en koersfout is het enige wat niet weg middelt, want elke volgende rechte lijn wordt langs het verkeerde azimut gereden. Honderd draaibewegingen is 147 mm beweging die je odometrie heeft geteld en de robot nooit heeft gemaakt.
Een zelfbalancerende robot is het uiterste geval, omdat hij doorlopend keert — honderden keren per seconde, in kleine stappen, en elke stap is kleiner dan de spleet. Hij zit het grootste deel van zijn leven binnen de dode zone, en daarom komt geen enkele combinatie van versterkingen hem tot rust.
Oplossing 1: koop er minder van
De goedkoopste oplossing is meestal het onderdeel.
Metalen tandwielen in plaats van plastic. Spuitgiet-tandwielen hebben ruime toleranties en gaan nog ruimer worden. Een metalen tandwieloverbrenging haalt verdraaispeling niet weg, maar heeft er doorgaans een fractie van, en dat is de enige reden dat N20-motoren in elke balanceerrobot en elke micromouse-build opduiken, en waarom de TT tandwielmotor prima is voor een lijnvolger die meestal vooruit rijdt.
Weet welke trap telt. Verdraaispeling van elke trap, omgerekend naar de uitvoer, wordt gedeeld door de overbrengingsverhouding tussen die trap en de uitvoer. De laatste trap heeft verhouding één ten opzichte van de uitvoer, dus diens volledige verdraaispeling komt tot uiting en alles ervoor wordt naar beneden gedeeld. Een tandwielkast met hoge verhouding is dus niet automatisch slechter — en als je één tandwiel gaat verbeteren, verbeter dan de laatste.
Voorspanning. Gesplitste tandwielen die tegen elkaar aan gedrukt worden, antispeldraadmoeren, een gespannen riem in plaats van een tandwielpaar. Al deze varianten houden de tanden tegelijk aan beide flanken in contact. Ze kosten allemaal wrijving, rendement en slijtage, en dat is de ruil die je maakt.
Of schrap de tandwielkast. Een riemaangedreven of direct-drive gewricht heeft geen tandwielspeling om te hebben. Het heeft in plaats daarvan meegaandheid, en dat is een ander probleem dat verderop aan bod komt.
Oplossing 2: nader van één kant
De oudste oplossing in de verspaning en de beste waarde in software, omdat hij niets kost.
Verdraaispeling wordt alleen bij een wisseling in rekening gebracht. Zorg dus dat het laatste deel van elke beweging dezelfde richting heeft, en de spleet is altijd al overgestoken als je aankomt. Moet je een positie van boven benaderen, schiet er dan voorbij en kom omhoog terug. 3D-printers doen dat op de Z-as; CNC-machinisten doen het met de hand als reflex.
// Always arrive travelling positive: the gap is crossed before we get there.
void moveTo(float target) {
if (target < currentPosition()) {
driveTo(target - APPROACH_MARGIN); // margin > measured backlash
}
driveTo(target);
}
APPROACH_MARGIN moet ruim groter zijn dan de gemeten speling — tweemaal is een redelijk startpunt. De kosten zijn tijd op de helft van je bewegingen, en het voordeel is een reproduceerbaarheid die niet meer afhangt van de kant waar je vandaan kwam.
Voor een mobiele robot leest dezelfde truc anders: geef de voorkeur aan een wijde boog boven een draai ter plaatse waar de kaart die toelaat, want een boog keert geen van beide wielen om.
Oplossing 3: laat de regelaar er niet tegen vechten
Een PID-regellus komt verdraaispeling tegen als een dode zone midden in zijn eigen regelbereik, en gaat er op een specifieke, herkenbare manier slecht mee om.
Binnen de spleet stijgt de uitvoer en gebeurt er niets, dus de fout wordt niet kleiner. De integrale term blijft accumuleren gedurende een periode waarin geen hoeveelheid inspanning had geholpen. Wanneer de tanden eindelijk grijpen, wordt de opgebouwde term in één keer toegepast op een mechanisme dat nu gekoppeld is, en schiet het gewricht voorbij het doelpunt. Daarna keert het om, steekt de spleet opnieuw over, en doet het hetzelfde in de andere richting. Dat is een grenscyclus — een gestaag zoekende oscillatie die nooit convergeert — en de amplitude wordt bepaald door de mechanica, niet door de versterkingen.
Wat werkt:
- Stop met integreren als je niet beweegt terwijl je wel commando geeft. Is de uitvoer boven de drempel die beweging zou moeten opleveren en zegt de encoder dat de uitvoer niet beweegt, bevries dan de integraal. Dit is dezelfde anti-winduplogica die je zou gebruiken tegen een verzadigde actuator; de dode zone is simpelweg een actuator die tijdelijk losgekoppeld is.
- Verlaag
Kivoordat jeKpverlaagt. De integrale term is degene die van een dode zone een grenscyclus maakt. - Jaag niet op de laatste fractie van een graad. Is je speling 4°, dan vraag je met een tolerantieband van 1° om oscillatie. Accepteer een dode band iets breder dan de verdraaispeling, en de lus stopt met zoeken.
- Vorm de wisseling. Een bewegingsprofiel dat door de nulsnelheid in rent steekt de spleet zacht over in plaats van hard tegen de andere tandflank te slaan — stiller, en veel milder voor plastic tandwielen.
Kijk dit gebeuren in de PID simulator door af te stellen op een proces dat traag reageert op kleine input: dezelfde versterkingen die stabiel zijn voor grote bewegingen, zoeken rond de streefwaarde bij kleine.
Meegaandheid is de andere helft van de verloren beweging
Meet je speling door de uitvoer te wiebelen, dan meet je verdraaispeling én meegaandheid tegelijk, en daarvoor zijn verschillende oplossingen nodig. Scheid ze met één proef: belast, noteer de doorbuiging, en ontlast daarna.
| Verdraaispeling | Meegaandheid | |
|---|---|---|
| Doorbuiging versus belasting | Vaste spleet, onafhankelijk van de belasting | Evenredig met de belasting |
| Bij ontlasten | Blijft staan waar je hem liet | Veert terug |
| Oplossing | Betere tandwielen, voorspanning, naderen van één kant | Stijvere onderdelen, kortere hefbomen, versteviging |
| Symptoom | Fout die van de richting afhangt | Doorzakken onder belasting, naslingeren na bewegingen |
Een lange acrylaarm heeft heel weinig verdraaispeling en heel veel meegaandheid. Een goedkope tandwielkast van plastic op een kort stompje is precies het omgekeerde. Beide lezen als “de arm gaat niet waar ik hem gezegd heb”, en daarom is die proef van twee minuten de moeite waard voordat je iets koopt.
Wanneer het misgaat
| Symptoom | Meestal |
|---|---|
| De arm bereikt een punt vanuit elke kant anders | Verdraaispeling, glashelder — meet die voordat je iets afstelt |
| De balancerende robot schudt en komt nooit tot rust | De speling is groter dan de correctiestappen; pak een metalen tandwielkast, niet méér afstemming |
| De koers drijft een graad per draai | Verdraaispeling op het wiel dat omkeert; geef de voorkeur aan bogen, of voeg een gyroscoop toe |
| De odometrie zegt dat hij bewoog, en dat deed hij niet | Een encoder aan de motorkant ziet de spleet in de tandwielkast niet |
| Constante oscillatie rond de streefwaarde | De integrale term loopt op door de dode zone |
| De positie is reproduceerbaar maar zakt onder belasting | Meegaandheid, geen verdraaispeling — verstevig, verander geen tandwielen |
| Het is in een paar maanden erger geworden | Slijtage van plastic tandwielen; verdraaispeling groeit met het gebruik |
Verdraaispeling is de reden dat een robot die perfect is in simulatie teleurstelt op de werkbank, want het is precies het soort ding dat een ideaal model weglaten. Meet het één keer, schrijf het getal op, en het meeste van de mist verdwijnt ermee. Komt het getal groot genoeg om pijn te doen, dan is het antwoord meestal een betere motor en tandwielkast in plaats van nog een middag afstellen.
Verken de graaf
Onderdeel van deze bouwprojecten
Projecten en leerroutes waarin deze tutorial voorkomt.
Verder lezen