Aller au contenu


bubu17

Inscrit(e) (le) 21 janv. 2023
Déconnecté Dernière activité avril 24 2024 07:47
-----

Messages que j'ai postés

Dans le sujet : Robot suiveur de fil

11 octobre 2023 - 12:44

Bonjour

 

j'ai une tondeuse robot qui utilise un fil périmétrique, je me suis inspirer du site Ardumover. il faut absolument une boucle pour que le générateur fonctionne.

mais je pense qu'il est facile d'inclure 2 points en ligne droite dans une boucle.

 

wiki.ardumower.de/index.php?title=Hauptseite


Dans le sujet : UGV à base d'éléments de trottinette ou d'hoverboard

22 avril 2023 - 09:35

Bonsoir,

consigne+=inc;
      if (consigne >= 800) {inc = -1;}
      if (consigne <= 15) {inc =  1;}

j'ai rajouter ce bout de code pour faire une rampe d'accélération jusqu'à 800 tr/mn et ensuite ralentir jusqu'à 15tr/mn.

le pid a bien suivi jusqu'à 500tr/mn, ensuite la somme des erreurs étant au maximum je n'est pas atteint les 800tr/mn.

c'était pour voir , je l'est transformer pour faire une rampe d'accélération pour ma tondeuse, à chaque départ et manœuvre.

 

              if (consignemoteur < 32){                          // rampe d'accélération

                  consignemoteur+=inc;                           //incrémente de 1 à chaque boucle

                   }

 

dans le code la consigne moteur sera à 18 , et montera à 32.

 

​la dernière ligne

err = consigne - rpm; // pour le proportionnel

c'est le calcule de l'erreur: la ligne est mal écrite, la consigne n'est pas la même que les 3 lignes au dessus, il faut écrire:

                  err = consigemoteur - rpm;

 

consignemoteur = vitesse demandé        entre 18 vitesse minimum et 32 maximum(pour ma tondeuse)

rpm = vitesse réelle.

 

 

concernant ta lecture de la log,

Tu as un écart entre la consigne (Target_Hz) et la mesure (Hall_Hz).

​ce n'est pas le pid qui doit être = à la consigne mais le (Hall_Hz)

je trouve que Hall_Hz et pid varie trés peu avec l'effort

 

je ne comprend pas les différences de valeurs entre ton moteur et le mien 

à 32 tr/mn le pid est à10-11 à vide et avec effort je monte à 50

​peut-être le contrôleur moteur?? 

 

 

             :

 

Et bien l'utilisation de 3 potentiomètres pour paramétrer Kp, Ki et Kd est vraiment une excellente solution.

Voici mon code qui est inspiré de vos conseils :

Spoiler

 

Et voici la log :

Spoiler

 

Comme vous pouvez le constater, le pid_Hz est très proche de Target_Hz (la consigne).

C'était bien l'objectif à atteindre. Et cela, même lorsque je freine fortement la roue avec ma main gantée.

On s'aperçoit du freinage, lorsque Hall_Hz passe de 31Hz à 30Hz. Et malgré tout, pid_Hz reste très proche de la consigne, Target_Hz.

 

Néanmoins :

- je ne comprends pas la valeur de Hall_Hz.

- la somme des erreurs rSum est instantanément au maximum, 1000. Et donc, la valeur de Ki*rSum est constante.

- à mon avis, Kd n'a aucune incidence.

 

Bubu, pourquoi dans ton code tu fais :

      consigne+=inc;
      if (consigne >= 800) {inc = -1;}
      if (consigne <= 15) {inc =  1;}
      err = consigne - rpm; // pour le proportionnel
 

 

 


Dans le sujet : UGV à base d'éléments de trottinette ou d'hoverboard

17 avril 2023 - 08:54

 

Oracid a écrit hier, 19:38

Sur mon moteur, il y a 15 ticks.

Attention, avec le paramètre RISING dans la fonction attachInterrup(), il ne faut pas diviser par 2. 

 

15 ticks, ca m'étonne!

j'ai fais un code pour les mesurer:

 

Spoiler

 

sur mon moteur j'ai 45 ticks avec RISING et 90 avec CHANGE

 

pour faire la mesure il faut tourner la roue à la main


Dans le sujet : UGV à base d'éléments de trottinette ou d'hoverboard

16 avril 2023 - 01:51

le 45 correspond au nombre de période par tour de roue: 90 ticks (haut + bas)/ 2

 

je n'arrive pas à copier-coller la log.

 

ton pid a besoin d'être 10x supérieur au miens pour la même vitesse et fréquence.

ou été le problème? valeur du pid?


Dans le sujet : UGV à base d'éléments de trottinette ou d'hoverboard

16 avril 2023 - 08:05

Bonjour Oracid

 

j'ai réétudier le sérial et je modifie un peu mon commentaire:

la roue ne tourne pas donc il est normal que la lecture indique 0 pour la frequence, rpm et vitesse

par contre la correction à mis le pid(pwm) au maximum autoriser par le code :50

à 50 le moteur doit tourner, revoie tes branchements sur la commande pwm, frein activé? ,entrer en? masse commune?

 

avec un pid à 50 mon moteur tourne à 150 tr/mn

j'ai rajouter une rampe d'accélération et ralentissement à mon code: de 15 à 200 et 200 à 15tr/mn

en piéce-jointe la sortie serial et la modification du code