Club robotique de Sophia-Antipolis

Accueil > Projets, études > Nos robots > Le droïde R2-D2 > Programmation du robot R2-D2 > Benchmark du dSpin pour R2-D2

Benchmark du dSpin pour R2-D2

dimanche 19 août 2012, par Julien H.

Nous allons utiliser des drivers dSPIN avec la puce L6470 de ST Microelectronics. Ils ont été présentés par Éric dans cet article.

Moteur de R2-D2 avec le dSPIN

Plutôt gros le moteur, non ? C’est un Step-Syn 03-820-26 de SANYO qui fait 85 mm de diamètre.

Cet article décrit comment adapter les paramètres électriques aux caractéristiques des moteurs, et ensuite à régler les paramètres d’accélération et de vitesse à la structure mécanique de R2-D2, notamment les effets de son poids et de son centre de gravité.

La lecture du chapitre 7 de la documentation technique du L6470 est primordial pour comprendre la gestion du courant. Les bobines des moteurs pas-à-pas reçoivent une tension sinusoïdale. La valeur du courant dépend donc de la tension libérée par la puce, de la vitesse de rotation, des couples de maintien, etc...

Des paramètres que nous ne gérons jamais d’habitude, et qui pourtant sont la cause de nombreuses critiques contre les moteurs pas-à-pas, vont pouvoir être traités par le dSPIN.

On va en citer deux qui sont importants pour R2-D2 :
 le fonctionnement à vitesse réduite
 la compensation lorsque la tension d’alimentation baisse
 la compensation lorsque la température augmente

Ce dernier point est intéressant : lorsque la température augmente, la résistance des bobines augmente et le courant baisse (U = R * I vous vous souvenez ?). Donc il faut augmenter la tension pour obtenir le même courant.

Mais nous étudierons tout cela plus tard. Pour l’instant, ce sont les coefficients qui gèrent directement la tension (donc le courant) qui nous intéressent.

Réglage du PWM

En utilisant le logiciel fournit par ST pour paramétrer le module dSPIN, on découvre quels paramètres contrôlent la tension et le courant. Avant d’aller plus loin, lisez l’article dédié à la recherche des paramètres.

Configuration électrique

On notera surtout les valeurs KVAL qui désignent quatre paramètres réglant le PWM sur la tension source (pour R2-D2, 12 volts) à chaque phase d’un mouvement :

 KVAL_HOLD pour le maintien du couple à l’arrêt
 KVAL_RUN pour le régime normal
 KVAL_ACC et KVAL_DEC pour les accélérations et décélérations

La partie "BEMF" (back electromotive force value) qui modifie les pentes d’interpolation au-delà d’une certaine vitesse sera étudiée plus tard.

Enfin, d’autres paramètres permettent de gérer l’accélération et la vitesse :

Configuration des accélérations

Pour envoyer les paramètres au dSPIN, nous allons devoir programmer nous-mêmes les registres, car nous ne disposons pas de la carte STM32 permettant d’utiliser directement le logiciel (mais si des sponsors nous lisent, elle ne coûte que 60 euros). On utilisera donc un mBed (ARM également) de NXP.

On reprend la bibliothèque C++ écrite par Éric et on modifie l’initialisation (fonction "main") pour afficher les valeurs. Il est important de conserver les valeurs d’origine avant toute modification.

    //  lire les registres de configuration
    int khold = dspin.get_register(dSPIN_REG_KVAL_HOLD);
    int kacc = dspin.get_register(dSPIN_REG_KVAL_ACC);
    int kdec = dspin.get_register(dSPIN_REG_KVAL_DEC);
    int krun = dspin.get_register(dSPIN_REG_KVAL_RUN);
    int kstslp = dspin.get_register(dSPIN_REG_ST_SLP);
    int kintspeed = dspin.get_register(dSPIN_REG_INT_SPD);
    int kfnslpacc = dspin.get_register(dSPIN_REG_FN_SLP_ACC);
    int kfnslpdec = dspin.get_register(dSPIN_REG_FN_SLP_DEC);
    

    printf("[INFO] motor configuration (1) : KHOLD=0x%.4x KACC=0x%.4x KDEC0x%.4x KRUN=0x%.2x\r\n", khold, kacc, kdec, krun);
    printf("[INFO] motor configuration (2) : STSLP=0x%.2x INTSPEED=0x%.4x FNSLPACC=0x%.2x FNSLPDEC=0x%.2x \r\n", kstslp, kintspeed, kfnslpacc, kfnslpdec);

Et voilà ce qu’on peut lire :

La tension dans les moteurs n’est donc que de 0,16 (0x29 / 255) x 12 volts (VS) soit 2 volts !! Le courant mesuré de 0,090 A s’explique donc :)

On peut maintenant modifier les valeurs et observer le résultat.

    dspin.set_register(dSPIN_REG_KVAL_HOLD,0x0F);
    dspin.set_register(dSPIN_REG_KVAL_ACC,0xCD);
    dspin.set_register(dSPIN_REG_KVAL_DEC,0xCD);
    dspin.set_register(dSPIN_REG_KVAL_RUN,0xFF);

Dès qu’on passe à 0xFF, ça se passe beaucoup mieux ! On peut conserver une tension faible (6 volts, VS divisé par 2) pour le couple de maintien. Histoire d’éviter un incendie :)

Coefficients précis

Avec l’inductance-mètre construit par JP, on a 28 mH pour ce moteur. Avec les indications d’Eric, on mesure 4 V d’amplitude pour 25 ms de période, soit un Ke de 0,1 V/Hz

On rentre tout ça dans le logiciel et on obtient les coefficients idéaux correspondant à ce moteur :

Coefficients idéaux du dSPIN

La suite... avec le mulet de R2, un châssis construit par JP avec les moteurs et les 6 roues du robot. A découvrir lors de nos prochains ateliers pour les locaux, et sur Twitter pour ceux qui ont moins de chance :)

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.