Ulimaker 1: Ressources utilisées

Vue de la carte de commande de 'l'Ultimaker 1. L'Arduino Mega est fixée en dessous. UltimakerPCB1.5.7.jpg

Avant d'attaquer l'intégration de la nouvelle carte à proprement parler, nous allons commencer par un petit tour des ressources nécessaires pour faire fonctionner une Ultimaker 1. Nous verrons d'ailleurs, que ce n'est pas si différent d'une imprimante 3D de type Prusa, à part la tension d’alimentation.

Sur la version standard, l'Arduino Mega n'est pas complétée par une RAMPS (Reprap Arduino Mega Polollu Shield), mais par ne carte spécifique qui a été développée par Ultimaker (voir photo ci dessus). Elle a comme principale caractéristique de fonctionner en 19V (alimentation de portable..), ce qui est très bénéfique pour les moteurs, mais en contrepartie nécessite de fabriquer localement un 12V pour alimenter les ventilateurs, La carte est prévue pour piloter 3 axes et 2 extrudeurs ( bien que l'Ultimaker 1 n'ait jamais été officiellement été commercialisée avec 2 têtes). Elle est coiffée d'une pièce en bois portant un ventilateur avec convection forcée pour refroidir les contrôleurs pas à pas.

Les mesures de température doivent se faire avec une thermistance de 100K pour le lit chauffant, et un thermocouple pour la tête. Pour cette dernière, Une carte électronique sur la tête d'impression se charge de convertir le signal du thermocouple en une tension de 0>5V. Nous verrons plus tard que cela a son importance.

Les fins de course sont au nombre de 6, équipant chaque extrémité de chaque axe. Ce sont de simples micro interrupteurs. Une résistance de tirage au +5V est activée par logiciel sur l'Arduino Mega pour pouvoir lire l'état des switches. De ce fait, leur lecture est inversée, puisque l'on lit 1 lorsque l'interrupteur n'est pas actionné. et 0 lorsqu'en butée sur un fin de course (l'interrupteur étant branché entre l'entrée et la masse).

Une sortie 12V fixe alimente un ventilateur de refroidissement de l'électronique et un second ventilateur est asservi en PWM (vitesse variable) pour refroidir la tête d'impression.

La sortie lit chauffant est très sous dimensionnée. Le Mosfet de puissance n'étant pas refroidi cela ne coupera que quelques ampères. De plus l'alimentation en 19V se révèle ici problématique puisqu'il est impossible de trouver une résistance chauffante adaptée à ces tensions. Je pense que c'est d'ailleurs pour cela que l'UM1 n'a jamais non plus eu officiellement de bed chauffant. De toute façon l'extrudeur livré avec est bien trop fragile pour pousser de l'ABS...

Le chauffage de la tête se fait en 19V, probablement à l'aide d'une cartouche chauffante en 18V...

Le cas particulier de la mienne après les modifications subies

Sur mon UM1+, plusieurs modifications ont été faites et ont un impact sur l'électronique :

  • Un lit chauffant a été ajouté. Il est en 24V et dispose de sa propre alimentation. Pour le rendre indépendant du bien trop petit Mosfet de la carte mère, Il est allumé par un relais statique, lui même commandé par la sortie bed de la carte. Ainsi le mosfet ne prend que quelques milliwats pour commander le relais statique. Il ne risque pas de chuffer... Le relais statique prenant toute tension de commande entre 3 et 32 V, il n'y a pas de soucis pour être commandé en 19V. La sortie peut commuter jusqu'à 30 ampères sans souffrir, c'est bien suffisant pour les 240W du lit chauffant.
  • Une alimentation 24V/10 ampères (240W) a été ajoutée dans le pied de l'imprimante pour alimenter le lit chauffant.
  • Le switch de fin de course Z- a été remplacé par un capteur inductif. Lorsqu'il est approché d'une masse métallique (acier, alu, etc..) ce capteur fournit une tension égale à la tension d'alimentation. Mon lit chauffant étant en aluminium, ceci permet de faire une détection sans contact et fiable. Afin de disposer d'une bonne immunité au bruit, le capteur est alimenté en 12V. Un pont diviseur résistif adapte ensuite la tension de sortie pour qu'elle soit en 5V, et donc compatible avec les entrées de l’Arduino. Ce capteur est également utiliser pour faire le nivellement du lit chauffant pas logiciel.
  • Les autres switches n'ont pas étés modifiés.
  • Une sortie inutilisée en 19V a été dirigée vers un régulateur externe 12V pour alimenter le capteur inductif.
  • Les bandeaux de led 12V sont mis en série pour les alimenter en 24V à partir de l'alimentation du lit chauffant.

Tour de la carte SKR V1.3

J'ai donc commandé la carte chez Banggood, sans les drivers ( https://www.banggood.com/BIGTREETECH-SKR-V1_3-Control-Board-32-Bit-ARM-CPU-32bit-Mainboard-Smoothieboard-For-3D-Printer-Parts-Reprap-p-1476462.html. Elle est arrivée au bout d'une quinzaine de jours. Les drivers TMC2130 V3.0 ont quand a eux étés commandés chez Amazon, Banggood n'ayant pas cette référence en stock destinée à être montée sur les SKR 1.3 : https://www.amazon.fr/KINGPRINT-StepStick-silencieux-radiateur-dimprimante/dp/B07RN7QP7V

Vue générale et branchements :

skr1.3.jpg

La carte SKR V1;3 dispose d'une connectique très complète, permettant de l'adapter à presque n'importe quelle imprimante 3D disposant d'un maximum de 2 têtes d'impression. Le processeur LPC1768FBD100 à 100Mhz, dispose 64Ko de ram (dont 32K de Sram haute vitesse) et 512K de Flash. Il dispose également de 3 liaisons série, 3 liaisons I2C, 2 liaisons SPI, du CAN, de l'I2S (pour l'audio), de l'USB, d'un ADC 12 Bits à 8 canaux, d'un DAC, d'une horloge temps réel, sur près de 70 broches d'entrées sorties. On pourrait regretter qu'il n'aient pas choisi de mettre le LPC1769, qui est 20% plus rapide et dont le brochage est 100 % compatible. La petite taille de la carte est presque un exploit, car au vu du nombre de cavaliers de configuration qui jalonnent la carte, les places disponibles pour passer les pistes lors du routage n'ont pas du être légion. Elle est néanmoins routée en 4 couches, et d'une belle fabrication.

Détails des connecteurs et de leurs brochages : connexions.jpg

Alimentations

  • La SKR s'alimente avec n'importe quelle tension comprise entre 12 et 24V.
  • La présence d'une tension d'alimentation peut être vérifiée par une led rouge (banchée sur le 3.3V)
  • Un régulateur à découpage permet de fabriquer du 5V sur la carte, avec un très bon rendement et donc sans chauffer
  • A partir du 5V, un autre régulateur, mais linéaire cette fois, fabrique du 3.3V pour alimenter le microprocesseur. Une led rouge permet d'en visualiser le bon fonctionnement.
  • Lors de l'installation, un cavalier permet de fournir le 5V à partir de l'USB. Très pratique en phase de test, il devra néanmoins - en fonctionnement normal - être remis sur la position "INT". Lorsque le cavalier est en position "USB" et si pas d'alimentation générale branchée, bien sur les moteurs ne fonctionneront pas; Seule la partie microprocesseur et affichage sera fonctionnelle.
  • Un premier fusible (F1) de 20A protège l'alimentation du lit chauffant.
  • Un second fusible (F2) de 10 A protège le reste de l'électronique, y compris les têtes chauffantes. Tout comme F1, c'est un micro fusible de type voiture, qui sera donc facile à trouver et à remplacer.
  • Un 3e fusible (F3) protège l'alimentation 5V pour la limiter à 1.1A. Il n'y a ainsi pas de risque de cramer le port USB du PC...

Drivers moteurs

  • Les 5 drivers moteurs (X/Y/Z/E0/E1) sont équipables avec tous les pilotes Step/dir classiques (A4988/DRV8825, etc..), mais aussi der dernières générations de drivers en 256e de pas comme les Trinamic TMC 2100 dès lors qu'ils sont comptables avec le brochage standard Pollolu.
  • Il est également possible de reconfigurer les supports pour fournir un SPI à la place des entrées MS0/MS1/MS2, les rendant compatibles avec les drivers Trinamic TMC2130. Le SPI est commun à tous les moteurs, et un signal de sélection séparé permet d'adresser les TMC uns à uns. 4 cavaliers sous chaque drivers moteurs sont prévus à cet effet. Ils sont livrés en position pour une utilisation avec des Trinamic 2130. Il faudra donc les reconfigurer pour utiliser des drivers en Step/dir.
  • La carte peut également tirer partie des 2 broches supplémentaires DIAG0 et DIAG1 des drivers Trinamic (si équipées)
  • 5 liaisons séries séparées, permettent d'utiliser les Trinamic TMC2208) qui permettent d'en tirer tout le bénéfice.
  • Les sorties step/dir sont disponibles sur connecteur séparés, ce qui permet même de mettre des drivers externes (ex : pour faire une CNC, une très grande imprimante 3D ou pour utiliser des systèmes de contrôle en boucle fermée). J'aime assez cette possibilité, car on n'est pas limité aux seuls drivers implantables dans les supports pollolu.

Entrées digitales pour les fin de course

  • La SKR 1.3 possède 6 entrées fin de course sur des connecteurs standards 3 broches au pas de 2.54mm.
  • Elles sont compatibles avec les fins de courses actifs ou passifs.
  • Une masse et l'entrée signal permettent de mettre un fin de course passif (switch), le 3e signal fournissant un 5V permettant d'alimenter un fin de course actif.
  • Un switch passif n'utilisera donc que 2 broches (gnd et signal), et l'actif les 3 broches. IL faudra faire attention lors du brachement à vérifier que les signaux arrivent aux bons endroits, car les connecteurs des fins de course actifs ne sont pas normalisés.
  • Les entrées sont munies d'un antirebond matériel (R/C), et sont compatibles 3.3V/5V, et sont équipées d'une résistance de tirage au 5V (pullup) de 10K. En effet, le LPC1068 ne permet pas d'activer une résistance par logiciel contrairement à l'Arduino Mega.
  • Un jeu de cavaliers, permet de récupérer les signaux fins de course non pas des entrées physiques, mais des sorties des drivers moteurs si ceux ci sont des Trinamic 2130 pilotés en SPI. En effet, une fonction de détection de couple permet de générer des pseudos signaux fins de course à partir de changement significatifs et rapide sur le couple moteur. L'arrivée sur une butée mécanique va faire 'forcer' le moteur, ce qui va entrainer un accroissement du couple et l'activation des fins de courses.
  • Bien que livrés pré équipés, dans le cas ou l'on utilise les fins de courses physiques au lieu de la fonction fournie par les drivers pas à pas, tous les cavaliers du bloc XST/YST/ZST, etc.. doivent êtres enlevés.

Entrées analogiques pour mesures de température

  • 3 entrées sont disponibles, une pour le lit chauffant et 2 pour les têtes.
  • Chaque entrée est munie d'une résistance de tirage au +5V de 4.7K, ce qui est nécessaire pour brancher une thermistance EPCOS 100K, mais nous verrons que cela ne sera pas compatible avec le thermocouple de la tête de l'Ultimaker.

Sorties de puissance :

  • Une sortie fixe 12 à 24V (idem tension d'alimentation) permet de brancher le ventilateur de refroidissement de l'électronique
  • Il y a de plus 4 sorties commutées par transistor MOS de puissance (MOSFET)
  • Chaque sortie est munie d'une led sur la carte, permettant d'en visualiser l'état.
  • Un MOSFET de puissance (20A) permet de piloter le lit chauffant
  • 3 MOSFET de 10A permettent de commander 2 têtes chauffantes et un ventilateur.
  • Ces 4 sorties sont sur la même tension d'alimentation que le reste de la carte. Si la carte est alimentée en 24V, elles seront en 24V. Il faudra donc y penser en adaptant les cartouches chauffantes des têtes au 24V, ou la tension de service du ventilateur piloté... sinon, cela rique fort de leur être fatal.

Affichage LCD :

  • Les 2 connecteurs classiques EXP1/EXP2 pour mettre un afficheur LCD texte (RepRapDiscount Smart Controller) ou graphique monochrome 128X64 pixels (RepRapDiscount FULL GRAPHIC Smart Controller) sont présents,
  • Un autre connecteur (AUX1) permet de brancher des afficheurs intelligents couleurs de type TFT35.
  • Un autre connecteur met à disposition une liaison série pour brancher un afficheur TFT

Carte SD:

  • Une carte SD est équipée sur la carte mère. Ici elle ne sera utilisée que pour stocker les mises à jour de firmware. L'impression par carte SD utilise aune autre carte, située sur l'afficheur.

USB:

La prise USB va contrairement à une électronique basée sur une Arduino Mega avoir 2 fonctions:

  • La première pour l'impression, tout comme sur Arduino.
  • La seconde est que la carte SD présente sur la SKR 1.3 va être visible comme un disque sur l'ordinateur. Il suffira d'y glisser un nouveau firmware (*.bin) et de redémarrer pour qu'il soit pris en compte. Pratique!

Divers

  • Une sortie servomoteur sur 3 broches permet de piloter un capteur de Z escamotable.
  • Il y a aussi un bouton de reset.

Adaptations requises pour mon Ultimaker modifiée

  • La réutilisation de l’alimentation de 19V de l'Ultimaker ne devrait pas poser de problème, la carte fonctionnant avec toute tensions comprise entre 12 et 24V.
  • Les 5 capteurs de fins de course pourront être branchés directement sur les entrées éponymes de la carte entre le signal et la masse (les 2 broches du bas, telles que la carte est orientée sur le synoptique ci dessous). Ça rentre un peu au chausse pied, mais ça rentre :)..
  • Pas de soucis pour les moteurs qui se branchent directement
  • Idem pour les chauffages de l'extrudeur et du lit chauffant.
  • Idem pour la thermistance du lit chauffant.

Les transformations devront avoir lieu sur :

  • Le capteur de température de la tête pour l'adaptation de niveau 5V et le support d'un thermocouple
  • L"entrée Z- pour le support d'un pilotage en tension et d'une tension de 12V en entrée.

Voici le détail des modifications

  • Désoudage et dépose de R18 (4K7), qui tire au 3.3V l'entrée température du 1er extrudeur. Elle n'est pas compatible avec la pose d'un thermocouple.
  • Désoudage et dépose de R11 (10K), qui sert de résistance de tirage au 3.3V de l'entrée Z-. Elle ne sera pas compatible avec la sortie du capteur inductif.
  • Création d'un pont diviseur (voir https://fr.wikipedia.org/wiki/Diviseur_de_tension sur la sortie du capteur inductif avec R1=47K, R2=18K pour lui faire sortir du 3.3V au lieu de 12v.
  • Création d'un pont diviseur sur la sortie de la carte température du thermocouple, pour l'adapter de 5V à 3V3, avec R1=2.2K et R2=4.7K.
  • A noter que la carte thermocouple devra restée alimentée en 5V. Un 5V pourra être prélevé sur le connecteur AUX, broche 1 ou 2.

Récupération de Marlin 2.0.x

Bien que la carte soit livrée avec un mode d'emploi qui conduit à un projet Github avec une version de Marlin bidouillée par BigtreeTech, je préfère largement utiliser la version officielle, qui est en plein développement et recevra au fur et à mesure toutes les améliorations. Je trouve assez déplorable qu'en matière de logiciel, les chinois sachent trouver Guthub, cloner des projets communautaires, pour ensuite les envoyer sous forme d'archive zip sur un autre projet qu'ils auront créé. <troll>Vu ce qu'ils récupèrent de l'occident, ils pourraient au moins se mettre dans une logique de contribution pour faire remonter un peu de ce qu'ils ont pompé</troll>. Ceci étant dit nous allons maintenant récupérer les sources.

  • Télécharger un client Git soit en mode texte / ligne de commande (https://git-scm.com/download/) soit en mode graphique (https://git-scm.com/downloads/guis) comme par exemple tortoiseguit.
  • En mode texte, lancer un "Git Shell", puis
cd Documents
mkdir Platformio
git clone progress branch bugfix-2.0.x -v "https://github.com/MarlinFirmware/Marlin.git"
  • Ou en mode graphique, lancer un explorateur, se placer dans "Mes documents", y créer un répertoire "Plaformio", faire bouton de droite sur ce dossier puis "Git Clone". Renseigner la boite de dialogue qui s'ouvre comme suit, et notamment le champ "branche" qui va permettre d'aller chercher la 2.0.x:

2019-07-27 08_43_17-GitHub - MarlinFirmware_Marlin at bugfix-2.0.x.png

  • A l'issue du clonage, un nouveau répertoire dans "Mes Documents" apparait, nommé Marlin. Il contient la branche 2.0.x du logiciel, qui est celle dont nous avons besoin pour compilier sur ARM.

Installation de l'environnement de développement

Pour compiler Marlin 2.x, il va nous falloir installer Visual Studio Code (IDE) et le plugin PlatformIO (compilateur).

  • Télécharger et installer Visual Studio Code de https://code.visualstudio.com/Download
  • Ouvrir VisualStudio Code, cliquer sur extensions (1), Recherche PlatformIO (2) et cliquer sur Installer (3)

platfomio.png

  • Une fois Platformio installé, cliquer sur "recharger".
  • Après rechargement, Plaformio installera "PlatformioCore" (compilateur, etc..)
  • Une fois l'installation effectuée, Plarformio demandera à nouveau le rechargement de l'IDE. L'accepter.
  • Ouvrir le projet précédemment téléchargé en procédant comme suit :

pio-open.png

  • Le projet chargé,il va nous falloir préciser que nous voulons compiler pour un processeur LPC1768. Pour ce faire ouvrir le fichier platformio.ini et modifier la ligne :
env_default  = megaatmega2560

en

default_envs= LPC1768
  • Marlin est livré avec dans le platformio.ini une description de l'environnement spécifique nécessaire à la compilation. Celui ci sera téléchargé de https://github.com/p3p/pio-framework-arduino-lpc176x lors de la 1ere compilation.
  • Ouvir ensuite les fichiers du sous répertoire Marlin "Configuration.h" et "Configuration_adv.h" que nous allons personnaliser dans le chapitre suivant.

Configuration de Marlin 2.0.x

Dans Configuration.h:

Personnalisation :

#define STRING_CONFIG_H_AUTHOR "JPC" // Who made the changes.
#define CUSTOM_MACHINE_NAME "[UM1+JP]"

Configuration des ports séries

#define SERIAL_PORT -1
#define SERIAL_PORT_2 0
#define BAUDRATE 250000

Configuration de la référence de la carte :

#define MOTHERBOARD BOARD_BIGTREE_SKR_V1_3

Adaptation à la machine : L'extrudeur :

#define EXTRUDERS 1
#define DEFAULT_NOMINAL_FILAMENT_DIA 2.85

Les capteurs de température

#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_BED 1

Pas d'attente sur 'chauffage du bed prêt'

#define TEMP_BED_RESIDENCY_TIME 0   // (seconds) Time to wait for bed to "settle" in M190

Pas de pullups, car cablés sur carte mère et endstop inversés:

//#define ENDSTOPPULLUPS
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define  true // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING true // Set to true to invert the logic of the probe.

Drivers moteurs en TMC2130:

#define X_DRIVER_TYPE  TMC2130
#define Y_DRIVER_TYPE  TMC2130
#define Z_DRIVER_TYPE  TMC2130
#define E0_DRIVER_TYPE TMC2130

Réglages moteur pour la Joy3D:

#define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402,78.7402,200*16/3,730}  // Pout Joy avec extruder MK5
#define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 43}    // (mm/sec)
// X, Y, Z, E maximum start speed for accelerated moves. 
// E default values are good for Skeinforge 40+, for older versions raise them a lot.
#define DEFAULT_MAX_ACCELERATION      {9000,9000,100,10000}    
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true

Le Z- est un détecteur de proximité inductif :

#define FIX_MOUNTED_PROBE

Il est positionné dans l'un des trous de la platine extrudeur.

#define X_PROBE_OFFSET_FROM_EXTRUDER 0  // X offset: -left  +right  [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 20  // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.5   // Z offset: -below +above  [the nozzle]

On capte prêt du bord, car le lit a un grand rebord:

#define MIN_PROBE_EDGE 0

Et on y va vite, car le temps..

#define XY_PROBE_SPEED 16000

Ce capteur sert aussi à palper en 4 points pour mesurer la planéité du bed :

#define AUTO_BED_LEVELING_LINEAR
#define LEFT_PROBE_BED_POSITION 10
#define RIGHT_PROBE_BED_POSITION 200
#define FRONT_PROBE_BED_POSITION 21
#define BACK_PROBE_BED_POSITION 200

On active la commande pour surveiller la mémoire libre:

#define M100_FREE_MEMORY_WATCHER    // Add M100 (Free Memory Watcher) to debug memory usage

Constantes de préchauffage :

#define PREHEAT_1_LABEL       "PLA"
#define PREHEAT_1_TEMP_HOTEND 215
#define PREHEAT_1_TEMP_BED     70
#define PREHEAT_1_FAN_SPEED   255 //Value from 0 to 255
#define PREHEAT_2_LABEL       "ABS"
#define PREHEAT_2_TEMP_HOTEND 230
#define PREHEAT_2_TEMP_BED    110
#define PREHEAT_2_FAN_SPEED   255  // Value from 0 to 255

Réglages sur le bed :

#define X_BED_SIZE 205
#define Y_BED_SIZE 205

On active les réglages en eprom:

#define EEPROM_SETTINGS     // Persistent storage with M500 and M501

On active le support de la carte SD

#define SDSUPPORT

Affichage sur lcd graphique et en français:

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define LCD_LANGUAGE fr

On active les menus pour faire un homing individuel des axes:

#define INDIVIDUAL_AXIS_HOMING_MENU

Et dans le Configuration_adv.h:

Le Bed ayant une certaine inertie thermique, on est plus lache sur la sécurité:

 #define THERMAL_PROTECTION_BED_PERIOD 40    // Seconds
 #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
 #define WATCH_BED_TEMP_PERIOD 120                // Seconds
 #define WATCH_BED_TEMP_INCREASE 2               // Degrees Celsius

Très important pour le bon fonctionnement des TMC sur cette carte :

 #define TMC_USE_SW_SPI

Les moteurs sont alimentés en 19V

#define CHOPPER_TIMING CHOPPER_DEFAULT_19V

Ajouter les commandes Mcode supplémentaires pour les Trinamic:

  • M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given.
  • M911 - Report stepper driver overtemperature pre-warn condition.
  • M912 - Clear stepper driver overtemperature pre-warn condition flag.
  • M122 - Report driver parameters (Requires TMC_DEBUG)
#define MONITOR_DRIVER_STATUS
#define TMC_DEBUG
#define MONITOR_DRIVER_STATUS

Tests

Je n'ai pas relaté dans cet article les mises au point requises sur cette nouvelle configuration. La partie la plus touchy a été sans aucun doute l'adaptation de la sonde de température de la tête. Pour ceux qui n'ont pas de thermocouple, cette partie sera sans objet. J'ai découvers au passage une "nouvelle" fonction de Marlin concernant une sécurité sur la température. SI lors de la chauffe de l'un des éléments, alors que le chauffage est confinuellement allumé, la température ne s'éleve pas de x devrés (THERMALPROTECTIONHYSTERESIS / THERMALPROTECTIONBEDHYSTERESIS) durant une période d'observation donnée (THERMALPROTECTIONPERIOD, THERMALPROTECTIONBEDPERIOD), c'est que quelque chose se passe mal avec le chauffage considéré. Du coup, couppage de tous les chauffages, mise en l'imprimante en erreur avec émission d'un bip continu. Je dois dire que si cette fonction avait été présente à l'origine, cela m'aurait probablement évité la destruction de quelques têtes sur diverses imprimantes 3D.

J'ai testé avec divers afficheurs de Reprapdiscout, sans soucis (4 lignes de 20 caractères et le 128X64 graphique). Les 2 fonctionnent (mais il faut retourner les nappes pour que cela fonctionne).

2019-07-22 20-30-09-4.JPG 2019-07-22 20-30-09-3.JPG

Ensuite, il a fallu apdater les sens des moteurs (INVERTXDIR , INVERTYDIR , INVERTZDIR), de la détection des fins de courses (XMINENDSTOPINVERTING, etc..) et surtout comprendre que la comunication SPI n'aurait pas lieu avec les TMC2130 tant que dans Configurationadv.h "TMCUSESW_SPI" ne serait pas à 1. En effet le SPI matériel étant occupé à autre chose, c'est un SPI émulé par logiciel qui est utilisé sur la SKR 1.3.. Tans que cela n'est pas réglé, l'afficheyr indique un "TMC Communication Error", qui n'est pas des plus engageants.

Une fois la communication fonctionnelle, on a la joie de découvrir de nouveaux menus permettant de régler les TMC:

2019-07-22 20-30-09-2.JPG 2019-07-22 20-30-09-1.JPG

Pour le reste, quel silence! Le bruit généré par les moteurs est infiniment moins important avec les TMC2130. Il y a dans Marlin encore de quoi jouer avec les réglages avancés des moteurs, mais je dois dire que je n'ai pas creusé la question, mais cela mériterait. Il reste néanmoins nécessaire de mettre un ventilateur fixe pour refroidir les drivers. A cet effet, j'ai fait une petite plaque qui vient coiffer la carte.

Coté chaine de production logicielle, rien à déplorer. Ca marche exactement comme avec Marlin 1. J'ai testé Cura et Repetier sans soucis.

Conclusion

Cette transformation est réellement un succès. Cette carte et les drivers TMC2130 apportent un réel plus aux imprimantes, surtout si on pousse la logique jusqu'à passer la machine en 24V. Bien sur cela sous entend de changer les chauffages (tête et lit chauffant), mais cela en vaut la peine. Courants moins importants sur ces éléments et ponc pertes en ligne moins importantes, meilleur comportement des moteurs (accérations et comportement en haute vitesse notamment). La passage sur drivers trinamic est lui aussi un plus, mais bien plus couteux. 4 drivers se trouvent à envuron 35 euros, qui s'ajoutent au 18 euros de la carte. Il n'est néanmoins pas obligatoire, la carte pouvant fort bien s'accomoder des A4988 ou DRV8869 récupérés sur l'ancienne solution de pilotage.

Le support natif de Marlin 2 est un gros plus, évitant de jouer avec des firmware bidouillé par nos amis les chinois.

Une version pro de cette carte apporte encore plus d'entrées sorties et une séparation des tensions d'alimentation du bed et du reste de la machine. Ces entrées sorteies supplémentaires auraient d'ailleurs peut être simplifé la mise en oeuvre de mes modifications, sans rien dessouder sur la carte. Elle supporte 6 moteurs dont un possiblement sur 2 connecteurs en même temps (pour les Prusa 3 et autes dérivés à 2 moteurs sur le Z) Elle n'a pas le même processeur (STM32M407ZGT6) qui est plus rapide (168Mhz). Elle supporte jusq'à 3 têtes (avec 1 sonde de température, un ventilateur asservi et un moteur pas à pas par tête), le Wifi, la carte SD, etc. Elle supporte nativement ls capteur BLTouch, et dispose de 2 connecteurs d'extensions avec 22 broches d'E/S supplémentaires. La fête quoi. Mais elle coute plus du double (44 euros), et toujours sans les drivers. Tout dépend donc de ce que l'on veut en faire...

Un très beau jouet donc, dont je ferai bien le test aprofondi, cette fois ci sur une CNC :)..