LinuxCNC Documentation

Pico Systems tiene una familia de placas para controlar motores a pasos y servomotores analógicos y PWM (digitales). La placa se conecta a la PC por un puerto paralelo en modo EPP. Aunque la mayoría de los usuarios conectan una placa al puerto paralelo, en teoría se puede usar cualquier cantidad de placas hasta 8 o 16 en un mismo puerto paralelo. Un controlador sirve a todos los tipos de placas. La mezcla final de E/S depende de la(s) placa(s) conectada(s). El controlador no distingue entre placas, simplemente numera canales de E/S (codificadores, etc) comenzando con 0 en la primera placa. El controlador se llama hal_ppmc.ko. La interfaz servoanalógica también es llamada PPMC por Parallel Port Motion Control. También está el Universal Stepper Controller, abreviado como USC. Y el Universal PWM Controller, o UPC.

Instalación:

loadrt hal_ppmc port_addr=<dirección1>[,<dirección2>[,<dirección3>...]]

El parámetro port_addr le dice al controlador cuál(es) puerto(s) paralelo(s) revisar. Predeterminadamente <dirección1> es 0x0378 y <dirección2> y subsecuentes no se usan. El controlador busca en todo el espacio de direcciones de puerto paralelo mejorado en port_addr, buscando cualquier placa de la familia PPMC. Luego exporta los pines HAL para lo encontrado. Durante la carga (o intento) el controlador imprime algunos útiles mensajes de depuración en la bitácora del kernel, los cuales pueden verse con dmesg.

Se pueden usar hasta 3 buses de puerto paralelo, y cada bus puede tener hasta 8 (o posiblemente 16 PPMC) dispositivos.

1. Opciones de la línea de comandos

Hay varias opciones que pueden especificarse en la línea de comandos de loadrt. Primero, el USC y el UPC pueden agregar un DAC de 8 bits para control de velocidad del husillo y funciones similares. Esto puede especificarse con el parámetro extradac=0xnn[,0xmm]. La parte entre [ ] te permite especificar esta opción en un sistema con más de una placa. El primer dígito hexadecimal indica a cuál bus EPP se refiere, corresponde al orden de las direcciones de puerto en el parámetro port_addr, donde <dirección1> aquí sería cero. Entonces, para el primer bus EPP, la primera placa USC o UPC sería la descrita como 0x00, el segundo USC o UPC en el mismo bus sería 0x02. (Nótese que cada USC o UPC toma hasta dos direcciones, de tal manera que si una esta en 00, la siguiente tendría que ser 02.)

Alternativamente, los 8 pines de salida digital pueden usarse como salidas digitales adicionales, funciona de la misma manera de arriba con la sintaxis : extradout=0xnn. Las opciones extradac y extradout son mutuamente exclusivas en cada placa, solo puedes especificar una.

Las placas codificadoras UPC y PPMC pueden marcar el tiempo de llegada de conteos del codificador para refinar la derivación de velocidad del eje. Esta velocidad derivada puede alimentar el componente hal PID para producir una respuesta de término D más suave. La sintaxis es: timestamp=0xnn[,0xmm], esto funciona igual que arriba para seleccionar cuál placa es configurada. El predeterminado es no activar la opción de marca de tiempo. Si pones esta opción en la línea de comandos se activa la opción. La primera n selecciona el bus EPP, la segunda coincide con la dirección de la placa con la opción activada. El controlador verifica el nivel de revisión de la placa para asegurar que el firmware soporte la característica, y produce un mensaje de error si la placa no la soporta.

La placa codificadora PPMC tiene una opción para seleccionar la frecuencia del filtro digital del codificador. (La UPC tiene la misma capacidad mediante interruptores DIP en la placa). Ya que la placa codificadora PPMC no tiene esos interruptores DIP extras, se necesita seleccionar mediante opción de línea de comandos. Predeterminadamente el filtro corre a 1 MHz, permitiendo a los codificadores ser contados hasta alrededor de 900 kHz (dependiendo del ruido y precisión de cuadratura del codificador.) Las opciones son 1, 2.5, 5 y 10 MHz. Estas son configuradas con un parámetro de 1, 2, 5 y 10 (decimal) el cual se especifica como el dígito hexadecimal "A". Estos se especifican de manera similar a las opciones de arriba, pero con la configuración de frecuencia a la izquierda de los dígitos de bus/dirección. Así que para configurar 5 MHz en la placa codificadora en la dirección 3 en el primer bus EPP escribirías: enc_clock='0x503'.

Se descubrió recientemente que algunos chips de puerto paralelo no funcionarían con el controlador ppmc. Especialmente el chip OXPCIe952 de Oxford en las tarjetas de puerto paralelo PCIe de SIIG. El controlador ppmc en todas las versiones de LinuxCNC comenzando desde la 2.7.8 han sido corregidas predeterminadamente para este problema. Sin embargo, esto podría posiblemente provocar problemas con hardware de puerto paralelo EPP muy viejo, por lo que hay una opción de línea de comandos para regresar el comportamiento anterior. El nuevo comportamiento se configura predeterminadamente, o al agregar el parámetro epp_dir=0 en la línea de comandos. Para obtener el viejo comportamiento agrega epp_dir=1 a la línea de comandos. Todos los puertos paralelos que tengo aquí funcionan con el comportamiento nuevo predeterminado. En cuanto a los otros parámetros, es posible dar una lista, como epp_dir=1,0,1 para establecer diferentes configuraciones para cada uno de los hasta 3 puertos paralelos.

2. Pines

En los siguientes pines, parámetros y funciones <puerto> es el identificador del puerto paralelo. Según las convenciones de nombrado el primer puerto debería tener siempre el identificador cero. Todas las placas tienen un método para configurar la dirección en el bus EPP. USC y UPC tienen provisiones simples para solo dos direcciones, pero cortes de laminillas de puenteado permiten direccionar hasta 4 placas. Las placas PPMC tienen 16 direcciones posibles. En todos los casos el controlador enumera las placas por tipo y exporta los pines HAL apropiados. Por lo tanto los codificadores se enumerarán desde 0 en adelante, en el mismo orden que especifiquen los interruptores de dirección en la placa. Entonces, la primera placa tendrá codificadores 0 — 3, la segunda placa tendrá codificadores 4 — 7. La primer columna después de la viñeta indica cuáles placas tendrán este pin HAL o parámetro asociado. Todas significa que este pin está disponible en los tres tipos de placas. Optional significa que este pin solo será exportado cuando esta opción esta activada por un parámetro adicional en el comando HAL loadrt. Esas opciones requieren que la placa tenga el nivel de revisión suficiente para soportar la característica.

  • (Todas s32 output) ppmc.<puerto>.encoder.<canal>.count - Posición del codificador, en conteos.

  • (Todas s32 output) ppmc.<puerto>.encoder.<canal>.delta - Diferencia de conteos desde la última lectura, en unidades de conteo de codificador brutas.

  • (Todas float output) 'ppmc.<puerto>.encoder.<canal>.velocity - Velocidad escalada en unidades de usuario por segundo. En PPMC y USC se deriva de conteos brutos de codificador por servoperiodo, y por lo tanto es afectado por la granularidad del codificador. En placas UPC con el firmware 8/21/09 y posterior se puede usar la estimación de velocidad por marcado de tiempo de conteos de codificador para mejorar la suavidad de esta salida de velocidad. Puede alimentarse al componente HAL PID para producir una respuesta servo más estable. Esta función debe activarse en la línea de comandos HAL que inicia el controlador PPMC, con la opción timestamp=0x00.

  • (Todas float output) ppmc.<puerto>.encoder.<canal>.position - Posición del codificador en unidades de usuario.

  • (Todas bit bidir) ppmc.<puerto>.encoder.<canal>.index-enable - Conecta a joint.#.index-enable para home-to-index. Esta es una señal HAL bidireccional. Establecerlo en Verdadero provoca que el hardware del codificador restablezca el conteo a cero en el siguiente pulso de índice de codificador. El controlador detectará esto y establecerá la señal de vuelta a Falso.

  • (PPMC float output) ppmc.<puerto>.DAC.<canal>.value - Envía un valor con signo al convertidor digital a analógico de 16 bits en la placa PPMC DAC16 ordenando el voltaje de salida analógica de ese canal de DAC.

  • (UPC bit input) ppmc.<puerto>.pwm.<canal>.enable - Activa un generador PWM.

  • (UPC float input) ppmc.<puerto>.pwm.<canal>.value - Valor que determina el ciclo de trabajo de las formas de onda de PWM. El valor es dividido entre pwm.<canal>.scale y si el resultado es 0.6 el ciclo de trabajo será 60%, y así sucesivamente. Valores negativos hacen que el ciclo de trabajo sea con base en el valor absoluto, y el pin de dirección se establece para indicar negativo.

  • (USC bit input) ppmc.<puerto>.stepgen.<canal>.enable - Activa un generador de pulso de paso.

  • (USC float input) ppmc.<puerto>.stepgen.<canal>.velocity - Valor que determina la frecuencia de paso. El valor es multiplicado por stepgen.<canal>.scale y el resultado es la frecuencia en pasos por segundo. Valores negativos hacen que la frecuencia se base en el valor absoluto, y que el pin de dirección se establezca para indicar negativo.

  • (Todas bit output) ppmc.<puerto>.din.<canal>.in - Estado del pin de entrada digital, ver entrada digital canónica.

  • (Todas bit output) ppmc.<puerto>.din.<canal>.in-not - Estado invertido del pin de entrada digital, ver entrada digital canónica.

  • (Todas bit input) ppmc.<puerto>.dout.<canal>.out - Valor a ser escrito en la salida digital, ver salida digital canónica.

  • (Opción float input) ppmc.<puerto>.DAC8-<canal>.value - Valor a ser escrito en la salida analógica, va de 0 a 255. Este envía 8 bits de salida a J8, el cual debería estar conectado a una placa Spindle DAC. 0 corresponde al cero voltios, 255 corresponde a 10 voltios. La polaridad de la salida puede establecerse como siempre negativa, siempre positiva o puede estar controlada por el estado de SSR1 (positiva cuando esta activo) y SSR2 (negativa cuando esta activo). Debes especificar extradac = 0x00 en la línea de comando HAL que carga el controlador PPMC para habilitar esta función en la primera paca USC o UPC.

  • (Opción bit input) ppmc.<puerto>.dout.<canal>.out - Valor a ser escrito en una de los 8 pines de salida digital extra en J8. Debes especificar extradout = 0x00 en la línea de comando HAL que carga el controlador ppmc para habilitar esta función en la primera placa USC o UPC. extradac y extradout son características mutuamente excluyentes, ya que usan las mismas líneas de señal para diferentes propósitos. Estos pines de salida se enumerarán después de las salidas digitales estándar de la placa.

3. Parámetros

  • (Todas float) ppmc.<puerto>.encoder.<canal>.scale - El número de conteos / unidad de usuario (para convertir conteos a unidades).

  • (UPC float) ppmc.<puerto>.pwm.<rango-de-canales>.freq - La frecuencia de portadora de PWM en Hz. Aplica a un grupo de cuatro generadores PWM consecutivos indicados por <rango-de-canales>. El mínimo es 610 Hz y el máximo es 500 kHz.

  • (PPMC float) ppmc.<puerto>.DAC.<canal>.scale - Establece la escala del canal de salida del DAC16, de tal manera que una valor de salida igual al valor de 1/escala producirá una salida de + o - el valor en voltios. Así que, si el parámetro scale es 0.1 y envías un valor de 0.5, la salida será 5.0 voltios.

  • (UPC float) ppmc.<puerto>.pwm.<canal>.scale - Escala del generador PWM. Si scale es X, entonces el ciclo de trabajo será del 100% cuando el pin value es X (o -X).

  • (UPC float) ppmc.<puerto>.pwm.<canal>.max-dc - Ciclo de trabajo máximo, entre 0.0 y 1.0.

  • (UPC float) ppmc.<puerto>.pwm.<canal>.min-dc - Ciclo de trabajo mínimo, entre 0.0 y 1.0.

  • (UPC float) ppmc.<puerto>.pwm.<canal>.duty-cycle - Ciclo de trabajo real (usado principalmente para diagnóstico y solución de problemas.)

  • (UPC bit) ppmc.<puerto>.pwm.<canal>.bootstrap - Si es Verdadero el generador PWM generará una secuencia corta de pulsos de ambas polaridades cuando E-stop sea Falso, para restablecer los enclavamientos de parada en algunos servo controladores PWM.

  • (USC u32) ppmc.<puerto>.stepgen.<rango-de-canales>.setup-time - Establece el tiempo mínimo entre cambio de dirección y pulso de paso, en unidades de 100 ns. Aplica a un grupo de cuatro generadores de paso consecutivos, según indique <rango-de- canales>. Se pueden especificar valores entre 200 ns y 25.5 µs.

  • (USC u32) ppmc.<puerto>.stepgen.<rango-de-canales>.pulse-width - Establece el ancho de pulsos de paso, en unidades de 100 ns. Aplica a un grupo de cuatro generadores de paso consecutivos, según indique <rango-de- canales>. Se pueden especificar valores entre 200 ns y 25.5 µs.

  • (USC u32) ppmc.<puerto>.stepgen.<rango-de-canales>.pulse-space-min - Establece el tiempo mínimo entre pulsos, en unidades de 100 ns. Aplica a un grupo de cuatro generadores de paso consecutivos, según indique <rango-de- canales>. Se pueden especificar valores entre 200 ns y 25.5 µs. La tasa de paso máxima es: pico ppmc math

  • (USC float) ppmc.<puerto>.stepgen.<canal>.scale - Escala para generador de pulso de paso. La frecuencia de paso en Hz es el valor absoluto de velocity * scale.

  • (USC float) ppmc.<puerto>.stepgen.<canal>.max-vel - El valor máximo para velocity. Órdenes mayores que max-vel serán restringidas. También aplica para valores negativos. (El valor absoluto es restringido.)

  • (USC float) ppmc.<puerto>.stepgen.<canal>.frequency - Frecuencia de pulso de paso real en Hz (usada principalmente para diagnóstico y solución de problemas.)

  • (Opción float) ppmc.<puerto>.DAC8.<canal>.scale - Establece la escala de la salida DAC extra de tal manera que un valor de salida igual a la escala da una magnitud salida de 10.0 V. (El signo de la salida se establece con jumpers y/o otras salidas digitales.)

  • (Opción bit) ppmc.<puerto>.dout.<canal>.invert - Invierte una salida digital, ver salida digital canónica.

  • (Opción bit) ppmc.<puerto>.dout.<canal>.invert - Invierte un pin de salida digital de J8, ver salida digital canónica.

4. Funciones

  • (Todas funct) ppmc.<puerto>.read - Lee todas las entradas (digitales y contadores de codificadores) en un puerto. Estas lecturas están organizadas en bloques de registros contiguos a ser leídos en un bloque, para minimizar la sobrecarga de CPU.

  • (Todas funct) ppmc.<puerto>.write - Escribe todas las salidas (digitales, generadores de paso, PWMs) en un puerto. Estas escrituras están organizadas en bloques de registros contiguos a ser escritos en un bloque, para minimizar la sobrecarga de CPU.