Autor Tema: Encoder rotatorio y velocidad de lectura  (Leído 2594 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado nitriti

  • PIC10
  • *
  • Mensajes: 2
Encoder rotatorio y velocidad de lectura
« en: 07 de Mayo de 2012, 11:31:11 »
Saludos, antes de nada quiero pedir disculpas por si meto la pata en alguna de las normas del foro soy nuevo en el y aún no controlo todo. He intentado buscar la información por medio del buscador, pero hay tanta que me pierdo y llevo así ya tres días. Me urge un poco solucionar este problema y por eso es que he abierto un nuevo tema.

En primer lugar me gustaría saber si hay usuarios de este foro que usen mikro C para pic´s? y que opinión tienen.
La duda más importante que quiero resolver es la siguiente:

Estoy realizando un dispositivo para leer varios encoder rotatorios tipo alps de esos que vienen con interruptor. Concretamente el que uso tiene 24 pulsos por vuelta.
Los avances realizados hasta ahora son los siguientes:

Mediante RA0 y RA1 leo los pulsos que envía el encoder. La conexión al pic es por medio de dos puertas trigger schmitt y dos condensadores de 1 uF a gnd para evitar los rebotes.
Se limitan los valores a 0 como valor mínimo y 127 máximo.
Los saco por el PORTB mediante leds conectados a las patillas RB0 a RB6.
Utilizo RB7 para saber si incrementa o decrementa.

Hasta aquí todo bien...

El problema surge cuando quiero hacer incrementos o decrementos dependientes de la velocidad de giro.

Ejemplo: Si el valor inicial de la variable asociada al encoder es 0 y quiero poner su valor al máximo (DEC'127') al tener 24 pulsos por vuelta debo dar casi 6 vueltas al encoder para lograr dicho valor. La utilidad para la que estoy haciendo esto necesita que si se gira el encoder de forma muy rápida hacia la derecha por ejemplo. pase de valor 0 a 127 en solo 10 o 12 pulsos (aproximadamente la mitad de pulsos de resolución). Por otro lado se necesita también tener la capacidad de incrementar pulso a pulso, incluso dos velocidades intermedias.

He intentado varios métodos sin éxito. :?

Solo se me ocurren dos posibilidades más, pero no tengo claro como implementarlas. Las dos se basan en contar el tiempo.

La primera es mediante las interrupciones. Este sistema no me gusta mucho porque el procesador debe dejar de hacer otras cosas para atender dicha interrupción.

La otra es mediante dos variables que se cargan, una en el momento de lectura del primer patrón AB de las patitas del pic. Y la otra en la segunda lectura AB que se realiza para saber si avanza o retrocede. Los valores de estas variables deberían estar asociadas al tiempo para poder medir este mediante una simple instrucción de tipo:

if(tiempo2 - tiempo1 >= 1ms) avanza_lento();
if(tiempo2 - tiempo1 < 1ms) avanza_rapido();

Utilizo un pic 16F84A. He provado con el registro PCL, incrementando una variable y algo más que no recuerdo. Todo sin éxito.

Si alguien puede ayudarme le estaré muy agradecido.

No se si he planteado bien el problema y espero que sirva también para otras personas.

Muchas gracias y felicidades por el foro.

Desconectado nitriti

  • PIC10
  • *
  • Mensajes: 2
Re: Encoder rotatorio y velocidad de lectura
« Respuesta #1 en: 09 de Mayo de 2012, 04:35:23 »
 :( ¿No se anima alguien a echar una ayudita?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Encoder rotatorio y velocidad de lectura
« Respuesta #2 en: 09 de Mayo de 2012, 05:37:30 »
Yo creo que la manera más sencilla de hacerlo es con un timer. En cada detección de pulso miras su valor y lo pones a cero.
Así sabrás cuánto duran los intervalos entre pulsos y podrás tomar la decisión que quieras.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Encoder rotatorio y velocidad de lectura
« Respuesta #3 en: 09 de Mayo de 2012, 10:09:30 »
Como dice Manolo con un timer, o si no se te dan bien los timer con un simple contador. Desde luego lo que yo usaría serian bases de tiempos, pero para crearlas necesitas usar las interrupciones.
Saludos desde Granada, España.


 

anything