Stap 1: Spreek basics! Wat doe ik, waarom?
Ik ben met behulp van een heleboel woorden om te beschrijven mijn methode, maar ik respecteer ook dat iedereen zou dit het naderen van een andere plaats. Als je bent ervaren, sorry voor de extra woorden, maar als u niet vertrouwd bent met de arduino en wilt uitvoeren van een stappenmotor sneller dan je op dit moment met accelstepper kunt, dan kunt u vragen stellen helemaal.
Het Plan:
Accelstepper maakt gebruik van een niet-lineaire versnelling profiel, daarna langzaam verhoogt het staptempo van uw stappenmotor. Het doet dit op een zeer abstracte manier tijdens het gesprek van de stepper.run(), die een functie is dat (ruwe idee) bent u verschuldigd voor een nieuwe stap wordt gecontroleerd, en bent u, stappen van het stuurprogramma wordt berekend wanneer de volgende stap is verschuldigd. U wilt het regelmatig belt, maar u kunt andere dingen doen tijdens de controle lus. Dus hier bijvoorbeeld kan worden weergegeven:
Terwijl (digitalRead(someSensor)==high) {}
dingen doen
meer dingen doen
Stepper.run();
}
Zolang de "dingen" niet lang duurt, stepper.run() zeer vaak wordt uitgevoerd en hebt u vloeiende stappenmotoren bediening. Stepper.run() is niet een zeer snelle functie, maar op een gegeven moment is de beperkende factor! Vervolgens dit while lus te lang duurt.
Dus is mijn voorstel en de methode het volgende doen:
//starting from the non-moving position while(condition){ //do stuff stepper.run(); if (stepper.Speed()==maxAccelstepperSpeed){ <extraFastMode(); //Extrafast mode is a simple linear acceleration program. Not as nice as stepper.run(), but much faster. break; //let's get out of this while loop! }
extraFastMode() psuedo-code:
//calculate a starting stepdelay based on what speed you're transitioning away from the accelstepper library. The new method of stepping will just be: "While(condition){ "Do stuff/ check extra if statements Take a step wait manually with a delay add to a counter //if the counter hits a trigger number, and you're not at your final target speed, then decrease your delay [which increases your motor speed" }//loop back to the top
Is dit zinvol? Volgende stap, laten we mijn even langdradig becommentarieerde code induiken en komen terug als er vragen zijn.