Paso 1: Vamos a hablar lo básico! ¿Qué estoy haciendo, ¿por qué?
Estoy usando muchas palabras para describir mi método, pero también respeto que todo el mundo se acerca esto desde un lugar diferente. Si eres experimentado, lo siento por las palabras, pero si usted no está familiarizado con arduino y quiere ejecutar un motor paso a paso más rápido de lo que actualmente puede con accelstepper, entonces por favor consulte cualquier duda en absoluto.
El Plan:
Accelstepper utiliza un perfil de aceleración no lineal, para poco a poco aumentar la velocidad de paso del motor paso a paso. Lo hace de una manera muy abstracta durante la llamada stepper.run(), que es una función que (idea aproximada) comprueba si eres de un nuevo paso y si, el conductor los pasos y calcula Cuándo el siguiente paso es debido. Usted tiene que llamar con frecuencia, pero puede hacer otras cosas durante el bucle de control. Así que aquí por ejemplo se puede ver:
Mientras (digitalRead(someSensor)==high) {}
hacer cosas
hacer más cosas
stepper.Run();
}
Como las "cosas" no tardaron mucho, stepper.run() se ejecuta con mucha frecuencia, y tiene funcionamiento liso paso a paso. Pero stepper.run() no es una función muy rápida, y en algún momento es el factor limitante. Entonces, mientras bucle tarda demasiado.
Así que mi propuesta y mi método es hacer lo siguiente:
//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() de pseudo código:
//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
¿Tiene esto sentido? Siguiente paso vamos a bucear en mi código comentado igualmente prolijas y ven si hay alguna duda.