Control del eje de un motor paso a paso

  • 28 Respuestas
  • 4557 Vistas

MarianoC

  • Aprendiz
  • **
  • Mensajes: 61
Control del eje de un motor paso a paso
« : noviembre 04, 2014, 17:07:40 pm »
Buenas tardes gente, les comento que estoy tratando de controlar un motor paso a paso  a través del PLC inyectandole una señal pwm al driver de dicho motor, el cual he configurado a 800 pulsos una vuelta, y el motor tiene una conexión paralelo bipolar.
Desarrollé un programa el cual recibe por el puerto serie valores de 0 a 100 que hacegirar el eje del motor en sentido horario(de 0 a 100) y antihorario(100 a 0) haciendo uso de la función PwmTrainStart(,,) y definí  una señal pwm 2khz, para el valor 0 , 0 vueltas y para el valor 100, 5 vueltas, pero  el problema que estoy teniendo es que el eje no realiza un recorrido fijo, por ejemplo cuando me voy desplazando lentamente con valores dentro del rango de 0 a 100 , al llegar al 100(5 vueltas) el eje no finaliza su recorrido donde inicio, aveces un poco antes de completar las cinco vueltas, y cuando hago variar rápidamente valores de 0 a 100 o viceversa el eje del motor no llega a dar ni una vuelta completa.
Alguna ayuda o sugerencia para poder mejorar el control del recorrido del eje del este motor.
Muchas Gracias.
Sds.

  

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #1 : noviembre 04, 2014, 18:47:36 pm »
Se me ocurre que quizás estas llamando a PwmTrainStart() antes que la placa termine de generar los
pulsos de la ultima llamada.

Intenta reproducir el movimiento sin usar el puerto serie, es decir con un código fijo y básico, para ver
si obtenes el resultado deseado descartando otros tipos de errores.

También  analizar bien el funcionamiento del driver del motor y/o mirar con osciloscopio si se
generan las ordenes o pulsos que envías de la forma esperada.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

MarianoC

  • Aprendiz
  • **
  • Mensajes: 61
Re: Control del eje de un motor paso a paso
« Respuesta #2 : noviembre 07, 2014, 16:59:42 pm »
Buenas tardes, afirmativamente, el problema es que vuelvo a llamar a la función PwmTrainStart() con un nuevo valor correspondiente al parámetro n° de pulsos sin que el canal haya terminado de enviar el tren de pulsos del parámetro anterior. Esto lo he solucionado escribiendo inmediatamente después de la llamada a la función PwmTrainStart() la instrucción DelayMS() cuyo parámetro es el n° de pulsos del tren* el período de la señal pwm, pero la desventaja que presenta esta solución que la instrucción DelayMS() me detiene la ejecución del programa por el tiempo especificado en dicho parámetro, es decir el programa en este tiempo solo esta generando la señal, mientras que en este tiempo puede estar procesando otras instrucciones.
La pregunta es, existe la posibilidad de crear una función que me devuelva un 1 lógico indicando que el canal termino de enviar el tren de pulso y que esta listo para enviar otro tren y un 0 que indique que aún lo esta generando ?.
También en un momento voy necesitar interrumpir un tren de pulso, y en este mismo momento voy a necesitar la cantidad de pulsos que se logro enviar hasta que fue interrumpido este tren, esto es posible sin la necesidad realimentar el pwm a la entrada de contadores?Digo creando una función.
Desde ya muchas Gracias.
Sds.

 

   

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #3 : noviembre 10, 2014, 10:06:57 am »
Buen día,

Si, es posible crear una función que devuelva un "1" mientras se están generando los pulsos para un canal PWM.

Por otro lado, ¿ te sirve que devuelva la cantidad de pulsos que NO se han enviado al interrumpir el tren ?. Es decir al revés.

Por ejemplo, si pusiste 10 pulsos e interrumpiste en el numero 7, te devolvería 3.

Estamos en contacto.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

MarianoC

  • Aprendiz
  • **
  • Mensajes: 61
Re: Control del eje de un motor paso a paso
« Respuesta #4 : noviembre 10, 2014, 11:13:16 am »
Buen día,
Si, también me sirve que me devuelva la cantidad de pulsos que falto enviar en el momento que produjo la interrupción.
Gracias.
Sds.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #5 : noviembre 11, 2014, 13:35:30 pm »
Buenas tardes,

Adjunto te dejo el firmware actualizado para la STX8081 y el archivo "pwm.inc" para StxLadder, que debes instalarlo
como te explique en este mensaje.

Las funciones nuevas son:

  • PwmTrainIsFinished(Channel): Comprueba si Channel (PWM1 o PWM2) ha terminado de generar pulsos y devuelve 1. De lo contrario, devuelve 0.
  • PwmTrainGetPulses(Channel): Devuelve los pulsos restantes que faltan de generar en Channel (PWM1 o PWM2) para completar el tren de pulsos. Cuando PwmTrainIsFinished() retorna "1", esta funcion retorna "0" pulsos restantes.

Ejemplo:

if(PwmTrainIsFinished(PWM1) == 1)
{
   // Se terminó de generar pulsos en canal PWM1.
}

// Obtener la cantidad de pulsos restantes por generar en canal PWM1.
Remaining = PwmTrainGetPulses(PWM1)


Quedamos a disposición.

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #6 : noviembre 16, 2014, 13:06:20 pm »
Ya están disponibles para descargar todos los cambios realizados últimamente en pagina Web.

Actualizar a:


Ademas hay otras mejoras en StxLadder, como generar código para VirtualHMI rápidamente desde "Herramientas > Generar código".

Ver mas en: http://slicetex.com/ladder/soft/StxLadder-Setup-1.6.1-History.txt
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

MarianoC

  • Aprendiz
  • **
  • Mensajes: 61
Re: Control del eje de un motor paso a paso
« Respuesta #7 : noviembre 19, 2014, 14:40:00 pm »
Hola buenas tardes, les quiero hacer dos consulta:
1)_ se puede realizar una función que interrumpa el tren de pulso que se esta generando para que inmediatamente después de esa instrucción coloque PwmTrainGetPulses() y luego generar un nuevo tren de pulso, es para tener un mejor control en el momento en que quiero interrumpir y posteriormente generar un nuevo pulso.
2)_La última consulta es de Hw el problema es el display lcd, enciende pero no me muestra absolutamente nada.
Muchas Gracias.
Sds.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #8 : noviembre 19, 2014, 20:49:47 pm »
Buenas tardes,

1)

No te sirve la función PwmTrainStop() ?

Como seria lo que necesitas exactamente o el comportamiento deseado ?.

2)

Puede que se haya quemado el display por algún motivo, ahí le pase la cotización para un reemplazo por privado.

Quedamos a disposición.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

MarianoC

  • Aprendiz
  • **
  • Mensajes: 61
Re: Control del eje de un motor paso a paso
« Respuesta #9 : noviembre 19, 2014, 22:18:34 pm »
1)_Lo que entendí que luego de ejecutar la instrucción PwmTrainStop() que detiene el generador de pulsos, y si yo luego quiero generar un nuevo tren de pulso debo ejecutar la instrucción PwmTrainInit() ,(y a esta función se la llamar una sola vez), para poder posteriormente usar PwmTrainStart().Estoy equivocado? o puedo llamar  PwmTrainStop() sin tener que llamar luego  PwmTrainInit() para generar un nuevo tren de pulso, PwmTrainStart().
2)_ Le notifico bien se realice el pago.
Gracias.
Sds.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #10 : noviembre 20, 2014, 20:15:06 pm »
Si es correcto lo que decís.

Analizamos de implementar una función que sea PwmTrainInterrupt(Channel), para interrumpir la generación
de pulsos de un canal especifico.

Te aviso cuando la tengamos implementada.

Quedamos a disposición.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

MarianoC

  • Aprendiz
  • **
  • Mensajes: 61
Re: Control del eje de un motor paso a paso
« Respuesta #11 : noviembre 21, 2014, 10:17:35 am »
Bien..quedo a la espera...
Gracias.
Sds.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #12 : noviembre 21, 2014, 14:27:40 pm »
Buenas tardes, adjunto te dejo el archivo "pwm.inc" que debes copiarlo en el entorno StxLadder y el
firmware actualizado para la STX8081-D2.

La funcion nueva es:

  • PwmTrainInterrupt(Channel): Interrumpe tren de pulsos en canal PWM seleccionado.

Ejemplo:

// Interrumpir pulsos en PWM1.
PwmTrainInterrupt(PWM1)

// Interrumpir pulsos en PWM1 y PWM2.
PwmTrainInterrupt(PWM1|PWM2)


Probala y decinos si funciona correctamente.

Quedamos a disposición.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

MarianoC

  • Aprendiz
  • **
  • Mensajes: 61
Re: Control del eje de un motor paso a paso
« Respuesta #13 : noviembre 25, 2014, 16:07:40 pm »
Buenas tardes, estuve probando la nueva función PwmTrainInterrupt(Channel) y me pasa lo siguiente: una vez que genero el tren de pulsos y posteriormente llamo a la función PwmTrainInterrupt(Channel) por primera vez para interrumpir dicho tren, lo realiza pero inmediatamente se me tilda el programa de tal forma que debo resetear desde la placa para poder cargar una nuevo programa.
Alguna sugerencia para poder resolver este inconveniente.
Gracias.
Sds

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1707
  • Soporte Técnico
Re: Control del eje de un motor paso a paso
« Respuesta #14 : noviembre 25, 2014, 16:10:55 pm »
Buenas tardes,

Podrías copiar el fragmento de código completo que ta da el error ?.

Gracias.

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com