J
jpbbricole
Compagnon
Introduction:
C’est à l’instigation et avec les conseils de @JCS que j’ai développé ce système de pilotage par Arduino d’un plateau diviseur (PD), afin de le rendre autonome.
Le système se compose d’un Arduino Mega, d’un affichage OLED de 4 lignes ou LCD 4x20, d’une LED RGB, d’un codeur rotatif (CR) avec bouton poussoir (BP), d’un clavier 4x4, d’un lecteur de carte Micro SD ainsi que de quelques boutons. Le lecteur de carte SD ainsi que le clavier, sont optionnels. Le système peut fonctionner uniquement avec le CR.
Les connecteurs du système sont, 4x4 i2C pour la connexion de périphérique à ce standard, actuellement l’affichage OLED et le clavier 4x4, 1x6 pour la commande du driver du moteur pas à pas (MPAP), 1x6 pour le handshaking (HS) et le G-Code afin d’avoir un dialogue avec le système d’usinage (SU et, futur, une interface Bluetooth).
Paramétrage du système :
Il se fait de 3 façons et c’est dépendant de commande :
$SetupInEeprom=1
Si = 1 les paramètres sont repris de la mémoire permanente EEPROM.
Si = 0 le programme recherche le fichier ProgPars.ini et utilise ces paramètres. Si ce fichier n’est pas trouvé, ce sont des paramètres par défaut qui sont utilisés, il sont à modifier dans le programme void setupSetInternally(), le programme doit être recompilé et téléchargé.
Pour modifier les paramètres de fonctionnement du programme, si c’est sur la carte SD, éditer le fichier ProgPars.ini.
Pour modifier les paramètres en EEPROM, utiliser le moniteur de l’IDE Arduino (ou tout autre terminal série, vitesse 115200) et « envoyer » les commandes nécessaires selon la liste se trouvant dans le fichier PlateauDivisSD_Autres.zip Liste des commandes.PDF. Il est à noter que toutes les commandes de paramétrage débutent avec $ et les paramètres sont sauvés en mémoire permanente EEPROM.
Regardez, au démarrage, la LED, si elle clignote (3x par erreur) en rouge, c’est qu’il y a un paramètre erroné dans la configuration. Lors de l’usage des paramètres sur SD ou par défaut interne, les paramètres sont mémorisés en EEPROM.
A la première utilisation du programme, comme l’EEPROM est vide, le programme transfert les paramètres par défaut (void setupSetInternally()) dans la mémoire permanente et déclare le setup en EEPROM ($SetupInEeprom=1).
Cette « mécanique » permet aussi de réinitialiser le programme en exécutant la commande $FirstUsage=0 et et, ensuite, en redémarrant le programme.
Mode de fonctionnement :
Le programme peut fonctionner selon 4 modes, mode fichier avec fichiers sur carte SD , mode manuel avec sélection du nombre de dents par clavier ou CR, le mode Jog et le 4ème qui est le mode homing qui permet l’ajustage de la position du plateau manuellement.
Pour changer le mode, presser longuement (~1 sec) sur le BP jusqu’à l’affichage de M E N U en jaune, relâcher, tourner le CR pour choisir et un click sur BP et c’est sélectionné.
Le mode de départ se défini par paramétrage:
; Menu de départ 1 = Fichiers de roues sur carte SD 2 = mode manuel 3 = mode jog
MENUSTART=1
En fonctionnement, il est possible de passer d'un mode à l'autre par la touche * ou une longue pression sur le BP.
Mode fichier :
Le principe est que sur la carte SD se trouvent des fichiers de définition de roues dentées (DRD). Ces fichiers ont une extension .TXT ) ( Dents12.txt pour exemple)
Au moyen du CR, on fait défiler les fichiers, on sélectionne le fichier désiré par pression sur le CR et on confirme avec une seconde pression
Mode manuel :
Le nombre de dents se sélectionne au moyen du CR, du pavé numérique du clavier ou les touches + (A) et – (B) du clavier et C pour corriger, pour accepter, au moyen du BP ou de la touche E (D) du clavier.
En mode manuel, les déplacements sont calculés en pas et en absolu. Un algorithme compense, au maximum, les problèmes de division.
Mode jog :
Permet la rotation manuelle du plateau de façon fine ou rapide. La vitesse de base est définie par le paramètre JogSpeed=50
Jog avec CR :
Si l’on tourne le CR assez rapidement, cette vitesse se multiplie afin de créer une accélération de la rotation. Un cran du CR dans le sens inverse remet la vitesse à la valeur de départ.
St = Steps De = degrés.
Jog analogique (joystick) :
Si un jog analogique (joystick) est connecté ($JogAnaIs = 1), il est aussi possible de faire tourner le plateau , de façon progressive et assez fine.
Jog clavier :
Les touches A et B correspondent à + et -
On peut aussi utiliser les touches de 0 à 9 (0 = 10) + - et #.
Le nombre de pas de rotation est égal à la valeur de la touche multiplié par (le nombre de pas pas tour du MPAP/20) (#define mpapResolution 200), la touche # permet d’alterner entre la formule précédente et et 1 comme facteur de multiplication.
Les touches + et – permettent d’inverser le sens de rotation.
La vitesse de rotation sera le Speed xxx affiché (par défaut paramètre $MpapSpeedHz=nnn).
Les 3 types de jog : CR, analogique et clavier peuvent travailler en même temps.
Mode homing :
Permet de retrouver le position 0 du plateau. Il y a plusieurs façon de démarrer cette fonction :
Par sélectionner le mode (voire sous Modes de fonctionnement : )
Par longue pression du BP (env. 3 sec.)
Par le clavier, presser 3x la touche #. (Mode Fichier, Manuel et Jog)
Par la commande Homing
Si l’on est dans les modes Fichier, Manuel, Jog, la méthode clavier est la meilleure.
C’est géré par le paramètre
$HomeSensLevel=0
Cette entrée est,est le plus souvent logique et prend, en général, la valeur 0 ou 1.
S’il n’y a pas de système de homing, mettre ce parameter à 99.
Entrées/sorties :
Commande driver MPAP (6p) :
1) GND
2) Step
3) Dir
4) Enable*
5) ChuckHome*.
6) +5V.
Quadra (6p) :
1) GND
2) Quadra_A°
3) Quadra_B°
4) Quadra_IO1°
5) Quadra_IO2
6) +5V.
Pour un codeur rotatif en quadrature, pour render le système asservi par un autre movement. Les e/s Quadra_IO1 et Quadra_IO2 n’ont pas encore d’attribution. Les e/s avec ° sont avec interrupt.
Usinage (6p) :
1) GND
2) Handshaking In*
3) Handshaking out
4) G-Coide TX
5) G-CodRx
6) +5V.
Avec le handshaking (HS), le système signale au SU, avec un 1 logique sur Handshaking out, que le plateau est en position et attend que le SU lui signale la fin de l’usinage de la dent au moyen d’un 0 sur Handshaking In*. S’il n’y a pas possibilité de HS, on peut utiliser un timer pour attendre la fin de l’usinage.
UsinHandsh=0
UsinHandshDelay=22
Pour attendre 22 secondes entre chaque dents.
Gcode-Tx et G-Code Rx permettent d’envoyer des ordres et de recevoir des informations du SU. L’envoi de G-Code se fait au moyen de macros.
LED :
Bleu, une impulsion longue = démarrage du programme.
Rouge, clignote 3x, erreurs dans le fichier INI ou erreur de macro dans fichier DRD (Clignote 3x à chaque erreur).
Rouge, fixe, le MPAP est en fonction.
Vert, fixe, le mandrin est en position, le SU peut entrer en fonction.
Blanc, fixe, le signal Handshaking In* est resté à 0 depuis le dernier cycle, le faire passer à 1 pour redonner le vert.
Format du fichier DRD :Liste des pas :
Contient la liste des pas du MPAP pour chaque dents, ces valeurs de déplacement sont relatives (défaut) ou absolues. Ceci se règle au moyen d’une macro (M=R ou M=A), dans ce fichier. Ces déplacements dépendent de la résolution, pour 360°, de l’entraînement du plateau (paramètre INI mpapChuck360resolution) pour moi, 20000.
6 dents en mode relatif le fichier contient :
3333
3334
3333
3333
3334
3333
6 dents en mode absolu le fichier contient :
3333/M=A
6666
9999
13334
16667
20000
Les macros :
Les macros sont des commandes qui se mettent en fin de ligne, toujours après une définition de pas et sont actives à partir de ce moment.
Une fin de ligne peut comprendre plusieurs macros séparées par le signe /
1666/M=A/G=G90 G0 F100…
Les macro sont :
M pour Move, les paramètres sont R pour relatif (défaut) ou A pour Absolu.
S pour Scale (échelle), les paramètres sont S pour Pas (défaut) ou D pour Degrés.
G pour G-code
3333/M=A
Signifie que l’on passe en mode déplacement (Move) Absolu, depuis et y compris cette ligne.
1666/G=G90 G0 F100 Z-9.0;G91 G1 F30 Z-7;G90 G0 F100 Z0
Signifie que, depuis cette ligne et les suivante, une fois le déplacement du MPAP terminé (LED passe du rouge au vert) le programme envoie ces ordres G-code au SU. Il est possible de changer le G-code à n’importe quelle ligne. Pour cesser l’envoi de G-code mettre la macro
3334/G=
Les différentes séquences de G-code de la macro doivent être séparées par un ; (point virgule).
Pour passer en mode absolu, il suffit de mettre, au bout de la première ligne, le macro M=A (Move=Absolu).
La validité des macros cesse à la fin de l’exécution du fichier.
A la sélection d’un nouveau fichier, le programme génère les macro /M=/G= ce qui signifie Move relatif et commandes G-code vide.
Paramétrage:
Fichier ProgPars.ini :
; Si 1 attend le signal de handshaking pour passer à la dent suivante, si 0 attend UsinDelay en secondes
$UsinHandsh=0
$UsinHandshDelay=6
; Vitesse du MPAP
$MpapSpeedHz=400
; Si 0 le moteur tourne dans le sens des aiguilles d'une montre (CW) si 1 tourne CCW
$MpapReverse=0
; Si 1 le driver MPAP reste actif en permanence afin de vérouillerle moteur entre les déplacements
$MpapKeepLock=0
; Si 0 le signal Enable du driver MPAP est actif à 0 sinon, actif à 1
$MpapDriverEnableMode=0
; Nombre de pas pour un tour de mandrin 360°
$Chuck360resolution=20000
; Si la position du mandrin doit être sauvée
$ChuckPosSaved=1
; Niveau du signal de homing mettre 99 si pas de homing
$HomeSensLevel=0
; Pour compenser le jeu de la mécanique si changement de direction
$chuckBackSlashSteps=100
; Si 1 il y a une DRO en Bluetooth
$DroSerialIf=0
; Si 1 DRO Android (développement futur)
$DroType=1
; G-code éventuel en cas de mode manuel
$UsinManGcode=G90 G0 F100 Z-7.0;S1000 M3;G91 G1 F30 Z-7;G90 G0 F100 Z0;M5
; Jog règle la vitesse et l'accélération
$JogSpeed = 50
; Jog analogique
$JogAnaIs = 0
$JogAnaMin = 0
$JogAnaMiddle = 512
$JogAnaMax = 1023
; Menu de départ 1 = Fichiers de roues sur carte SD 2 = mode manuel 3 = mode jog 4 = mode homing
$MenuStart=2
Commande à distance :
Tout ce système peut entièrement se « télécommander » depuis une communication série (USB) au moyen des ordres suivants :
Voire fichier PlateauDivisSD_Autres.zip Liste des commandes.PDF
Et le tout donne ceci :
Le boitier (Provisoire)
Le boitier vide
Un peu moins vide !
Le circuit imprimé
Le schéma
Le circuit imprimé monté
Les essais :
Comme je n’ai pas de plateau diviseur, j’ai transformé mon tour Proxxon PD-230 en pseudo plateau diviseur.
Je l’ai équipé d’un entraînement du mandrin par vis sans fin
D’une fraise sur porte-outil
D’un contact pour le HS.
Qui se place sur la banc du tour.
Ce tour « tourne sous GRBL », j’en ai profité pour le commander depuis ce système. Cette option n’est pas obligatoire. Le moteur de la fraise est commandé depuis le système au moyen de G-code. L’envoi de G-code à GRBL se fait au moyen des macros.
Une petite vidéo:
Cordialement
jpbbricole
C’est à l’instigation et avec les conseils de @JCS que j’ai développé ce système de pilotage par Arduino d’un plateau diviseur (PD), afin de le rendre autonome.
Le système se compose d’un Arduino Mega, d’un affichage OLED de 4 lignes ou LCD 4x20, d’une LED RGB, d’un codeur rotatif (CR) avec bouton poussoir (BP), d’un clavier 4x4, d’un lecteur de carte Micro SD ainsi que de quelques boutons. Le lecteur de carte SD ainsi que le clavier, sont optionnels. Le système peut fonctionner uniquement avec le CR.
Les connecteurs du système sont, 4x4 i2C pour la connexion de périphérique à ce standard, actuellement l’affichage OLED et le clavier 4x4, 1x6 pour la commande du driver du moteur pas à pas (MPAP), 1x6 pour le handshaking (HS) et le G-Code afin d’avoir un dialogue avec le système d’usinage (SU et, futur, une interface Bluetooth).
Paramétrage du système :
Il se fait de 3 façons et c’est dépendant de commande :
$SetupInEeprom=1
Si = 1 les paramètres sont repris de la mémoire permanente EEPROM.
Si = 0 le programme recherche le fichier ProgPars.ini et utilise ces paramètres. Si ce fichier n’est pas trouvé, ce sont des paramètres par défaut qui sont utilisés, il sont à modifier dans le programme void setupSetInternally(), le programme doit être recompilé et téléchargé.
Pour modifier les paramètres de fonctionnement du programme, si c’est sur la carte SD, éditer le fichier ProgPars.ini.
Pour modifier les paramètres en EEPROM, utiliser le moniteur de l’IDE Arduino (ou tout autre terminal série, vitesse 115200) et « envoyer » les commandes nécessaires selon la liste se trouvant dans le fichier PlateauDivisSD_Autres.zip Liste des commandes.PDF. Il est à noter que toutes les commandes de paramétrage débutent avec $ et les paramètres sont sauvés en mémoire permanente EEPROM.
Regardez, au démarrage, la LED, si elle clignote (3x par erreur) en rouge, c’est qu’il y a un paramètre erroné dans la configuration. Lors de l’usage des paramètres sur SD ou par défaut interne, les paramètres sont mémorisés en EEPROM.
A la première utilisation du programme, comme l’EEPROM est vide, le programme transfert les paramètres par défaut (void setupSetInternally()) dans la mémoire permanente et déclare le setup en EEPROM ($SetupInEeprom=1).
Cette « mécanique » permet aussi de réinitialiser le programme en exécutant la commande $FirstUsage=0 et et, ensuite, en redémarrant le programme.
Mode de fonctionnement :
Le programme peut fonctionner selon 4 modes, mode fichier avec fichiers sur carte SD , mode manuel avec sélection du nombre de dents par clavier ou CR, le mode Jog et le 4ème qui est le mode homing qui permet l’ajustage de la position du plateau manuellement.
Pour changer le mode, presser longuement (~1 sec) sur le BP jusqu’à l’affichage de M E N U en jaune, relâcher, tourner le CR pour choisir et un click sur BP et c’est sélectionné.
Le mode de départ se défini par paramétrage:
; Menu de départ 1 = Fichiers de roues sur carte SD 2 = mode manuel 3 = mode jog
MENUSTART=1
En fonctionnement, il est possible de passer d'un mode à l'autre par la touche * ou une longue pression sur le BP.
Mode fichier :
Le principe est que sur la carte SD se trouvent des fichiers de définition de roues dentées (DRD). Ces fichiers ont une extension .TXT ) ( Dents12.txt pour exemple)
Au moyen du CR, on fait défiler les fichiers, on sélectionne le fichier désiré par pression sur le CR et on confirme avec une seconde pression
Mode manuel :
Le nombre de dents se sélectionne au moyen du CR, du pavé numérique du clavier ou les touches + (A) et – (B) du clavier et C pour corriger, pour accepter, au moyen du BP ou de la touche E (D) du clavier.
En mode manuel, les déplacements sont calculés en pas et en absolu. Un algorithme compense, au maximum, les problèmes de division.
Mode jog :
Permet la rotation manuelle du plateau de façon fine ou rapide. La vitesse de base est définie par le paramètre JogSpeed=50
Jog avec CR :
Si l’on tourne le CR assez rapidement, cette vitesse se multiplie afin de créer une accélération de la rotation. Un cran du CR dans le sens inverse remet la vitesse à la valeur de départ.
Jog analogique (joystick) :
Si un jog analogique (joystick) est connecté ($JogAnaIs = 1), il est aussi possible de faire tourner le plateau , de façon progressive et assez fine.
Jog clavier :
Les touches A et B correspondent à + et -
On peut aussi utiliser les touches de 0 à 9 (0 = 10) + - et #.
Le nombre de pas de rotation est égal à la valeur de la touche multiplié par (le nombre de pas pas tour du MPAP/20) (#define mpapResolution 200), la touche # permet d’alterner entre la formule précédente et et 1 comme facteur de multiplication.
Les touches + et – permettent d’inverser le sens de rotation.
La vitesse de rotation sera le Speed xxx affiché (par défaut paramètre $MpapSpeedHz=nnn).
Les 3 types de jog : CR, analogique et clavier peuvent travailler en même temps.
Mode homing :
Permet de retrouver le position 0 du plateau. Il y a plusieurs façon de démarrer cette fonction :
Par sélectionner le mode (voire sous Modes de fonctionnement : )
Par longue pression du BP (env. 3 sec.)
Par le clavier, presser 3x la touche #. (Mode Fichier, Manuel et Jog)
Par la commande Homing
Si l’on est dans les modes Fichier, Manuel, Jog, la méthode clavier est la meilleure.
C’est géré par le paramètre
$HomeSensLevel=0
Cette entrée est,est le plus souvent logique et prend, en général, la valeur 0 ou 1.
S’il n’y a pas de système de homing, mettre ce parameter à 99.
Entrées/sorties :
Commande driver MPAP (6p) :
1) GND
2) Step
3) Dir
4) Enable*
5) ChuckHome*.
6) +5V.
Quadra (6p) :
1) GND
2) Quadra_A°
3) Quadra_B°
4) Quadra_IO1°
5) Quadra_IO2
6) +5V.
Pour un codeur rotatif en quadrature, pour render le système asservi par un autre movement. Les e/s Quadra_IO1 et Quadra_IO2 n’ont pas encore d’attribution. Les e/s avec ° sont avec interrupt.
Usinage (6p) :
1) GND
2) Handshaking In*
3) Handshaking out
4) G-Coide TX
5) G-CodRx
6) +5V.
Avec le handshaking (HS), le système signale au SU, avec un 1 logique sur Handshaking out, que le plateau est en position et attend que le SU lui signale la fin de l’usinage de la dent au moyen d’un 0 sur Handshaking In*. S’il n’y a pas possibilité de HS, on peut utiliser un timer pour attendre la fin de l’usinage.
UsinHandsh=0
UsinHandshDelay=22
Pour attendre 22 secondes entre chaque dents.
Gcode-Tx et G-Code Rx permettent d’envoyer des ordres et de recevoir des informations du SU. L’envoi de G-Code se fait au moyen de macros.
LED :
Bleu, une impulsion longue = démarrage du programme.
Rouge, clignote 3x, erreurs dans le fichier INI ou erreur de macro dans fichier DRD (Clignote 3x à chaque erreur).
Rouge, fixe, le MPAP est en fonction.
Vert, fixe, le mandrin est en position, le SU peut entrer en fonction.
Blanc, fixe, le signal Handshaking In* est resté à 0 depuis le dernier cycle, le faire passer à 1 pour redonner le vert.
Format du fichier DRD :Liste des pas :
Contient la liste des pas du MPAP pour chaque dents, ces valeurs de déplacement sont relatives (défaut) ou absolues. Ceci se règle au moyen d’une macro (M=R ou M=A), dans ce fichier. Ces déplacements dépendent de la résolution, pour 360°, de l’entraînement du plateau (paramètre INI mpapChuck360resolution) pour moi, 20000.
6 dents en mode relatif le fichier contient :
3333
3334
3333
3333
3334
3333
6 dents en mode absolu le fichier contient :
3333/M=A
6666
9999
13334
16667
20000
Les macros :
Les macros sont des commandes qui se mettent en fin de ligne, toujours après une définition de pas et sont actives à partir de ce moment.
Une fin de ligne peut comprendre plusieurs macros séparées par le signe /
1666/M=A/G=G90 G0 F100…
Les macro sont :
M pour Move, les paramètres sont R pour relatif (défaut) ou A pour Absolu.
S pour Scale (échelle), les paramètres sont S pour Pas (défaut) ou D pour Degrés.
G pour G-code
3333/M=A
Signifie que l’on passe en mode déplacement (Move) Absolu, depuis et y compris cette ligne.
1666/G=G90 G0 F100 Z-9.0;G91 G1 F30 Z-7;G90 G0 F100 Z0
Signifie que, depuis cette ligne et les suivante, une fois le déplacement du MPAP terminé (LED passe du rouge au vert) le programme envoie ces ordres G-code au SU. Il est possible de changer le G-code à n’importe quelle ligne. Pour cesser l’envoi de G-code mettre la macro
3334/G=
Les différentes séquences de G-code de la macro doivent être séparées par un ; (point virgule).
Pour passer en mode absolu, il suffit de mettre, au bout de la première ligne, le macro M=A (Move=Absolu).
La validité des macros cesse à la fin de l’exécution du fichier.
A la sélection d’un nouveau fichier, le programme génère les macro /M=/G= ce qui signifie Move relatif et commandes G-code vide.
Paramétrage:
Fichier ProgPars.ini :
; Si 1 attend le signal de handshaking pour passer à la dent suivante, si 0 attend UsinDelay en secondes
$UsinHandsh=0
$UsinHandshDelay=6
; Vitesse du MPAP
$MpapSpeedHz=400
; Si 0 le moteur tourne dans le sens des aiguilles d'une montre (CW) si 1 tourne CCW
$MpapReverse=0
; Si 1 le driver MPAP reste actif en permanence afin de vérouillerle moteur entre les déplacements
$MpapKeepLock=0
; Si 0 le signal Enable du driver MPAP est actif à 0 sinon, actif à 1
$MpapDriverEnableMode=0
; Nombre de pas pour un tour de mandrin 360°
$Chuck360resolution=20000
; Si la position du mandrin doit être sauvée
$ChuckPosSaved=1
; Niveau du signal de homing mettre 99 si pas de homing
$HomeSensLevel=0
; Pour compenser le jeu de la mécanique si changement de direction
$chuckBackSlashSteps=100
; Si 1 il y a une DRO en Bluetooth
$DroSerialIf=0
; Si 1 DRO Android (développement futur)
$DroType=1
; G-code éventuel en cas de mode manuel
$UsinManGcode=G90 G0 F100 Z-7.0;S1000 M3;G91 G1 F30 Z-7;G90 G0 F100 Z0;M5
; Jog règle la vitesse et l'accélération
$JogSpeed = 50
; Jog analogique
$JogAnaIs = 0
$JogAnaMin = 0
$JogAnaMiddle = 512
$JogAnaMax = 1023
; Menu de départ 1 = Fichiers de roues sur carte SD 2 = mode manuel 3 = mode jog 4 = mode homing
$MenuStart=2
Commande à distance :
Tout ce système peut entièrement se « télécommander » depuis une communication série (USB) au moyen des ordres suivants :
Voire fichier PlateauDivisSD_Autres.zip Liste des commandes.PDF
Et le tout donne ceci :
Le boitier (Provisoire)
Le boitier vide
Un peu moins vide !
Le circuit imprimé
Le schéma
Le circuit imprimé monté
Les essais :
Comme je n’ai pas de plateau diviseur, j’ai transformé mon tour Proxxon PD-230 en pseudo plateau diviseur.
Je l’ai équipé d’un entraînement du mandrin par vis sans fin
D’une fraise sur porte-outil
D’un contact pour le HS.
Ce tour « tourne sous GRBL », j’en ai profité pour le commander depuis ce système. Cette option n’est pas obligatoire. Le moteur de la fraise est commandé depuis le système au moyen de G-code. L’envoi de G-code à GRBL se fait au moyen des macros.
Une petite vidéo:
Cordialement
jpbbricole
Dernière édition: