Hola Kreutz, se que ya habeis comentado esto mismo en otro post pero no consigo entenderlo, tambien he leido todo el código y esto es lo que no entiendo:
Estoy realizando una tarjeta basada en el A3986 (que tu conoces también....) y si pongo 1/16 micropaso y comienzo a enviar pulsos de forma individual necesito 16 pulsos para dar un paso completo ¿no es así?
¿Que pasa en vuestro diseño si pongo por ejemplo 1/8 paso y envio 8 pulsos a la entrada? Entiendo que debe dar un paso completo.
¿Que pasaria si envio 5 y giro al contrario?
La única forma que entiendo que puede funcionar es que cuando envias un pulso a la entrada el motor da siempre un paso completo, lo que cambia es la forma en como lo da, es decir, el microcontrolador genera los micropasos necesarios segun como se haya configurado pero siempre que envio un pulso a la entrada doy un paso completo, ¿es así?. La verdad es que es dificil explicar esto con texto....
Tengo un Gecko G203v y he probado con el Kcam (por que tiene esta función) a ir enviando pulsos a mano (con cada pulsación en el mouse envia un pulso) y para girar una revolución en un motor de 200 pasos he necesitado 500 pulsaciones. Esto tampoco me coincide con lo que marca el fabricante de 1/5 micropaso en baja velocidad,(200 pasos del motor X 5 micropasos=1000) ¿que estoy haciendo mal? Lo mismo que en tu caso, ¿como realizan el cambio de modo a alta velocidad sin perder pasos?
Seguro que estoy perdiendo algún concepto básico......
Gracias de antemano y un saludo
Un motor de 200 pasos por revolucion tiene 50 pares de polos, un "full step" te llevaria de un polo al otro, o sea, una revolucion electrica (360 grados), el motor tiene 200 pasos porque toma una secuencia de 4 pasos para ir de un polo al otro, es decir, un "full Step" necesita 4 pasos (90 grados por paso).
Cuando tu aplicas "micro-step" lo unico que haces diferente es regular la corriente que circula por los enrollados de forma de obtener una forma sinusoidal en lugar de los pulsos cuadrados de corriente que generaria la secuencia normal. (en realidad no son completamente cuadrados porque la corriente en la inductancia del enrollado sube linealmente con el tiempo)
Es decir, la secuencia de conmutacion de corriente por los enrollados es exactamente la misma que en "Full step" pero la corriente es limitada siguiendo una aproximacion sinusoidal. Cada microstep produce solo un cambio de la corriente y no una conmutacion de enrollados, la conmutacion se realiza solo en los cruces por cero de la sinusoide.
Siguiendo este razonamiento: 1/5 microstep daria 5 microsteps por cada paso, o 20 microsteps por cada Full Step (=5 x 4) 50 full steps x 20 microsteps = 1000 micro-steps por revolucion del rotor.
En mi caso, yo solo cambio la forma de onda de corriente pero la secuencia de pulsos sigue siendo la misma. El cambio se realiza en los cruces por cero de la fase A y el micro-controlador sigue contando la cantidad de microsteps necesarios antes de incrementar o decrementar la secuencia de conmutacion de los enrollados.
Por ejemplo: yo parto de cero y voy a usar 1/10 microstep comienzo a contar hacia delante y el primer cambio de enrollado (conmutacion de los mosfets) se realiza en el decimo conteo. Ahora continuo contando pero en el quinceavo micro paso decido cambiar la direccion, entonces cuento hacia atras (14, 13, 12...) y cuando llego al decimo vuelvo a la secuencia que tenia anteriormente.
Durante ese tiempo en cada paso yo regulo la corriente a un valor diferente siguiendo una tabla de valores sinusoidales (90 grados /10 microstep = 9 grados por microstep, entonces mi tabla consiste en los valores: Seno(0), Seno(9), Seno(18), etc. En la otra fase los valores para cada paso serian: Coseno(0), Coseno(9), Coseno(18), etc.
Esos valores me producen un voltaje de referencia que cambia sinusoidalmente con cada paso. Al ir hacia atras solo cambio el valor de corriente por el valor anterior en lugar del siguiente en la secuencia, por lo que efectivamente no existe un cambio brusco de torque al invertir el giro (el torque es proporcional a la corriente)
Hace un tiempo publique en este "thread" una tabla con los graficos correspondientes para todos los valores de microstep hasta 1/16 incluyendo 1/5 y 1/10. y los valores de referencia correspondientes.
En cuanto al cambio de forma de onda solo es un cambio de tabla con diferentes valores de referencia para cada paso.
Ahora bien, no se por que, en tu caso, tu motor dio una vuelta completa con 500 pulsos a 1/5 microstep. Solo debio haber dado media vuelta.
Me parece un poco extensa la respuesta y no se si quedo claro el concepto sin la ayuda de los graficos.
Hola de nuevo y muchas gracias por la explicación (y todo el tiempo que nos dedicas....).
Tengo las gráficas desde hace tiempo de como se generan las señales de seno-coseno, hasta ahi todo bien (ya he realizado un par de controladoras antes con PIC´s pero sin micropasos), lo que no entiendo es a la hora del cambio de modo automático que tu has programado en base a la velocidad del motor:
Si por cada pulso desde el ordenador generas un micropaso en el motor (de acuerdo a la configuracion de los jumpers), a la hora de configurar el programa (Mach por ejemplo) tienes que indicarle estos valores, es decir los pulsos que necesita para mover el eje 1milimetro. Hasta aqui todo bien, yo envio 9 pulsos y el motor da 9 micropasos, invierto el sentido y lo mismo.
Pero que pasa cuando aumento la velocidad por encima de 5rps:
- El motor ya no funciona en micropasos y si envio un pulso desde el programa, el motor ya no avanza lo mismo que antes. Además, que pasaria si el motor se detiene en un punto intermedio.
Por lo que yo entiendo la unica forma de resolver esto seria que a cada pulso en la entrada, el motor avance 90 grados (de los 360 del paso completo) independientemente de como lo haga (en micropasos o de forma instantánea) y que el microcontrolador genere la secuencia necesaria para dar esos 90 grados. De lo contrario, si yo tenia configurado modo 1/10 en el MACh y para mover 1mm enviaba 10 pulsos, a alta velocidad con los mismos 10 pulsos se moverá 10mm (no sé si me explico).
Otra forma sería que hasta que recibe 10 pulsos a la entrada no hace nada y al recibir el décimo da el paso, pero esto no nos vale.....
Todo esto te lo planteo porque estoy diseñando una controladora basada en el A3986 y quiero instalar un microcontrolador con funciones auxiliares (cambio de modo, baja potencia tras un tiempo, etc...).
Tambien estoy planteando la posibilidad de "traducir" vuestro código a C y utilizarlo en un PIC (es una arquitectura que ya conozco) pensando en realizar una controladora de este tipo para motores bipolares.
Gracias de antemano, maestro....
El programa sigue contando los pulsos de entrada de modo identico, pero esta vez la tabla de referencia de corrientes cambia, por ejemplo a la de Full Step, las referencias de Full step son identicos niveles de DC iguales al valor r.m.s. de corriente especificados para el motor multiplicados por la resistencia Rsense. En este caso cada valor de la tabla es identico al anterior. El cambio de tablas se realiza durante el cruce por cero de la senal sinusoidal en el canal A.Pero que pasa cuando aumento la velocidad por encima de 5rps:
- El motor ya no funciona en micropasos y si envio un pulso desde el programa, el motor ya no avanza lo mismo que antes. Además, que pasaria si el motor se detiene en un punto intermedio.
Cuando disminuye la velocidad el proceso es identico, pero esta vez se cambia a la tabla de valores, a la que llamamos de "maximo torque", antes de pasar a la tabla de microsteps sinusoidales a una velocidad menor.
He de recalcar que la secuencia de conmutacion de los mosfets es siempre la misma de "Full Step" con dos enrollados energizados, no importa el modo de microstep en que se encuentre.
Si movias a baja velocidad 1 mm cada 9 steps, a alta velocidad tambien moveras 1 mm cada 9 steps la diferencia es que a baja velocidad el movimiento es quasi-continuo (se divide en una secuencia de pequenos movimientos, de ahi el nombre micro-step) y a alta velociad el comando de movimiento se realiza en saltos de 90 grados electricos (como en "Full Step", pero ten en cuenta que un paso aun sigue contando como si fueran la cantidad de microsteps correspondientes a la entrada). Como esos 90 grados electricos estan determinados por los polos del motor, cada vez que el motor llega a un polo se resincroniza a si mismo con los comandos de la tarjeta, si lo mandas a retroceder en un punto intermedio, digamos 4 microsteps despues de haber conmutado, el motor no se movera en sentido inverso hasta que no cuente hacia atras esos 4 pasos. El motor en ese instante se encuentra en uno de los polos (o una posicion magneticamente y mecanicamente definidada por ellos) y no hay perdida de pasos.
Hazte la idea de que el motor a alta velocidad de mueve por "paquetes" de microsteps, esta en una posicion determinada y comienza a acumular microsteps, cuando llega al valor correspondiente al modo de trabajo, da un salto a la nueva posicion (90 grados electricos).
El motor no puede detenerse en un punto intermedio cuando va a alta velocidad, para detenerse necesita reducir gradualmente la velocidad y entonces entra de nuevo a jugar la tabla de microsteps sinusoidales que lo situan exactamente en la posicion comandada de detencion. Esta es la funcion del calculo de trajectorias aceleracion y deceleracion realizado en el programa del PC (ejemplo: MACH3), no permitir que el motor se tenga que detener o arrancar bruscamente con el peligro de perder pasos debido a la inercia del rotor y carga.
Instrucciones de Puesta en Marcha y Ajuste de las tarjetas Mardus-Kreutz
Las instrucciones de ajuste y puesta en marcha de las tarjetas han sido publicadas en ingles. Tan pronto como hayan interesados en este forum en Espanol las traduzco.
Saludos,
Kreutz.
Hola Kreutz,
Cual es la direccion de las instruciones (site en ingles)?
Este es el thread en ingles: http://www.cnczone.com/forums/showthread.php?t=25361
Gracias.
Gracias Kreutz.
buenos días necesito un motor pap como este o equivalentehttp://www.elmeqmotor.es/produits-md...%3FidGamme%3D4
me piden 600 eurotes, un saludo