LinuxCNC : Installation

linux CNC nécessite une version avec Noyau temps réel pour fonctionner sur un raspberry PI.

en consequence , il n’est pas possible d’installer une version classique de DEBIAN ou de RASPIAN et d’ensuite y installer LinuxCNC via un APP get /install.

il va falloir récupérer une Image déjà bâtie, avec un noyau temps réel et linuxCNC compris dans le package.

je vous propose donc de telecharger l’image systeme suivante stockée sur google drive (fichier trop important pour etre mis a dispo directement ici sur le site).

https://drive.google.com/file/d/1ek_3taDOUOHC2HvTFmRjt7TApK163Qxe/view?usp=sharing

une fois le fichier téléchargé (quelques minutes car il fait un peu plus de 1Go) , il ne vous restera plus qu’a l’installer sur une carte SD via l’imager standard du Raspberry .

https://www.raspberrypi.com/software/

une fois installé l’imageur sur votre PC , le lancer , il se présente comme ci dessous:

premiere opération , case de gauche, choisir le type de raspberry PI , ici un RPI 4B

ensuite il faut choisir la localisation de l’image systeme dans la deuxième case du loader:

il va falloir ici spécifier l’utilisation d’une image personnalisée , derniere option en bas du menu de selection

puis aller dans le répertoire de téléchargement y chercher l’image recupérée sur google drive:

derniere opération, spécifier dans la case de droite du loader , la destination d’installation de l’image selectionnée, dans le cas present , la carte SD logée dans le lecteur de carte SD du PC:

ne reste ensuite plus qu’a lancer l’opération suivante:

dans le menu suivant choisir NON:

puis OUI dans l’ecran suivant:

l’installation de l’image systeme debute alors et durera plusieurs minutes, une operation de verification de l’image se deroulera ensuite et prendra a nouveau quleques minutes.

une fois tout fini , sortir la carte micro SD puis la mettre dans le logement du raspberry PI 4B et le démarrer .

Linux CNC Configuration: principes généraux

ici débute la partie un peu “hard” de la préparation de linuxCNC.

avant de rentrer dans les explications et pour ceux qui comprennent l’anglais, ci dessous le lien vers la documentation Linux CNC:

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

contrairement aux installations plus classiques sur des PC utilisant une interface parallèle , non seulement nous sommes sur un raspberryPI 4B avec 8go de Ram, mais en plus nous allons piloter une CNC directement via les ports GPIO du raspberry et ceci de la meme façon qu’avec un ARDUINO UNO avec GRBL (voir rubrique ARDUINO CNC du site).

LinuxCNC tel que fourni avec l’image systeme est prévu pour fonctionner avec un certain nombre de modules de sortie standards : port Parallèle , carte MESA , carte Mechatronic . quand on le lance il propose donc en standard de le configurer via des utilitaires déja installés avec le soft.

dans le cas du Raspberry PI et de son interface GPIO , il va falloir passer outre toutes ces procedures d’installations “faciles” et mettre un peu plus les mains dans le cambouis.

heureusement pour nous, les développeurs de LinuxCNC , on prévu un driver GPIO pour le Raspberry PI et moyennant la mise en place de quelques fichiers de configuration dans le repertoire adéqua , nous allons pouvoir mettre en place une version qui tourne sur RPI et qui utilise des broches GPIO pour piloter des moteurs Pas a Pas en mode DIR/STEP comme un arduino avec des drivers d’axes utilisant ce principe

nous allons donc voir voir comment configurer une version 3 axes X Y Z de ce type:

et sur le meme principe , une extension a 4 axes avec un 4° axe rotatif A . pour cela , il suffira de modifier les fichiers de la version 3 axes pour rajouter le 4° axe.

avant de passer a la configuration des fichiers , il est possible de lancer LinuxCNC en mode simulation permettant de voir a quoi ressemble l’ecran standard et de tester quelques fonctions du soft .

une fois votre RPI démarré, il va vous demander un identifiant et un mot de passe pour l’ouverture de cession. taper :

cnc pour l’identifiant

puis a nouveau cnc pour le mot de passe

apres l’ouverture de la cession DEBIAN , pour lancer Linux CNC, cliquer en haut a gauche sur la case “applications”, puis descendre sur la rubrique CNC puis cliquer dans le menu de droite sur LinuxCNC.

une fenêtre s’ouvre avec une liste déroulante dans laquelle il faut aller prendre dans la liste “sample configuration” puis “sim” puis “axis” , l’item “axis_mm” pour ouvrir une simulation LinuxCNC 3 axes X Y Z avec les unités en mm. après avoir sélectionné “axis_mm” puis cliqué sur OK en bas a droite , une fenêtre demande la confirmation de copie de certains fichiers dans un répertoire , confirmer en cliquant sur OUI

après confirmation, linuxCNC s’ouvre sur la fenêtre suivante

vous pouvez cliquer et naviguer dans les differents menus et options qui se presentent sans etat d’ame, s’agissant d’une simulation, il ne se passera rien de spécial a part des mouvements d’axes a l’écran.

Linux CNC Configuration: Brochage du GPIO

une des notions importantes de la config linuxCNC est la notion de masque pour la description des entrées/sorties du GPIO du RPI.

les 40 broches du GPIO du RPI sont composées de 2 broches de 5V , 2 broche de 3,3V , 8 broches de masse (ground) et 28 broches configurables en entrées/sorties. sur un raspberry PI 4B , la répartition des broches est comme ci dessous:

la première chose a faire avant de rentrer dans la configuration soft de LinuxCNC est de définir la façon dont vont être utilisées les broches GPIO du RPI pour s’interfacer avec la partie hard aval (drivers, moteurs pas a pas, switchs fin de course , broche d’usinage, etc …).

a partir du brochage retenu , va etre calculé un masque de definition pour le fichier HAL tel que defini dans la doc Linux CNC pour le driver ‘ hal_pi_gpio’ :

http://linuxcnc.org/docs/stable/html/drivers/hal_pi_gpio.html

Choix d’affectation du brochage GPIO et masque resultant:

pour faciliter le travail sur les 2 versions (CNC 3 axes et CNC 4 axes) , la config a ete choisie pour l’affectation des broches en version 4 axes (qui peut le plus peut le moins).

les broches d’envoi de signaux (Dir, Step, démarrage broche) sont des broches de sortie OUT , les broches de Switchs limite , probe et autres organes divers sont des broches d’entrées IN.

les broches 27 et 28 (GPIO 0 et GPIO 1) sont réservées pour certains protocoles de communication donc non disponible en entrée/sortie GPIO

les broches 3 et 5 (GPIO 2 et GPIO 3) etant a un niveau logique haut 3V pour le protocole de communication I2C , elles ne seront pas utilisées et configurees en entrées disponibles ainsi que la broche 7 (GPIO 4).

le masque résultant a utiliser dans le fichier HAL de configuration est donc :

loadrt hal_pi_gpio dir=27152376 exclude=0

pour ceux intéressés , ci dessous au format compressé RAR, le tableur format Libre office qui permet de faire le calcul en fonction des broches que l’on souhaite utiliser:

Linux CNC Configuration: fichiers INI et HAL

dans la rubrique précedente , nous avons vu qu’au démarrage en mode simulation, linuxCNC copiait des fichiers dans un répertoire. ce sont les fichier de configuration de base permettant le lancement du soft avec les paramètres de configuration.

le répertoire créé contient 2 fichiers majeurs , un fichier “xxxx.INI” et un fichier “xxxx.HAL”.

ce sont ces 2 fichiers qui permettent la configuration de linuxCNC dans le mode choisi.

si on regarde la structure des fichiers LinuxCNC avec l’explorateur de fichiers de l’OS DEBIAN installé par l’image utilisée , linux cnc installe les fichiers necessaires a son fonctionnement dans un repertoire ‘home/cnc/linuxcnc‘ qui comporte 2 sous répertoires : ‘config‘ et ‘nc_files

le répertoire ‘nc_files‘ servira a stocker les fichiers programme GCODE

le répertoire ‘config‘ permet de stocker les fichiers INI et HAL nécessaire a la configuration de linuxCNC au démarrage. dans ce répertoire ‘configs’ on peut créer autant de sous répertoires de configuration que de type de machine a utiliser/démarrer avec linuxCNC.

pour créer les profils des 2 machines 3 axes et 4 axes , il suffit de faire 2 repertoires avec les noms suivant ” 3axis-MILL” et “4axis-MILL” et d’y mettre dans chacun les extract des fichiers RAR respectifs suivants.

fichier INI et HAL CNC 3 axes

fichier INI et HAL CNC 4 axes

.le fichier INI comporte les lignes permettant de configurer les limites d’axes les vitesses , les accelarations, les step moteur et tout un tas de paramtres relatifs aux moteurs pas a pas et aux drivers utilisés. le fichier tel que fourni n’est donc pas utilisable en l’etat et devra etre modifié en fonction de votre configuration.

le Fichier HAL , comporte lui principalement tout ce qui concerne le brochage des entrées sorties du GPIO du raspberry PI . la aussi , il faudra tout d’abord configurer le masque dir/exclude du driver Hal_pi-gpio via le modele de calcul de la rubrique précédente en ayant pris soin de bien lister les broches utilisées et les elements connectés dessus pour ensuite completer/modifier la ligne suivante en debut de fichier HAL:

loadrt hal_pi_gpio dir=27152376 exclude=0

puis ensuite , toujours a partir du tableau d’affectation des broches, bien assigner les reference des PIN GPIO aux lignes de configuration de chaque axe au milieu du fichier , a savoir toutes les lignes du type :

net spindle-on spindle.0.on => hal_pi_gpio.pin-26-out
net xenable => hal_pi_gpio.pin-29-out
net xstep stepgen.0.step => hal_pi_gpio.pin-32-out
net xdir  stepgen.0.dir  => hal_pi_gpio.pin-24-out
net limit-x-switch hal_pi_gpio.pin-13-in => debounce.0.0.in

dans tous les cas , les erreurs seront sanctionnées par un message d’erreur au lancement de Linux CNC. il faudra prendre soin de lire le contenu du message pour connaitre la typologie de l’erreur a corriger. on rencontre les grands types d’erreurs ci dessous :

  • erreur sur le masque dir/exclude en debut de fichier HAL
  • erreur d’affectation des broches sur fichier HAL (broche en OUT sur le masque et en IN sur lignes de config)
  • erreur d’appel du fichier HAL dans le fichier INI => syntaxe de la ligne “HALFILE = nomfichier.hal

une fois les configurations et déclarations faites correctement , au démarrage de linuCNC il faut choisir la config a démarrer :

ce qui par exemple donne dans le cas de la config 4 axes , l’écran suivant:

moyennant d’avoir fait un montage proto en cablant des micro-swiths (normalement ouverts) entre la broche concernée et le +3,3V , il est même possible de faire un homming global sur les 4 axes dans l’ordre axe Z / axe Y / axe X / axe A en actionnant chacun des switch dans l’ordre après démarrage du mouvement a l’écran.

reste ensuite a cabler les PIN step et drive de chaque axe vers le driver et le moteur pas a pas correspondant . attention, le GPIO RPI sort du 3,3V sur ses broches , il faut donc soit des drivers compatibles d’un signal d’entrée 3,3V (pololu A4988 ou équivalent) soit utiliser des convertisseur 3,3V / 5V pour ataquer des drivers de puissance .

LINUX CNC Configuration de l’affichage

linux CNC possede differents types d’interfaces d’affichage qui se paramètrent dans le fichier de config “xxxx.INI”.

les differents look en standard dans l’image iso sont:

AXIS: un ecran basique

GMOCCAPY: interface pour ecran tactile mais utilisable aussi avec ecran normal, clavier et souris.

TOUCHY: interface specifique minimaliste pour petits écrans tactiles

GSCREEN (version par defaut): c’est un ecran customisable dont voici la version basique:

TKlinux: une interface egalement basique avec 1 fenetre controles et 1 fenetre visualisation trajectoires

QTVCP QTDRAGON: une interface au look tres pros et tres pratique (ma préférée). elle a un look style MACH 3.elle peut etre redimensionnée pour des ecrans de 1280×768 a 1680×1200

QTVCP QTDRAGON_HD: la meme que précédemment mais pour de grands ecrans HD , la résolution est fixe a 1920×1056.

QTVCP QTPLASMA: une interface spécifique a la decoupe plasma

CHOIX DE L’AFFICHAGE dans le FICHIER INI

le type d’interface est choisie en spécifiant en debut de fichier INI dans la partie [DISPLAY]

[DISPLAY]

DISPLAY = typeaffichage

typeaffichage peut prendre les valeurs:

  • axis
  • gmoccapy
  • touchy
  • tklinuxcnc
  • gscreen
  • qtvcp qtdragon
  • qtvcp qtdragon_hd
  • qtvcp qtplasma

Linux CNC : circuit prototype

quelques explications sur le circuit prototype pour la validation du fonctionnement en 4 axes.

l’idée de base est d’utiliser un CNC shield ARDUINO et de l’utiliser en version 4 drivers d’axes avec des Pololu DRV 8825 .

un premier test de validation sur 1 seul axe a ete réalisé , voici une photo du premier montage de test “proof of concept” . il a permis de tester le Homming des 4 axes X-Y-Z-A via des micro switches puis de faire tourner un moteur pas a Pas NEMA 17 sur l’axe X . l’alimentation en puissance des drivers a ete faite via une batterie 12V Lithium-ion.

le concept etant fonctionnel , l’etape suivante consiste a faire une version complete avec 4 moteurs NEMA 17 et 4 Pololu DRV 8825 sur un shiel CNC . voici le materiel de base:

  • un cable en nappe avec son adaptateur GPIO
  • un shield CNC pour ARDUINO UNO et 4 pololu DRV 8825
  • un PCB d’embase Arduino UNO pour faire des shield UNO personnalisés

a partir de l’adaptateur GPIO et de la platine SHIELD proto UNO , il faut maintenant réaliser une interface permetant de relier les PIN GPIO aux PIN du CNC SHIELD

premiere etape : soudure de connecteurs pour les differentes broches coté adaptateur GPIO

puis soudure de connecteurs pour le coté Shield CNC UNO.

etape suivante , cablages de jonction suivant le schema ci dessous , avec au milieu les PIN de l’adaptateur GPIO et de chaque coté les broches (inversées) du Shield CNC retourné.

le shield CNC n’ayant pas asses de broche pour les switchs fin de course , les câbles seront sortis sur un connecteur independant du shield.