DIY Plotter med stegmotorer (5 / 6 steg)
Steg 5: En liten egenhet
En egenhet av att kontrollera en XY plotter är att vi måste se till att båda motorer slutföra sin tur vid samma tid, och därför två motorerna kan behöva vända sig med olika hastigheter.
För att illustrera detta, antar att vi börjar från (0,0) och vill flytta till (45,45). Klart, om båda motorer med samma hastighet, de båda når (45,45) samtidigt. Nästa, Antag att vi vill flytta från (0,0) till (30,90). I detta fall om båda motorer med samma hastighet, når sedan när X motorn når 30, Y motorn kommer också att på 30 och sedan X motorn förblir stoppat medan Y motorn håller roterande tills det 90. Så, för att säkerställa att båda motorer reach (30, 90) på samma gång, behöver vi göra Y motor tur 3 gånger snabbare än X motor. Titta på bilden för att se vad jag menar...
För att genomföra denna varvtalsreglering, skrev jag en del kod som kontrollerar vilka motor behöver påskyndas så båda motorerna når sina respektive målvärdena på exakt samma tid. Vi måste också räkna med vinkeln att utgående axel vänder efter varje steg av motorn. I mitt fall, detta var ca 0,72 grader och så i min källa koden jag har infört en konstant (som en noll fel) kallade MOTOR_ERROR och har satt sitt värde = 0.8 grader. Titta på funktionen XYPlotter::GotoAngle() i källkoden för att se hur jag avgöra vilken motor måste gå snabbare.
Till exempel om Y motor behöver slå 4 gånger så snabb som X motor, kallas sedan YMotor.StepOnce() fyra gånger för varje gång XMotor.TurnOnce() kallas.