Los motores paso a paso suelen ser caros para un motor grande. Sin embargo, con un potente motor de CC estándar y un codificador giratorio, puede "simular" un motor paso a paso. ¿Qué tan precisos son los codificadores rotativos con Arduino solo con un bucle básico y no mucho otro código? ¿Va a "perder el pulso" y no registrará la rotación suficiente a menudo? ¿Cómo puedo manejar esto con mucho más código? ¿Hay una mejor manera de hacer esto? ¿Las interrupciones ayudarían? ¿Hay algún tipo de circuito que ayudaría con este problema?
Nota: Probablemente no excederá de 4 rotaciones por segundo ... (Eso puede ser mucho, pero si está haciendo un mecanismo de tipo tornillo de avance, solo sería 24 pulgadas por minuto si hay 10 rotaciones por pulgada de movimiento lineal. )
fuente
Respuestas:
Las interrupciones son lo que usarías en esta situación.
Las tasas que se han mencionado son lo suficientemente lenta en la que probablemente sería capaz de contar dentro de un bucle, sin embargo esto no es recomendable, como un bucle típico tomará muchos ciclos de reloj para completar, y en función del número de instuctiuons por bucle , puede perder algunos recuentos.
Las interrupciones se realizan para este propósito, ya que pueden activarse en cualquier momento, independientemente del estado del bucle.
Hay una función llamada
attachInterrupt()
que tomará tres argumentos.A continuación se muestra un ejemplo para contar una interrupción.
Los modos son los siguientes:
Puede encontrar más información sobre el uso de interrupciones aquí .
Dependiendo del codificador que use, necesitará adaptar el código a sus necesidades y hacer algunos cálculos más para determinar su posición, pero este debería ser un buen punto de partida.
Editar Aquí hay un código de ejemplo de Arduino Sandbox para usar un codificador rotatorio.
fuente
ISR_NAKED()
), puede omitir el guardado automático de contexto C y lograr tasas de interrupción de 100-500 Khz sin problema, pero básicamente está escribiendo ensamblaje en C en ese punto.ISR()
directamente.Agregar algunas referencias a bibliotecas y ejemplos ya escritos, para permitir la comparación entre diferentes enfoques y experiencias con velocidad versus susceptibilidad a pasos faltantes.
Lectura de codificadores rotativos: http://playground.arduino.cc/Main/RotaryEncoders
Codificador de cuadratura demasiado rápido para Arduino (con solución): http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/
Biblioteca Teensy Encoder: https://www.pjrc.com/teensy/td_libs_Encoder.html
Lectura del codificador rotatorio en Arduino: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/
fuente