Table des matières

Silent Step Stick (TMC2100)

Le Silent Step Stick est un pilote de moteur basé sur un Trinamic TMC 2100 ou Trinamic TMC 2130. Il est compatible avec un StepStick ou le Pololu A4988. Il permet de contrôler un moteur pas à pas très finement (microstepping) et le rendre complètement silencieux, ce qui n'est pas le cas des pilotes de moteur classiques comme le L298.

Voir un exemple de réalisation avec ce driver : Al-Zohra n'est pas née en un jour.

Caractéristiques

Documents techniques (datasheet)

Configuration

La configuration qui fonctionne bien :

Explications

Arduino

Le choix de l'Arduino et du moteur pas à pas ne pose pas de problème.

Shield

La Fabscan shield permet juste de brancher facilement le pilote (driver), comme pourrait le faire une autre shield bien connue, la RAMPS. Ses cartes s'interfacent facilement avec des petits drivers comme les Polulu ou StepStick, ce qui permet d'en mettre 3 ou 4 dans un petit espace, très utile pour les imprimantes 3D.

SilentStepStick

Le driver fabriqué par Watterott semble être un très bon choix pour rendre silencieuse son installation avec des moteurs pas à pas. En règle générale, ces moteurs font toujours du bruit, et celui-ci est amplifié par résonance sur le support auquel il est fixé. En augmentant la vitesse du moteur il est possible de diminuer très fortement le bruit mais en contrepartie la position du moteur n'est généralement plus précise.

Documentation du driver : https://github.com/watterott/SilentStepStick et http://reprap.org/wiki/TMC2100

Sens du driver

Attention, le driver est dans le sens inverse de ce que l'on voit habituellement. D'habitude, la puce noire est située au dessus, ici c'est en dessous. Remarquez le “TOP” sur la carte, qui indique la face qui doit être visible au dessus.

Problème de l'alimentation

Attention aussi lors de l'allumage ou de l'extinction du courant, le TMC2100 est très sensible.

Il y a un ordre pour allumer ou éteindre le driver, l'Arduino et l'alimentation du moteur. Quand on allume, il faut d'abord allumer l'alimentation puis l'Arduino, quand on éteint c'est l'inverse, d'abord l'Arduino, ensuite l'alimentation du moteur.

Allumage. Pour résoudre le problème de l'allumage, il faut choisir la version 5V du driver et non celle en 3.3V. Elle est disponible depuis juillet ou août 2016. En effet elle n'oblige pas à allumer l'alimentation du moteur (the motor supply voltage ou VM) avant l'Arduino (VIO 5V).

Extinction. Si le moteur est en mouvement, il n'est pas permis d'éteindre l'alimentation du moteur. Pour résoudre ce problème, il est conseillé d'ajouter un petit circuit de protection composé de diodes (flyback diodes, freewheeling diodes) qui protègent le driver des courants induits générés par le moteur quand il n'est plus allumé.

Refroidisseur

Il est conseillé d'utiliser un refroidisseur pour tout courant supérieur ou égal à 1A. Pour préserver le matériel, c'est une bonne pratique d'en mettre dans toutes les situations, la température de la puce est vite évacuée par le métal, puis refroidie par la surface métallique en contact avec l'air. Plus cette surface est grande, plus la dissipation thermique est efficace.

Ici le refroidisseur est collé sur la face du dessus du driver, à l'emplacement des petits trous qui sont juste au dessus de la puce TCM2100.

Alimentation

L'équipe de Watterott nous a conseillé une alimentation pour le moteur comprise entre 18 et 30V. Celui que nous avons choisi est plutôt puissant pour un NEMA17 (1.6A / phase). Cela permet une meilleure utilisation du StealthChop Mode, c'est-à-dire du mode silencieux.

Ici, nous avons utilisé une alimentation de 24V mais qui permet de moduler entre 20 et 28V, grâce à un potentiomètre.

Branchements

Déconnecter Vin

Il faut plier la patte de la shield Fabscan correspondante à l'alimentation de la carte Arduino (Vin) car nous avons choisi une alimentation au dessus de 12V et que l'on risque de griller la carte.

Configurer le mode silencieux

Pour activer le mode silencieux (1/16 stealthChop mode), il faut déconnecter (open) les trois pattes qui permettent de configurer les modes : CFG1, CFG2 et CFG3.

Réglages du courant

Avant de brancher le moteur, il faut encore réaliser une dernière opération : le réglage du courant. Le courant maximum du driver est de 1,77A, mais il est conseillé (source Watterott et Trinamic) de ne pas aller au delà de 1.2A RMS, même si votre moteur demande 1,6A/phase comme le nôtre. De plus, ce réglage permet de réduire le courant si nous n'avons pas besoin de la force (torque) totale du moteur et donc de préserver au mieux le matériel.

Pour régler ce courant, il faut mesurer la tension entre Vref et GND. La tension est comprise entre 0 et 2.5V. Vref est accessible sur le dessus de la carte, en bas à droite, à côté du trou EN (enable).

Nous pouvons la régler à l'aide du petit potentiomètre accessible sur le dessus de la carte avec un mini tournevis plat. Pour cela, il faut placer le driver sur la shield pour le connecter à l'Arduino et alimenter l'Arduino. Il ne faut pas brancher le moteur ni l'alimentation du moteur.

La tension nous donne approximativement le courant max (IMax peak current), pour avoir le courant moyen (Irms continuous current), il faut faire un petit calcul :

Vref = IMax 
Irms = IMax/1.41
Si on veut 1.2 A (Irms), il nous faut 1.2 * 1.41, soit 1.692V.

Pour information, dans notre exemple, nous avons réglé Vref à 0.9V. Nous avons ajuster cette tension par rapport à la force nécessaire pour notre projet.

Code Arduino

// Test du SilentStepStick 5V de Watterott
// Faire simplement avancer le moteur dans un sens
 
// Branchements 
// Sur la FabScan Shield, le premier emplacement correspond à ces pins
//       Emplacements   1 | 2 | 3  | 4
//                     ----------------
#define EN_PIN   2  //  2 | 5 | 11 | A0
#define STEP_PIN 3  //  3 | 6 | 12 | A1
#define DIR_PIN  4  //  4 | 7 | 13 | A2
 
// HIGH for 16 microstepping, LOW for no microstepping
#define MS_PIN   A5 
 
// Configurations de base
void setup()
{
  pinMode(EN_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
 
  digitalWrite(EN_PIN, HIGH); // Désactiver le moteur
  digitalWrite(DIR_PIN, LOW); // Sens de rotation
  digitalWrite(STEP_PIN, LOW); 
 
  //Si nous ne voulons pas de microstepping, décommentez ces lignes
  //pinMode(MS_PIN, OUTPUT);
  //digitalWrite(MS_PIN, LOW); 
 
  delay(1000);
  digitalWrite(EN_PIN, LOW); // Activer le moteur
}
 
// Programme qui fait avancer le moteur
void loop()
{
  digitalWrite(STEP_PIN, LOW);
  delay(2);
  digitalWrite(STEP_PIN, HIGH);
  delay(2);
}