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
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
-
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 - (bit e/s) Verdadero si el perro guardián ha mordido, Falso si el perro guardián no ha mordido. Si el perro guardián ha mordido y el bit has_bit es Verdadero, el usuario puede restablecerlo a Falso para continuar operando.
5.2. Parámetros
-
timeout_ns - (u32 lectura/escritura) Tiempo límite del perro guardián en nanosegundos. Se inicializa a 5,000,000 (5 milisegundos) en tiempo de carga del módulo. Si pasa más de esta cantidad de tiempo entre llamadas a la función hm2 write, el perro guardián morderá.
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.
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 - (Bit, Out) Estado normal del pin de entrada de hardware. Ambos pines GPIO plenos y E/S usados como entradas por instancias de módulo activas tienen este pin.
-
in_not - (Bit, Out) Estado invertido del pin de entrada de hardware. Ambos pines GPIO plenos y E/S usados como entradas por instancias de módulo activas tienen este pin.
-
out - (Bit, In) Valor a ser escrito (posiblemente invertido) al pin de salida del hardware. Solo los pines GPIO plenos tienen este pin.
12.2. Parámetros
-
invert_output - (Bit, RW) Este parámetro solo tiene efecto si el parámetro is_output es Verdadero. Si este parámetro es Verdadero, el valor de salida del GPIO será el inverso del valor en el pin HAL out. Solo los pines GPIO plenos y de E/S usados como salidas por instancias de módulo activas tienen este parámetro. Para invertir un pin de módulo activo tienes que invertir el pin GPIO, no el pin de módulo.
-
is_opendrain - (Bit, RW) Este parámetro solo tiene efecto si el parámetro is_output es Verdadero. Si este parámetro es Falso, el GPIO se comporta como un pin de salida normal: el pin E/S en el conector es controlado al valor especificado por el pin HAL out (posiblemente invertido) y el valor de los pines HAL in y in_not es indefinido. Si este parámetro es Verdadero, el GPIO se comporta como un pin de drenaje abierto. Escribir 0 en el pin HAL out lleva el pin E/S a bajo, escribir 1 en el pin HAL out pone el pin E/S en un estado de alta impedancia. En este estado de alta impedancia el pin E/S flota (débilmente jalado arriba), y otros dispositivos pueden controlar el valor; el valor resultante en el pin E/S está disponible en los pines in y in_not. Solo los pines GPIO plenos y de E/S usados como salidas por instancias de módulo activas tienen este parámetro.
-
is_output - (Bit, RW) Si es 0, el GPIO es una entrada. El pin E/S es puesto en estado de alta impedancia (débilmente jalado arriba), para ser controlado por otros dispositivos. El valor lógico en el pin E/S está disponible en los pines HAL in y in_not. Escrituras al pin HAL out no tienen efecto. Si este parámetro es 1, el GPIO es una salida; su comportamiento depende entonces del parámetro is_opendrain. Solo pines GPIO plenos tienen este parámetro.
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 - (Bit, entrada) Cambia entre modos de control de posición (0) y velocidad (1). Predeterminado a control de posición (0).
-
counts - (s32, salida) - Posición de retroalimentación en conteos (número de pasos).
-
enable - (Bit, entrada) Habilita la salida de pasos. Cuando es falso, no se generan pasos.
-
position-cmd - (Float, entrada) Posición objetivo del movimiento de stepper, en unidades de posición definidas por el usuario.
-
position-fb - (float, salida) - Posición de retroalimentación en unidades de posición definidas por el usuario (counts/position-scale).
-
velocity-cmd - (Float, entrada) Velocidad objetivo del movimiento de stepper, en unidades de posición definidas por el usuario por segundo. Este pin es usado solo cuando el generador de pasos está en modo de control de velocidad (control-type=1).
-
velocity-fb - (Float, salida) Velocidad de retroalimentación en unidades de posición definidas por el usuario por segundo.
13.2. Parámetros
-
dirhold - (u32, RW) Duración mínima de señal de dirección estable después de terminar un paso, en nanosegundos.
-
dirsetup - (u32, RW) Duración mínima de señal de dirección estable antes de iniciar un paso, en nanosegundos.
-
maxaccel - (Float, RW) Aceleración máxima, en unidades de posición por segundo al cuadrado. Si es 0, el controlador no limitará su aceleración.
-
maxvel - (Float, RW) Velocidad máxima, en unidades de posición por segundo. Si es 0, el controlador elegirá la velocidad máxima con base en los valores de steplen y stepspace (al momento en que maxvel se estableció en 0).
-
position-scale - (Float, RW) Convierte de conteos a unidades de posición. position = counts / position_scale
-
step_type - (u32, RW) Formato de salida, así como el parámetro de módulo step_type al componente de software stegen(9). 0 = Paso/Dirección, 1 = Arriba/Abajo, 2 = Cuadratura. En modo cuadratura (step_type=2), el stepgen da salida a un ciclo gris completo (00 -> 01 -> 11 -> 10 -> 00) por cada paso que toma.
-
steplen - (u32, RW) Duración de la señal de paso, en nanosegundos.
-
stepspace - (u32, RW) Intervalo mínimo entre señales de paso, en nanosegundos.
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 - (Bit, RW) Este parámetro solo tiene efecto si el parámetro is_output es Verdadero. Si este parámetro es Verdadero, el valor de salida del GPIO será el inverso al valor del pin HAL out.
-
is_opendrain - (Bit, RW) Si este parámetro es Falso, el GPIO se comporta como un pin de salida normal: el pin de E/S en el conector es conducido al valor especificado por el pin HAL out (posiblemente invertido). Si este parámetro es Verdadero, el GPIO se comporta como un pin de drenaje abierto. Escribir 0 en el pin HAL out lleva al pin de E/S a bajo, escribir 1 al pin HAL out pone al pin de E/S en estado de alta impedancia. En este estado de alta impedancia el pin de E/S flota (débilmente jalado arriba), y otros dispositivos pueden controlar el valor; el valor resultante en el pin de E/S está disponible en los pines in y in_not. Solo pines GPIO plenos y pines de E/S usados como salidas por instancias de módulo activas tienen este parámetro.
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 - (Bit, In) Si es Verdadero, el pwmgen establecerá su pin Not-Enable en Falso y dará salida a sus pulsos. Si enable es Falso, pwmgen establecerá su pin Not-Enable en Verdadero y no dará salida a ninguna señal.
-
value - (Float, In) El valor del comando pwmgen actual, en unidades arbitrarias.
14.2. Parámetros
-
output-type - (s32, RW) Emula el argumento load-time de output_type en el componente de software pwmgen. Este parámetro puede modificarse en tiempo de ejecución, pero probablemente la mayoría de las veces querrás configurarlo en el arranque y dejarlo en paz. Los valores aceptados son 1 (PWM en Out0 y Dirección en Out1), 2 (Arriba en Out0 y Abajo en Out1), 3 (modo PDM, PDM en Out0 y Dir en Out1) y 4 (Dirección en Out0 y PWM en Out1, para contrafase bloqueada).
-
scale - (Float, RW) Factor de escala para convertir value en unidades arbitrarias a ciclo de trabajo: ct = valor / escala. Los ciclos de trabajo tienen un rango efectivo inclusivo de -1.0 a +1.0, cualquier valor fuera de este rango es cortado.
-
pdm_frequency - (u32, RW) Especifica la frecuencia PDM, en Hz, de todas las instancias pwmgen en ejecución en modo PDM (modo 3). Esta es la frecuencia de ranura de pulso; la frecuencia a la cual el generador pdm en la placa Anything I/O elige emitir un pulso o un espacio. Cada pulso (y espacio) en el tren de pulsos PDM tiene una duración de 1/pdm_frequency segundos. Por ejemplo, asignar una pdm_frequency de 2*106 Hz (2 MHz) y un ciclo de trabajo al 50% resulta en una onda cuadrada de 1 MHz, identica a una señal PWM de 1 MHz con un ciclo de trabajo al 50%. El rango efectivo de este parámetro es de alrededor de 1525 Hz hasta poco menos de 100 MHz. Nótese que la frecuencia máxima es determinada por la frecuencia ClockHigh de la placa Anything I/O; la 5I20 y la 7I43 tienen un reloj de 100 MHz, resultando una frecuencia máxima de PDM de 100 MHz. Otras placas pueden tener relojes distintos, resultando frecuencias PDM máximas diferentes. Si el usuario intenta asignar una frecuencia muy alta será cortada a la frecuencia máxima soportada en la placa.
-
pwm_frequency - (u32, RW) Especifica la frecuencia PWM, en Hz, de todas las instancias pwmgen en ejecución en modo PWM (modos 1 y 2). Esta es la frecuencia de la onda de ciclo de trabajo variable. Su rango efectivo va de 1 Hz hasta 193 kHz. Nótese que la frecuencia máxima es determinada por la frecuencia ClockHigh de la placa Anything I/O; la 5i20 y la 7i43 tienen un reloj de 100 MHz, resultando una frecuencia máxima de PWM de 193 kHz. Otras placas pueden tener relojes diferentes, resultando frecuencias PWM máximas distintas. Si el usuario intenta asignar una frecuencia muy alta será cortada a la frecuencia máxima soportada en la placa. Frecuencias por debajo de alrededor de 5 Hz no son terriblemente precisas, pero por encima de 5 Hz son muy cercanas.
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- (Bit, RW) Este parámetro solo tiene efecto si el parámetrois_outputes Verdadero. Si este parámetro es Verdadero el valor de salida del GPIO será el inverso del valor en el pin HALout. -
is_opendrain- (Bit, RW) Si este parámetro es Falso el GPIO se comporta como un pin de salida normal: El pin de E/S en el conector es controlado por el valor especificado en el pin HALout(posiblemente invertido). Si este parámetro es Verdadero el GPIO se comporta como un pin de drenaje abierto. Escribir 0 en el pin HALoutlleva al pin de E/S a bajo, escribir 1 en el pin HALoutpone el pin de E/S en un estado de alta impedancia. En este estado de alta impedancia el pin de E/S flota (débilmente jalado arriba) y otros dispositivos pueden controlar el valor; el valor resultante en el pin de E/S está disponible en los pinesinyin_not. Solo los pines GPIO plenos y de E/S usados como salidas por instancias de módulo activas tienen este parámetro.
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- (s32, Out) Número de conteos de codificador desde el restablecimiento previo. -
index-enable- (Bit, I/O) Cuando este pin es Verdadero, el conteo (y por lo tanto también la posición) es restablecido a cero en el siguiente pulso de índice (Fase-Z). Al mismo tiempo, index-enable es restablecido a cero para indicar que el pulso ha ocurrido. -
position(float, salida) - Posición del codificador en unidades de posición (conteo / escala). -
rawcounts- (s32, Out) Número total de conteos del codificador desde el arranque, sin ajuste por índice o restablecimiento. -
reset- (Bit, In) Cuando este pin es VERDADERO, los pines de conteo y posición se establecen en 0. El valor del pin de velocidad no es afectado por esto. El controlador no restablece este pin a FALSO después de restablecer el conteo a 0, ese es el trabajo del usuario. -
velocity- (Float, Out) Velocidad estimada del codificador en unidades de posición por segundo.
15.2. Parámetros
-
counter-mode- (Bit, RW) Asignar Falso (predeterminado) para cuadratura. Asignar Verdadero para Arriba/Abajo o para entrada simple en Fase A. Puede usarse para un convertidor de frecuencia a velocidad con una sola entrada en Fase A cuando se asigna Verdadero. -
filter- (Bit, RW) Si es Verdadero (predeterminado) el contador en cuadratura necesita 15 pulsos de reloj para registrar un cambio en cualquiera de las tres líneas de entrada (cualquier pulso más corto que esto es rechazado como ruido). Si es Falso, el contador en cuadratura necesita solo 3 pulsos de reloj para registrar un cambio. El reloj de muestreo del codificador va a 33 MHz en las tarjetas PCI Anything I/O y a 50 MHz en la 7I43. -
index-invert- (Bit, RW) Si es Verdadero, el flanco ascendente del pin de entrada de índice dispara el evento índice (si index-enable es Verdadero). Si es Falso lo dispara el flanco descendente. -
index-mask- (Bit, RW) Si es Verdadero, el pin de entrada de índice solo tiene efecto si el pin de entrada de máscara de índice es Verdadero (o Falso, dependiendo del pinindex-mask-invertabajo). -
index-mask-invert- (Bit, RW) Si es Verdadero, la máscara de índice debe ser Falso para el índice para que tenga efecto. Si es Falso, el pinIndex-Maskdebe ser Verdadero. -
scale- (Float, RW) Convierte de unidades de conteo a unidades de posición. Un codificador en cuadratura normalmente tendrá 4 conteos por pulso, de tal manera que un codificador de 100 PPR tendrá 400 conteos por revolución. En.counter-modeun codificador de 100 PPR tendrá 100 conteos por revolución ya que solo usa el flanco ascendente de A y la dirección esta en B. -
vel-timeout- (Float, RW) Cuando el codificador se mueve más lento que un pulso por cada vez que el controlador lee el conteo desde el FPGA (en la función hm2_read()) es más difícil estimar la velocidad. El controlador puede esperar varias iteraciones a que llegue el siguiente pulso, reportando en todo momento el límite superior de la velocidad del codificador, el cual se puede estimar con precisión. Este parámetro especifica cuánto se debe esperar al pulso siguiente antes de reportar que el codificador se ha detenido.
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.
# 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"
# 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.