Aller au contenu


Photo
- - - - -

Moteurs pas à pas moins rapides que prévus. Que faire?

Arduino Due Drv8825 Nema 17

  • Veuillez vous connecter pour répondre
18 réponses à ce sujet

#1 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 12 octobre 2020 - 07:13

Bonsoir à tous,

 

J'envoie via Processing, 33 données 30 fois par seconde à la carte Arduino via le Programming Port.

 

J'ai besoin d'avoir 1600 pas/tour pour tirer au mieux la puissance des moteurs pas à pas NEMA 17 qui font 200 pas/ tour en mode pas complet.

 

J'ai donc réglé drivers DRV 8825 à 1/8 de micro stepping. Car 8*200=1600.

Sauf qu'avec ce réglage, à partir de 2000 step/sec, les moteurs ne dépassent pas les 1.25 tours/s.

 

Alors qu'avec un réglage de 1/4 step, soit 800 pas/ tour les moteurs vont bien plus vites, les accélérations sont bien plus saillantes, mais je perds en précision (les moteurs décrochent un peu), et le bruit est assourdissant ( pas génial pour une installation artistique).

 

Alors, j'imagine que la carte Arduino Due n'arrive plus à envoyer des informations de positions différentes au delà des 2000 step/sec. 

 

Voilà une  ancienne video où les moteurs suivent l'animation de Processing en mode pas complet (200 step/tour), sans micro stepping 

https://www.youtube....h?v=vQy5JVuKP6Q

 

Et le programme Arduino

Fichier(s) joint(s)



#2 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 681 messages
  • Gender:Male

Posté 12 octobre 2020 - 08:53

Bonsoir,

 

Je vois plusieurs causes possibles à ton problème :

A) La partie traitement des nouvelles trames prends trop de temps et de fait rater des micro-pas. Si tu vas un peu plus vite en 1/4 de pas qu'en 1/4 de pas, alors c'est possible. Si tu as une grosse différence, alors ça me semble beaucoup moins probable (à première vue, j'aurais tendance qu'au pire, tu perds 30 huitièmes de pas de plus  par seconde que ce que tu perdrais en 1/4 de pas.

B)La partie traitement de l'avancement est top longue. Je penses que tu peux mettre les fonctions "moveTo" dans le  if (newData == true) : ça te fera gagner un petit peu de temps, mais je sais pas si c'est significatif ou pas comparé à l'appel à run. Si metre les moveTo dans le if ne suffit pas, alors si c'est le traitement qui limite, la seule solution sera de remplacer la librairie accelStepper par quelque chose de mieux optimisé

C) Si c'est l'écriture des données sur les pins qui ralentit, alors il faut écrire directement sur les ports (ça permet d'écrire plusieurs bits à la fois), mais ça impose de re-écrire entièrement accelStepper.

 

Je te suggèrerais donc de faire les tests suivants, dans l'ordre :

1) vérifier si mettre moveTo dans le if améliore les choses

2) Enlève la moité des moteurs (enfin juste le moveTo et le Run correspondant) et regarde si ça améliore les choses : si oui, alors c'est moveTo ou Run qui ralentissent

3) Enlève la partie reception de données et utilise à la place un petit calcul rapide : si ça améliore les choses, alors c'est le traitement des trames qui pose problème

 

Une fois que tu aura identifié quelle partie pose problème, on pourra chercher comment l'optimiser.



#3 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 13 octobre 2020 - 03:27

Hello Sandro, 

 

Merci de répondre si vite. ça me réconforte beaucoup.

 

J'ai mis les moveTo et run dans la loop comme ça

void loop() { 
 
   recvWithStartEndMarkers();  // receive 33 datas from Processing 30 times/sec. 
   
    if (newData == true) {
        strcpy(tempChars, receivedChars);
            // this temporary copy is necessary to protect the original data
            // because strtok() used in parseData() replaces the commas with \0
        parseData(); //  split the 33 data into its parts  
       
        
        // Where can I lighten my program so that it sends the information of postions quickly?
        // Where I have to repeat the command below or to alight my program ?

        
       stepper[9].moveTo(PC0);
       stepper[9].run();
       stepper[8].moveTo(PC1);
       stepper[8].run();       
       stepper[7].moveTo(PC2);
       stepper[7].run();
       stepper[6].moveTo(PC3);
       stepper[6].run();
       stepper[5].moveTo(PC4);  
       stepper[5].run();

   
       stepper[4].moveTo(PC5);
       stepper[4].run();
       stepper[3].moveTo(PC6);
       stepper[3].run();       
       stepper[2].moveTo(PC7);
       stepper[2].run();
       stepper[1].moveTo(PC8);
       stepper[1].run();
       stepper[0].moveTo(PC9);  
       stepper[0].run();

        showPosition(); // These datas are used to control positions of 10 motors. Print them on the native port
        showPhazisScaled(); // Print datas on the native port
        showTrigBangWithRevolution(); // Print datas on the native port
       
        newData = false;
    }
 }

Malheureusement ça fait bugger l'ensemble des moteurs qui avance très lentement. 1°/s.

 

Par contre, le deuxieme test est concluant !!!

 

Quand j'ai commenté 5 moteurs dans la loop comme ça

void loop() { 
 
   recvWithStartEndMarkers();  // receive 33 datas from Processing 30 times/sec. 
   
    if (newData == true) {
        strcpy(tempChars, receivedChars);
            // this temporary copy is necessary to protect the original data
            //   because strtok() used in parseData() replaces the commas with \0
        parseData(); //  split the 33 data into its parts  
         
        showPosition(); // These datas are used to control positions of 10 motors. Print them on the native port
        showPhazisScaled(); // Print datas on the native port
        showTrigBangWithRevolution(); // Print datas on the native port
       
        newData = false;
    }
 
        // Where can I lighten my program so that it sends the information of postions quickly?
         
       stepper[9].moveTo(PC0);
       stepper[9].run();
       stepper[8].moveTo(PC1);
       stepper[8].run();       
       stepper[7].moveTo(PC2);
       stepper[7].run();
       stepper[6].moveTo(PC3);
       stepper[6].run();
       stepper[5].moveTo(PC4);  
       stepper[5].run();

  /*
       stepper[4].moveTo(PC5);
       stepper[4].run();
       stepper[3].moveTo(PC6);
       stepper[3].run();       
       stepper[2].moveTo(PC7);
       stepper[2].run();
       stepper[1].moveTo(PC8);
       stepper[1].run();
       stepper[0].moveTo(PC9);  
       stepper[0].run();
 */

}

Les moteurs vont exactement deux fois plus vites. Soit 2 tours/s. Ce qui est bien pour l'aspect visuel de mon installation. 

Néanmoins, j'ai absolument besoin de commander les 10 moteurs.

 

Dernièrement, pour votre dernier test, si j'enlève la partie réception données, je sais pas comment  "utiliser à la place un petit calcul rapide".

 

Pourriez vous le programmer pour moi?

 

Bien à vous ;)



#4 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 681 messages
  • Gender:Male

Posté 13 octobre 2020 - 03:59

Bonjour,

1) pour le premier test, je suggérais de SEULEMENT déplacer les moveTo dans le if, mais de garder les run en dehors.

 

Si tu mets tout dans le if, alors tu ne fera un run uniquement quand tu reçois une nouvelle trame, soit 30 fois par secondes : hors chaque appel à run te fait faire au plus un micro-pas, donc au total tu ne fera pas plus que 30 micros pas par seconde, soit 30*1/8=3.75 pas complets par seconde.

 

2) Le deuxième test montre que c'est les fonctions moveTo et/ou run qui ralentissent significativement les choses.

 

3) pour calculer la position "à la main", tu veux par exemple faire :

PC5=5*millis()/1000/60;    //5 tours/minute

ainsi le moteur 5 essayera de tourner à une vitesse de 5 tours/minute

 

 

 

Est-ce que tu as bien compris ce que font les fonctions moveTo et run?

-moveTo indique la position à laquelle tu veux te rendre (en nombres de pas depuis la position du moteur au démarage du programme). Du coup, ça ne sert à rien de l'appeller si tu n'as pas une nouvelle consigne pour ton moteur (sachant que ces nouvelles consignes, elles arrivent dans les trames) : il vaut donc mieux l'appeller depuis l'intérieur du if.

-run permet de faire un micro-pas si le moment est venu 'ou dépassé) d'en faire un. Donc soit c'est trop tôt pour en faire un, et on fait rien ; soit c'est le bon moment pour en faire un, et on en fait un ; soit on est déjà en retard, et en on fait quand même qu'un (même si on a 10 pas en attente). Il faut donc appeller run très souvent, au moins aussi souvent que l'on doit faire des pas, idéalement même plus souvent (pour pouvoir rattraper un éventuel retard)

 

 

Donc je te suggère que tu essayes de refaire le test 1 en mettant seulement moveTo dans le if, et en gardant run en dehors. Si le résultat est bon, alors c'était les appels trop fréquents à moveTo qui ralentissaient, et ton problème est résolu. Si c'est toujours trop lent, alors c'est très probablement la foncion run qui est le problème. Là ça deviendra plus compliqué de trouver une solution, du coup j'attends ta réponse au test, histoire de ne pas me casser la tête pour rien.

 

Pour le test 3, tu peux le faire si tu veux, mais vu les résultats du test 2, je penses pas qu'on en tire quelque chose d'utile

 

Bonne journée

Sandro



#5 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 13 octobre 2020 - 05:15

Merci encore.

 

J'ai fait le test 1, mais ça n'a rien changé. 

 

Voila comment j'ai mis les moveTo

void loop() { 
 
   recvWithStartEndMarkers();  // receive 33 datas from Processing 30 times/sec. 
   
    if (newData == true) {
        strcpy(tempChars, receivedChars);
            // this temporary copy is necessary to protect the original data
            //   because strtok() used in parseData() replaces the commas with \0
        parseData(); //  split the 33 data into its parts

           stepper[9].moveTo(PC0);
           stepper[8].moveTo(PC1);
           stepper[7].moveTo(PC2);
           stepper[6].moveTo(PC3);
           stepper[5].moveTo(PC4); 
           stepper[4].moveTo(PC5);
           stepper[3].moveTo(PC6);
           stepper[2].moveTo(PC7);
           stepper[1].moveTo(PC8);
           stepper[0].moveTo(PC9);  
         
        showPosition(); // These datas are used to control positions of 10 motors. Print them on the native port
        showPhazisScaled(); // Print datas on the native port
        showTrigBangWithRevolution(); // Print datas on the native port
       
        newData = false;
    }
 
        // Where can I lighten my program so that it sends the information of postions quickly?
       
       stepper[9].run();        
       
       stepper[8].run();       
        
       stepper[7].run();
       
       stepper[6].run();
         
       stepper[5].run();
       
       stepper[4].run();
      
       stepper[3].run();     
        
       stepper[2].run();
       
       stepper[1].run();
    
       stepper[0].run(); 
}

Aussi, j'ai voulu tester le contrôle comme vous avez dit mais en micro-pas/s.

J'ai tester à deux tours/s, soit 3200 step/s.

 

Quand je mets les 10 moteurs, je vais un peu plus vite que 1 tour/s.

Et quand je mets 5 moteurs, ils vont bien à 2 tours/s.

 

Bonne soirée.

Benjamin

 

 

 

Le programme du 3 essai ci dessous

void loop() {   
//PC0=1*millis()/1000/1;    //===>1 pas/s
// Mes moteurs en 1/8 step font 8*200==>1600 step/ tour. 
 
PC0=3200*millis()/1000/1;    //===>3200 pas/s ==> 2 tours/s
PC1=PC2=PC2=PC4=PC5=PC6=PC7=PC8=PC9= PC0;

Serial.println (PC0);

       stepper[9].moveTo(PC0);
       stepper[9].run();    
       stepper[8].moveTo(PC1);
       stepper[8].run();       
       stepper[7].moveTo(PC2);
       stepper[7].run();
       stepper[6].moveTo(PC3);
       stepper[6].run();
       stepper[5].moveTo(PC4);  

  
       stepper[4].moveTo(PC5);
       stepper[4].run();
       stepper[3].moveTo(PC6);
       stepper[3].run();       
       stepper[2].moveTo(PC7);
       stepper[2].run();
       stepper[1].moveTo(PC8);
       stepper[1].run();
       stepper[0].moveTo(PC9);  
       stepper[0].run();
   
 
}


#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 894 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 13 octobre 2020 - 05:43

Tu peux teste ça : 
 

void setup() {
// code déjà présent de le setup actuel 
PC0=32000;    //20 tours
PC1=PC2=PC2=PC4=PC5=PC6=PC7=PC8=PC9= PC0;


stepper[9].moveTo(PC0);
stepper[8].moveTo(PC1);      
stepper[7].moveTo(PC2);
stepper[6].moveTo(PC3);
stepper[5].moveTo(PC4);  
  
stepper[4].moveTo(PC5);
stepper[3].moveTo(PC6);     
stepper[2].moveTo(PC7);
stepper[1].moveTo(PC8);
stepper[0].moveTo(PC9);  

}


void loop() {   
//PC0=1*millis()/1000/1;    //===>1 pas/s
// Mes moteurs en 1/8 step font 8*200==>1600 step/ tour. 
 
       stepper[9].run();    
       stepper[8].run();       
       stepper[7].run();
       stepper[6].run();  
       stepper[5].run();
       stepper[4].run();
       stepper[3].run();       
       stepper[2].run();
       stepper[1].run();
       stepper[0].run();
   
 
}

et chronométrer le temps que tes moteurs mettent pour le faire ? 
Puis faire la même chose en mettant deux fois moins de moteurs ? 

 

 

Si pas de différence de temps alors on peu essayer de gratter dans ton code. 

 

 

Si la différence de temps est très significative, ( simple au double )  alors tu as peut être atteint la limite de ta arduino due ... ( du moins avec cet lib )

et dans ce cas je te recommanderais de te tourner vers la carte teensy 3.5. / 3.6 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#7 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 13 octobre 2020 - 07:22

Avec une acceleration à 1200 pas.s

 

Dans le premier cas avec 10 moteurs, ils mettent 18 sec à faire les 20 tours 

Avec 5 moteurs , ils mettent 13 sec à faire les 20 tours.

 

Avec une acceleration à 3200 pas.s

 

Dans le premier cas avec 10 moteurs, ils mettent 15 sec à faire les 20 tours 

Avec 5 moteurs , ils mettent 11 sec à faire les 20 tours.

 

 

 

Voilà...



#8 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 681 messages
  • Gender:Male

Posté 13 octobre 2020 - 07:36

On n'est pas tout à fait du simple au double, mais on a quand même une sacré différence.

Est-ce que tu pourrais aussi tester avec 1 moteur (mon hypothèse est 13 sec, ce qui signifierait que jusqu'à un peu plus de 5 moteurs tout vas bien, et qu'ensuite on prends du retard).

 

En tout cas, là, on a épuré au maximum.

Du coup, je ne vois que 3 options :

1) utiliser une carte plus puissante que l'Arduino Due (par exemple la Tensy que suggérais Mike)

2) remplacer la libraire AccelStepper par quelque chose de plus rapide. Soit :

- une autre librairie (il faudra chercher ce qui existe)

- soit ça peut être une implémentation maison, ce qui présente l'avantage qu'on peut enlever tout le "superflu" qui ne sert pas dans ton utilisation. La difficulté et l'efficacité dépendent de ce que tu veux faire précisément (par exemple, si tu n'as pas besoin de gestion de l'accelération mais qu'un controle en vitesse constante suffit, ça simplifie bien les choses)

3) Mettre moins de moteurs par Arduino (quitte à utiliser 2 arduinos)



#9 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 894 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 13 octobre 2020 - 07:37

A voir si sandro confirme lui aussi ou si il a un autre test à faire mais à mon avis au vu du test c'est juste l'exécution des "run" qui prend trop de temps ... Donc avec cette librairie et 10 moteurs en 16 ème de pas tu atteindrais les limites de la due 

Donc soit tu changes ton nombre de moteur, soit tu change ta config de micro pas, soit tu cherches une lib plus optimisée ? ( = la faire soit même )  soit tu prends une carte plus puissante que la due ( je recommande teensy 3.5 ou 3.6 avec la lib teensy step. ) 

 

 

Edit  :  devancé par sandro ! nos réponses sont proches et se complètent


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#10 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 13 octobre 2020 - 07:53

Avec 1 moteur, j'ai le meme résultat qu'avec 5

 

En fait, je gère 10 différentes positions avec Processing. Et si l'écart entre la position de chaque moteur est grand, alors la vitesse de chaque moteur est grande.

 

J'ai pas besoin de faire varier l'acceleration. Ce que j'aimerai c'est qu' a grande vitesse, 3200 step. s, on puisse modifier un peu la position (donc la vitesse un court instant) de chaque moteur afin de voir un décalage de phase entre chaque moteur. Qu'ils restent à cette position tout en allant à la mê^me vitesse afin de voir une spirale.  Et qu'on puisse les aligner afin que la spirale se transforme en un cercle. 

 

Je vous mets une video pour donner un example du mouvement general.

https://www.youtube....h?v=NGRp7gvnmgg



#11 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 894 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 13 octobre 2020 - 08:08

Juste pour info la librairie teensy step permet de controller jusqu'à 10 moteurs pas à pas de manière synchrone. 

Il y a un exemple de démo avec deux moteur à 160 000 pas/sec


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#12 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 681 messages
  • Gender:Male

Posté 13 octobre 2020 - 08:48

Je viens de trouver un petit article en anglais ( https://www.brainy-b...-stepper-motor/  ) qui mentionne que la limite de la librairie accel stepper est d'environ 4000 (micro)pas par seconde sur un Arduino Uno

L'arduino Uno fonctionne à 16MHz, alors que la Due fonctionne à 84MHz, on peut donc espérer faire 4000*84MHz/16MHz= 21 000 pas environ au mieux sur l'arduino Due (si on ne fait rien d'autre).

Si on divise ça en 10 moteurs, ça nous fait 2 100 micro-pas/s.

A 200 pas en 1/8, ça nous fait donc 2100/(200*8)=1.3 tours/s.

On tombe donc très précisément sur ce que bvking avait mesuré (1.25 tr/s).

 

Donc ça confirme que la librairie AccelStepper n'est pas suffisante pour ton projet.

 

 

Si Mike maîtrise assez bien la carte Tensy pour pouvoir t'aider au besoin (moi je ne l'ai jamais utilisé), alors je penses que c'est la solution la plus simple.



#13 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 15 octobre 2020 - 09:21

2) remplacer la libraire AccelStepper par quelque chose de plus rapide. Soit :

- une autre librairie (il faudra chercher ce qui existe)

- soit ça peut être une implémentation maison, ce qui présente l'avantage qu'on peut enlever tout le "superflu" qui ne sert pas dans ton utilisation. La difficulté et l'efficacité dépendent de ce que tu veux faire précisément (par exemple, si tu n'as pas besoin de gestion de l'accelération mais qu'un controle en vitesse constante suffit, ça simplifie bien les choses)

 

Bonjour Sandro,

Je me disais que si c'était possible et pas trop compliqué d'implementer une librairie maison où l'on a pas besoin de faire varier l'acceleration et la vitesse et que par ce biais on pourrait gagner entre 50 et 100 % de "l'actualisation" de la commande stepper.run, et donc gagner en vitesse entre 50 et 100%, alors je préférais vous donner 30 euros pour ce travail plutôt que d'acheter une carte Tensy.   Bien qu'elle ait des performances impressionnantes... Mais j'ai peur de souder, cabler, reprogrammer... Et que ça me prenne un temps long.   



#14 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 19 octobre 2020 - 03:03

Bonjour,

Je vais donc commander un teensy 4.0.

Je vais y fixer 2*24 broche femelle (pour que ça ressemble à l'Arduino)

Et 5 broches males pour y fixer un port série supplementaire. 

Mais j'ai besoin de ce cable

https://www.pjrc.com/store/cable_usb_host_t36.html

Est ce si je denude un cable usb et que je soude 5 fils Dupont, je pourrais avoir la même chose?

 

Aussi pensez vous qu'en overlockant l'Arduino, si c'est possible, je gagnerai significativement en vitesse d'execution. Merci à vous.



#15 Ludovic Dille

Ludovic Dille

    Membre occasionnel

  • Membres
  • Pip
  • 120 messages
  • Gender:Male
  • Location:Belgique
  • Interests:Robotique, électronique, embarqué, informatique, ...

Posté 19 octobre 2020 - 05:50

Hello,

Fais attention, la plus part des cables usb n'ont que 4 cables. Mais de ce qu'on voit sur ton lien c'est 2 cables noirs (et donc je suppose 2 cables GND) mais c'est pas un soucis en soi.
Pour ce qui est de l'overclocking, si tu veux aller 2 fois plus vite, tu augmenter la fréquence par 2, ce qui n'est pas néglieable. J'ai vue que c'était possible mais ça ne se fait pas en un claquement de doigt et il y a pas mal de chose à changer. Mais ça revient aussi c'est quoi le but de ton projet :P

Par contre de ce que j'ai vu sur une image de pinout de la Teensy 4.0, il n'y a pas de pads pour pour fixer ton port usb

Ludo



#16 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 894 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 19 octobre 2020 - 08:54

Du coup pour rappel, j'ai recommandé une teensy 3.5 ou 3.6 ( et pas la 4.0 ) car à l'heure actuelle la librairie que je recommande : teensy stepper ( plus optimisé qu'accelstepper)  n'est compatible qu'avec les teensy 3.2 3.5 et 3.6 et n'est pas compatible avec les 4.0 et 4.1. 

De plus j'ai recommandé 3.5 et 3.6 pour que tu ais suffisamment de GPIO accessible en direct.  une Teensy 3.2 ou 4.0 fournit environ 24 gpio.  Si tu en enlèves 2 pour ton deuxième uart il t'en reste 22... Et normalement tu utilises minimum 2 fils par moteurs pas à pas ( Step et dir ) * 10 moteurs , ça prend 20 gpio ... Perso j'utilise toujours aussi 1 fils pour le " sleep = enable" donc pour ça fait 30 gpio ( dir , step , enable  * 10 moteurs ) ... 

 

Les teensy 3.5 et 3.6 exposent 40 gpio en direct =) donc tu devrais avoir assez avec. 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#17 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 20 octobre 2020 - 01:30

Hello,

 
Pour ce qui est de l'overclocking, si tu veux aller 2 fois plus vite, tu augmenter la fréquence par 2, ce qui n'est pas néglieable.
 

J'ai choisi le teensy 3.6 comme recommandé par Mike. Aussi j'ai vu qu'on pouvait la surcadencer. Plus la carte ira vite, plus j'augmenterai le micro stepping. Ainsi, je gagnerai en precision, et je crois en puissance de couple et perte de bruit sur mes moteurs. Aussi si vous avez une idée pour overlocker la teensy je prends.

 

Mon projet est là. Merci pour vos conseils.

https://www.youtube....h?v=NGRp7gvnmgg


#18 bvking

bvking

    Nouveau membre

  • Membres
  • 48 messages

Posté 20 octobre 2020 - 01:34

 De plus j'ai recommandé 3.5 et 3.6 pour que tu ais suffisamment de GPIO accessible en direct.

Juste pour info, tu penses pouvoir l'envoyer quand environ?



#19 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 894 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 20 octobre 2020 - 08:34

Je suis en déplacement là, mais je peux te l'envoyer après demain.


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users