¿Cómo obtengo una posición de un codificador?

0

Tengo un motor que maneja un riel, del cual necesito saber la posición.

Tengo un codificador AM102 conectado al motor. Pero no estoy seguro de cómo obtener una posición de ella.

Lo encendí y conecté las dos salidas a mi Teensy 3.0. En mi programa puedo ver el cambio de valor cuando muevo manualmente el motor. (Ya sea 1023 o 0 si recuerdo correctamente).

Me pregunto cómo puedo usar esto para determinar la posición. Supongo que puedo determinar la posición contando cuántas veces cambia el valor de 1024 a 0 y luego multiplicando ese número por una distancia (no estoy seguro de cómo obtener ese valor). Pero cuando el sistema se enciende por primera vez, ¿cómo sabrá la posición inicial? ¿Hay alguna forma de obtener esto desde el codificador o algún otro dispositivo / método?

n.b. También tengo un Atmega328P que me dijeron cómo puedo determinar la posición, ¿cómo puedo usar esto?

Resumen de la pregunta:

  1. ¿Cómo obtengo el multiplicador de distancia?
  2. ¿Cómo obtengo la posición inicial?
pregunta Aequitas

4 respuestas

6
  

¿Cómo obtengo el multiplicador de distancia?

Usted mide o calcula el alcance de su dispositivo, por ejemplo. una rotación completa, por ej. en cm. Luego tomas esa longitud y la divides por el número de pulsos por revolución que entrega el codificador y obtienes tu multiplicador de distancia en cm / pulso.

  

¿Cómo obtengo la posición inicial?

El codificador solo puede decirle el ángulo de rotación con respecto a la posición "índice". Si el motor puede hacer más de una sola rotación en cualquier dirección, no hay forma de que el codificador solo pueda indicarle la posición absoluta después del encendido.

Una solución común es tener un interruptor de límite , ya sea mecánico, inductivo u óptico (IR), a la vez final del carril. Al encenderse, el controlador impulsa el motor hacia el extremo del riel con el interruptor de límite hasta que el interruptor detecta la llegada al final. Esta es la posición "0" y cualquier movimiento / rotación del motor se mide a través del codificador en relación con esa posición fija.

    
respondido por el JimmyB
3
  

Pero cuando el sistema se enciende por primera vez, ¿cómo sabrá la inicial   ¿posición? ¿Hay una manera de obtener esto desde el codificador o algún otro   dispositivo / método?

El dispositivo que tiene es un codificador incremental y no un codificador de posición absoluta. Puede medir los cambios relativos, pero no tiene idea de dónde es el punto de inicio absoluto y no retiene ninguna información a través de un ciclo de alimentación.

Consulte esta página wiki para obtener más información

    
respondido por el Andy aka
3

Lo que tienes es un codificador de cuadratura. Hay dos salidas que están desfasadas 90 °. (90 ° = cuarto de vuelta, por lo tanto en cuadratura).

Un codificador absoluto puede proporcionar información de posición en el encendido. Un incremental no puede. La secuencia normal es hacer funcionar el motor y volver a cargar en un interruptor de inicio y poner a cero el contador del codificador. A partir de ese momento, se trata de realizar un seguimiento del recuento mediante un contador de arriba a abajo.

simular este circuito : esquema creado usando CircuitLab

Figura 1. Formas de onda de codificador rotatorio de 2 bits.

La lógica del programa es muy simple.

  • Seguimiento del estado actual de 'A'. Si el estado cambia a 'alto', entonces:
  • Mira la entrada 'B'. Si 'B' es bajo, entonces cuenta. Si 'B' es alto, entonces haga una cuenta regresiva.

Probablemente deba rebotar las entradas para evitar disparos falsos.

Figura2.Undiseñodecodificadorsimplificado.LossensoresfotográficosAyBquemiranoatraviesaneldiscodelcodificadorproduciránlasformasdeondadelaFigura1.Estecodificadortienesolo5pulsosporrevolución.Tutienes1024.

  

¿Cómoobtengoelmultiplicadordedistancia?

Siunarevolucióndelcodificadoresnmmdemovimiento,entoncesunconteodecodificador=\$\frac{n}{1024}~mm\$motion.

  

¿Cómoobtengolaposicióninicial?

Useunarutinadehomingyunsensordeinicio.

Interrupciónactivada

Parahacerquelaactivacióndelainterrupcióndeseguimientodelcodificadorsolonecesitetenerunafase("A" en el ejemplo anterior) active la entrada. El controlador de interrupciones luego mira a B para determinar si se debe contar hacia arriba o hacia abajo.

    
respondido por el Transistor
0

tiene que usar otro sensor para determinar dónde se encuentra, esto solo le indicará la posición relativa desde ese punto de calibración.

como se mencionó, una solución típica es un interruptor de límite, muévase a esa posición y luego use este sensor desde allí.

con un sensor relativo como este, siempre tiene que tener alguna otra solución para establecer una posición conocida o inicial. Es posible, pero arriesgado, hacer esto una vez, y antes de apagar, guarde la posición en un almacenamiento no volátil. arriesgado de varias maneras, asumiendo que este sensor nunca se desliza o falla, asumiendo que su lógica / software nunca se desliza o falla, asumiendo que tiene suficiente almacenamiento de energía para tener el tiempo y la energía para almacenar antes de apagarse, asumiendo que no esté encendido ni apagado se desliza y cambia su posición, y sigue y sigue y sigue. Por qué decir esto, porque es indeseable en algunas aplicaciones barrer ambos extremos para encontrar los interruptores de límite. Sé que algunos vehículos tienen actuadores que controlan los conductos de calefacción y refrigeración, cuando se encienden la primera vez que barren las paradas difíciles y calibran, luego dependen de la energía de la batería para recordar esa información, para siempre o hasta que la batería de su automóvil se agote o se retire. / reemplazado / desconectado por cualquier razón.

puede usar paradas bruscas en lugar de interruptores, poner la cosa (suavemente) en la parada brusca, este sensor le indicará que ya no está acumulando conteos. Luego muévalo a la otra parada difícil. Eso no requiere un par de interruptores.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas