¿Cómo usar dos sensores de codificador con un Arduino Uno?

0

Tengo el siguiente problema: debo usar dos codificadores para medir la velocidad de dos motores de CC al mismo tiempo, usando solo un Arduino Uno. Pero el Arduino solo posee dos pines de interrupción, y los necesito para un solo codificador. ¿Hay alguna solución que pueda utilizar para que mis dos codificadores se ejecuten al mismo tiempo?

¡Cualquier consejo será útil!

    
pregunta Vinicius

4 respuestas

1

Hay una muy buena biblioteca para trabajar con codificadores en la plataforma Arduino así como en Teensys. Está desarrollado por PJRC, el desarrollador de teensy, y tiene una muy buena explicación en su página que se puede encontrar aquí: enlace

Para responder a su pregunta un poco más exhaustivamente, los codificadores funcionan, al codificar la rotación en el llamado código gris.

El código gris es una forma de señalización eléctrica donde tienes dos trenes de pulsos, que se ven así:

Este método de señalización permite que un microcontrolador como un Arduino detecte tanto la dirección de rotación como la cantidad de rotación.

Una forma de leer el código gris es disparar cuando uno de los pines, p. ej., pin1, sube, y luego lee el estado del segundo pin. Debido a la naturaleza del código gris, si está girando en una dirección, el pin 2 siempre estará bajo cuando el pin 1 esté en una dirección de rotación, mientras que siempre estará alto para la dirección de rotación opuesta.

Una buena manera de implementar esto es usar interrupciones para detectar cuándo un pin cambia de estado porque los codificadores generarán señales muy rápido con velocidades de rotación moderadas porque un codificador típico usado con un Arduino tiene 4 pasos eléctricos por sangría física. Sin embargo, todavía tendrá varios problemas que superar. En primer lugar, al ser un interruptor mecánico, tendrá que lidiar con el rebote del interruptor, pero, entre otras cosas, lidiar con la velocidad de ejecución del código, para garantizar que no se pierda ningún impulso en movimientos más rápidos.

En general, mi recomendación sería utilizar la biblioteca provista por PJRC, ya que es una biblioteca de muy buen rendimiento y es compatible con múltiples modos de operación, con diferentes niveles de rendimiento.

Los consejos generales para obtener el máximo rendimiento de los encoders de lectura es utilizar las interrupciones tanto como sea posible, para garantizar que se capten los impulsos.

    
respondido por el Dumle29
0

No estoy lo suficientemente familiarizado con el entorno de Arduino para ofrecer una solución real, pero estaría investigando si la limitación de las interrupciones es una cosa de Arduino, o si es una cosa de AVR. Si es el primero, puede considerar utilizar el Arduino como un sistema de desarrollo AVR, y simplemente programar el microcontrolador directamente sin que el sistema de cableado se encuentre en la parte superior de todo.

Si el AVR no tiene suficiente potencia, use su Uno para crear diferentes aspectos del sistema y luego pasar a una plataforma más grande, Arduino o de otra manera, para completar el trabajo que necesita hacer. Herramienta adecuada para el trabajo correcto.

    
respondido por el Scott Seidman
0
  

dos codificadores para medir la velocidad de dos motores de CC al mismo tiempo

Ya que lo único que te importa es la velocidad, entonces los 2 pines de interrupción son suficientes. Conecte solo 1 fase de cada sensor a cada pin de interrupción Arduino. La velocidad de interrupción de cada pin le indicará la velocidad de ese motor y el codificador rotatorio.

Solo necesitas las dos fases del codificador rotatorio si te importa la dirección de rotación.

Si tenía 2 entradas de interrupción y también tenía 2 entradas digitales sin interrupción disponibles, aún puede medir tanto la dirección de rotación como la velocidad de rotación. Simplemente interrumpa, por ejemplo, la fase 1 del flanco ascendente. Cuando se produce la interrupción, lea inmediatamente el estado de la fase 2. En ese punto, la Fase 2 será 1 cuando gire en una dirección y 0 si gire en la otra dirección.

    
respondido por el Vince Patron
0
  

¿Hay alguna solución que pueda usar para que mis dos codificadores se ejecuten al mismo tiempo?

puede usar PCINTs si está disponible en su chip.

Los temporizadores con entradas de reloj externo se pueden configurar como interrupciones externas.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas