Autor Tema: Encoder para posición en grados de un motor DC  (Leído 6084 veces)

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

Desconectado leotronik

  • PIC10
  • *
  • Mensajes: 10
Encoder para posición en grados de un motor DC
« en: 26 de Febrero de 2013, 18:22:13 »
Muy Buenas Tardes Colegas

En esta ocasión me enfrento frente a una duda que tengo con respecto a los encoder.

Quisiera saber si es posible determinar la posición en grados de un motor dc para visualizarlo en una pantalla lcd con un encoder, he leído por algunas paginas pero solo observo que sirve para determinar el numero de vueltas y no la posición.

Les agradezco de antemano que me ayuden a resolver esta duda ya que es un proyecto que estoy desarrollando desde hace rato pero no he encontrado la forma de determinar la posición en grados solo con un encoder.

Muchas gracias por su colaboración.
 

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Encoder para posición en grados de un motor DC
« Respuesta #1 en: 26 de Febrero de 2013, 20:17:38 »



Puedes utilizar un servo, salvo que el motor deba de girar libremente, o utiliza un motor paso a paso.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Encoder para posición en grados de un motor DC
« Respuesta #2 en: 26 de Febrero de 2013, 20:18:28 »
  ¿Puedes describir un poco más? Soy un poco lento para comprender  :oops:

  Supongo que el motor no estará en movimiento continuo, ya que de ser así su posición estaría cambiando constantemente.

  Tampoco conozco los encoders que van acoplados a los motores, pero imagino que no distarán mucho de los encoders rotativos utilizados por muchos equipos, por ejemplo, como control de volumen.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Encoder para posición en grados de un motor DC
« Respuesta #3 en: 26 de Febrero de 2013, 20:47:03 »
Existen encoder incremental y absoluto.

El encoder incremental traen pulsos A, B y Z este ultimo es un pulso unico en giro que hace de reset y con el cual se pone a 0 un contador y ya alli puedes saber la posicion exacta contando los pulsos A y B hasta que aparezca la Z y resetee el contador, el problema de este encoder es que cuando enciendas el equipo no sabra su posicion hasta que pase por Z.

Existen tambien los encoder absoluto con codificación fija es decir cada cierta distancia circular lleva un unico valor.

San google te despejara mejor tus dudas.

Buscar como encoder incremental y absoluto.

Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Encoder para posición en grados de un motor DC
« Respuesta #4 en: 26 de Febrero de 2013, 20:50:07 »
leotronik
Tal como lo indicas si el motor es DC o AC por lo general se usa un tacometro para saber la velocidad de giro del eje del motor y no la posicion, ya que, la variable posicion por lo general no es de interes. Ahora bien si lo que quieres es saber la posicion del eje del motor, entonces como te han indicado los colegas del foro, debes emplear un servomotor para ello.

Danos una vision un poco mas amplica de lo que piensas hacer con el encoder para que asi podamos ayudarte mejor, que pic vas a utilizar, compilador a emplear...   :mrgreen:

Saludos

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Encoder para posición en grados de un motor DC
« Respuesta #5 en: 26 de Febrero de 2013, 23:36:29 »
Hola, en efecto puedes medir el incremento en grados de la posición de un motor, sin embargo, esto depende de la resolución de tu enconder, por ejemplo, si tu encoder tiene 360 divisiones, tu resolución máxima sera de 1 grado
"Nada es imposible, no si puedes imaginarlo"

Desconectado leotronik

  • PIC10
  • *
  • Mensajes: 10
Re: Encoder para posición en grados de un motor DC
« Respuesta #6 en: 27 de Febrero de 2013, 18:56:46 »
Bueno Colegas Muchas gracias por responder.

Bueno tal y como me han comentado en esencia lo que necesito es identificar las señales de un encoder para que un pic16f877a las reconozca como señales digitales (valores binarios) y poder visualizarlas en una lcd es decir por cada grado que se mueva el eje del motor se pudiera visualizar en la pantalla los grados que se ha movido tanto en un sentido como en otro, por ejemplo si el motor se mueve hacia adelante 3 grados este valor se debe visualizar en la lcd pero si el motor se mueve hacia atrás 10 grados se debe visualizar en la lcd el valor en grados del movimiento hacia atrás.
Espero haberme hecho entender con claridad, cualquier comentario sera bienvenido.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Encoder para posición en grados de un motor DC
« Respuesta #7 en: 27 de Febrero de 2013, 19:34:28 »
Hola, hace un tiempo estuve jugando con encoder y me hice este codigo:

Código: C
  1. #include <16f628.h>
  2. #fuses   INTRC_IO
  3. #fuses   NOWDT
  4. #fuses   PROTECT
  5. #fuses   NOPUT
  6. #fuses   BROWNOUT
  7. #fuses   NOMCLR
  8.  
  9.  
  10. #use delay(clock=4000000)
  11. #use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
  12.  
  13. #define  encoder_A   input(pin_b4)
  14. #define  encoder_B   input(pin_b5)
  15.  
  16. #byte    tx_reg = 0x19
  17.  
  18. char  bufer[10];
  19.  
  20. int1  est_ant_1,est_ant_2,flag_cambio_encoder = 0;
  21. int32 encoder = 0;
  22. int16 valor;
  23. int1  enviar = 0;
  24. int8  contador = 0,cont;
  25.  
  26. #INT_RB
  27. void lectura_encoder(void)
  28.  {
  29.  int8 XXX;
  30. if(encoder_A != est_ant_1)
  31.    {
  32.    if(encoder_A){if(!encoder_B){encoder++;}else{encoder--;}}//
  33.    else {if(encoder_B){encoder++;}else{encoder--;}}//
  34.    }
  35. else if (encoder_B != est_ant_2)
  36.    {
  37.    if(encoder_B){if(encoder_A){encoder++;}else{encoder--;}}//
  38.    else {if(!encoder_A){encoder++;}else{encoder--;}}//
  39.    }
  40.  
  41. est_ant_1 = encoder_A;
  42. est_ant_2 = encoder_B;
  43. flag_cambio_encoder = 1;
  44. XXX = input_b();
  45.  }
  46.  
  47. #INT_TBE
  48. void tx (void)
  49. {
  50. if(bufer[cont])
  51.    {
  52.    tx_reg = bufer[cont++];
  53.    }
  54. else
  55.    {
  56.    disable_interrupts(INT_TBE);
  57.    }
  58. }
  59.  
  60.  
  61. #INT_TIMER1
  62. void tmer1(void)
  63. {
  64. set_timer1(valor);
  65. if(++contador > 10)
  66.    {
  67.    contador = 0;
  68.    enviar = 1;
  69.    }
  70. }
  71.  
  72. void main() {
  73.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);          //CONFIGURACION DE TIMER1
  74.    enable_interrupts(INT_TIMER1);
  75.    
  76.    enable_interrupts(INT_RB);
  77.    enable_interrupts(global);                       //ATIVACION DE INTERRUPCION GENERAL
  78.    set_tris_b (0b11111011);                                  //PUERTO B SALIDAS
  79.    valor = 3040;
  80.    set_timer1(valor);
  81.    
  82.    while(true)
  83.       {
  84.       if(enviar)
  85.          {
  86.          sprintf(bufer,"@%6lu%c",encoder,13);
  87.          cont = 0;
  88.          tx_reg = bufer[cont++];
  89.          enable_interrupts(INT_TBE);
  90.          enviar = 0;
  91.          }
  92.       }//
  93.  
  94. }//

Si tu encoder tiene 100 pulsos, el conteo se hace hasta 400, logra obtener conteo por cada flanco tanto de A y B del encoder y hace el aumento decremento del conteo.

Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado leotronik

  • PIC10
  • *
  • Mensajes: 10
Re: Encoder para posición en grados de un motor DC
« Respuesta #8 en: 18 de Marzo de 2013, 10:06:04 »
Muchas gracias por la ayuda colegas me ha servido mucho...!