1. Descripción general
Homing establece el origen cero de las coordenadas máquina G53. Los límites suaves se definen en relación con el origen de la máquina. Los límites suaves automáticamente desaceleran y detienen los ejes antes de que toquen los interruptores de límites. Una máquina configurada y funcionando correctamente no se moverá más allá de los límites suaves (software) y tendrá el origen de la máquina configurado tan repetible como lo permita el mecanismo de interruptor/índice de casa. Linuxcnc puede ser llevado a casa a ojo (marcas de alineación), con interruptores, con interruptores e índice de codificador, o utilizando codificadores absolutos. El recorrido de homing parece bastante simple: simplemente mueve cada articulación a una ubicación conocida, y establece las variables internas de LinuxCNC en consecuencia. Sin embargo, diferentes máquinas tienen diferentes requisitos, y el recorrido de homing es realmente bastante complicado.
|
Note
|
Si bien es posible usar LinuxCNC sin interruptores, procedimientos de homing o interruptores de límite, la seguridad adicional de los límites suaves no es suficiente. |
2. Prerrequisitos
Homing se basa en algunos supuestos fundamentales de la máquina.
-
Las direcciones negativa y positiva se basan en Movimientos de la herramienta que puede ser diferentes del movimiento real de la máquina. Es decir, en una fresadora, la mesa se mueve en lugar de la herramienta.
-
Todo está referenciado desde el origen G53, cero de la máquina. El origen puede estar en cualquier lugar (incluso fuera de donde puede moverse)
-
El origen cero de la máquina G53 está típicamente dentro del área de límites suaves, pero no necesariamente.
-
El offset del interruptor de casa establece dónde está el origen, pero incluso esto se referencia desde el origen.
-
Cuando se usa homing de índice de codificador, el offset del interruptor de casa se calcula a partir de la posición de referencia del codificador, después de que el interruptor de casa ha sido activado.
-
Los límites suaves (software) negativos son lo máximo que puede mover en la dirección negativa después de homing. (pero pueden no ser negativos en sentido absoluto)
-
Los límites suaves (software) positivos son lo máximo que se puede mover en la dirección positiva después de homing. (pero podrían no ser positivos en sentido absoluto, aunque es habitual establecerlo como un número positivo)
-
Los límites suaves (software) están dentro del área de interruptores de límite.
-
La posición de casa (final) esta dentro del área de límite suave
-
Si se utiliza homing basado en interruptores, los interruptores de homing utilizan los interruptores de límite (interruptor de casa / límite compartido), o cuando se usa un interruptor de casa separado, están dentro del área de interruptores de límite.
-
Si usa un interruptor de casa independiente, es posible que se comience homing en el lado equivocado del interruptor, lo que combinado con la opción HOME_IGNORE_LIMITS, provocará un choque fuerte. Se puede evitar esto haciendo que el interruptor de casa conmute su estado cuando el disparador está en un lado en particular hasta que vuelva a pasar el punto nuevamente. Dicho de otra manera, el estado del interruptor de casa debe representar la posición del disparador con respecto al interruptor (es decir, antes o después del interruptor), y debe permanecer así incluso si el disparador pasa por el interruptor en la misma dirección.
|
Note
|
Aunque es posible usar LinuxCNC con el origen de máquina G53 fuera de los límites suaves de máquina, si se usa G28 o G30 sin configurar los parámetros, se va al origen predeterminadamente. Esto activará los interruptores de límite antes de alcanzar la posición. |
3. Ejemplo de disposición de interruptor de casa separado
Este ejemplo muestra los interruptores de límite mínimo y máximo con un interruptor de casa separado.
-
A es el límite suave negativo
-
B es el origen de las coordenadas de máquina G53
-
C es el punto de disparo del interruptor de casa
-
D es el límite suave positivo
-
H es la posición de casa final (HOME) = 0 unidades
-
-L y +L son los puntos de disparo de los interruptores de límite
-
A<→B son los límites suaves negativos (MIN_LIMITS) = -3 unidades
-
B<→C es el home_offset (HOME_OFFSET) = -2.3 unidades
-
B<→D son los límites suaves positivos (MAX_LIMITS) = 7 unidades
-
A<→D es la carrera total = 10 unidades
-
La distancia entre los interruptores de límite y los límites suaves (-L<→A y D←+L) se amplía en este ejemplo
-
Tenga en cuenta que hay una distancia entre los interruptores de límite y el contacto físico duro de arribo después de que el amplificador esté desactivado.
|
Note
|
Homing establece el sistema de coordenadas G53, mientras que el origen de la máquina (punto cero) puede estar en cualquier lugar, establecer el punto cero en el límite suave negativo hace que todas las coordenadas G53 sean positivas, lo cual es probablemente mas fácil de recordar. Haga esto configurando MIN_LIMIT = 0 y asegúrese de que MAX_LIMIT sea positivo. |
4. Ejemplo de disposición de interruptor de límite/casa compartido
Este ejemplo muestra un interruptor de límite máximo con un interruptor combinado de límite mínimo/casa.
-
A es el límite suave negativo.
-
B es la coordenada Origen de máquina G53.
-
C es el punto de disparo del interruptor de casa compartido con (-L) límite mínimo.
-
D es el límite suave positivo.
-
H es la posición final (HOME) = 3 unidades.
-
-L y +L son los puntos de disparo del interruptor de límite.
-
A<→B son los límites suaves negativos (MIN_LIMITS) = 0 unidades.
-
B<→C es el home_offset (HOME_OFFSET) = -0.7 unidades.
-
B<→D son los límites suaves positivos (MAX_LIMITS) 10 unidades.
-
A<→D es el recorrido total = 10 unidades.
-
La distancia entre los interruptores de límite y los límites suaves (-L<→A y D<→+L) se amplía en este ejemplo.
-
Tenga en cuenta que hay una distancia entre los interruptores de límite y el contacto físico duro de arribo después de que el amplificador esté desactivado.
5. Secuencia de homing
Hay cuatro posibles secuencias homing definidas por el signo de HOME_SEARCH_VEL y HOME_LATCH_VEL, junto con los parámetros de configuración asociados como se muestra en la siguiente tabla. Existen dos condiciones básicas, HOME_SEARCH_VEL y HOME_LATCH_VEL son del mismo signo o son signos opuestos. Para una descripción detallada de lo que hace cada parámetro de configuración, ver la sección siguiente.
6. Configuración
Lo siguiente determina exactamente cómo se comporta la secuencia homing. Se definen en una sección [JOINT_n] del archivo INI.
| Tipo de homing | HOME_SEARCH_VEL | HOME_LATCH_VEL | HOME_USE_INDEX |
|---|---|---|---|
Inmediato |
0 |
0 |
NO |
Solo índice |
0 |
no-cero |
SI |
Solo interruptor |
no-cero |
no-cero |
NO |
Interruptor e índice |
no-cero |
no-cero |
SI |
|
Note
|
Cualquier otra combinación puede provocar un error. |
6.1. HOME_SEARCH_VEL
This variable has units of machine-units per second.
El valor predeterminado es cero. Un valor de cero hace que LinuxCNC asuma que no hay interruptor de casa; se omite la etapa de búsqueda de home.
Si HOME_SEARCH_VEL no es cero, entonces LinuxCNC supone que hay un interruptor de casa. Comienza comprobando si el interruptor de casa ya está activado. Si lo está, retrocede desde el interruptor a HOME_SEARCH_VEL. La dirección del retroceso es opuesta al signo de HOME_SEARCH_VEL. Después busca el interruptor de casa moviéndose en la dirección especificada por el signo de HOME_SEARCH_VEL, a una velocidad determinada por su valor absoluto. Cuando se detecta el interruptor de casa, la articulación se detendrá tan rápido posible, pero siempre habrá un exceso. La cantidad de exceso depende de la velocidad. Si es demasiado alto, la articulación podría sobrepasar lo suficiente para alcanzar un interruptor de límite o chocar contra el final de carrera. Por otro lado, si HOME_SEARCH_VEL es demasiado bajo, el homing puede tomar mucho tiempo.
6.2. HOME_LATCH_VEL
This variable has units of machine-units per second.
Especifica la velocidad y dirección que utiliza LinuxCNC cuando realiza su determinación final precisa del interruptor de casa (si está presente) y de la ubicación del pulso índice (si está presente). Por lo general, será más lento que la velocidad de búsqueda para maximizar la precisión. Si HOME_SEARCH_VEL y HOME_LATCH_VEL tienen el mismo signo, entonces la fase de enclavamiento se realiza mientras se mueve en la misma dirección que la fase de búsqueda (en ese caso, LinuxCNC primero retrocede desde el interruptor, antes de moverse hacia él nuevamente a la velocidad de enclavamiento). Si HOME_SEARCH_VEL y HOME_LATCH_VEL tienen signos opuestos, la fase de enclavamiento se realiza mientras se mueve en la dirección opuesta a la fase de búsqueda. Eso significa que LinuxCNC enclavará el primer pulso después de que salga del interruptor. Si HOME_SEARCH_VEL es cero (lo que significa que no hay un interruptor de casa), y este parámetro no es cero, LinuxCNC pasa a buscar el pulso de índice. Si HOME_SEARCH_VEL no es cero y este parámetro es cero, es un error y la operación de búsqueda fallará. El valor predeterminado es cero.
6.3. HOME_FINAL_VEL
Esta variable tiene unidades de unidades máquina por segundo.
Especifica la velocidad que utiliza LinuxCNC cuando realiza su movimiento desde HOME_OFFSET a la posición HOME. Si falta HOME_FINAL_VEL en el archivo INI, se usa la velocidad máxima de articulación para hacer este movimiento. El valor debe ser un número positivo.
6.4. HOME_IGNORE_LIMITS
Can hold the values YES / NO. The default value for this parameter is NO. This flag determines whether LinuxCNC will ignore the limit switch input for this joint while homing. This setting will not ignore limit inputs for other joints. If you do not have a separate home switch set this to YES and connect the limit switch signal to the joint home switch input in HAL. LinuxCNC will ignore the limit switch input for this joint while homing. To use only one input for all homing and limits you will have to block the limit signals of the joints not homing in HAL and home one joint at a time.
6.5. HOME_USE_INDEX
Specifies whether or not there is an index pulse. If the flag is true (HOME_USE_INDEX = YES), LinuxCNC will latch on the rising edge of the index pulse. If false, LinuxCNC will latch on either the rising or falling edge of the home switch (depending on the signs of HOME_SEARCH_VEL and HOME_LATCH_VEL). The default value is NO.
|
Note
|
HOME_USE_INDEX requiere conexiones en su archivo HAL para joint.n.index-enable desde encoder.n.index-enable.
|
6.6. HOME_INDEX_NO_ENCODER_RESET
Default is NO. Use YES if the encoder used for this joint does not reset its counter when an index pulse is detected after assertion of the joint index_enable HAL pin. Applicable only for HOME_USE_INDEX = YES.
6.7. HOME_OFFSET
This defines the location of the origin zero point of the G53 machine coordinate system. It is the distance (offset), in joint units, from the machine origin to the home switch trip point or index pulse. After detecting the switch trip point/index pulse, LinuxCNC sets the joint coordinate position to HOME_OFFSET, thus defining the origin, which the soft limits references from. The default value is zero.
|
Note
|
La ubicación del interruptor de casa, como lo indica la variable HOME_OFFSET, puede estar dentro o fuera de los límites suaves. Se compartirán con o dentro de los interruptores de límite duro. |
6.8. HOME
The position that the joint will go to upon completion of the homing sequence. After detecting the home switch or home switch then index pulse (depending on configuration), and setting the coordinate of that point to HOME_OFFSET, LinuxCNC makes a move to HOME as the final step of the homing process. The default value is zero. Note that even if this parameter is the same as HOME_OFFSET, the joint will slightly overshoot the latched position as it stops. Therefore there will always be a small move at this time (unless HOME_SEARCH_VEL is zero, and the entire search/latch stage was skipped). This final move will be made at the joint’s maximum velocity unless HOME_FINAL_VEL has been set.
|
Note
|
La distinción entre HOME_OFFSET y HOME es que HOME_OFFSET establece primero la ubicación de origen y la escala en la máquina aplicando el valor HOME_OFFSET a la ubicación donde se encontró casa, y luego HOME dice dónde debe moverse la articulación a esa escala. |
6.9. HOME_IS_SHARED
If there is not a separate home switch input for this joint, but a number of momentary switches wired to the same pin, set this value to 1 to prevent homing from starting if one of the shared switches is already closed. Set this value to 0 to permit homing even if the switch is already closed.
6.10. HOME_ABSOLUTE_ENCODER
Use for absolute encoders. When a request is made to home the joint, the current joint position is set to the [JOINT_n]HOME_OFFSET value.
El movimiento final a la posición [JOINT_n]HOME es opcional según a la configuración HOME_ABSOLUTE_ENCODER:
HOME_ABSOLUTE_ENCODER = 0 (predeterminado) la articulación no usa un codificador absoluto HOME_ABSOLUTE_ENCODER = 1 Codificador absoluto, movimiento final a [JOINT_n]HOME HOME_ABSOLUTE_ENCODER = 2 Codificador absoluto, SIN movimiento final a [JOINT_n]HOME
|
Note
|
Una configuración HOME_IS_SHARED se ignora silenciosamente. |
|
Note
|
Una solicitud para volver a llevar a casa la articulación se ignora silenciosamente. |
6.11. HOME_SEQUENCE
Used to define a multi-joint homing sequence HOME ALL and enforce homing order (e.g., Z may not be homed if X is not yet homed). A joint may be homed after all joints with a lower (absolute value) HOME_SEQUENCE have already been homed and are at the HOME_OFFSET. If two joints have the same HOME_SEQUENCE, they may be homed at the same time.
|
Note
|
Si HOME_SEQUENCE no se especifica, la articulación no será llevada a casa por la secuencia HOME ALL (pero si individualmente con comandos homing de la articulación). |
El número inicial de HOME_SEQUENCE puede ser 0, 1 (o -1). El valor absoluto de los números de secuencia debe incrementarse en uno; saltar números de secuencia no está permitido. Si un número de secuencia se omite, HOME ALL se detendrá al finalizar el ultimo número de secuencia válido.
Negative HOME_SEQUENCE values indicate that joints in the sequence should synchronize the final move to [JOINT_n]HOME by waiting until all joints in the sequence are ready. If any joint has a negative HOME_SEQUENCE value, then all joints with the same absolute value (positive or negative) of the HOME_SEQUENCE item value will synchronize the final move.
Un HOME_SEQUENCE negativo también se aplica a los comandos para llevar a casa una sola articulación. Si el valor de HOME_SEQUENCE es negativo, todas las articulaciones que tengan el mismo valor absoluto de esa HOME_SEQUENCE serán llevadas a casa juntas con un movimiento final sincronizado. Si el valor de HOME_SEQUENCE es cero o positivo, un comando para llevar a casa la articulación solo afectará a la articulación especificada.
El trote en modo articulación de articulaciones con HOME_SEQUENCE negativa no está permitido. En aplicaciones de pórtico comunes, tal trote puede conducir a la desalineación. Hay que tener en cuenta que el trote convencional en coordenadas mundiales siempre está disponible una vez que la máquina este en casa.
Ejemplos para un sistema de 3 articulaciones
Dos secuencias (0,1), sin sincronización
[JOINT_0]HOME_SEQUENCE = 0
[JOINT_1]HOME_SEQUENCE = 1
[JOINT_2]HOME_SEQUENCE = 1
Dos secuencias, articulaciones 1 y 2 sincronizadas
[JOINT_0]HOME_SEQUENCE = 0
[JOINT_1]HOME_SEQUENCE = -1
[JOINT_2]HOME_SEQUENCE = -1
Con valores mixtos positivos y negativos, las articulaciones 1 y 2 sincronizadas
[JOINT_0]HOME_SEQUENCE = 0
[JOINT_1]HOME_SEQUENCE = -1
[JOINT_2]HOME_SEQUENCE = 1
Una secuencia, sin sincronización
[JOINT_0]HOME_SEQUENCE = 0
[JOINT_1]HOME_SEQUENCE = 0
[JOINT_2]HOME_SEQUENCE = 0
Una secuencia, todas las articulaciones sincronizadas
[JOINT_0]HOME_SEQUENCE = -1
[JOINT_1]HOME_SEQUENCE = -1
[JOINT_2]HOME_SEQUENCE = -1
6.12. VOLATILE_HOME
If this setting is true, this joint becomes unhomed whenever the machine transitions into the OFF state. This is appropriate for any joint that does not maintain position when the joint drive is off. Some stepper drives, especially microstep drives, may need this.
6.13. LOCKING_INDEXER
If this joint is a locking rotary indexer, it will unlock before homing, and lock afterward.
6.14. Homing inmediato
If a joint does not have home switches or does not have a logical home position like a rotary joint and you want that joint to home at the current position when the "Home All" button is pressed in the AXIS GUI, then the following INI entries for that joint are needed.
HOME_SEARCH_VEL = 0 HOME_LATCH_VEL = 0 HOME_USE_INDEX = NO HOME_OFFSET = 0 (o el offset de la posición de casa (HOME)) HOME_SEQUENCE = 0 (u otro número de secuencia válido)
|
Note
|
Los valores predeterminados para HOME_SEARCH_VEL, HOME_LATCH_VEL, HOME_USE_INDEX, HOME y HOME_OFFSET son cero, por lo que pueden ser omitidos cuando se solicita homing inmediato. Normalmente debería incluirse un número válido de HOME_SEQUENCE ya que omitir una HOME_SEQUENCE elimina la articulación del HOME ALL como se indicó anteriormente. |
6.15. Inhibiendo homing
A HAL pin (motion.homing-inhibit) is provided to disallow homing initiation for both "Home All" and individual joint homing.
Algunos sistemas aprovechan las disposiciones para sincronizar movimientos finales de homing articulares controlados por elementos negativos [JOINT_N]HOME_SEQUENCE = del archivo INI. Predeterminadamente, las disposiciones de sincronización no permiten trote de articulación antes de homing con el fin de evitar trotes de articulación que podrían desalinear la máquina (perpendicularidad de pórtico, por ejemplo).
El integrador del sistema puede permitir trote articular antes de homing con lógica HAL que cambie los elementos [JOINT_N]HOME_SEQUENCE. Esta lógica también debe evaluar el pin motion.homing-inhibit para garantizar que el homing no se inicie inadvertidamente cuando el trote articular está habilitado.
Ejemplo: articulaciones sincronizadas 0,1 utilizando una secuencia negativa (-1) para homing sincronizado con un interruptor (allow_jjog) que selecciona una secuencia positiva (1) para trote articular individual antes de homing (código HAL parcial):
loadrt mux2 names=home_sequence_mux
loadrt conv_float_s32 names=home_sequence_s32
setp home_sequence_mux.in0 -1
setp home_sequence_mux.in1 1
addf home_sequence_mux servo-thread
addf home_sequence_s32 servo-thread
...
net home_seq_float <= home_sequence_mux.out
net home_seq_float => home_sequence_s32.in
net home_seq_s32 <= home_sequence_s32.out
net home_seq_s32 => ini.0.home_sequence
net home_seq_s32 => ini.1.home_sequence
...
# allow_jjog: pin creado por un panel virtual o interruptor hardware
net hsequence_select <= allow_jjog
net hsequence_select => home_sequence_mux.sel
net hsequence_select => motion.homing-inhibit
|
Note
|
Los pines HAL INI (como ini.N.home_sequence) no están disponibles hasta que milltask comienza, por lo que la ejecución de los comandos HAL anteriores debe ser diferida utilizando un archivo HAL postgui o un script [APLICACIÓN] APP= retrasado. |
|
Note
|
La sincronización en tiempo real del trote articular para múltiples articulaciones requiere conexiones HAL adicionales para pines de tipo de trote del generador de pulso manual (MPG) (joint.N.enable, joint.N.scale, joint.N.counts).
|
Un ejemplo de simulación de configuración (gantry_jjog.ini) que demuestra el trote articular cuando se utilizan secuencias de casa negativas se encuentra en el directorio: configs/sim/axis/gantry/.