Circuito decodificador rotatorio para codificadores de alto PPR

1

Estoy trabajando en un proyecto que utiliza un codificador rotatorio,
 Estoy usando un codificador de fabricación local de 200 PPR (pulsos por revolución), el codificador tiene 2 cables de entrada (0-5 voltios) y 2 cables de salida (pulsos de salida). He conectado los cables de salida del codificador a los puertos GPIO de la frambuesa pi y estoy usando esto library para obtener resultados. Funciona muy bien.

Ahora necesito hacer lo mismo con el codificador 4000-5000 PPR : enlace como este. la frambuesa pi no puede medir la salida de este codificador utilizando la biblioteca anterior.

Problemas con los que necesito ayuda:
1) ¿Debo usar o diseñar un circuito decodificador y luego alimentar la salida a pi?

2) ¿Es posible resolver este problema mediante programación? como?

    
pregunta Mr.Sky

1 respuesta

2

Bueno, echemos un vistazo a la documentación de su biblioteca:

  

La implementación actual de la clase RotaryEncoder utiliza sondeo para monitorear las entradas en lugar de usar interrupciones GPIO. Parece que la tubería está en su lugar dentro del cableado para usar interrupciones en los GPIO, pero eso lo dejaré para otro día. En su lugar, he incluido una clase de subproceso de trabajo opcional que se puede usar para monitorear las entradas, dejando el hilo principal libre para su trabajo.

En un sistema multitarea preferente como el Pi, el sistema operativo ejecutará cada proceso por turno cuando sea necesario. Por lo tanto, cualquier sistema que se base en el sondeo perderá eventos cuando la CPU esté haciendo algo más que ejecutar el código de sondeo. Estoy bastante sorprendido de que esta biblioteca no pierda pulsos incluso con un codificador de PPR bajo ... debería suceder si la carga de CPU era alta.

Por lo tanto, no funciona.

Los documentos del codificador mencionan una frecuencia de pulso máxima de 200 kHz. Esto es bastante alto.

Si el Pi puede manejar una tasa de interrupción tan alta, use interrupciones de cambio de pin.

De lo contrario, use un decodificador de hardware (o un micro dedicado como tal, e informe al Pi).

    
respondido por el peufeu

Lea otras preguntas en las etiquetas