Hola!
Este es un
antiguo proyecto que he retomado ahora. La razón de no continuar con el antiguo hilo es pq hace 6 meses de ese hilo por eso he decidido crear uno nuevo.
La
definición del proyecto es simple: sacar toda la informacion posible de un encoder de 2 canales. Dicha información es: posición actual del encoder (pasos), sentido, velocidad actual, velocidad media y velocidad de transferencia de los paquetes USB.
El funcionamiento de este encoder esta explicado en el
antiguo hilo pero voy a volver a exponerlo para tenerlo todo centralizado en este hilo, además de miedo a que se borre debido al tiempo q ha pasado.
ENCODER INCREMENTALUn encoder incremental es un dispositivo que transforma un movimiento rotatorio en pulsos digitales. Estos pulsos pueden ser usados para controlar desplazamientos de tipo angular o de tipo lineal si se asocia a una
cremallera o un
husilloEl encoder se compone de 3 partes:
- Un disco ranurado formado con lineas opacas y transparentes
- Un diodo LED
- Uno o varios Fototransistores
El funcionamiento es el siguiente: cuando el sistema comienza a funcionar, el led crea un haz de luz que incide en el foto transistor; a medida que el eje vaya girando, se producirán una serie de pulsos de luz en el receptor, correspondientes a la luz que atarviesa los huecos entre las marcas. Llevando una cuenta de esos pulsos es posible conocer la posición del eje.
METODOS DE CONTROLEl encoder que voy a usar es un encoder incremental de 2 canales desfasados 90º hay algunos pic que incorporan el modulo QEI que es especifico para el control de estos encoders, por desgracia, ningun picUSB los incorpora.
Este tipo de encoder se puede usar de 3 maneras (sin modulo QEI):
- Modo 1X: Usando solo un canal para el conteo y el otro obtener el sentido
- Modo 2X: Atendiendo a los cambios de nivel para el conteo y para el sentido
- Modo 4X: Atendiendo a los flancos para el conteo y para el sentido
Modo 1X: Usando solo un canal para el conteo y el otro obtener el sentido Este modo es el mas sencillo de hacer solo se tiene que conectar el Canal A a la interrupción externa del pic, configuramos la interrupción por flanco de subida (aunque se puede hacer por flanco de bajada). El otro canal lo podemos conectar a cualquier patilla de configurada como entrada en el pic, esta patilla nos dara el sentido.
El funcionamiento de este método es el siguiente: Al girar el encoder de izquierda-derecha los flancos de subida son los flancos izquierdos del Canal A, fijandose en la imagen anterior, el nivel del Canal B en todos los flancos de subida del Canal A es nivel alto. Si el encoder gira derecha-izquierda los flancos de subida son los flancos derechos del Canal A, que coinciden con el nivel bajo del Canal B.
int16 pasos=0;
int sentido=1;
#int_EXT
void EXT_isr(void)
{
if(input(PIN_B1)) //Miro el estado de el otro canal q me indica el sentido
{
sentido=1;
pasos=pasos+1;
}
else
{
sentido=0;
pasos=pasos-1;
}
}
Modo 2X: Atendiendo a los cambios de nivel para el conteo y para el sentido Por Hacer....Modo 4X: Atendiendo a los flancos para el conteo y para el sentido Por Hacer....PROGRAMACIÓN DEL FIRMWAREEl pic que uso es el 18F2550. El firmware lo tengo totalmente verde es un clon del
proyecto de J1M pero en vez de hacer la suma manda el valor del encoder. Me da verguenza de ponerlo.

En cuanto tenga algo mas personal actualizaré este apartado.
PROGRAMACION DE APLICACIÓNEl lenguaje que uso para la aplicacón es el Visual C# 2005 express. La aplicación hace un puleo al USB pidiendo el estado del encoder al pulsar el boton de Muestreo, mostrando el numero de pasos del encoder en el Label. Para ello he hecho 2 métodos nuevos en la clase PicUSBAPI:
public void Pulea(Label pasos)
{
poolling = true;
while (poolling)
{
Application.DoEvents();
SumaPIC(10, 10);
pasos.Text = (ResultadoPIC()).ToString();
}
}
public void PararPuleo()
{
poolling = false;
}
Descargate el códigoAYUDADespues de este rollo queria pediros vuestra ayuda en como implementar los modos 2X y 4X de los metodos de control, de la manera mas rápida posible ya que cuanta mas precision tiene el metodo mas veces va interrumpir al pic.
Gracias