logo T-Bot presents

ControlerUnMoteur

retour à LaFaq

Pour controler un moteur voici quelques composants (a détailler bientôt) :
L298, L6208, HIP4081, LMD18200, L297, LM629, HCTL1100, mc3479, PBL3717, TPIC0107B, BTS7750GP

Comment utiliser toutes les informations de mon codeur 500 pt pour le passer en 2000pt ?
Une version simplifiée ne perd pas de pas, elle compte 4 fois moins c'est tout.
Par contre comme il n'y a pas d'horloge externe, il peut y avoir des bagotements très très très gênants quand le système est à l'arrêt.

Sans ca, ce que j'avais simulé sur un PIC quand je discutais de ca avec Julien,
peut être réalisé avec des portes logiques. La table de vérité est assez simple


soit
Entrées A et B les entrées du codeur
Entrées C et D les états précédents ( réalisé avec une bascule D est un oscillateur )
Sortie Up : Impulsion pour compter
Sortie Down : Impulsion pour décompter
Sortie Overflow : Saut de pas, oscillateur trop lent.
Sortie 0 : Pas de rotation.

ABCD -> Sorties
0000 -> 0
0001 -> Down
0011 -> Overflow
0010 -> Up
0110 -> Overflow
0111 -> Down
0101 -> 0
0100 -> Up
1100 -> Overflow
1101 -> Up
1111 -> 0
1110 -> Down
1010 -> 0
1011 -> Up
1001 -> Overflow
1000 -> Down

A+ J-Claude.

pareil

http://www.enseirb.fr/~riehl/robot/vhdl_asserv_03/compteur.vhd

sinon ca correspond a peu pres a ce genre de schema quand c'est synthetise, et c'est ca qu'il faut faire absolument pour un decodage sans perte de pas:
http://perso.wanadoo.fr/pidpic/download/QuadratureDecoder2.gif

par contre la logique combinatoire est a verifier, juste un Xor entre A et B_delay ca me semble louche.... les chronogrammes le confirment: le codeur tourne dans un sens et le sens varie. en plus il varie sur front montant et descendant de la clock (ya un bleme la)

ne surtout pas simplifier ! enlever une des doubles bascules a l'entree peut entrainer un etat instable si un front se presente tres pres du front de clock
_________________
tof, sto, guerrier



comment on fait pour brancher le moteur sur le processeur ?
Ok, mais j'espère que vous avez des composants de puissance entre les deux, sinon oui je comprends définitivement pkoi ca n'a pas marché.
Et tes moteurs, c'est quel type? des motoréducteurs conrad des famille, des moteurs d'essuie glace, des mdp/maxxon super chers ou similaire?

Déja, il faut peut etre vérifier que tu sais ce que c'est qu'un moteur et ce qu'il faut lui faire pour qu'il tourne (ne crois pas que je te prenne pour un con, je veux juste etre certain qu'on parle bien des memes choses).
Pour un moteur classique (à courant continu, on dit), la tension à ses bornes est grosso modo proportionnelle à sa vitesse de rotation, et le courant qui le traverse, au couple qu'il développe (sa 'force').
Le but d'une commande, c'est donc bien souvent d'imposer une tension donnée, avec un courant donné. Plus exactement, le courant va être très lié aux variations de tension que tu vas vouloir appliquer et à la charge mécanique sur le moteur (en gros, est ce qu'il force ou non, est ce qu'il y a de l'inertie qui fait qu'il aurait tendance à continuer à tourner, etc).
Bon, ca c'est un premier point.

Le second, c'est l'interface de puissance. Est ce que tu sais ce qu'est un pont en H? si non, tu peux regarder google, et directement fribotte.free.fr. En gros, c'est un montage à transistors qui te permet d'imposer une tension positive ou négative aux bornes d'un moteur, et donc de le faire tourner dans un sens ou dans un autre.
Habituellement, un pont supporte un certain courant max avant de claquer ; lorsque tu le choisis ou le concois, c'est une valeur importante à considérer. (au passage, que le pont intégré sait s'autolimiter en courant et température pour survivre aux fausses manip' - forcément nombreuses )

le 3e, c'est comment faire pour que ton uC pilote ce pont. Pour ca, il faut capter comment est fait le pont déja, et ensuite, voir ce que tu veux lui faire faire: tu peux commander ca betement en tout ou rien, dans ce cas, tu n'as qu'a activer les bonnes parties du pont, et basta. Si tu as un pont intégré évolué (type mc33887) tu n'as qu'à mettre une entrée à 1 pour que la sortie correspondante soit à +Vbatt.... simple!
Ensuite, tu peux vouloir ne pas faire tourner ton moteur à fond, et il te faut une PWM pour donner par exemple la consigne 'tourne à x% de la vitesse max'. Une pwm c'est une tension en créneau, dont on fait varier le rapport cyclique (temps à l'état haut/période), ce qui a pour conséquence quand on regarde coté puissance, d'avoir une tension moyenne qui varie... et c'est justement à cette tension moyenne qu'est sensible ton moteur.

Pour la suite, Jibee a bien résumé, il te faut, par ton programme en C, imposer certains états sur des broches du microcontroleur.
Pour cela, tu écris souvent des trucs genre PortA=0x03; pour mettre les broches 0 et 1 du portA à 1...
Ensuite, il y a souvent dans les uC des modules hardware (ie cablés pour) qui gèrent la pwm comme il faut... du style, tu n'as qu'à relier ton pont aux bonnes pattes du uC, et écrire dans un registre (un endroit dans la mémoire) une valeur de rapport cyclique, qui va dont piloter le pont en H correctement et donner la tension du moteur qui correspond à la vitesse de rotation souhaitée (oufff!!! )
Bon, ca c'est la version rapide, après faut que tu regardes dans les docs de tes microcontroleurs (d'ailleurs, c'est quoi que t'utilises?)


Est ce que ca revient au meme d'envoyer un signal creneau modulé (PWM) que d'envoyer un signal continu égal a la valeur moyenne du signal modulé pour controler la vitesse d'un moteur?

techniquement ca revient au même côté moteur.
Mais côté régulation de la puissance ? Si tu envoyes des commandes en tout ou rien (PWM), le transistor qui va faire passer la puissance va donc être "parfaitement" conducteur seules les transitions seront gourmandes.
Je m'explique :
si le transistor est pas passant du tout, le courant y est nul la puissance dissipée aussi.
Si le transistor est passant il va y avoir un fort courant du au moteur (prenons 0.75A) et aux bornes du transistor on aura une tension non nulle (VCE=0.2V par exemple) :=> puissance 150mW

Maintenant pour obtenir VCC sur 2 on commute à 50% : tout va bien puissance moyenne dissipée est d'environ 75mW (je simplifie les phases de montée et de descente)

Si tu veux obtenir sur un moteur 12V seulement 6V il va falloir commander ton transistor en zone linéaire. Comme tu es a 1/2 voltage le courant est moitié (0.375 A dans l'exemple). Mais si tu as 6V aux bornes du moteur : où sont les 6 autres Volts ? bin aux bornes du transistor. tout simplement. Donc tu te retrouves à dissiper dans le transistor 0.375*6 soit 2W25 dans l'exemple.

Ton transistor devra être plus gros et tu auras une perte de puissance en chaleur


Dois-je placer un radiateur sur mon L298 sachant que mon moteur consomme 1.3A ?
Cela se calcule à partir des caractéristiques thermiques données par le constructeur.
En boîtier Multiwatt115, on a : Rthja = 35°C/W (sans dissipateur)
Tjmax = 150°C
Pour une température ambiante de 25°C, tu peux dissiper au max :
P = (Tj-Ta)/Rthja = 3.3W
Au delà de cette puissance (et c'est déjà très limite), il faut impérativement un dissipateur.
D'après les données constructeur, les Vcesat valent environ 1.35V et 1.25V autour de 1A.
Pour 1.3A, la puissance dissipée vaut donc :
P = (1.25+1.35)*1.3 = 3.3W par pont.
Donc un dissipateur est nécessaire.


j'envoie le signale PWM sur la patte Enable et le sens sur les autres pattes, Mon L6203 a grillé après 6 heures seulement
Gaël : Quand tu commutes la pin Enable, tu autorises l'activation de l'arrivée des signaux IN1 et IN2 vers le pont. Cependant, celà provoques un très bref court circuit transitoire à travers le pont. C'est sans conséquence. Mais répété 20000 fois par seconde pendant quelques temps, ca l'est moins.
De plus, le L6203 n'est pas prévu pour éviter ce phénomène de "shoot through".

Psyko :
On utilisait les L6203 avec un PWM sur EN.
Le problème vient que la logique du L6203 est tiré de l'alim de puissance du circuit et en cas de gros appel de jus rapide (assert instable ou autres), la tension logique du pont passe en dessous de 5V et le pont se courtcircuite.
Le solution: Un condo tantale de 10µF sur l'alimentation du circuit et plus de problèmes.
On a chercher longtemps avant de résoudre le problèmes ya 2 ans.



C'est quoi un PID ?
lire :
http://www.engin.umich.edu/group/ctm/PID/PID.html
http://www.eudil.fr/eudil/belk/sc00a.htm
Lnx : en fait, si j'ai bien compris tout ce que j'ai lu ( :p ), on ne peut pas calculer les coefficient Kp, Ki et Kd sans d'abord connaître les caractéristiques du système à asservir. En effet, comme chacun mettra sur la carte un moteur à CC différent, (chaque moteur ayant ses propres caractéristiques) les coefs Kp, Ki et Kd calculé pour 1 moteur ne conviendront pas pour un autre. Cela signifie qu'il faut prévoir une plage de réglage pour chaque coefficients correcteurs Ki, Kp, Kd et ... laisser chacun faire ses réglages PID en fonction du système à asservir ...
Don : Il existe différentes techniques pour calculer les coefficients du correcteur, de façon théorique comme Ziegler-Nichols qui necessite une modélisation fiable du système (c'est pas toujours évident), ou de façon empirique : tu regles en faisant des essais.

Cf ZieglerNichols

N'est-il pas plus simple de fonctionner avec du tout ou rien et un pid pour faire la régulation plutôt que d'utiliser le PWM ?

le PWM est utilisé pour faire aller le moteur à des vitesses moindres que le maximum.
Le PID peut ainsi corriger finement.
Si tu fais un PID qui corrige par à coups sans passer par une PWM, ca risque d'être fun, mais pas forcément efficace.

Ex :
en prenant 256 valeurs de vitesses (256 valeurs de PWM).
Tu demandes à ton PID d'aller à la vitesse 25. Ton codeur indique que tu vas à 24, tu demandes alors à ton moteur de passer à 26 (grosso modo en fonction de ton PID), le moteur augmente un peu sa vitesse et atteint le 25 demandé (dans le meilleur des mondes)

En fonctionnant par étages de tout ou rien...
Tu veux aller à 25, tu mets donc la gomme. Le codeur indique très rapidement une augmentation de vitesse donc tu coupes la vitesse. Et comme l'erreur est énorme, tu vas même sans doute mettre la marche arrière (bonjour le courant demandé dans ce cas là !) Dès que ton moteur sera dans le mauvais sens ou à l'arrêt, l'erreur sera à nouveau grande et hop a fond les gaz. (bonjour les appels de courants). Tu vas donc passer ton temps à accélérer, freiner, accélérer, freiner...
Prends un vélo et essayes d'aller lentement en faisant des grands coups d'accélération et de freinage.
Bref, tu vas dépenser énormément d'énergie pour un résultat médiocre.


voila un pont h que j'ai trouvé sur la page des fribottes.
http://fribotte.free.fr/bdtech/variateur/bipolaire.gif
  • A quoi sert le Condensateur en parallèle en entrée ?
  • A quoi servent les diodes (pourquoi ne pas rien mettre) ?
  • pourquoi utiliser des transistor npn et pnp ?
  • comment gerer l'intensité qui arrive dans les moteurs puisqu'elle depend des transistors ?


Le condensateur en entrée : lorsque tu envoies une transition, le condensateur se comporte comme un fil du point de vue du courant. Or c'est le courant qui fait commuter le transistor. Donc le transistor se met à conduire très vite. Par contre si tu avais mis un fil et bien tu aurais vite fait de la fumée vu que le courant de base aurait été énorme. Mais la capa une fois chargée va se comporter comme un coupe circuit, le courant continue à circuler, mais au travers de la résistance pour alimenter la base du transistor

Les diodes sont appellées diodes de roue libre. Lorsque le moteur tourne, pas de problème. Maintenant, lorsque tu coupe les transistors, le moteur (une bobine) va se comporter en générateur de courant. le courant est "constant", la résistance est énorme puisque tout est coupé, donc la tension monte (U=RI). Résultat les transistors sautent. (pas forcément du premier coup d'ailleurs sinon ce serait pas drole.)

NPN /PNP : un transistor NPN est connecté à la masse il commute au dela de 0.6V sur la base. Un transistor PNP est connecté à VCC, il commute à VCC-0.6V sur la base. Comme tu peux le voir le transistor NPN alimente la base du PNP opposé. Donc, si un NPN commute (parce qu'il est commandé) le PNP reçoit sur sa base VCEsat du NPN (0.3V environ) et donc commute à son tour.

L'intensité dans les moteurs : les transistors sont tout le temps saturés. Donc on ne peut pas gérer la vitesse du moteur par cette méthode. Par contre il existe un moyen simple de limiter le courant dans le moteur tout en concervant ce montage : la PWM (pulse Width Modulation) ou MLI in French (Modulation de largeur d'impulsion). Au lieu d'envoyer une commande marche avant toute, tu envoies un signal "clignotant" (un coup ca marche, un coup ca marche pas). Si tu mets plus de marche avant que de signal neutre, le moteur va en moyenne voir la tension à ses bornes être supérieure à VCC/2... Très peu de marche avant (moins de 50% du temps) et le moteur voit une tension inférieure à VCC/2.... Comme c'est un moteur à courant continu, sa vitesse dépends de la tension à ses bornes (plus précisement du courant qui le traverse, mais grosso modo U=RI) En faisant une PWM bien sentie, tu peux avoir des vitesses très variées. C'est d'ailleurs une excellente méthode pour limiter les patinages au départ. Tu mets une vitesse qui change au cours du temps pour atteindre la vitesse demandée. Ton accélération n'est donc plus virtuellement infinie.

Réponse de Jean-Claude (un Fribotte)
Si tu es un débutant en élec, je te conseille de ne pas réaliser ce montage. Attaque toi a un truc plus simple et pourtant très efficace "Les Ponts en H intégré". Tu trouveras les ref des principaux Ici :
http://fribotte.free.fr/bdtech/Drivers/DrivesPontH.html

Voir aussi
http://www.ancr.org/fichtech/action/ponthII/index.htm et
http://fribotte.free.fr/bdtech/variateur/variateur.html


sinon on fait comment pour dimensionner tout ca.
  • on utilise n'importe quel transistor qui support du 12v et du 1A ou il faut les choisir en fonction de beta.
  • les résistances faut il prendre des valeurs qui donnent i>isat dans les transistors.ou faut il choisir une valeur plus particulière.
  • le cond, faut il une grande capa ou une petite pour avoir le meilleur tps de réponse possible.


ton transistor doit passer le courant moteur (au démarrage le moteur peut tirer 10X son courant à vide mais pendant un court instant donc voir le courant admis et le courant max peak)
le beta est lié à la résistance. il faut que le transistor soit saturé, on ne fonctionne surtout pas en zone linéaire.
Pour le condensateur : si tu en mets un gros, le courant de base est fort très longtemps... Conclusion ? Allez pour t'aider, si tu mets pas de condensateur ça marche aussi

Quelle fréquence pour ma PWM ?
déjà on peut trouver du pour et du contre pour les fréquences, dans l'audible disent certains (pour débuger c'est pas mal) hors de l'audible disent d'autres qui ont mal aux oreilles (>20kHz)

C'est une histoire de frequence et de réponse du moteur :
trop faible : le moteur se choppe des harmoniques
trop haute : l'électronique consomme car il y a commutations

Une reférence sur l'asservissement: Coco Explique le principe du LM629

Technique, mais monstrueusement instructif. Ce texte est extrait du forum. Suivez le lien: LaPageCoco

questions sur le LM629
albox
1. pour le mode position, est ce que l'on peut éviter le temps d'arrêt à chaque fois qu' lon a atteint la position désirée ? l'objectif est de trouver une trajectoire en courbe et de la suivre sans s'arrêter...
2. Si la réponse à la première question est "non", alors on doit obligatoirement passer en mode vitesse. Dans ce cas, quelle est la condition d'arrêt ?
3. Enfin pour trouver une trajectoire : y'a t-il des fonctions qui sont meilleures que d'autres pour une trajectoire pour un robot ? j'ai vu les courbes splines...ensuite, on pensait échantilloner la courbe et calculer vitesse, distance, accélération. D'ailleurs, j'ai lu dans la FAQ qu'il fallait mieux raisonner en terme de temps, mais les explications ne m'ont pas convaincu. Est ce que vous avez un exemple concret ?
Réponses de Gael
1. Le mode position par nature est fait pour démarrer le moteur à une position, et s'arréter à une position donnée. A partir de là, ta question fait référence à une application différente.
2.Dans ton cas, tu peux soit travailler en profil de vitesse et gérer les changements de consigne en fonction de la position parcourue. Cette info, le LM629 te la donne. Pour finir le mouvement, tu dois pouvoir faire le début de ta trajectoire en mode vitesse et "acoster" la bonne position finale en mode position.
3.le truc le plus sympa (je dis sympa = meilleur rapport complexité/résultats) que je connaisse, c'est les courbes de Bezier. Tu définis ton point de départ, la direction du vecteur (orientation du robot) et une norme (vitesse) et idem pour un point d'arrivée. Avec ca tu calcules le profil de trajectoire optimal pour aller d'un point à l'autre.


retour à LaFaq


Retour à FrontPage | WikiListe des pages