1. Obtener el máximo rendimiento del software generador de pasos
Generar pulsos de paso en el software tiene una gran ventaja: es gratis. Casi todas las PC tienen un puerto paralelo que es capaz de generar pulsos de paso por el software. Sin embargo, los pulsos de paso de software también tienen algunas desventajas:
-
velocidad de paso máxima limitada
-
jitter (fluctuaciones) en los pulsos generados
-
añade carga a la CPU
Este capítulo tiene algunos pasos que pueden ayudar a obtener los mejores resultados de pasos generados por software.
1.1. Ejecutar una prueba de latencia
La CPU no es el único factor determinante de latencia. Placas madre, tarjetas gráficas, puertos USB y muchas otras cosas pueden degradarla. La mejor forma de saber qué se puede esperar de una PC es ejecutar las pruebas de latencia RT.
Ejecuta la prueba de latencia como se describe en el capítulo Prueba de latencia.
Mientras se ejecuta la prueba, debes abusar de la computadora. Mueve ventanas alrededor de la pantalla. Navega por la web. Copia algunos archivos grandes en el disco. Pon música. Ejecuta un programa OpenGL como glxgears. La idea es poner a la PC a un fuerte ritmo mientras la prueba de latencia verifica para ver cuáles son los peores números.
El último número en la columna etiquetada Max Jitter es el más importante. Anótalo, lo necesitarás más tarde. Contiene la peor latencia medida durante toda la ejecución de la prueba. En el ejemplo anterior, eso es 6693 nanosegundos, o 6.69 microsegundos, que es excelente. Sin embargo, el ejemplo solo se ejecutó durante unos segundos (imprime una línea cada segundo). Debes ejecutar la prueba durante al menos varios minutos; a veces, la peor latencia no ocurre muy a menudo, o solo sucede cuando se hace alguna acción particular. Cierta placa base Intel funcionó bastante bien la mayor parte del tiempo, pero cada 64 segundos tenía una muy mala latencia de 300 µs. Afortunadamente, eso es corrregible, ver Solucionando problemas SMI en la wiki de LinuxCNC
Entonces, ¿qué significan los resultados? Si tu número Max Jitter es menor que aproximadamente 15-20 microsegundos (15000-20000 nanosegundos), la computadora debería dar muy buenos resultados con pasos por software. Si la latencia máxima está entre 30-50 microsegundos, todavía puedes obtener buenos resultados, pero tu velocidad máxima de paso puede ser algo decepcionante, especialmente si utilizas micropasos o si tienes tornillos de avance muy finos. Si los números son 100 µs o más (100,000 nanosegundos), entonces la PC no es buena candidata para pasos por software. Números de más de 1 milisegundo (1,000,000 nanosegundos) significa que la PC no es una buena candidata para LinuxCNC, independientemente de que uses pasos por software o no.
Ten en cuenta que si obtienes números altos, pueden haber formas de mejorarlos. Por ejemplo, una PC tenía una latencia muy mala (varios milisegundos) usando el vídeo integrado. Pero una tarjeta de vídeo usada de $5 resolvió el problema, LinuxCNC no requiere hardware de última generación.
1.2. Descubre lo que esperan tus controladores
Las diferentes marcas de controladores de pasos tienen diferentes requisitos de tiempos en sus pasos y entradas de dirección. Por lo que necesitas desenterrar (o Googlear) la hoja de datos que tiene las especificaciones de tu unidad.
Del manual de Gecko G202:
Frecuencia de pasos: 0 a 200 kHz
Tiempo de pulso "0" de paso: 0.5 µs mínimo (Paso en el flanco descendente)
Tiempo de pulso "1" de paso: 4.5 µs mínimo
Configuración de dirección: 1 µs mínimo (20 µs tiempo de espera mínimo después del flanco de paso)
Del manual de Gecko G203V:
Frecuencia de paso: 0 a 333 kHz
Tiempo de pulso "0" de paso: 2.0 µs mín. (paso en flanco ascendente)
Tiempo de pulso "1" de paso: 1.0 µs mín.
Configuración de dirección:
200 ns (0.2 µs) antes del flanco ascendente del pulso del paso
200 ns (0.2 µs) de espera después del flanco ascendente del pulso de paso
De la hoja de datos de Xylotex:
Tiempo de configuración de DIR mínimo antes del flanco ascendente del pulso de STEP 200 ns mín.
Tiempo de espera DIR después del flanco ascendente del pulso de STEP 200 ns
Tiempo mínimo de pulso alto de STEP 2.0 µs
Tiempo mínimo de pulso bajo de STEP 1.0 µs
El paso ocurre en el flanco ascendente
Una vez encontrados los números, anotarlos también; se necesitarán en el próximo paso.
1.3. Elegir el BASE_PERIOD
BASE_PERIOD es el latido de la computadora LinuxCNC. En cada período, el software generador de pasos decide si es el momento de otro pulso de paso. Un período más corto permitirá generar más pulsos por segundo, dentro de los limites. Pero si se queda demasiado corto, la computadora pasará tanto tiempo generando pulsos de paso que todo lo demás se ralentizará a paso de tortuga, o tal vez incluso se bloqueará. La latencia y los requisitos del controlador afectan el período más corto que se puede usar, como veremos en un minuto.
Veamos primero el ejemplo de Gecko. El G202 puede manejar pulsos de pasos que están en bajo por 0.5 µs y en alto por 4.5 µs. Se necesita que el pin de dirección este estable durante 1 µs antes del flanco descendente y permanecer estable 20 µs después del flanco descendente. El requisito de tiempo más largo es el tiempo de espera de 20 µs. Un enfoque simple sería establecer el período en 20 µs. Eso significa que todos los cambios en las líneas STEP y DIR están separados por 20 µs. Todo se ve bien, ¿verdad?
¡Incorrecto! Si hubiera latencia CERO, entonces todos los flancos estarían separados por 20 µs, y todo estaría bien. Pero todas las computadoras tienen alguna latencia, que significa retraso. Si la computadora tiene 11 µs de latencia, eso significa que a veces el software corre 11 µs más tarde de lo que se supone. Si una ejecución del software se hace 11 µs tarde, y la siguiente se hace a tiempo, el retraso de la primera a la segunda es solo 9 µs. Si el primero generó un impulso de paso, y el segundo cambia el bit de dirección, se acaba de violar el requisito de tiempo de espera de 20 µs del G202. Eso significa que su unidad podría haber dado un paso en la dirección incorrecta, y su pieza tendrá el tamaño incorrecto.
La parte realmente desagradable de este problema es que puede ser muy esporádico. Las peores latencias pueden ocurrir solo unas pocas veces por minuto, y las probabilidades de que ocurra mala latencia justo cuando el motor está cambiando de dirección son bajas. Así que muy de vez en cuando ocurrirán errores que puedan arruinar una pieza, y son imposibles de localizar para solucionarlos.
La forma más sencilla de evitar este problema es elegir un BASE_PERIOD que sea la suma de los requisitos de tiempo más largos de su controlador, y el peor caso de latencia de la computadora. Si está ejecutando un Gecko con un tiempo de espera requerido de 20 µs, y la prueba de latencia dice que tiene una latencia máxima de 11 µs, si se configura BASE_PERIOD a 20+11=31 µs (31000 nano-segundos en el archivo ini), se tiene la garantía de cumplir los requisitos de tiempo del controlador.
Pero queda un compromiso. Hacer un pulso de paso requiere al menos dos períodos. Uno para comenzar el pulso y otro para finalizarlo. Como el período es 31 µs, se necesita 2x31 = 62 µs para crear un pulso de paso. Eso significa que la velocidad máxima de paso es de solo 16129 pasos por segundo. No muy buena. Pero no te rindas todavía, aún tenemos algunos ajustes que hacer en la próxima sección
Para Xylotex los tiempos de activación y espera son muy cortos, 200 ns cada uno (0.2 µs). El tiempo más largo es el alto de 2 µs. Si se tiene una latencia de 11 µs, entonces puede establecerse un BASE_PERIOD bajo como 11+2=13 µs. ¡Deshacerse del largo tiempo de espera de 20 µs realmente ayuda!. Con un período de 13 µs, un paso completo tarda 2x13 = 26 µs, y la velocidad máxima de paso es ¡38,461 pasos por segundo!
Pero no se puede celebrar todavía. Consideremos que 13 µs es un período muy corto. Si intentamos correr el generador de pasos cada 13 µs, podría no quedar tiempo suficiente para ejecutar cualquier otra cosa, y la computadora podría bloquearse. Si el objetivo son períodos menores a 25 µs, debemos comenzar con 25 µs o más, ejecutar LinuxCNC y ver cómo responden las cosas. Si todo esta bien, podemos disminuir gradualmente el período. Si el puntero del mouse comienza a ser lento, o cualquier otra cosa en la PC se ralentiza, el período es cortito. Regresa al valor anterior que dejó a la computadora funcionar sin problemas.
En este caso, supongamos que se comenzó en 25 µs, tratando de llegar a 13 µs, pero se encuentra que el límite esta alrededor de 16 µs o algo menor y la computadora no responde muy bien. Entonces usamos 16 µs. Con un período de 16 µs y latencia de 11 µs, el tiempo de salida más corto será 16-11 = 5 µs. El controlador solo necesita 2 µs, así que se tiene un margen. El margen es bueno, no se quiere perder pasos por haber usado un tiempo demasiado corto.
¿Cuál es la velocidad de paso máxima? Recuerda, dos períodos para dar un paso. Se estableció en 16 µs para el período, por lo que un paso consume 32 µs. Eso trabaja a unos nada malos 31,250 pasos por segundo.
1.4. Uso de steplen, stepspace, dirsetup y/o dirhold
En la última sección, obtuvimos para el controlador Xylotex un período de 16 µs y una velocidad máxima de 31250 pasos por segundo. Pero el Gecko estaba atascado en 31 µs y unos no tan buenos 16129 pasos por segundo. El ejemplo de Xylotex es lo mejor que podemos hacer con él. Pero el Gecko se puede mejorar.
El problema con el G202 es el requisito de tiempo de espera de 20 µs. Esto, y la latencia de 11 µs es lo que nos obliga a usar un período lento de 31 µs. Pero el generador de pasos por software de LinuxCNC tiene algunos parámetros que permiten aumentar diferentes tiempos en uno o varios períodos. Por ejemplo, si se cambia steplen de 1 a 2, entonces habrá dos períodos entre el comienzo y final del pulso de paso. Del mismo modo, si se cambia dirhold de 1 a 3, habrá al menos tres períodos entre el pulso de paso y un cambio del pin de dirección.
Si podemos usar dirhold para cumplir con el requisito de 20 µs de tiempo de espera, entonces el siguiente tiempo más largo es el tiempo alto de 4.5 µs. Al agregar la latencia de 11 µs al tiempo alto de 4.5 µs, se obtiene un período mínimo de 15.5 µs. Cuando se intenta con 15.5 µs, encontraremos que la computadora es lenta, por lo que se establecen 16 µs. Si dejamos dirhold en 1 (valor predeterminado), entonces el tiempo mínimo entre paso y dirección es el período de 16 µs menos la latencia de 11 µs = 5 µs, que no es suficiente, necesitamos otros 15 µs. Como el período es 16 µs, necesitamos un período más. Entonces cambiamos dirhold de 1 a 2. Ahora el tiempo mínimo desde el final del pulso de paso hasta el pin de cambio de dirección es 5+16 = 21 µs, y no tenemos que preocuparnos de que Gecko dé pasos en dirección equivocada debido a la latencia.
Si la computadora tiene una latencia de 11 µs, entonces una combinación de un período base de 16 µs, y un valor dirhold de 2 asegura que siempre cumpliremos los requisitos de tiempo del Gecko. Para pasos normales (sin dirección cambio), el valor aumentado de dirhold no tiene efecto alguno. Son dos períodos que totalizan 32 µs para dar cada paso, y tenemos la misma velocidad de 31250 pasos por segundo que obtuvimos con el Xylotex.
El número de latencia de 11 µs utilizado en este ejemplo es muy bueno. Si trabajas a través de estos ejemplos con mayor latencia, como 20 o 25 µs, la mayor velocidad de pasos tanto para Xylotex como para Gecko será menor. Pero las mismas fórmulas aplican para calcular el BASE_PERIOD óptimo, y para ajustar dirhold u otros parámetros del generador de pasos.
1.5. ¡Sin adivinar!
Para un sistema de pasos basado en software, rápido y confiable, no se puede simplemente adivinar períodos y otros parámetros de configuración. Se necesitan mediciones en la computadora, y hacer los cálculos para asegurar que los controladores obtengan las señales que necesitan.
Para facilitar las matemáticas, hemos creado una hoja de cálculo de Open Office Calculadora de tiempos de pasos. Tú ingresas el resultado de la prueba de latencia y los requisitos de tiempo del controlador de pasos y la hoja de cálculo calcula el BASE_PERIOD óptimo. A continuación, prueba el período para asegurar que no se ralentizará o bloqueará la PC. Finalmente, ingresa el período real y la hoja de cálculo dirá la configuración de parámetros de stepgen que se necesita para cumplir con los requisitos de tiempo de la unidad. También se calcula la velocidad máxima de paso que se podrá generar.
Se han agregado algunas cosas a la hoja de cálculo para calcular la velocidad máxima y cálculos eléctricos de generador de pasos.