Stap 5: Een kleine eigenaardigheid
Een eigenaardigheid van de beheersing van een XY-plotter is dat wij ervoor zorgen moeten dat beide motoren hun beurt tegelijkertijd voltooien, en daarom kunnen de twee motoren moeten draaien met verschillende snelheden.
Om dit te illustreren, stel dat we (0,0) zijn vanaf en naar (45,45) wilt verplaatsen. Duidelijk, als beide motoren met dezelfde snelheid draaien, ze zullen beide bereiken (45,45) op hetzelfde moment. Vervolgens, stel dat we naar wilt verplaatsen van (0,0) (30,90). In dit geval als beide motoren met dezelfde snelheid verplaatst, bedraagt dan wanneer de motor X 30 bereikt, zal de motor Y bij 30 en dan de X-motor gestopt blijft terwijl de motor Y houdt op draaien totdat het 90. Dus, om ervoor te zorgen dat beide motoren bereik (30, 90) op hetzelfde moment, we moeten om de Y motor beurt 3 keer sneller dan de X motor. Kijk naar de afbeelding om te zien wat ik bedoel...
Ter uitvoering van deze controle van de snelheid, schreef ik wat code waarmee wordt gecontroleerd om te zien welke motor moet worden versneld om ervoor te zorgen dat beide motoren hun respectieve doelwaarden bereiken op exact hetzelfde moment. We moeten ook rekening houden met de hoek die de uitgaande as na elke stap van de motor verandert. In mijn geval was dit ongeveer 0,72 graden en dus in mijn broncode ik hebben ingevoerd een constante (zoals een nul fout) met de naam MOTOR_ERROR en stel de waarde daarvan hebben = 0,8 graden. Kijk naar de XYPlotter::GotoAngle() functie in de broncode weergeven om te zien hoe bepaal ik welke motor moet sneller gaan.
Bijvoorbeeld, als Y motor nodig heeft om te schakelen van 4 keer zo snel als de X-motor, vervolgens YMotor.StepOnce() heet viermaal voor telkens wanneer de XMotor.TurnOnce() wordt aangeroepen.