Autor Tema: Combinacion de Pasos Motor PAP  (Leído 5987 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Combinacion de Pasos Motor PAP
« Respuesta #15 en: 23 de Marzo de 2018, 14:04:51 »
ideas tengo..

Vos buscas que con solo presionarlo ya se vaya solo a ese punto, o es necesario tenerlo presionado?
Mientras esta volviendo, que pasa si se presiona los otros botones? Se detiene?, no tiene en cuenta los demas botones ?

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Combinacion de Pasos Motor PAP
« Respuesta #16 en: 23 de Marzo de 2018, 14:10:50 »
Una vez presionado ese nuevo pulsador (sin tenerlo presionado, solo un pulso). Los motores vuelvan al origen (-x,y), si presiono cualquier de los otros botones no respondan. Su prioridad sera volver al origen. Gracias por responder.
El señor es mi pastor,  nada me faltará.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Combinacion de Pasos Motor PAP
« Respuesta #17 en: 23 de Marzo de 2018, 23:46:33 »
Entonces deberias tu maquina lo podriamos llamar que tiene 2 estados.

Uno NORMAL, el cual permita usar cualquier boton sin ningun problema (lo que hicimos hasta ahora).
Y uno que le podemos llamar ORIGEN (el nuevo a agregar), que en este estado se va a mover hasta que llegue a los finales de carreras correspondientes.
Cuando se cumpla la condicion de que ambos fines de carrera se activaron entonces paras y pasa a modo NORMAL.

Y el codigo dentro de la interrupcion quedaria:

Código: C
  1. //Antes tenemos el set_timer
  2.  
  3.             if(botonOrigen) estado = ORIGEN;
  4.             switch(estado)
  5.             {
  6.  
  7.                 case NORMAL:
  8.                 // Revisamos si debemos avanzar o no
  9.                 // Motor en X, primero revisamos que no estemos al final sea cual sea las 2 puntas
  10.                 if(motorX_Fp && motor1_Xp) { indiceX++; }
  11.                 else if(motorX_Fn && motor1_Xn) { indiceX--; }         // motor1 eje positivo con giro horario
  12.  
  13.                 // Motor Y
  14.                 if(motorY_Fp && motor1_Yp){ indiceY++; }       // motor1 eje negativo con giro anti-horario
  15.                 else if(motorY_Fn && motor2_Yp){ indiceY--; }
  16.                 break;
  17.  
  18.  
  19.                 case ORIGEN:
  20.                     // Si NO llego, decremento en X
  21.                     if(!motorX_Fn) indiceX--;
  22.                     // Si NO llego, aumento en Y
  23.                     if(!motorY_Fp) indiceY++;
  24.                     // Si llego a AMBOS, dejo que nuevamente haga caso a los botones comunes
  25.                     if(motorY_Fp && motorX_Fn) estado = NORMAL;
  26.                 break;
  27.             }
  28.             // Luego tenemos la correccion de indices
  29.             // Y activar las salidas

         Antes hay que definir estado y su enum.

Código: C
  1. enum mEstados {NORMAL, ORIGEN};
  2. enum mEstados estado;

         Yo puse la lectura del boton alli en la interrupcion, ya que normalmente los lees en la interrupcion, lo hice asi solo para que sea simple de ver, luego lo pondras como vos mas desees.
Entonces. Al detectar el boton, queda en estado de ORIGEN, esto hace que solo decremente/incremente indices hasta llegar a ambos fines de carrera, de llegado a ambos, vuelve darle control al codigo que habiamos realizado antes, el de los botones para que avance en +X -X +Y -Y.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Combinacion de Pasos Motor PAP
« Respuesta #18 en: 24 de Marzo de 2018, 09:21:39 »
KILLER JC, el código funciona solo que tengo que tener pulsado el boton (botonOrigen) para que regrese al origen (-x,y).

Bueno pues intentado de una y otra manera, realice algunos cambios siguiendo tu código para lo cual utilice la #int_ccp1 por cambio de estado y así regresa a  (-x,y) con solo pulsarlo una vez (esto para no mantenerlo presionado). También en el case cambie un poco pero en si es casi como tu lo escribiste.

Código: C++
  1. #int_ccp1
  2.          void trata_ccp_1()
  3.          {estado++; if(estado>1){estado=0;}}

Y en el case quedo así.

Código: C++
  1. switch(estado)
  2.          {
  3.          case 0:
  4.                      if(motorX_Fp && motor1_Xp) { indiceX++; }            
  5.                      else if(motorX_Fn && motor1_Xn) { indiceX--; }          
  6.  
  7.                      if(motorY_Fp && motor2_Yp){ indiceY++; }                 // motor2 eje Y con giro horario
  8.                      else if(motorY_Fn && motor2_Yn){ indiceY--; }            // motor2 eje Y con giro anti-horario
  9.                      break;
  10.          
  11.          case 1:                    
  12.                      if(motorX_Fn) indiceX--;                                 // Si NO llego, decremento en X                    
  13.                      if(motorY_Fp) indiceY++;                                 // Si NO llego, aumento en Y                    
  14.                      if(motorY_Fp && motorX_Fn)             // Si llego a AMBOS, dejo que nuevamente haga caso a los botones comunes
  15.                      break; estado=0;
  16.          }

No se que te parezca?
« Última modificación: 24 de Marzo de 2018, 09:26:24 por Abner_emanuel »
El señor es mi pastor,  nada me faltará.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Combinacion de Pasos Motor PAP
« Respuesta #19 en: 24 de Marzo de 2018, 09:33:36 »
No hay forma que el codigo no funcione... Copio y pego mi codigo

La unica condicion para que estado sea "ORIGEN" (1 en tu caso) es que este presionado el boton aunque sea un "ratito". Ese tiempo equivale a una interrupcion del TMR. Eso es todo el tiempo que debes presionarlo

Código: C
  1. if(botonOrigen) estado = ORIGEN;

La unica forma que vuelva a NORMAL (0 en tu caso ), es que primero este en ORIGEN y luego se llegue a ambos finales de carreras juntos:

Código: C
  1. if(motorY_Fp && motorX_Fn) estado = NORMAL;

Tal ves estan mal las condiciones, y se necesite negarlas, pero es el unico lugar donde se pone a NORMAL de vuelta.
Si necesitas tenerlo presionado siempre, entonces no se cumple lo que puse en los comentarios:

 
Citar
                   // Si llego a AMBOS, dejo que nuevamente haga caso a los botones comunes

Es decir ese if deberia entrar cuando AMBOS finales de carreras, el de -X y el de +Y se encuentren activados.
Yo no se que logica estas usando, si se activan y ves un 0, o si se activan y tenes un 1 en la entrada, por eso a pesar que le puse las condiciones, necesitas revisar que sea negado o no.

Desconectado Abner_emanuel

  • PIC16
  • ***
  • Mensajes: 160
Re:Combinacion de Pasos Motor PAP
« Respuesta #20 en: 24 de Marzo de 2018, 09:42:09 »
Primeramente gracias por compartir tu conocimientos en este foro. Estaré revisando las condiciones del if para que me comentas, creo que este tema aun sigue hasta verlo funcionar sin detalles. Nuevamente gracias..  :-/
El señor es mi pastor,  nada me faltará.


 

anything