Login

dimanche, 01 juillet 2007 17:34

Carte de contrôle des moteurs et asservissement

Écrit par 
Évaluer cet élément
(0 Votes)

L'asservissement et le contrôle des moteurs

Matériel 

Cette première carte a été réalisée en double face avec des composants traditionnels.  Voici le schéma :

moteur

L'alimentation est dotée d'un fusible et d'un filtre avec self et condensateurs. Un régulateur traditionnel avec radiateur fournit l'alimentation 5V de la carte.

Les moteurs sont commandés par deux L298 ; on a monté les sortie de chaque L298 en parallèle. Ces circuits sont protégés par des diodes schottky. Les quatre comparateurs d'un LM393 détectent une éventuelle surintensité qui sera signalée par une interruption au microprocesseur.

Le microprocesseur 18F4550 commande les L298, reçoit la tension batterie sur l'entrée analogique, reçoit l'interruption de surintensité, dialogue en I2C avec les autres microprocesseurs et pilote 2 LEDS (utilisées en mise au point).

Comme tous les microprocesseurs du robot, il est doté d'un connecteur ICD pour pouvoir le programmer/debugger.

Le microprocesseur 16F876 est dédié au calcul de mouvement des roues et de vitesse. Pour ce faire, il reçoit sur les entrées RB4 à RB7 les 2 signaux de chaque capteur de rotation. Chaque changement d'état sur une des entrées génère un interrupt et permet un programme très efficace.

Les 2 processeurs utilisent le même quartz de 20Mhz.

Voici donc une photo de la carte de contrôle des moteurs installée sur le robot.

carte-moteurs

Vous pouvez remarquer :

  • Tout à droite, le processeur d'odométrie et les deux cables/connecteurs reliés aux capteurs de déplacement (en bas à droite le connecteur I2C reliant cette carte aux autres)

  • Puis le processeur principal avec le quartz en dessous

  • Les deux L298 munis de leur radiateur

  • Le fusible, self, résistances de mesure de l'intensité, diodes schottky entre les L298

  • Les fiches de connection de l'alimentation est des 2 moteurs.

  • Noter également, en bas et à gauche des processeurs les pins ICD de programmation et debug

  • Et enfin, en haut, le régulateur 5V muni de son radiateur.

 

Logiciel  

  Processeur d'odométrie

Le logiciel de ce processeur est simple :

A chaque interruption RB4 à RB7, on construit un octet avec les 4 valeurs nouvelles et les 4 valeurs de la précédente interruption . Une table de 256 valeurs donne l'action à faire :

+1 ou -1 ou rien sur la rotation roue gauche ET  +1 ou -1 ou rien roue droite.

Une interruption d'horloge toutes les 10msec permet de calculer, pour chaque roue et en moyenne, la vitesse glissante sur les derniers 50msec.

Enfin l'interruption I2C esclave permet d'envoyer les résultats : vitesse roue gauche, vitesse roue droite, vitesse moyenne, déplacement roue gauche, déplacement roue droite.

Attention : pour programmer ce micro, il faut au préalable débrancher les capteurs de rotation des roues. 

Processeur d'asservissement

C'est le processeur qui va contrôler la puissance appliquée aux moteurs dont faire tourner l'algorithme d'asservissement.

Tout d'abord, il est le maitre du Bus I2C et échange les informations avec le processeur d'odométrie et  le processeur d'attitude  toutes les 20msec et avec le processeur de pilotage toutes les  40msec. Ceci permet de ne pas être perturber par des interruptions (autres que celles, très courtes, de démarrage/arrêt des moteurs.

Ensuite, le contrôle de puissance de chaque moteur est réalisé par interrupt : toutes les 10msec, on démarre les moteurs et, au bout d'un temps dépendant de la puissance à envoyer, un autre interrupt par roue arrête chaque moteur.

Pour avoir une puissance linéaire, il a fallu établir pour chaque moteur une courbe vitesse/durée d'impulsion et calculer ainsi un seuil : ce seuil est donc utilisé dans la formule et permet d'éviter les plages de durées d'impulsions trop faibles qui ne font pas tourner les moteurs. On a donc une courbe relativement linéaire, même aux alentours du zéro.

Dans le même thème : on module également ma durée des impulsions en fonction de la tension de la batterie : ceci permet de conserver approximativement une même réponse en puissance des moteurs sur la plage de tension de la batterie (qui est d'environ 16V à 13V ; une alarme batterie faible est levée en dessous de 13V) 

Avant d'aborder l'asservissement proprement dit, il convient de préciser plusieurs choses :

  • Tout d'abord, l'asservissement est en position si la vitesse demandée est nulle et en vitesse si on a demandé au robot de se mouvoir.

  • Ensuite, et c'est le plus important, il faut s'assurer et écréter TOUTES  valeurs avant de les appliquer à la formule d'asservissement... Ceci est fondamental pour  que le robot ne sorte pas d'un fonctionnement correct. Par exemple, dans le cas d'un asservissement en position, il n'est pas question que "l'attraction" vers le point de repos soit proportionnelle à l'écart position réelle-position souhaitée.. sinon, le robot va vite atteindre une vitesse prohibitive à son équilibre. Il faut écréter de manière à ce que la vitesse pour rejoindre le point souhaité soit raisonnable ! TOUTES les valeurs sont donc contrôlées et écrétées  avant la formule magique.

  • Enfin, il ne faut pas oublier les sécurités de type arrêt des moteurs si l'angle au sol devient trop important, redémarrage de l'asservissement si l'angle est dans une fourchette de quelques degrés, effacement des valeurs de consigne en cas de redémarrage de l'asservissement, refus de boger si la tension batterie devient trop faible,  etc etc....

Ce sont ces considérations qui font que la formule théorique est simple par rapport au programme résultant !!! 

La formule de l'asservissement est du type :

P_moteur = K1xA + K2xVa + K3xP + TR+ R

  • A est l'écart angulaire entre l'angle du robot et la verticale
  • Va est la vitesse angulaire
  • P est la distance entre la position du robot et celle souhaitée : sur un asservissement en vitesse, un algorithme se charge de mettre à jour la position souhaitée 
  • R est une variable appliquée à chaque roue (avec inversion du signe) pour faire tourner le robot 
  • TR est l'intégrale de K4xVa+ K5xAVa 

Va est la vitesse angulaire et AVA est l'accélération angulaire 

Le facteur TR permet au robot de gravir des pentes en se "penchant" en avant pour compenser le couple des moteurs... Il faut régler les coefficient pour qu'il ne se penche pas trop rapidement (il va alors essayer plusieurs fois d'attaquer la pente ou le seuil) et qu'il récupère rapidement le bon angle à la fin de la pente (sinon.....)

On rappelle encore que tous les termes sont contrôlés et écrétés... le résultat de l'intégrale également !!!!

  Ainsi codée, cette formule est calculée toutes les 20msec. On rappelle que la fréquence de hachage des moteurs est de 100hz.

2 derniers points pour compléter cette description :

  • Le paramètres sont stockés en EEPROM et peuvent être modifiés par la télécommande pendant le fonctionnement du robot  (avec les fonctions complémentaires du type "retour aux valeurs usine"  par exemple )

  • Ne pas hésiter à travailler en float : la puissance du micro est suffisante et des données homogènes en float diminuent considérablement les bugs et le temps ou les nuits passé à les traquer et les corriger.......... Il existera évidemment des int8, int16 et INT32 . il faut donc, dans le programme, bien caractériser les variables  

 


Lu 3405 fois Dernière modification le jeudi, 05 janvier 2012 09:57
Connectez-vous pour commenter