Installation Faulhaber

 

 


 

Ce document décrit l'integration d'un bus Can comprenant 3 ensembles Drive + Moteur Faulhaber sur un terminal Beckhoff type EL 6751pour la realisation de la motorisation M3.

 


 

La documentation de base pour l'integration est fourni par Faulhaber sous le nom AN149. Cette documentation ne permet pas de faire fonctionner le system, ainsi c'est ce document qui fait foi.

 


 

Hardware

 

Drives: MCBL3006 S CO, ces drives transforment les 3 signaux des sondes Hall de nos moteur en signal de position de 3'000 tics par tour de du moteur.

Moteur pour la translation Cassegrain Nasmith (nommé LIN) : 2057S024B-K1155 231 avec un réducteur 43:1. Un tour à la sortie du réducteur correspond à 1[mm] de déplacement vertical.

Moteur pour la rotation entre les foyers Nasmith (nommé ROT): 3564K024B-K1155 38A avec un réducteur 1600:1. Un tour à la sortie du réducteur correspond à 60[d] de rotation de la couronne.

Moteur pour l'anti backlash  de la rotation (nommé BLH): identique à ROT

 


 

Configuration des drives Faulhaber

 

Avant toutes chose il faut configurer les drives, ceux-ci doivent être nommé par un identificateur unique, un nombre entre 1 et 127, et définir le baudrate du bus dans chacun des drive.

Sans cette opération, il est impossible de faire une quelconque integration.

Pour la configuration, il faut créer un bus Can et utiliser l'utilitaire MotionManager 6 sous Windows (Windows 10 dans notre cas), nos drive sont de type MCBL (BL=BrushLess). Le bus est créé avec un interface connecté sur une entrée USB2 (USB3 ne fonctionne pas).  L'interface est le convertisseur USB-to-CAN V2 Compact de la marque Ixxat. Cet interface sort sur un subD9 sur lequel on connect le bus (définitif dans notre cas) avec les 3 connecteurs pour les drives.

Attention une resistance 120 ohm doit être insérée entre les bornes CAN_H et CAN_L du premier et dernier drive.

La documentation indique que l'on peut configurer les 3 drives en les branchant tous sur le bus, ou un par un. Attention a chaque fois installer les resistance de 120 ohm.

Operations:

1-Establish Connection Choisir Interface: CAN Sélectionner CAN1

Configuration du profile velocity

Il est impératif de programmer chaque driver avec le profile velocity mode (3) dans le Drive Functions ->(Drive configuration)->Basic Settings

Attention une fois programmé il peut être modifié involontairement lors de l'utilisation de "Operate Motor" en utilisant le mode Position (relative to actual position). Il faut tester absolument attentif à ce point, sinon le moteur ne fonctionnera pas sous Beckhoff.

Configuration des fins de course

Une fois le baudrate et les identificateurs configurés, il est possible de configurer les fins de course qui agissent directement sur le drive en empêchant  un mouvement dans le sens du déplacement qui correspond au dépassement de la fin de course.

Pour configurer, il faut répéter les action suivantes sur le 3 nodes

Node->Drive function->Input/Output and Homing

Sur ce panneau on choisi d'attribuer les entrees analogiques à la détection des fins de course:

  • Negative Limit Switch sur AnIn (Analogique Input)
  • Positive Limit Switch sur 3.In (3rd Input)
  • Limit switch positive edge pour ces 2 entrées
  • Décocher ce qui concerne le homing

 

Attention, on remarque qu'en cas de modification des checkbox, il faut d'bord annuler les choix, faire un SEND, puis sélectionner selon les choix et à nouveau SEND (il semble que le SEND est précédé d'un Read, donc annulation de la selection!)


Integration Beckhoff

 

La description des registres des Drives sont définis dans un fichier de configuration de type EDS. Ce type de fichier est fourni par Faulhaber avec Motion Manager 6. Il faut copier le fichier correspondant au drive dans le directory prévu à cet effet dans l'arborescence TwinCat.

Le fichier EDS est 605.3150.67-D.eds

Il est sous: C:Utilisateurs/DocumentsPublics/CANopenConfTool/EDS/

il est à copier sous:

C:TwinCAT/3.1/Config/Io/CANopen/

 

Instructions

 

Globalement suivre la documentation AN_149 en tenant compte des remarques suivantes:

Point 3: dans Axes->Axis_1 il est absolument primordial de ne pas oublier de sélectionner:

Axis Type = CANOpen DS402/Profile MDP 742

Point 5: Ce n'est pas une option: il faut charger le fichier EDS nommé C:TwinCAT/3.1/Config/Io/CANopen/605.3150.67-D.eds

Ce faisant, les noms corrects sont affichés dans les PDOs

Point 6: C'est à l'ensemble (8x) de TxPDO et RxPDO qu'il faut donner la valeur 10 à Trans.Type: . Selon Wim, le mettre à 1 peut générer des problèmes de communication.

Point 7: être attentif qu'il faut cocher les 2 cases "Used and unused" et "All Types".

Attention il est très facile de linker les mauvaises variables et aboutir à un état catastrophique. Ainsi prêter une attention très particulières lors de la création des liens. Il faut chaque fois s'assurer qu'on travaille sur le bon axe et bien choisir la partie Enc ou Drive. Par drive, il y a 1 lien Encodeur et 3 liens Drive.

Attention la partie graphique de la documentation comporte des erreur, c'est la partie droite qui est correcte.

 

Rappel: la dénomination des PDOs est donnée du point de vue du Drive. Ainsi Tx (transmit) sont les valeurs qui quittent la Box (status) et Rx (Receive) sont les valeurs qui viennent sur la Box (control)

Attention la documentation ne spécifie pas qu'il faut linker tout les Controlword sur une même variable, également elle n'indique pas que Target velocity doit être linké. A remarquer que la version Mercator n'a qu'un seul Controlword dans RxPDO1, ainsi il n'ont pas ce problème. Nous allons peut-être suivre cet exemple qui malgré tout demande une nouvelle configuration des PDOs...

En résumé il faut faire les liens suivants, pour le status:

Attention le deuxième byte de Statusword ou Controlword doit toujours être configuré avec Own Variable offset=8 (voir screenshoot AN_149 Faulhaber)

TxPDO2->Statusword sur  Axis->Drive->In->nState1 + nState2
TxPDO2->Position actual value sur  Axis->Enc->In->nDataIn1

Pour le contrôle:

RxPDO1->Controlword sur  Axis->Drive->Out->nCtrl1 + nCtrl2
RxPDO2->Controlword sur  Axis->Drive->Out->nCtrl1 + nCtrl2
RxPDO3->Controlword sur  Axis->Drive->Out->nCtrl1 + nCtrl2
RxPDO4->Controlword sur  Axis->Drive->Out->nCtrl1 + nCtrl2

RxPDO2->Target position sur  Axis->Drive->Out->nDataOut1
RxPDO2->Target velocity sur  Axis->Drive->Out->nDataOut2

 

A ce moment, les Box sont configurées avec leur propre encodeur. Celui interne au moteur basé sur des sondes Hall.

 

Point 10: Absolument le respecter sinon il y a des erreurs de communication certainement du à un timing trop serré (TBC).

Ainsi lors de la phase de développement il est intéressant de faire fonctionner le moteur avec son encodeur avant d'aller plus loin et intégrer les codeurs externe.

Ainsi la configuration POUR L'ENCODEUR INTERNE est celui ci:

Pour le mouvement de translation (LIN):

MOTION->..Axis->Enc->Parameter->Scaling Factor Numerator   := 1
MOTION->..Axis->Enc->Parameter->Scaling Factor Denominator := 129'000 (43*3'000)



Programmation du Startup des Drives

Les drives se configurent selon les valeurs par défaut données dans le fichier EDS. Certaines de ces valeurs doivent être modifiées pour coller à notre projet:

Ce sont:

RegistreIndexTailleValeurDescription
0x1016 1 4 0 Consumer Heart Time (spec Faulhaber)
0x1017 0 2 0 Producer Heartbeat Time (spec Faulhaber)
0x101C 0 2 100 Guard time (spec Faulhaber)
0x100D 0 1 3 Life Time factor (spec Faulhaber)
0x2333 1 2 1000 Continuous Current Limit (Euler, voir ci-dessous)
0x2333 2 2 1000 Peak Current Limit (Euler)
0x6060 0 1 3 Modes Of Operation (3:= Profile Velocity Mode)

Ces valeurs se définissent dans l'onglet SDOs de chaque BOX (lin, rot, abl)

I/O->Devices->Cia->Box 1(MCBL)->SDOs

Avec le bouton Append... Normalement depuis l'onglet Online, il devrait être possible de sélectionner le register et cliquer sur Add to startup... mais cela ne fonctionne pas toujours...

En cas d'erreur dans l'introduction de ces valeurs, la BOX n'est pas Ready et la valeur

I/O->Devices->Cia->Box 1(MCBL)->inputs->NodeState 

vaut 4 (SDO syntax error at startup)

Limitation du courant:

Les moteurs sont capable de tirer un courant important lors du démarrage (plusieurs Amperes) et faire tomber l'alimentation. Il est impératif de donner un courant maximum. Dans notre cas 1000mA, car la consommation semble être de 100mA en déplacement normal.


Paramètres de contrôle

 

 

Velocity Control Parameters Set

RegistreIndexTaille

Valeur

1600:1

(ROT-ABL)

Valeur

43:1

(LIN)

Description
0x2331 1 8 3 Proportional Term POR
0x2331 2 32 37 Integral Term I

Position Control Parameter Set

RegistreIndexTaille

Valeur

1600:1

(ROT-ABL)

Valeur

43:1

(LIN)

Description
0x2332 1 20 5 Proportional Term PP
0x2332 2 4 2 Derivative Term PD

 


 

 

A ce stade il est possible de contrôler le moteur avec

 

 

MOTION->NC-Task 1SVB->Axis->Online 


Integration du Codeur Heidenhain pour l'axe LIN

 

Lorsque le système fonctionne avec le moteur et son encodeur de manière autonome, il est le moment de changer d'encodeur et attribuer le codeur incremental de la règle Heidenhain à l'axe LIN en remplacement de l'encodeur interne au moteur.

Attention dans changer Invert Encoder counting direction à TRUE pour l'utilisation avec la règle.

 



 

Remarque concernant une configuration manuelle des Box

 

Dans le cas où l'on travaille avec un seul Axe et une seule Box. Il est simple de dupliquer ces elements afin de rajouter un Axe et sa Box associée.

Un simple Copy-Paste duplifie ces éléments. La Box CANopen doit être renommée et il faut lui attribuer son vrai identificateur (son No) dans l'onglet CAN Node sous Node Id:

Les éléments copiés ont perdu leur liens, ce qui est voulu car il auraient pointé sur l'ancien élément. Les liens sont tous à refaire.

Donc selon la doc ci-dessus refaire les liens. Attention avant de faire les liens, il me semble faut qu'il refaire le point 3, meme si CANopen DS402 est sélectionné. Sinon le Link to I/O Dans Axe->Settings n'est pas fait après la configuration des liens (TBC).

Ainsi lors de la phase de développement il est intéressant de faire fonctionner le moteur avec son encodeur avant d'aller plus loin et intégrer les codeurs externe.

Ainsi la configuration POUR L'ENCODEUR INTERNE est celui ci:

Pour le mouvement de translation (ROT):

Motion->..Axis->Enc->Parameter->Scaling Factor Numerator   := 360
MOTION->..Axis->Enc->Parameter->Scaling Factor Denominator := 4'800'000 (1600*3'000)