problema del codificador

0

Anteriormente, conecté uno de esos codificadores Joral a un motor a través de una caja de engranajes y grabé algunos datos de prueba. Desafortunadamente, el codificador a veces envía valores que parecen valores sin sentido (números mucho más grandes que el máximo esperado, número de giros que cambian en el tiempo inadecuado...).

Montaje del codificador:

Dado que (en este caso) el codificador gira 62 veces para una sola revolución, el codificador debe realizar un seguimiento del número de vueltas y del ángulo. El codificador parece que puede recordar hasta 65536 vueltas. Después de eso se olvida y comienza de nuevo en cero. Realista significa que puedo seguir el ángulo del brazo perfectamente para 528 rotaciones de brazo desde una posición inicial arbitraria (32768 codificadores giros / 62 = 528.51 ... que no es un buen número redondo). Si alguien intenta seguir avanzando en esa dirección, ya no podrá detectar el ángulo con precisión. Sería imposible distinguir entre las rotaciones de brazo verdadero "casa" frente a 528.51, ya que los datos enviados por el codificador serían los mismos para ambos. posiciones.

¿Alguna idea sobre lo que podría intentar hacer aquí?

Aprecio mucho cualquier ayuda!

    
pregunta Raf

2 respuestas

0

Almacene la salida del codificador anterior en una variable antes de recibir una nueva lectura. Si el valor anterior fue más cercano a 65536 rasher que 0, pero el nuevo valor es más cercano a 0 en lugar de 65536, sabe que el recuento se ha desbordado o "envuelto". Luego, puede contar estos desbordamientos en una variable separada: disminuye el conteo de desbordamiento en uno cuando 0 - > 65536, incrementas en uno cuando 65536 - > 0.

Luego, puede recuperar el conteo real de turnos multiplicando el conteo de desbordamiento por el rango máximo de salida de giro del codificador (65536 - 0) y agregando el conteo actual de turnos del codificador.

    
respondido por el jms
0

Para los codificadores, con los que necesito controlar la posición, casi nunca uso los valores reales del codificador. Realmente no me molesto con los codificadores absolutos, aunque en realidad no importa, absoluto vs. incremental.

Necesitará un procesador capaz de algunos cálculos matemáticos y un par de registros. Designe algunos registros como "My_Encoder_Count", "Old_Count" y "Delta_Count". Cada exploración de programa, calcula Delta_Count a partir del valor del codificador sin procesar - Old_Count, mueve el valor del codificador sin procesar actual a Old_Count y agrega Delta_Count a "My_Encoder_Count". Hecho.

Para restablecer el conteo, simplemente borre My_Encoder_Count.

Algunas ventajas ocultas de este método, puede inicializar Old_Count con el valor bruto en el inicio del programa para eliminar valores extraños de los codificadores absolutos que olvidan su lugar (muy común) o jitter de los codificadores incrementales.

También puede decidir utilizar un codificador incremental más barato, y puede mantener el conteo interno a través de los ciclos de energía.

    
respondido por el R Drast

Lea otras preguntas en las etiquetas