LinuxCNC Documentation
This page is 99% translated. Untranslated text is shown in English.

1. Introducción

HostMot2 es una configuración FPGA desarrollada por Mesa Electronics para su línea Anything I/O de tarjetas de control de movimiento. El firmware es código abierto, portable y flexible. Puede configurarse (en tiempo de compilación) con cero o más instancias (un objeto creado en tiempo de ejecución) de cada uno de diversos módulos: codificadores (contadores en cuadratura), generadores PWM y generadores de paso/dirección. Se puede configurar el firmware (en tiempo de ejecución) para conectar cada una de esas instancias a pines en los conectores de E/S. Los pines de E/S no controlados por una instancia de módulo se revierten a una E/S digital bidireccional de propósito general.

2. Binarios de firmware

Tarjetas FPGA con conector de 50 pines

Hay disponibles varios binarios de firmware de HostMot2 precompilados para las distintas tarjetas Anything I/O. Esta lista está incompleta, revise la distribución del firmware de hostmot2 para listas de firmware actualizadas.

  • 3x20 (144 pines de E/S): usa el módulo hm2_pci

    • servo de 24 canales

    • servo de 16 canales además de 24 generadores de paso/dirección

  • 5I22 (96 pines de E/S): usa el módulo hm2_pci

    • servo de 16 canales

    • servo de 8 canales además de 24 generadores de paso/dirección

  • 5I20, 5I23, 4I65, 4I68 (72 pines de E/S): usa el módulo hm2_pci

    • servo de 12 canales

    • servo de 8 canales además de 4 generadores de paso/dirección

    • servo de 4 canales además de 8 generadores de paso/dirección

  • 7I43 (48 pines de E/S): usa el módulo hm2_7i43

    • servo de 8 canales (8 generadores PWM y 8 codificadores)

    • servo de 4 canales además de 4 generadores de paso/dirección

Tarjetas FPGA con DB25

La tarjeta FPGA 5I25 Superport es preprogramada al momento de compra y no necesita un binario de firmware.

3. Instalación de firmware

Dependiendo de cómo instalaste LinuxCNC, podrías necesitar abrir el Administrador de paquetes Synaptic desde el menú de Sistema e instalar el paquete para tu tarjeta Mesa. La forma más rápida de encontrarlo es buscar la palabra hostmot2 en el Administrador de paquetes Synaptic. Selecciona el firmware a instalar y luego Aplicar.

4. Cargando HostMot2

El soporte de LinuxCNC al firmware HostMot2 está dividido en un controlador genérico llamado hostmot2 y dos controladores de E/S de bajo nivel para las tarjetas Anything I/O. Los controladores de E/S de bajo nivel son hm2_7i43 y hm2_pci (para todas las placas Anything I/O basadas en PCI- y PCI-104/Plus). El controlador hostmot2 debe cargarse primero, usando un comando HAL como:

loadrt hostmot2

Consulte la página man de hostmot2(9) para detalles.

El controlador hostmot2 en sí no hace nada, necesita acceso a tarjetas reales que ejecuten el firmware HostMot2. Los controladores de E/S de bajo nivel proporcionan tal acceso. Los controladores de E/S de bajo nivel se cargan con comandos como:

loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT
       num_encoders=3 num_pwmgens=3 num_stepgens=1"

Los parámetros de configuración se describen en la página del manual de hostmot2.

5. Perro guardián

El firmware HostMot2 puede incluir un módulo perro guardián; si lo hace, el controlador hostmot2 lo usará.

El perro guardián debe ser acariciado por LinuxCNC periódicamente o morderá. La función hm2 write (ver abajo) acaricia al perro guardián.

Cuando el perro guardián muerde, todos los pines de E/S de la placa son desconectados de sus instancias de módulo y se convierten en entradas de alta impedancia (jaladas arriba). El estado de los módulos firmware HostMot2 no es perturbado (exceptuando la configuración de pines de E/S). Las instancias de codificador siguen contando pulsos en cuadratura, y los generadores pwm y de pasos seguirán generando señales (las cuales no serán relevadas a los motores, porque los pines de E/S se han vuelto entradas).

Restablecer el perro guardián restablece los pines de E/S a la configuración elegida en tiempo de carga.

Si el firmware incluye un perro guardián, los siguientes objetos HAL se exportarán:

5.1. Pines

  • has_bit - (bool i/o) True if the watchdog has bit, False if the watchdog has not bit. If the watchdog has bit and the has_bit bool is True, the user can reset it to False to resume operation.

5.2. Parámetros

  • timeout_ns - (uint read/write) Watchdog timeout, in nanoseconds. This is initialized to 5,000,000 (5 milliseconds) at module load time. If more than this amount of time passes between calls to the hm2 write function, the watchdog will bite.

6. Funciones de HostMot2

  • hm2_<TipoDePlaca>.<NúmeroDePlaca>.read - Lee todas las entradas, actualiza pines HAL de entrada.

  • hm2_<TipoDePlaca>.<NúmeroDePlaca>.write - Escribe todas las salidas.

  • hm2_<TipoDePlaca>.<NúmeroDePlaca>.read_gpio - Lee solo los pines de entrada GPIO. (Esta función no esta disponible en la 7I43 debido a limitaciones del bus EPP.)

  • hm2_<TipoDePlaca>.<NúmeroDePlaca>.write_gpio - Escribe solo los registros de control y pines de salida GPIO. (Esta función no esta disponible en la 7I43 debido a limitaciones del bus EPP.)

Note

Las funciones read_gpio y write_gpio de arriba normalmente no serán necesitadas, ya que los bits GPIO son leídos y escritos junto con todo lo demás en las funciones estándar read y write de arriba, las cuales son normalmente ejecutadas en el hilo servo.

Las funciones read_gpio y write_gpio fueron proporcionadas en caso de que se necesite una E/S muy rápida (actualizada frecuentemente). Tales funciones deberían ejecutarse en el hilo base. Si tienes necesidad de esto, por favor envía un email y cuéntanos de ella, y cuál es tu aplicación.

7. Asignación de pines

El controlador hostmot2 no tiene una asignación de pines particular. La asignación de pines viene del firmware que el controlador hostmot2 envía a la placa Anything I/O. Cada firmware tiene diferente asignación de pines, y la asignación de pines depende de cuántos de los codificadores, generadores pwm y generadores de pasos disponibles se han usado. Para obtener la lista de asignación de pines para tu configuración, después de cargar LinuxCNC teclea en una ventana de terminal:

dmesg > hm2.txt

El archivo de texto resultante contendría un montón de información, así como la asignación de pines para el HostMot2 y cualquier mensaje de error o advertencia.

Para reducir el desorden, se puede limpiar el búfer de mensajes antes de cargar LinuxCNC tecleando lo siguiente en la ventana de terminal:

sudo dmesg -c

Ya que este corriendo LinuxCNC y hagas un dmesg > hm2.txt en la terminal, sólo la información desde que se cargó LinuxCNC estará en tu archivo junto con tu asignación de pines. El archivo estará en el directorio actual de la ventana de terminal. Cada línea contendrá el nombre de tarjeta, el número de tarjeta, el número de pin de E/S, el conector y pin, y el uso. Con esta impresión conocerás las conexiones físicas a tu tarjeta con base en tu configuración.

Un ejemplo de una configuración 5I20:

[HOSTMOT2]
DRIVER=hm2_pci
BOARD=5i20
CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=1 num_pwmgens=1 num_stepgens=3"

La configuración de arriba producirá esta impresión.

[ 1141.053386] hm2/hm2_5i20.0: 72 I/O Pins used:
[ 1141.053394] hm2/hm2_5i20.0: IO Pin 000 (P2-01): IOPort
[ 1141.053397] hm2/hm2_5i20.0: IO Pin 001 (P2-03): IOPort
[ 1141.053401] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input)
[ 1141.053405] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input)
[ 1141.053408] hm2/hm2_5i20.0: IO Pin 004 (P2-09): IOPort
[ 1141.053411] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input)
[ 1141.053415] hm2/hm2_5i20.0: IO Pin 006 (P2-13): IOPort
[ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)
[ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort
[ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) (Output)
[ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort
[ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)
<snip>...
[ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)
[ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)
[ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)
[ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)
[ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output)
[ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output)
[ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort
[ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort
[ 1141.053619] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort
[ 1141.053621] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort
[ 1141.053624] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort
[ 1141.053627] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort
[ 1141.053811] hm2/hm2_5i20.0: registered
[ 1141.053815] hm2_5i20.0: initialized AnyIO board at 0000:02:02.0
Note
El pin de E/S nnn corresponderá al número de pin mostrado en la pantalla de configuración de HAL para GPIOs. Algunos de StepGen, Encoder y PWMGen también se mostrarán como GPIOs en la pantalla de configuración de HAL.

8. Archivos de pines

La asignación de pines predeterminada se describe en un archivo .PIN (texto legible al humano). Cuando instalas un paquete de firmware, los archivos .PIN son instalados en

/usr/share/doc/hostmot2-firmware-<placa>/

9. Firmware

El firmware seleccionado (archivo .BIT) y su configuración son cargados desde la placa madre de la PC al la tarjeta madre de Mesa durante el arranque de LinuxCNC. Si usas Run In Place, aún debes instalar un paquete hostmot2-firmware-<placa>. Hay más información acerca del firmware y su configuración en la sección Configuraciones.

10. Pines HAL

Los pines HAL para cada configuración pueden verse al abrir Mostrar configuración HAL desde el menú Máquina. Todo los pines HAL y parámetros se pueden encontrar ahí. La figura siguiente es de la configuración de la 5I20 usada arriba.

Pines HAL de 5i20
Figure 1. Pines HAL de 5i20

11. Configuración

El firmware de HostMot2 está disponible en varias versiones, dependiendo de lo que se quiera hacer. Puedes tener un recordatorio de para qué es un firmware particular buscando el nombre. Veamos un par de ejemplos.

Para la 7I43 (dos puertos), sería SV8 (Servo 8) por tener 8 servos o menos, usando la placa clásica 7I33 de 4 ejes (por puerto). De tal manera que 8 servos ocuparían hasta las 48 señales en los dos puertos. Pero si solo necesitas 3 servos, podrías decir num_encoders=3 y num_pwmgens=3 y recuperar 5 servos con 6 señales cada uno, ganando por lo tanto 30 bits de GPIO.

O, para la 5I22 (cuatro puertos), sería SVST8_24 (Servo 8, Stepper 24) para tener 8 servos o menos (también 7I33 x2), y 24 steppers o menos (7I47 x2). Esto ocuparía los cuatro puertos. Si solo necesitabas 4 servos podrías decir num_encoders=4 y num_pwmgens=4 y recuperar 1 puerto (y ahorrar un 7I33). Y si solo necesitabas 12 steppers podrías decir num_stepgens=12 y liberar hasta un puerto (y ahorrar un 7I47). De tal manera que podemos ahorrar dos puertos (48 bits) de GPIO.

Aquí están las tablas de los firmwares disponibles en los paquetes oficiales. Hay muchos firmwares adicionales disponibles en el sitio web Mesanet.com que aún no han llegado a los paquetes de firmware oficiales de LinuxCNC, así que revisa ahí también.

3x20 (6 puertos varios) Configuraciones predeterminadas (la 3x20 viene en versiones de 1M, 1.5M y 2M de compuertas. Hasta ahora, todo el firmware está disponible en todos los tamaños de compuertas.)

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV24

24

24

0

0

SVST16_24

16

16

24

0

5I22 (4 puertos PCI) Configuraciones predeterminadas (la 5I22 viene en versiones de 1M y 1.5M. Hasta ahora, todo el firmware está disponible en todos los tamaños de compuertas.)

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV16

16

16

0

0

SVST2_4_7I47

4

2

4

72

SVST8_8

8

8

8

0

SVST8_24

8

8

24

0

5I23 (3 puertos PCI) Configuraciones predeterminadas (la 5I23 tiene 400k compuertas.)

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV12

12

12

0

0

SVST2_8

2

2

8 (tbl5)

12

SVST2_4_7I47

4

2

4

48

SV12_2X7I48_72

12

12

0

24

SV12IM_2X7I48_72

12 (+IM)

12

0

12

SVST4_8

4

4

8 (tbl5)

0

SVST8_4

8

8

4 (tbl5)

0

SVST8_4IM2

8 (+IM)

8

4

8

SVST8_8IM2

8 (+IM)

8

8

0

SVTP6_7I39

6

0 (6 BLDC)

0

0

5I20 (3 puertos PCI) Configuraciones predeterminadas (la 5I20 tiene 200k compuertas.)

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV12

12

12

0

0

SVST2_8

2

2

8 (tbl5)

12

SVST2_4_7I47

4

2

4

48

SV12_2X7I48_72

12

12

0

24

SV12IM_2X7I48_72

12 (+IM)

12

0

12

SVST8_4

8

8

4 (tbl5)

0

SVST8_4IM2

8 (+IM)

8

4

8

4I68 (3 puertos PC/104) Configuraciones predeterminadas (la 4I68 tiene 400k compuertas.)

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV12

12

12

0

0

SVST2_4_7I47

4

2

4

48

SVST4_8

4

4

8

0

SVST8_4

8

8

4

0

SVST8_4IM2

8 (+IM)

8

4

8

SVST8_8IM2

8 (+IM)

8

8

0

4I65 (3 puertos PC/104) Configuraciones predeterminadas (la 4I65 tiene 200k compuertas.)

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV12

12

12

0

0

SVST8_4

8

8

4

0

SVST8_4IM2

8 (+IM)

8

4

8

7I43 (2 puertos paralelos) versiones de 400k compuertas, Configuraciones predeterminadas

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV8

8

8

0

0

SVST4_4

4

4

4 (tbl5)

0

SVST4_6

4

4

6 (tbl3)

0

SVST4_12

4

4

12

0

SVST2_4_7I47

4

2

4

24

7I43 (2 puertos paralelos) versiones de 200k compuertas, Configuraciones predeterminadas

Firmware Codificador Generadores PWM Generadores de pasos GPIO

SV8

8

8

0

0

SVST4_4

4

4

4 (tbl5)

0

SVST4_6

4

4

6 (tbl3)

0

SVST2_4_7I47

4

2

4

24

Aunque varias tarjetas puedan tener el mismo nombre de archivo .BIT, no puedes usar un archivo .BIT que no sea para esa tarjeta. Diferentes tarjetas tienen diferentes frecuencias de reloj, así que asegúrate de cargar el archivo .BIT apropiado para tu tarjeta. Los firmwares hm2 personalizados pueden ser creados para aplicaciones especiales y puedes ver algunos firmwares hm2 personalizados en los directorios con los predeterminados.

Cuando cargas el controlador de placa (hm2_pci o hm2_7i43) puedes indicarle que deshabilite las instancias de los tres módulos primarios (pwmgen, stepgen y encoder) al configurar el conteo como bajo. Cualquier pin de E/S que pertenezca a instancias de módulo deshabilitado se volverá GPIO.

12. GPIO

Los pines de E/S de propósito general en la placa que no son usados por una instancia de módulo son exportados a HAL como pines GPIO plenos, los cuales pueden ser configurados en tiempo de ejecución para que sean entradas, salidas o drenaje abierto, y tienen una interfaz HAL que expone tal flexibilidad. Los pines de E/S apropiados por una instancia de módulo activa están restringidos por los requerimientos del módulo propietario, y tienen una interfaz HAL restringida.

Los GPIOs tienen nombres como hm2_<TipoDePlaca>.<NúmeroDePlaca>.gpio.<NúmeroES>. NúmeroES es un número de tres dígitos. El mapeo de NúmeroES a conector y pin del conector se escribe en el syslog cuando se carga el controlador, y está documentado en el manual de Mesa para las placas Anything I/O.

La representación GPIO de hm2 es modelada a partir de las entradas y salidas digitales descritas en la Interfaz de dispositivo canónico (parte del documento Referencia general de HAL).

Los pines GPIO se predeterminan a entrada.

12.1. Pines

  • in - (bool, out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.

  • in_not - (bool, out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.

  • out - (bool, in) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO pins have this pin.

12.2. Parámetros

  • invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter. To invert an active module pin you have to invert the GPIO pin not the module pin.

  • is_opendrain - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is false, the GPIO behaves as a normal output pin: the I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted), and the value of the in and in_not HAL pins is undefined. If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.

  • is_output - (bool, rw) If set to 0, the GPIO is an input. The I/O pin is put in a high-impedance state (weakly pulled high), to be driven by other devices. The logic value on the I/O pin is available in the in and in_not HAL pins. Writes to the out HAL pin have no effect. If this parameter is set to 1, the GPIO is an output; its behavior then depends on the is_opendrain parameter. Only full GPIO pins have this parameter.

13. Generadores de pasos

Los generadores de pasos tienen nombres como hm2_<TipoDePlaca>.<NúmeroDePlaca>.stepgen.<Instancia>. Instancia es un número de dos dígitos que corresponde al número de instancia de generador de pasos de HostMot2. Hay num_stepgens instancias, comenzando con 00.

Cada generador de pasos aloja de 2 a 6 pines E/S (seleccionados en tiempo de compilación del firmware), pero actualmente solo usa dos: salidas de paso y dirección. [1]

La representación de StepGen está modelada en el componente de software stepgen. El predeterminado de StepGen es salida de paso alta activa (alto durante el tiempo de paso, bajo durante espacio de paso). Para invertir un pin de salida StepGen debes invertir el correspondiente pin GPIO que es usado por StepGen. Para encontrar el pin GPIO en uso para la salida de StepGen ejecuta dmesg como se muestra arriba.

Cada instancia StepGen tiene los siguientes pines y parámetros:

13.1. Pines

  • control-type - (bool, in) Switches between position control mode (0) and velocity control mode (1). Defaults to position control (0).

  • counts - (sint, out) Feedback position in counts (number of steps).

  • enable - (bool, in) Enables output steps. When false, no steps are generated.

  • position-cmd - (real, in) Target position of stepper motion, in user-defined position units.

  • position-fb - (real, out) Feedback position in user-defined position units (counts / position_scale).

  • velocity-cmd - (real, in) Target velocity of stepper motion, in user-defined position units per second. This pin is only used when the stepgen is in velocity control mode (control-type=1).

  • velocity-fb - (real, out) Feedback velocity in user-defined position units per second.

13.2. Parámetros

  • dirhold - (uint, rw) Minimum duration of stable Direction signal after a step ends, in nanoseconds.

  • dirsetup - (uint, rw) Minimum duration of stable Direction signal before a step begins, in nanoseconds.

  • maxaccel - (real, rw) Maximum acceleration, in position units per second per second. If set to 0, the driver will not limit its acceleration.

  • maxvel - (real, rw) Maximum speed, in position units per second. If set to 0, the driver will choose the maximum velocity based on the values of steplen and stepspace (at the time that maxvel was set to 0).

  • position-scale - (real, rw) Converts from counts to position units. position = counts / position_scale

  • step_type - (uint, rw) Output format, like the step_type modparam to the software stepgen(9) component. 0 = Step/Dir, 1 = Up/Down, 2 = Quadrature. In Quadrature mode (step_type=2), the stepgen outputs one complete Gray cycle (00 -> 01 -> 11 -> 10 -> 00) for each step it takes.

  • steplen - (uint, rw) Duration of the step signal, in nanoseconds.

  • stepspace - (uint, rw) Minimum interval between step signals, in nanoseconds.

13.3. Parámetros de salida

Los pines de paso y dirección de cada StepGen tienen dos parámetros adicionales. Para encontrar cuál pin de E/S pertenece a cuál salida de paso y dirección ejecuta dmesg como se describió arriba.

  • invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.

  • is_opendrain - (bool, rw) If this parameter is false, the GPIO behaves as a normal output pin: the I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.

14. Generadores PWM

Los generadores PWM tienen nombres como hm2_<TipoDePlaca>.<NúmeroDePlaca>.pwmgen.<Instancia>. Instancia es un número de dos dígitos que corresponde al número de instancia de pwmgen de HostMot2. Hay num_pwmgens instancias, comenzando con 00.

En HM2, cada pwmgen usa tres pines E/S de salida: Not-Enable, Out0 y Out1. Para invertir un pin de salida PWMGen debes invertir el pin GPIO correspondiente que este usando PWMGen. Para encontrar el pin GPIO en uso para la salida PWMGen ejecuta dmesg como se mostró arriba.

La función de los pines de E/S Out0 y Out1 varía con el parámetro output-type (ver abajo).

La representación de pwmgen de hm2 es similar a la del componente de software pwmgen. Cada instancia de pwmgen tienen los pines y parámetros siguientes:

14.1. Pines

  • enable - (bool, in) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable is false, pwmgen will set its Not-Enable pin true and not output any signals.

  • value - (real, in) The current pwmgen command value, in arbitrary units.

14.2. Parámetros

  • output-type - (sint, rw) This emulates the output_type load-time argument to the software pwmgen component. This parameter may be changed at runtime, but most of the time you probably want to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on Out1), 2 (Up on Out0 and Down on Out1), 3 (PDM mode, PDM on Out0 and Dir on Out1), and 4 (Direction on Out0 and PWM on Out1, for locked antiphase).

  • scale - (real, rw) Scaling factor to convert value from arbitrary units to duty cycle: dc = value / scale. Duty cycle has an effective range of -1.0 to +1.0 inclusive, anything outside that range gets clipped.

  • pdm_frequency - (uint, rw) This specifies the PDM frequency, in Hz, of all the pwmgen instances running in PDM mode (mode 3). This is the pulse slot frequency; the frequency at which the pdm generator in the Anything I/O board chooses whether to emit a pulse or a space. Each pulse (and space) in the PDM pulse train has a duration of 1/pdm_frequency seconds. For example, setting the pdm_frequency to 2*106 Hz (2 MHz) and the duty cycle to 50% results in a 1 MHz square wave, identical to a 1 MHz PWM signal with 50% duty cycle. The effective range of this parameter is from about 1525 Hz up to just under 100 MHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5I20 and 7I43 both have a 100 MHz clock, resulting in a 100 MHz max PDM frequency. Other boards may have different clocks, resulting in different max PDM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board.

  • pwm_frequency - (uint, rw) This specifies the PWM frequency, in Hz, of all the pwmgen instances running in the PWM modes (modes 1 and 2). This is the frequency of the variable-duty-cycle wave. Its effective range is from 1 Hz up to 193 kHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5i20 and 7i43 both have a 100 MHz clock, resulting in a 193 kHz max PWM frequency. Other boards may have different clocks, resulting in different max PWM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board. Frequencies below about 5 Hz are not terribly accurate, but above 5 Hz they are pretty close.

14.3. Parámetros de salida

Los pines de salida de cada generador PWM tienen dos parámetros adicionales. Para encontrar cuál pin de E/S pertenece a cuál salida ejecuta dmesg como se ha descrito arriba.

  • invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.

  • is_opendrain - (bool, rw) If this parameter is false, the GPIO behaves as a normal output pin: The I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.

15. Codificador

Los codificadores tienen nombres como hm2_<TipoDePlaca>.<NúmeroDePlaca>.encoder.<Instancia>.. Instancia es un número de dos dígitos que corresponde al número de instancia de codificador HostMot2. Hay num_encoders instancias, comenzando con 00.

Cada codificador usa tres o cuatro pines E/S de entrada, dependiendo de cómo se compiló el firmware. Los codificadores de tres pines usan A, B e Índice (a veces conocido también como Z). Los codificadores de cuatro pines usan A, B, Índice y Máscara de índice.

La representación del codificador hm2 es similar a la descrita por la Interfaz de dispositivo canónica (en el documento Referencia general de HAL), y a la del componente codificador por software. Cada instancia de codificador tiene los siguientes pines y parámetros:

15.1. Pines

  • count - (sint, out) Number of encoder counts since the previous reset.

  • index-enable - (bool, i/o) When this pin is set to True, the count (and therefore also position) are reset to zero on the next Index (Phase-Z) pulse. At the same time, index-enable is reset to zero to indicate that the pulse has occurred.

  • position - (real, out) Encoder position in position units (count / scale).

  • rawcounts - (sint, out) Total number of encoder counts since the start, not adjusted for index or reset.

  • reset - (bool, in) When this pin is TRUE, the count and position pins are set to 0. The value of the velocity pin is not affected by this. The driver does not reset this pin to FALSE after resetting the count to 0, that is the user’s job.

  • velocity - (real, out) Estimated encoder velocity in position units per second.

15.2. Parámetros

  • counter-mode - (bool, rw) Set to False (the default) for Quadrature. Set to True for Up/Down or for single input on Phase A. Can be used for a frequency to velocity converter with a single input on Phase A when set to true.

  • filter - (bool, rw) If set to True (the default), the quadrature counter needs 15 clocks to register a change on any of the three input lines (any pulse shorter than this is rejected as noise). If set to False, the quadrature counter needs only 3 clocks to register a change. The encoder sample clock runs at 33 MHz on the PCI Anything I/O cards and 50 MHz on the 7I43.

  • index-invert - (bool, rw) If set to True, the rising edge of the Index input pin triggers the Index event (if index-enable is True). If set to False, the falling edge triggers.

  • index-mask - (bool, rw) If set to True, the Index input pin only has an effect if the Index-Mask input pin is True (or False, depending on the index-mask-invert pin below).

  • index-mask-invert - (bool, rw) If set to True, Index-Mask must be False for Index to have an effect. If set to False, the Index-Mask pin must be True.

  • scale - (real, rw) Converts from count units to position units. A quadrature encoder will normally have 4 counts per pulse so a 100 PPR encoder would be 400 counts per revolution. In .counter-mode a 100 PPR encoder would have 100 counts per revolution as it only uses the rising edge of A and direction is B.

  • vel-timeout - (real, rw) When the encoder is moving slower than one pulse for each time that the driver reads the count from the FPGA (in the hm2_read() function), the velocity is harder to estimate. The driver can wait several iterations for the next pulse to arrive, all the while reporting the upper bound of the encoder velocity, which can be accurately guessed. This parameter specifies how long to wait for the next pulse, before reporting the encoder stopped. This parameter is in seconds.

16. Configuración del 5I25

16.1. Firmware

El firmware del 5I25 viene precargado para la tarjeta hija con la que se compró. Así que el firmware=xxx.BIT no es parte de la cadena de configuración hm2_pci cuando se usa una 5I25.

16.2. Configuración

Ejemplos de configuración de las tarjetas 5I25/7I76 y 5I25/7I77 están incluidos en el Selector de configuración.

Si deseas correr tu propia configuración, los ejemplos siguientes muestran cómo cargar los controladores en el archivo HAL.

Tarjeta 5I25 + 7I76
# carga el controlador genérico
loadrt hostmot2

# carga el controlador PCI y configura
loadrt hm2_pci config="num_encoders=1 num_stepgens=5 sserial_port_0=0XXX"
Tarjeta 5I25 + 7I77
# carga el controlador genérico
loadrt hostmot2

# carga el controlador PCI y configura
loadrt hm2_pci config="num_encoders=6 num_pwmgens=6 sserial_port_0=0XXX"

16.3. Configuración de SSERIAL

La cadena de configuración sserial_port_0=0XXX establece algunas opciones para la tarjeta hija serial inteligente. Estas opciones son específicas para cada tarjeta hija. Ver el manual de Mesa para más información sobre su uso exacto (típicamente en la sección nombrada SOFTWARE PROCESS DATA MODES) o ver la página de manual de SSERIAL(9).

16.4. Límites de 7I77

El minlimit y el maxlimit están ligados al valor del pin (en este caso el valor de salida análogo), fullscalemax es el factor de escala.

Estos son predeterminados a la entrada análoga o un rango análogo (muy probablemente en Voltios).

Por ejemplo, en las salidas análogas de +-10 V de la 7I77 los valores predeterminados son:

minlimit: -10
maxlimit: +10
maxfullscale: 10

Si quieres escalar la salida analógica de un canal a IPS para un servo en modo velocidad (digamos 24 IPS máx.) puedes establecer los límites así:

minlimit: -24
maxlimit: +24
maxfullscale: 24

Si quieres escalar la salida analógica de un canal a RPM para un husillo de 0 a 6000 RPM con un control de 0-10 V, puedes establecer los límites así:

minlimit: 0
maxlimit: 6000
maxfullscale: 6000
(esto prevendrá la configuración de voltajes de salida negativos indeseados)

17. Configuraciones de ejemplo

Varias configuraciones de ejemplo para el hardware Mesa están incluidas con LinuxCNC. Las configuraciones se localizan en las secciones hm2-servo y hm2-stepper del Selector de configuración. Típicamente necesitarás que la placa este instalada para que cargue la configuración elegida. Los ejemplos son un buen punto de partida y te ahorrarán tiempo. Tan solo elige el ejemplo apropiado del Selector de configuración de LinuxCNC y guarda una copia en tu computadora para que puedas editarlo. Para ver los pines exactos y parámetros que te dan tu configuración abre la ventana Mostrar configuración HAL desde el menú Máquina, o haz dmesg como se describió arriba.


1. Actualmente, el firmware soporta salidas stepper multi-fase, pero el controlador no. Se solicitan voluntarios interesados.