Go Down

Topic: [Résolu] Asservissement 2 moteurs. Pourquoi un des deux depend de l'autre? :O (Read 334 times) previous topic - next topic

bvking

Bonjour,

J'ai deux moteurs asservis à Setpoint=20

Ils tournent de manière constante et sont même quasi parfaitement synchronisés (décalage de 90° au bout de deux minutes). Je suis super content.

Quand, je bloque l'un ou l'autre ou les deux en même temps et que je les relâche, ils reviennent à leurs vitesses. Comportement PARFAIT.

Sauf que si je bloque celui de droite (motorB) un peu longtemps, jusqu'à ce que le programme envoie la valeur maximum de tension, soit val_outputB=255, le moteur de gauche (motorA) s'arrête.
Si je laisse un peu tourner  le moteur droit et le rebloque, le moteur gauche tourne un peu et s'arrête.

L'asservissement en vitesse du moteur gauche à l'air de dépendre de la vitesse du moteur droit quand celui-ci est entre  sa tension max et un peu en dessous (quand le moteur droit est bloqué et quand je le laisse tourner un peu).

Alors qu'il n'y a aucun problème si je bloque longtemps le moteur gauche, le moteur droit continue de tourner.   

Etrange, c'est comme si le fait de calculer l'asservissement du moteur B autour du seuil limite de 255,  faisait "buggger"
soit l'encodage de la vitesse du moteur A, (voir dans void EncoderInitA() et void wheelSpeedA)

soit le calcul de l'asservissement du moteur A (trouver une astuce quelconque)

Merci pour tous conseils, mon programme est attaché.

PS: Au fait, si un programmeur peut m'aider, je suis prêt à le renumerer, car dans mon projet artistique je devrais faire tourner 5 moteurs, dans tous les sens et n'importe quelles vitesses. Au rythme où j'avance, j'ai peur de me démotiver!!!





Christian_R

Et en permutant le câblage des 2 moteurs c'est pareil ?
Christian

fdufnews

L'alimentation ne s'écroulerait pas par hasard?
Ou bien le driver du moteur ne passerait pas en protection thermique?

bvking

E
Et en permutant le câblage des 2 moteurs c'est pareil ?
Je viens de permuter mes cables et j'ai exactement le même problème. Donc ce n'est pas un probleme de programmation. Merci Christian.

L'alimentation ne s'écroulerait pas par hasard?
Ou bien le driver du moteur ne passerait pas en protection thermique?
C'est le même L298N qui contrôle la vitesse de mes deux moteurs.

Je vais brancher chacun des moteurs à un L298N different.

C'est une bonne piste?

Ou bien le driver du moteur ne passerait pas en protection thermique? Je pense pas qu'il surchauffe.


 

bvking

Je viens de brancher les deux moteurs sur  deux L298N différents, mais j'ai toujours le même problème.

Quand je bloque le moteur droit et que la tension lue sur le Serial monitor est à 255 , le moteur gauche s'arrête.

C'est bizarre que le fait d'avoir inverser les fils, n'ait pas fait inverser le problème....

Donc ça à l'air être un problème de programmation?

fdufnews

Tu as vérifié avec un voltmètre l'alimentation moteur lors du blocage, elle ne chute pas?

bvking

Si la tension du moteur gauche chute jusqu'à 0 Volt, quand le moteur droit est bloqué est que la donnée val_output B est à 255.
Pourtant le programme envoie 255 au moteur gauche.

La tension du moteur droit monte à 3.70 V quand celui ci est bloqué et val outputB à 255
La tension du moteur gauche monte à 3.00 V quand celui ci est bloqué et val outputA à 255

Quand je lache le moteur droit,  la tension mesurée augmente un peu de 0.2V environ.
Quand je lache le moteur gauche,  la tension mesurée augmente  de 0.6V environ.


bvking

Voulant aller de l'avant, j'ai tout reconnecté sur une Arduino Due.

Là, miracle tout fonctionne et en plus mes moteurs ne se désynchronisent pas sur deux minutes.

Donc, soit c'est de la faute de ma fausse Uno, soit autre chose.


Aussi, quand je bloque jusqu'à la tension maximale de 255 et que je lache un moteur, l'autre augmente de vitesse un tout petit peu et retourne à sa vitesse asservie.

Mais là je pense que c'est normal, car les deux l298N sont branché à la même alimentation.

Merci beaucoup pour votre aide qui m'est très précieuse car encourageante.

fdufnews

Mais là je pense que c'est normal, car les deux l298N sont branché à la même alimentation.
Ça veut surtout dire que l'alimentation en question doit fluctuer en fonction de la charge. Donc soit elle est sous-dimensionnée, soit sa régulation est défaillante.
Ou bien tu alimentes la carte avec des fils trop fins.

bvking

Donc soit elle est sous-dimensionnée, soit sa régulation est défaillante.
Ou bien tu alimentes la carte avec des fils trop fins.
J'ai une alimentation avec des tensions variables de chez Auchan qui délivre jusqu'à 1500 mA.
Les deux L289 N sont branchés en parallèles à cette alimentation et chacune de leur masse sont reliés et connectés à la masse de l'Arduino.

Au lieu de 6, j'ai mis 7.5V mais j'ai toujours cette petite augmentation de tension quand je lache le moteur.

La carte Arduino Due est alimentée par le port USB de mon macBook pro portable.

Les L298 N sont branchés via une breadbord avec les fils fins qui sont donnés dans le Kit de démarrage .

Que dois je changer?

Merci fdufnews ;)

fdufnews


bvking

Mes deux (moteur + encodeur). motorreducteur pour être exact

The 6V 100:1 155RPM Micro Metal Gearmotor w/ Encoder comes with a built-in encoder which measures the motor's speed in real time. The average output number of pulses can reach up to 198.6 pulses per revolution.

Rated Voltage: 6.0 V
Motor Speed: 15000 RPM
Gear Reduction Ratio: 100:1
Reducer Length: 9.0 mm
No-Load Speed: 155 rpm@6v
No-Load Current: 60 mA
Rated Torque: 0.7 kg.cm
Rated Speed: 90 rpm@6V
Current Rating: 170 mA
Instant Torque: 1.5 kg.cm
Hall Feedback Resolution: 198.6
Weight: 18g

Go Up