Premiers pas avec Linuxcnc et règle de mesure

  • Auteur de la discussion Bruno26
  • Date de début
B

Bruno26

Compagnon
En attendant ma carte Mesa j'ai essayé de configurer la commande du variateur de broche. Ma bob actuelle transforme un PWM en 0-10V. Ca devrait être simple mais pour l'instant ça délire complet!
La broche tourne à 2000tr/min maxi, donc dans un premier temps j'ai simplement mis pwmgen.0.scale à 2000 et l'offset à 0. Mais quelque soit la vitesse demandée (avec S...) la broche tourne à fond. J'ai fini par mettre pwmgen.0.scale à -2000 et l'offset à 1. Là c'est un peu moins pire, mais la broche démarre quand même à fond pendant un court instant avant de ralentir vers pratiquement l'arrêt, le tout avec la variable motion.spindle-speed-out à 1.2. J'arrive ensuite à augmenter la vitesse avec le bouton "+" sur axis (qui augmente bien motion.spindle-speed-out), mais si je retape une commande avec S..., tout s'arrête quelque soit la valeur rentrée et motion.spindle-speed-out=0.
Bref je suis un perdu là, j'ai l'impression d'avoir essayé toutes les combinaisons et je n'ai rien obtenu de cohérent!
Je précise quand même que la commande de la vitesse de broche fonctionnait correctement avec Mach3.
Si quelqu'un a une idée...
A+
.
 
B

Bruno26

Compagnon
Pour rentemplan, 2 petites photos de mon cafouillazibulle:
DSC00011.JPG
DSC00012.JPG


Pour ce qui est des courroies sans protection, ça m'inquiétait un peu au départ mais ça n'a finalement jamais posé de problème, sur la fraiseuse non plus.
Faite pas gaffe aux fils du pap du transversal qui sortent vers le haut, vu que je le démonte souvent... il faut d'ailleurs que je change la connectique qui les relie aux drivers par des câbles blindés comme il faut.
Les poulies et courroies viennent de tri-distribution, il faut adapter un peu mais je peux revenir en arrière sur les modifications
Pour la vis mère, coup de bol l'extrémité était déjà percée au bon diamètre pour la tarauder en M8 et y fixer la poulie.
Là aussi ce n'est pas fini, le pap entraine donc aussi inutilement la boite d'avance. Avec un encodeur sur la broche, je pourrai carrément supprimer la boite mais il faut refaire une butée pour la vis mère. J'y suis pas encore, je fais en fonction de mes besoins.
A+
 
G

gaston48

Compagnon
Dans Axis et ses menus, tu as un multimètre et un oscilloscope, respectivement Halmeter et Halscope qui
permettent de verifier tes signaux.
 
R

rentemplan

Apprenti
MErci beaucoup pour ces photos @Bruno26 ça me conforte dans mon idee , en fait j'ai les memes moteurs que toi en stock et les même cartes.
POur ma vis mere je pense faire pareil que toi d'autant que sur mes demi ecrous de vis mere il y'a un ratrappage de jeux, pour le transversal je ne souhaite pas retirer la manivelle.
AS tu un capteur sur la broche pour le filtage?
 
B

Bruno26

Compagnon
Dans Axis et ses menus, tu as un multimètre et un oscilloscope, respectivement Halmeter et Halscope qui
permettent de verifier tes signaux.
Je viens de le faire. Eh bien cela semble bien inversé! Quand la sortie pwm est à 0, j'ai 10v envoyé au variateur, quand le pwm est vers 100% la tension est proche de 0... Ca explique pourquoi ça démarre à fond pendant un instant avant de ralentir. Je crois que je vais rebrancher mon PC avec Mach3 pour en avoir le coeur net. Mais je ne comprends pas pourquoi motion.spindle-speed-out ne suit pas du tout la commande S.... Je ne peux faire varier la vitesse qu'avec les boutons + et -.

Pour rentemplan, sur mon tour aussi il y a un rattrapage de jeux sur les demi écrous de la vis mère, mais le réglage doit être à fond! Le diamètre extérieur de la vis doit toucher le fond de filet de l'écrou, ou le contraire...
Non je n'ai pas encore de capteur de broche, mais je compte bien y venir pour le plaisir d'automatiser un truc sympa... et un peu galère manuellement.
 
B

Bruno26

Compagnon
Bon ça y est, ça marche. Il fallait bien inverser la sortie sur le port //. (et trouver comment l'inverser...)
Si j'ai bien compris quand on est en commande manuelle, linuxcnc se fout de la valeur rentrée avec la commande S. mais se sert de la vitesse par défaut qui n'était pas renseignée dans mon fichier .ini.
J'en suis encore aux bases là!
Qu'utilisez vous comme interface à part Axis? J'ai envie d'essayer gmoccapy.
 
B

Bruno26

Compagnon
Gaston, help!
J'ai reçu ma carte 5i25 et je n'arrive pas à trouver comment la configurer. J'ai essayer d'installer mesaflash en suivant ces indications: http://www.mesaus.com/info/firmware.html
Mais ça ne marche pas dès la première ligne.
Je ne suis même pas sûr qu'il y ai besoin de mesaflash. Est-ce que pncconf ne s'en charge pas de flasher la carte?
J'ai télécharger le zip 5i25 sur la même page mais je ne sais vraiment pas quoi faire de tout ça. Est-ce qu'il faut dézipper ça dans un dossier particulier?

Bref complètement perdu, je ne sais pas par où commencer!
 
B

Bruno26

Compagnon
Pour l'instant? pour la suite avec pncconf, je sèche...
 
G

gaston48

Compagnon
pncconf, c'est un wizard pour s'initier, tôt ou tard tu dois mettre les mains dans le capot
et éditer directement les fichiers .ini et surtout .hal
pncconf se base sur un fichier qui décrit les i/o possibles de la config mesa.
je ne sais plus si c'est le fichier pin ??? comme je te le disais, je suis (j’étais) sur 5i20, plutôt
sur bbb maintenant ... ma mémoire vive n'est plus trop fidèle maintenant.
A la console ou avec halmeter, il est possible de lister toutes ces i/o dépendante réellement du
firmware flashé et de la présence de la carte (moi je ne peux pas ... 5i20)
Essaye dans un premier temps un pncconf avec une config simple non multiplexé
suivant ici : (2x 7i78 ?)
http://www.mesaus.com/info/5i25-firmware.html
Ensuite en éditant .hal tu pourras réellement affecter les bonne entrées/sorties.

https://forum.linuxcnc.org/10-advanced-configuration/27027-5i25-custom-pinout

Continue à bien fournir tes sources, j'avais oublié le distributeur mesaus il y a toujours des infos intéressantes
à droite et à gauche ...
communique bien ta source d'appro de mesa: prix delais frais de douane etc ... merci !
 
Dernière édition:
B

Bruno26

Compagnon
Ok , merci gaston.
Tout doucement je commence à y voir plus clair.

Ce qu'il y a dans le fichier 5i25_dmmbob1x2.pin qui, si j'ai bien compris, n'est qu'un fichier texte "d'aide":

Configuration pin-out:

IO Connections for P3 = connectique DB25
Pin# I/O Pri. func Sec. func Chan Pin func Pin Dir

1 0 IOPort PWMGen 0 PWM (Out)
14 1 IOPort None
2 2 IOPort StepGen 0 Dir (Out)
15 3 IOPort None
3 4 IOPort StepGen 0 Step (Out)
16 5 IOPort None
4 6 IOPort StepGen 1 Dir (Out)
17 7 IOPort None
5 8 IOPort StepGen 1 Step (Out)
6 9 IOPort StepGen 2 Dir (Out)
7 10 IOPort StepGen 2 Step (Out)
8 11 IOPort StepGen 3 Dir (Out)
9 12 IOPort StepGen 3 Step (Out)
10 13 IOPort None
11 14 IOPort QCount 0 Quad-A (In)
12 15 IOPort QCount 0 Quad-B (In)
13 16 IOPort QCount 0 Quad-IDX (In)

Donc pour l'instant en l'absence de codeur de broche il y a ce qu'il me faut.


Ma carte vient de eusurplus, au Portugal, 100€ HT + 25€ de frais de port (!) + 23€ de TVA = 148€
C'est vrai que je trouve les infos de ci de là, il faut qu'il y a pas 2 config de machine identiques!

A+
 
G

gaston48

Compagnon
Oui ce fichier pin je l'avais vu. Donc au niveau du fichier .hal (avec l'éditeur que tu veux comme "gedit")
tu as entre-autres avec les 2 connecteurs DB25 :
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=2 num_pwmgens=2 num_stepgens=8

Si tu arrives à lancer linuxcnc (axis) tu regardes halmeter, tu as l'inventaire de toute les entrées
sorties avec la désignation exacte que tu peux reprendre dans les futurs branchements "net"

ensuite, si tu ne demandes que 1 stepgens "num_stepgens=1" les i/o affactées aux 7 autres
deviennent des gpio libres, il faudra juste les configurer en entrées, en sorties, normales ou inversées.
Attention ces gpio ne seront plus temps réel optimisées dans le fpga. La fréquence max
doit être de 1 Khz si je me souviens bien, mais largement suffisant pour toutes les infos de la PLC
(butées d'axes AU etc) . Ces sorties récupérées, normalement tu les vois apparaître dans halmeter
à la place des i/o des anciens stepgens

150 Euros, plus, si tu arrives à bien exploiter des "BOB à 2 balles" on arrive à un prix de config
bien concurrentiel avec CNCDRIVE par exemple ( UCCNC, plus une de leur carte BOB rapide)
 
B

Bruno26

Compagnon
Bon, les 2 axes de mon tour commencent à bouger pas mal. Ils n'ont jamais été aussi rapides, 1000mm/min sur X et 600mm/mn sur Z. Après avoir générer les fichier ini et hal avec pncconf, j'ai quand même fait beaucoup de retouches dans ces fichiers.
Reste à configurer ma règle (c'était bien mon but au départ), la sortie pwm et un relais pour la commande de broche.

A+
 
B

Bruno26

Compagnon
Oui, c'est bien celle là.
La référence des 2 composants à 20 pins: 74HC245D.
Tu veux t'en inspirer pour en fabriquer une?
J'ai laissé les jumpers comme ils étaient. W1 etW2 en bas, cad du côté du port PCI. Dans l'autre sens ma bob aurai court-circuité la sortie 5V de la 5i25. Les broches 18 à 25 sont toutes reliées à la masse sur la bob.

A+
 
G

gaston48

Compagnon
Ah merci Bruno, c'est ce que je retrouve sur mes cartes filles Mesa aussi !
un Octal bus transceiver, je pense qu'on détourne ce composant pour en faire un " level translator "
une sorte de buffer bidirectionel qui adapte les entrées / sorties 3.3 vers 5 V et réciproquement .
je suis en train d'essayer de mettre au point un CAPE, une BOB pour le Beaglebone black ou
j'ai une adaptation 3.3 vers 5 V et réciproquement à réaliser aussi.
Ceci dit, faire le même genre de BOB pour une 5i25 c'est juste une adaptation de connectique.
Il faut que je mette au point "mon process" pour faire sous traiter mes CI en RPC ...
 
B

Bruno26

Compagnon
Mes connaissances en électronique sont très limitées. La notion de buffer et son role m'échappe un peu. Le côté bidirectionnel veut dire que ce qui est normalement des sorties de la bob vers les drivers des moteurs pourraient être des entrées, en flashant bien sûr la 5i25 avec le bon firmware?
J'avance. Le moteur de broche tourne, mais ce n'est pas encore calibré correctement.
Mes lectures du moment, le driver mesa hostmot2:
http://www.linuxcnc.org/docs/html/drivers/hostmot2.html#_hal_pins

A+
 
G

gaston48

Compagnon
un buffer est un composant qui met en forme un signal. De sortie ou d'entrée d'un autre composant.
il gonfle le signal en capacité de courant, met en forme les fronts montants et descendants, pour
qu'il soient bien raides, dans ce cas là il est également "schmitt trigger" (voir image google).
bidirectionnel, oui, meme le port // a des voies qui sont bidirectionnelles, des GPIO
qu'on configure suivant les besoins.
Ensuite il y a ce problème d'adaptation de niveau entre la logique et la microinfo basse consomation
en 3.3 V et la logique antique TTL 5 V ou un codeur en 5 V

Avec Linuxcnc si tu veux l'info au plus bas niveau il y a ce méga menu ici:

http://linuxcnc.org/docs/2.7/html/

tu déroules tous les sous menu + vers moins ...
et tu as toute la liste et la syntaxe des composant temps réel par exemple (vers le bas )

http://linuxcnc.org/docs/2.7/html/man/man9/hostmot2.9.html

(sachant que "axis" et "motion" sont les même)

mais surtout que la syntaxe de base "encoder"
http://linuxcnc.org/docs/2.7/html/man/man9/encoder.9.html
est reprise dans hosmot2 mais adaptée à mesa grace au rajout d'un préfixe.
 
B

Bruno26

Compagnon
Bon, l'encodeur est configuré ainsi que la boucle fermée. Mais ça ne marche pas mieux qu'avec simplement le port //. Au delà de 600mm/min l'info de l'encodeur commence à délirer. Et 600mm/min en secouant le chariot à la main, on y arrive facilement.
Les entrées de l'encodeur sur la bob ne passent visiblement pas par ce fameux buffer mais par un optocoupleur. Le problème est peut-être plutôt là?
Il faudrait alors que je trouve un firmware de la 5i25 où il y a des entrées encodeur qui correspondent à ce qui est normalement des sorties bufferrisées de la bob.
 
G

gaston48

Compagnon
mais par un optocoupleur.
Ne cherche pas, un optocoupleur rapide est très chère genre HCPL 7723.
De plus, c'est inutile concernant une voie codeur, car il est alimenté en 5V par la même alim PC - Mesa.
En revanche l'idéal est d'exploiter la transmission différentielle pour éliminer les parasites " de mode commun"
donc A+ A-, B+ B- et IND+ IND- en rentrant au niveau de la BOB sur un circuit tel que le

https://datasheets.maximintegrated.com/en/ds/MAX3093E-MAX3094E.pdf

Un quad RS422- RS485 . Le MAX est intéressant car il fait le level translator de 5 V vers 3.3 .
il y en d'autres comme l' AM26LS32

Concernant les sorties de la 5i25 et les entrées BOB tu peux peut être recabler un des
connecteurs DB25 de ton cordon .
 
B

Bruno26

Compagnon
Ma règle n'a pas de sortie différentielle. En fait, je ne vois pas pourquoi il faudrait quelque chose entre la règle et la 5i25.
Dans le manuel de la carte, il est écrit dans le paragraphe "5V I/O TOLERANCE":
To allow interfacing with 5V inputs, the 5I25 has bus switches on all I/O pins.
"bus switches", ça désigne la même chose qu'un buffer?

Merci encore pour ton aide gaston.
 
G

gaston48

Compagnon
je ne sais pas ! j'avais commencer à regarder ... mais c'est difficile de sonder / pomper une carte en cms
avec parfois du multicouches ... et je n'ai pas de 5i25
Il faudrait confirmer le fpga de la 5i25
https://www.xilinx.com/support/documentation/data_sheets/4000.pdf
Ensuit la gpio est configurée par soft pour "actionner" une pseudo résistance pullup ou pulldown ?
et cela rentre effectivement dans un buffer. Ensuite quel est ce Vdd du 3.3 ou du 5 ?
à priori les diodes en entrée protègent d'une tension supérieure à Vdd

fpga iob .jpg
 
B

Bruno26

Compagnon
Ensuit la gpio est configurée par soft pour "actionner" une pseudo résistance pullup ou pulldown ?
et cela rentre effectivement dans un buffer. Ensuite quel est ce Vdd du 3.3 ou du 5 ?
Voir la pièce jointe 342092

Justement, dans la même doc, http://www.mesanet.com/pdf/parallel/5i25man.pdf, il y a bien écrit que selon le jumper W3, il y a bien une résistance de pull-up au 5V

On a même la valeur de cette résistance:
PULLUP RESISTORS
All I/O pins are provided with pull-up resistors to
allow connection to open drain,
open collector, or OPTO devices. These resistors ha
ve a value of 3.3K so have a
maximum pull-up current of 1.5 mA (5V pull-up) or 1
mA (3.3V pull-up).

Dans la doc de la carte fille 7i75, http://www.mesanet.com/pdf/parallel/7i75man.pdf, on comprend que ce n'est que des résistances de 50ohms en série et un condensateur en parallèle sur chaque I/O, plus de la connectique.

A+
 
B

Bruno26

Compagnon
Ca marche! J'ai soudé des résistances de 50 Ohms sur le connecteur DB25 de ma bob pour connecter directement les signaux de ma règle à la 5i25. Petite apprehension au moment de remettre le jus, mais ça marche. A 1000mm/min ça gaze impec! J'ai pas essayé au dessus mais là c'est peut-être lesmoteurs ou les drivers qui vont montrer leurs limites. Mais ce gain en vitesse par rapport à Mach3 était inattendu!

Mon fichier ini:

# Généré par PNCconf le Sat Jun 3 20:38:37 2017
# Si vous modifiez ce fichier, il sera
# écrasé quand vous relancerez PNCconf

[EMC]
MACHINE = TOUR
DEBUG = 0

[DISPLAY]
DISPLAY = axis
EMBED_TAB_NAME = GladeVCP
EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -H gvcp_call_list.hal -x {XID} gvcp-panel.ui
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/bruno/linuxcnc/nc_files
PYVCP = pyvcp-panel.xml
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
LATHE = 1
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.833333
MAX_LINEAR_VELOCITY = 16.66667
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 0.250000
MAX_ANGULAR_VELOCITY = 1.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = xyz

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000

[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i25

[HAL]
HALUI = halui
HALFILE = TOUR.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal

[HALUI]

[TRAJ]
AXES = 3
COORDINATES = X Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 1.67
MAX_LINEAR_VELOCITY = 16.67
NO_FORCE_HOMING = 1

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 16.6666666667
MAX_ACCELERATION = 100.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
P = 0.5
I = 15
D = 0.0
FF0 = 0.95
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0025
MAX_OUTPUT = 300
ENCODER_SCALE = 1000.0
# these are in nanoseconds
DIRSETUP = 28500
DIRHOLD = 28500
STEPLEN = 10000
STEPSPACE = 0
STEP_SCALE = -1280.0
BACKLASH = 0
MIN_LIMIT = -200.0
MAX_LIMIT = 200.0
HOME_OFFSET = 0.0
STEPGEN_MAXACCEL = 150
STEPGEN_MAXVEL = 20
#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 10.0
MAX_ACCELERATION = 20.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
P = 0.0
I = 0.0
D = 0.0
FF0 = 1.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 1000
# these are in nanoseconds
DIRSETUP = 28500
DIRHOLD = 28500
STEPLEN = 10000
STEPSPACE = 0
STEP_SCALE = -266.666666667
BACKLASH = 0.5
MIN_LIMIT = -1000.0
MAX_LIMIT = 1000.0
HOME_OFFSET = 0.0
STEPGEN_MAXACCEL = 40
STEPGEN_MAXVEL = 15
#********************
# Spindle
#********************
[SPINDLE_9]
P = 0
I = 0
D = 0
FF0 = 1
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 2000
OUTPUT_SCALE = 2000.0


----------------------------------------

Mon fichier hal:

# Généré par PNCconf le Sat Jun 3 20:38:37 2017
# Si vous modifiez ce fichier, il sera
# écrasé quand vous relancerez PNCconf

loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=2 num_pwmgens=1 num_stepgens=2 sserial_port_0=0000xx"
setp hm2_5i25.0.watchdog.timeout_ns 5000000

setp hm2_5i25.0.pwmgen.pwm_frequency 100


loadrt pid names=pid.x,pid.z,pid.s
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle

addf hm2_5i25.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf abs.spindle servo-thread
addf lowpass.spindle servo-thread
addf hm2_5i25.0.write servo-thread

# external output signals


# external input signals


#*******************
# AXIS X
#*******************

setp pid.x.Pgain [AXIS_0]P
setp pid.x.Igain [AXIS_0]I
setp pid.x.Dgain [AXIS_0]D
setp pid.x.bias [AXIS_0]BIAS
setp pid.x.FF0 [AXIS_0]FF0
setp pid.x.FF1 [AXIS_0]FF1
setp pid.x.FF2 [AXIS_0]FF2
setp pid.x.deadband [AXIS_0]DEADBAND
setp pid.x.maxoutput [AXIS_0]MAX_OUTPUT
setp pid.x.error-previous-target true
setp pid.x.maxerror 0.5

net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output

# Step Gen signals/setup

setp hm2_5i25.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [AXIS_0]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [AXIS_0]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [AXIS_0]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE
setp hm2_5i25.0.stepgen.00.step_type 0
setp hm2_5i25.0.stepgen.00.control-type 0
setp hm2_5i25.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd <= axis.0.motor-pos-cmd
net x-vel-cmd <= axis.0.joint-vel-cmd
net x-output <= hm2_5i25.0.stepgen.00.position-cmd
#net x-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net x-pos-fb <= hm2_5i25.0.encoder.00.position
#net x-pos-cmd => axis.0.motor-pos-fb
net x-enable <= axis.0.amp-enable-out
net x-enable => hm2_5i25.0.stepgen.00.enable

# ---Encoder feedback signals/setup---

setp hm2_5i25.0.encoder.00.counter-mode 0
setp hm2_5i25.0.encoder.00.filter 1
setp hm2_5i25.0.encoder.00.index-invert 0
setp hm2_5i25.0.encoder.00.index-mask 0
setp hm2_5i25.0.encoder.00.index-mask-invert 0
setp hm2_5i25.0.encoder.00.scale [AXIS_0]ENCODER_SCALE


net x-vel-fb <= hm2_5i25.0.encoder.00.velocity
net x-pos-fb => axis.0.motor-pos-fb
net x-index-enable axis.0.index-enable <=> hm2_5i25.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_5i25.0.encoder.00.rawcounts

# ---setup home / limit switch signals---

net x-home-sw => axis.0.home-sw-in
net x-neg-limit => axis.0.neg-lim-sw-in
net x-pos-limit => axis.0.pos-lim-sw-in

#*******************
# AXIS Z
#*******************

setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_2]MAX_OUTPUT
setp pid.z.error-previous-target true
setp pid.z.maxerror .0005

net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output

# Step Gen signals/setup

setp hm2_5i25.0.stepgen.01.dirsetup [AXIS_2]DIRSETUP
setp hm2_5i25.0.stepgen.01.dirhold [AXIS_2]DIRHOLD
setp hm2_5i25.0.stepgen.01.steplen [AXIS_2]STEPLEN
setp hm2_5i25.0.stepgen.01.stepspace [AXIS_2]STEPSPACE
setp hm2_5i25.0.stepgen.01.position-scale [AXIS_2]STEP_SCALE
setp hm2_5i25.0.stepgen.01.step_type 0
setp hm2_5i25.0.stepgen.01.control-type 0
setp hm2_5i25.0.stepgen.01.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.01.maxvel [AXIS_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd <= axis.2.motor-pos-cmd
net z-vel-cmd <= axis.2.joint-vel-cmd
net z-output <= hm2_5i25.0.stepgen.01.position-cmd

#net z-pos-fb <= axis.2.motor-pos-cmd
#net z-pos-fb => axis.2.motor-pos-fb


net z-pos-cmd => axis.2.motor-pos-fb


net z-enable <= axis.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.01.enable

# ---setup home / limit switch signals---

net z-home-sw => axis.2.home-sw-in
net z-neg-limit => axis.2.neg-lim-sw-in
net z-pos-limit => axis.2.pos-lim-sw-in

#*******************
# SPINDLE S
#*******************

setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT
setp pid.s.error-previous-target true
setp pid.s.maxerror .0005

net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm => pid.s.command
net spindle-vel-fb-rpm => pid.s.feedback
net spindle-output <= pid.s.output

# ---PWM Generator signals/setup---

setp hm2_5i25.0.pwmgen.00.output-type 1
setp hm2_5i25.0.pwmgen.00.scale [SPINDLE_9]OUTPUT_SCALE
setp hm2_5i25.0.gpio.000.invert_output 1

net spindle-output => hm2_5i25.0.pwmgen.00.value
net machine-is-enabled => hm2_5i25.0.pwmgen.00.enable



# ---setup spindle control signals---

net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-vel-cmd-rpm <= motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-enable <= motion.spindle-on
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
net spindle-brake <= motion.spindle-brake
net spindle-revs => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb-rps => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable

setp hm2_5i25.0.gpio.007.is_output 1
net spindle-enable => hm2_5i25.0.gpio.007.out


# ---Setup spindle at speed signals---

sets spindle-at-speed true


#******************************
#connections de signaux divers
#******************************

# ---signaux HALUI---

net joint-select-a halui.joint.0.select
net x-is-homed halui.joint.0.is-homed
net jog-x-pos halui.jog.0.plus
net jog-x-neg halui.jog.0.minus
net jog-x-analog halui.jog.0.analog
net joint-select-c halui.joint.2.select
net z-is-homed halui.joint.2.is-homed
net jog-z-pos halui.jog.2.plus
net jog-z-neg halui.jog.2.minus
net jog-z-analog halui.jog.2.analog
net jog-selected-pos halui.jog.selected.plus
net jog-selected-neg halui.jog.selected.minus
net spindle-manual-cw halui.spindle.forward
net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.jog-speed
net MDI-mode halui.mode.is-mdi

# ---signaux d'arrosage---

net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood

# ---signal de sonde---

net probe-in => motion.probe-input

# ---signaux contrôle mouvement---

net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled

# ---signaux entrée / sortie numérique---

# ---signaux d'A/U---

net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in

# ---signaux pour changeur d'outil personnalisé---

net tool-number <= iocontrol.0.tool-prep-number
net tool-change-request <= iocontrol.0.tool-change
net tool-change-confirmed => iocontrol.0.tool-changed
net tool-prepare-request <= iocontrol.0.tool-prepare
net tool-prepare-confirmed => iocontrol.0.tool-prepared

-------------------------------------------------------------------------------------

J'ai encore uun petit truc qui me gène. Au moment de fermer Linuxcnc, le relais qui commande la broche change d'état. Heureusement le PWM qui commande la vitesse doit être proche de 0, donc la broche tourne très lentement, mais c'est pas très "secure".
Est-ce qu'il y a moyen de faire quelque chose avec le fichier shutdown.hal, comme forcer l'état du relais?
 
B

Bruno26

Compagnon
Une petite copie d'écran de la boucle fermée:
crénaux 5mm 1000mm_min.png


En rouge la consigne avec des crénaux de 5mm de déplacements à 1000mm/min.
En bleu la position mesurée. Et en blanc l'erreur de position, les pics à 0.2mm correspondent au backlash. Les variations de consignes durent environ 0.4s. 0.2s après, l'erreur est inférieure à 1/100. Et encore 0.2s plus tard elle est de 3µm. Moi ça me va!

Il faudra bien sûr encore des essais en usinant, pour voir si avec des bonnes grosses vibrations le tout ne s'affole pas.

A+
 
B

Bruno26

Compagnon
Je viens de me rendre compte dans mon essai précédent que dans la partie où il n'y a pas de changement de sens (juste avant le pointeur de souris) l'erreur maxi est de 5/100. Mais le moteur ne pouvait pas rattraper plus vite la consigne puisque 1000mm/min est aussi la vitesse maxi que j'ai rentrée dans les paramètres du fichier ini.
Maintenant je démonte les moteurs pap pour les monter sur ma fraiseuse et créer une autre config. Ca ira plus vite la 2ème fois, et là pas d'encoder.
 
B

Bruno26

Compagnon
Bonjour à tous,
Après plusieurs jours où mes machines (et PC) sont restées débranchées pour cause d'orage, ma carte mesa semble ne plus marcher! Il n'y a que la commande de broche ( relai et pwm) qui marche.
J'ai essayé de re flasher la carte mais ça me répond no 5i25 board found...
Ca semble mort, pourtant la commande de broche fonctionne.
Je vais essayer la carte dans un autre pc, ne sachant pas quoi faire d'autre.
 
B

Bruno26

Compagnon
Bon, ben c'est mort aussi avec la carte dans un autre PC.
Je vais poster un message sur le forum linuxcnc.
 
B

Bruno26

Compagnon
Finalement, j'ai modifié le fichier hal pour pouvoir utiliser le connecteur interne de la 5i25, en rajoutant ce cable que j'avais dans un tiroir:
https://sgcdn.startech.com/005329/media/products/gallery_large/PEX2PECP2.B.jpg
Ca marche, mais ma règle de mesure est morte! :sad: :sad::sad:Il n'y a plus rien en sortie et elle consomme 500mA en faisant chuter la tension du 5v de l'Usb à 3.7v!
J'ai donc aussi visiblement plusieurs pins de mortes sur la 5i25! Et impossible de la re-flasher avec un autre firmware... :sad:
 

Sujets similaires

L
Réponses
29
Affichages
1 369
dh42
T
Réponses
8
Affichages
980
greg_elec
greg_elec
N
Réponses
61
Affichages
11 324
nipil
N
M
Réponses
14
Affichages
1 338
Mika2A
M
P
Réponses
13
Affichages
2 198
Papyrox
P
B
Réponses
37
Affichages
2 995
Squal112
Squal112
N
Réponses
8
Affichages
1 415
dh42
P
Réponses
31
Affichages
3 134
dh42
A
Réponses
15
Affichages
2 993
activa73
A
Haut