La interfaz del codificador de cuadratura pierde el conteo

0

Estoy intentando leer la señal del codificador de un amplificador de unidad utilizando un ARM (TM4C). El amplificador tiene salidas diferenciales de t (+ - 5V), la MCU tiene 2 QEIs (interfaces de codificador de cuadratura).

Primero, traté de usar las señales A y B como las de un solo extremo, y algunas veces obtengo un número constante de señal / conteo. (En comparación con el software de configuración de los amplificadores de unidad, ambos están muertos en el mismo conteo).

PERO de vez en cuando, los conteos comienzan a flotar incluso si el motor no se está moviendo. O mientras se mueve de una dirección a otra, comienza a perder la cuenta.

He medido la señal con mi Rigol DSO y hay picos en las señales del codificador. Así que decidí usar tanto A como notA para alimentar a un UA9637A a fin de que las señales diferenciales terminen de forma única y obtengan una onda cuadrada agradable, pero sin alegría.

El problema persiste.

Notas al margen:

  • Amplificador de la unidad = Hiwin D2
  • Codificador = 13 bits incrementales (RS4222 Differen t ial)
  • MCU = TM4C123G LaunchPad

¿Qué debo tratar de obtener el número correcto de pasos? El cable que viene del amplificador a la placa no está blindado, pero tiene una longitud de 20-25 cm. ¿Esto importa?

Estoy abierto a cualquier idea que pueda solucionar este problema.

    
pregunta Zoszko

1 respuesta

1

Este es un error común con los codificadores en cuadratura.

Usted NO puede simplemente contar los bordes / pulsos de una señal u otra por sí misma. Los codificadores generan inherentemente bordes espurios a medida que la máscara descubre el sensor, ya sea óptico, magnético o lo que sea.

Puede agregar filtrado para reducir ese ruido cuando la cosa está girando, pero eso no ayudará si el codificador se detiene exactamente en un borde de la ranura o máscara. Obviamente, el ruido eléctrico será un problema, pero incluso la vibración de un ventilador conectado al mismo chasis puede hacer que la cosa envíe cientos de bordes.

Como tal, realmente necesitas usar un algoritmo o lógica de contador ascendente / descendente que controle ambas líneas.

Digamos que estamos usando la línea A para contar.

  1. Si ve un flanco ascendente en la línea A y la línea B está baja, cuenta.
  2. Si ve un borde descendente en la línea A y la línea B aún está baja, su codificador le dice que cree que retrocedió un poco. Debes contar hacia abajo

Esto se complica aún más por el hecho de que los bordes adicionales pueden suceder más rápido de lo que su monitor puede verlos.

Cuando estás conduciendo algo a la velocidad, y sabes que lo que sea no puede retroceder espontáneamente, puedes usar la segunda señal como acelerador para la primera. Es decir, si ve un flanco ascendente en la línea A y la línea B es baja, cuenta y espera a que la línea B pase a un nivel alto y luego más bajo antes de monitorear la línea A. nuevamente     

respondido por el Trevor_G

Lea otras preguntas en las etiquetas