:lang: fr
:toc:

= Configuration d'un système pas/direction (dir/step)

[[cha:config-steppers]] (((Configuration pas/direction)))


[[sec:Introduction]]
== Introduction

Ce chapitre décrit quelques uns des réglages les plus fréquents, sur
lesquels l'utilisateur aura à agir lors de la mise au point de LinuxCNC. En
raison de l'adaptabilité de LinuxCNC, il serait très difficile de les
documenter tous en gardant ce document relativement concis.

Le système rencontré le plus fréquemment chez les utilisateurs de LinuxCNC
est un système à moteurs pas à pas. Les interfaces de pilotage de ces
moteurs recoivent de LinuxCNC des signaux de pas et de direction.

C'est le système le plus simple à mettre en oeuvre parce que les
moteurs fonctionnent en boucle ouverte (pas d'information de retour des
moteurs), le système nécessite donc d'être configuré correctement pour
que les moteurs ne perdent pas de pas et ne calent pas.

Ce chapitre s'appuie sur la configuration fournie d'origine avec LinuxCNC
appelée _stepper_(((stepper))) et qui se trouve habituellement dans
_/etc/linuxcnc/sample-configs/stepper_.

[[sec:Maximum-step-rate]]
== Fréquence de pas maximale(((Frequence de pas maximale)))

Avec la génération logicielle des pas la fréquence maximale en sortie,
pour les impulsions de pas et de direction, est de une impulsion pour
deux BASE_PERIOD. La fréquence de pas maximale accessible pour un axe
est le produit de MAX_VELOCITY et de INPUT_SCALE. Si la fréquence
demandée est excessive, une erreur de suivi se produira (following
error), particulièrement pendant les jog rapides et les mouvements en
G0.

Si votre interface de pilotage des moteurs accepte des signaux
d'entrée en quadrature, utilisez ce mode. Avec un signal en quadrature,
un pas est possible pour chaque BASE_PERIOD, ce qui double la fréquence
maximum admissible.

Les autres remèdes consistent à diminuer une ou plusieurs variables:
BASE_PERIOD (une valeur trop faible peux causer un bloquage du PC),
INPUT_SCALE (s'il est possible sur l'interface de pilotage de
sélectionner une taille de pas différente, de changer le rapport des
poulies ou le pas de la vis mère), ou enfin MAX_VELOCITY et
STEPGEN_MAXVEL.

Si aucune combinaison entre BASE_PERIOD, INPUT_SCALE et MAX_VELOCITY
n'est fonctionnelle, il faut alors envisager un générateur de pas
externe (parmis les contrôleurs de moteurs pas à pas universels
supportés par LinuxCNC)

[[sec:Brochage]]
== Brochage
(((brochage)))

LinuxCNC est très flexible et grâce à la couche d'abstraction de HAL
(Hardware Abstraction Layer) il est facile de spécifier que tel signal
ira sur telle broche. 

Voir le tutoriel de HAL pour plus d'informations(((HAL)))).

Comme décrit dans l'introduction et la manuel de HAL, il comporte des
composants dont il fourni les signaux, les pins et les paramètres.

Les premiers signaux et pins relatifs au brochage sont:footnote:[Note:
pour rester concis, nous ne présenterons qu'un seul axe, tous
les autres sont similaires.]
----
signaux: Xstep, Xdir et Xen
pins: parport.0.pin-XX-out & parport.0.pin-XX-in
----

Pour configurer le fichier ini, il est possible de choisir entre les
deux brochages les plus fréquents, devenus des standards de fait, le
brochage standard_pinout.hal ou le brochage xylotex_pinout.hal. Ces
deux fichiers indiquent à HAL comment raccorder les différents signaux
aux différentes pins. Dans la suite, nous nous concentrerons sur le
brochage _standard_pinout.hal_.


== Le fichier standard_pinout.hal[[sec:standard-pinout.hal]]

(((standard pinout))) 

Ce fichier contient certaines commandes de HAL et habituellement
ressemble à celà:

----
# standard pinout config file for 3-axis steppers
# using a parport for I/O
#

# first load the parport driver
loadrt hal_parport cfg="0x0378"

#
# next connect the parport functions to threads
# read inputs first
addf parport.0.read base-thread 1

# write outputs last
addf parport.0.write base-thread -1

#
# finally connect physical pins to the signals
net Xstep => parport.0.pin-03-out
net Xdir  => parport.0.pin-02-out
net Ystep => parport.0.pin-05-out
net Ydir  => parport.0.pin-04-out
net Zstep => parport.0.pin-07-out
net Zdir  => parport.0.pin-06-out

# create a signal for the estop loopback
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

# connect "spindle on" motion controller pin to a physical pin
net spindle-on motion.spindle-on => parport.0.pin-09-out

###
### You might use something like this to enable chopper drives when machine ON
### the Xen signal is defined in core_stepper.hal
###
# net Xen => parport.0.pin-01-out

###
### If you want active low for this pin, invert it like this:
###
# setp parport.0.pin-01-out-invert 1

###
### A sample home switch on the X axis (axis 0).  make a signal,
### link the incoming parport pin to the signal, then link the signal
### to LinuxCNC's axis 0 home switch input pin
###
# net Xhome parport.0.pin-10-in => axis.0.home-sw-in

###
### Shared home switches all on one parallel port pin?
### that's ok, hook the same signal to all the axes, but be sure to 
### set HOME_IS_SHARED and HOME_SEQUENCE in the ini file.  See the
### user manual!
###
# net homeswitches <= parport.0.pin-10-in
# net homeswitches => axis.0.home-sw-in
# net homeswitches => axis.1.home-sw-in
# net homeswitches => axis.2.home-sw-in

###
### Sample separate limit switches on the X axis (axis 0)
###
# net X-neg-limit parport.0.pin-11-in => axis.0.neg-lim-sw-in
# net X-pos-limit parport.0.pin-12-in => axis.0.pos-lim-sw-in

###
### Just like the shared home switches example, you can wire together
### limit switches.  Beware if you hit one, LinuxCNC will stop but can't tell
### you which switch/axis has faulted.  Use caution when recovering from this.
###
# net Xlimits parport.0.pin-13-in => axis.0.neg-lim-sw-in axis.0.pos-lim-sw-in

----

Les lignes commençant par *#* sont des commentaires, aident à la
lecture du fichier.

[[sec:Vue-d-ensemble-standard-pinout-hal]]
== Vue d'ensemble du fichier standard_pinout.hal

Voici les opérations qui sont exécutées quand le fichier
standard_pinout.hal est lu par l'interpréteur:

 . Le pilote du port parallèle est chargé (voir le Parport section de 
   le Manuel de HAL pour plus de détails)
 . Les fonctions de lecture/écriture du pilote sont assignée au thread
   «Base thread» footnote:[Le thread le plus rapide parmis les réglages
   de LinuxCNC, habituellement il
   n'y a que quelques microsecondes entre les exécutions de ce code.]
 . Les signaux du générateur de pas et de direction des axes X,Y,Z...
   sont raccordés aux broches du port parallèle
 . D'autres signaux d'entrées/sorties sont connectés (boucle d'arrêt
   d'urgence, boucle du changeur d'outil...)
 . Un signal de marche broche est défini et raccordé à une broche du port
   parallèle

[[sec:Modifier-standard-pinout-hal]]
== Modifier le fichier standard_pinout.hal

Pour modifier le fichier standard_pinout.hal, il suffit de l'ouvrir
dans un éditeur de texte puis d'y localiser les parties à modifier.

Si vous voulez par exemple, modifier les broches de pas et de
direction de l'axe X, il vous suffit de modifier le numéro de la
variable nommée _parport.0.pin-XX-out_:
----
net Xstep parport.0.pin-03-out 
net Xdir  parport.0.pin-02-out
----

peut être modifiée pour devenir:
----
net Xstep parport.0.pin-02-out 
net Xdir  parport.0.pin-03-out
----

ou de manière générale n'importe quel numéro que vous souhaiteriez.

Attention: il faut être certain de n'avoir qu'un seul signal connecté
à une broche.

[[sec:Modifier-la-polarite]]
== Modifier la polarité d'un signal
(((signal polarite)))

Si une interface attends un signal _actif bas_, ajouter une ligne avec
le paramètre d'inversion de la sortie, _-invert_. Par exemple, pour
inverser le signal de rotation de la broche:
----
setp parport.0.pin-09-invert TRUE
----

[[sec:PWM-Vitesse-broche]]
== Ajouter le contrôle de vitesse broche en PWM
(((Vitesse broche PWM)))

Si votre vitesse de broche peut être contrôlée par un signal de PWM,
utilisez le composant _pwmgen_ pour créer ce signal:
----
loadrt pwmgen output_type=0
addf pwmgen.update servo-thread
addf pwmgen.make-pulses base-thread
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
net spindle-on motion.spindle-on => pwmgen.0.enable
net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out
setp pwmgen.0.scale 1800 # Change to your spindle’s top speed in RPM
----

Ce qui donnera le fonctionnement suivant, pour un signal PWM à: 0%
donnera une vitesse de 0tr/mn, 10% une vitesse de 180tr/mn, etc. Si un
signal PWM supérieur à 0% est requis pour que la broche commence à
tourner, suivez l'exemple du fichier de configuration _nist-lathe_ qui
utilise un composant d'échelle (_scale_).

[[sec:Ajouter-signal-enable]]
== Ajouter un signal de validation *enable*
(((signal enable)))

Certains pilotes de moteurs requiert un signal de validation _enable_
avant d'autoriser tout mouvement du moteur. Pour celà des signaux sont
déjà définis et appelés _Xen_, _Yen_, _Zen_.

Pour les connecter vous pouvez utilisez l'exemple suivant:
----
net Xen parport.0.pin-08-out
----

Il est possible d'avoir une seule pin de validation pour l'ensemble
des pilotes, ou plusieurs selon la configuration que vous voulez. Notez
toutefois qu'habituellement quand un axe est en défaut, tous les autres
sont invalidés aussi de sorte que, n'avoir qu'un seul signal/pin de
validation pour l'ensemble est parfaitement sécurisé.

== Ajouter un bouton d'Arrêt d'Urgence externe
(((A/U)))

Comme vous pouvez <<sec:standard-pinout.hal,le voir ici>>,
par défaut la configuration standard n'utilise pas de bouton d'Arrêt
d'Urgence externe. footnote:[Une explication complète sur la manière de
gérer les circuiteries d'Arrêt d'Urgence se trouve sur le 
http://wiki.linuxcnc.org/[ wiki(en)] et dans le Manuel de l'intégrateur.

Pour ajouter un simple bouton d'AU externe (ou plusieurs en série) vous
devez remplacer la ligne suivante:

----
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in
----

par

----
net estop-loop parport.0.pin-01-in iocontrol.0.emc-enable-in
----


Ce qui implique qu'un bouton d'Arrêt d'Urgence soit connecté sur la
broche 01 du port parallèle. Tant que le bouton est enfoncé (le contact
ouvert)footnote:[Utiliser exclusivement des contacts normalement fermés
pour les A/U.], 
LinuxCNC restera dans l'état _Arrêt d'Urgence_ (ESTOP). Quand le bouton
externe sera relâché, LinuxCNC passera immédiatement dans l'état 
_Arrêt d'Urgence Relâché_ (ESTOP-RESET) vous pourrez ensuite mettre 
la machine en marche en pressant le bouton _Marche machine_ (((marche machine)))
et vous êtes alors prêt à continuer votre travail avec LinuxCNC.
