joyeufetar Posté(e) Octobre 21, 2022 Posté(e) Octobre 21, 2022 Bonjour à tous, Dans le cadre d'un projet (trouvé sur thingiverse, mais adapté au matériel que j'avais), j'essaye de piloter un Nema17, via un Arduino nano + stepper DRV8825. Tout fonctionne bien, mais la rotation du moteur n'est pas douce à petite vitesse (dommage, c'est ce dont j'ai besoin ^^). Le moteur fait de petite saccade à chaque mouvement. Le but étant de trouver comment améliorer ça, mais j'ai beau chercher, pour l'instant, je ne vois pas. J'avais commencé les tests directement avec une carte de prototypage, puis je me suis créer un PCB pour faire plus propre. Voilà à quoi ressemble le schéma et le pcb : Et donc, voici le code utilisé pour piloter le moteur (il n'est pas de moi, fonctionne, mais apparemment, pas de façon optimale pour le matériel que j'utilise) : int dir = 3; int stp = 2; int enable = 7; int M0 = 4; int M1 = 5; int M2 = 6; unsigned long stepsPerRevolution = 200; unsigned long calibratedMicrosecondsPerMinute = 936310; // Arduino clocks are not very accurate. What's more, they tend to fluctuate // based on evironmental factors such as temperature but hopefully the // clock will be stable enough for our needs. If so, we should be able to // compensate in code by calibrating. // Calibrationg microseconds per minute means that we will never be more accurate than // +- 0.00144 seconds in a day but I think we can live with that. It's way // better than the margin of error introduced by internal clock variations. // To calibrate, start with a set calibration value (the one above worked // for me) and time how long it takes the clock to count off some large number // of minutes. That will give you values for actual_time and expected_time // where expected_time is the amount of minutes the clock counted and // actual_time is the amount of time that the clock actually took. // With those values you can compute the new calibration value using the // forumula: // new_calibration = old_calibration * expected_time / actual_time unsigned long microsecondsPerStep = calibratedMicrosecondsPerMinute / stepsPerRevolution; unsigned long microsecondsRemainder = calibratedMicrosecondsPerMinute % stepsPerRevolution; unsigned long referenceTime = 0; void setup() { Serial.begin(9600); pinMode(dir, OUTPUT); pinMode(stp, OUTPUT); pinMode(enable, OUTPUT); pinMode(M0, OUTPUT); pinMode(M1, OUTPUT); pinMode(M2, OUTPUT); // initialize motor digitalWrite(enable,LOW); //activate motor digitalWrite(dir,HIGH); //direction digitalWrite(M0,HIGH); // microstep, regle en 1/32 digitalWrite(M1,LOW); // microstep, regle en 1/32 digitalWrite(M2,HIGH); // microstep, regle en 1/32 // record when we started the loop referenceTime = micros(); } void loop() { for (unsigned long step = 0; step < stepsPerRevolution; step++) { // Note that this actually counts 2 steps per iteration so we'll actually do 2 revolutions over the course of the loop // first step digitalWrite(stp,HIGH); // Getting the current time and subtracting the starting time gives us an interval and avoids overflow erros. while ((micros() - referenceTime) < microsecondsPerStep){}; // incrementing rather than calling micros() to get a new reference avoids timing errors referenceTime += microsecondsPerStep; // second step digitalWrite(stp,LOW); while ((micros() - referenceTime) < microsecondsPerStep){}; referenceTime += microsecondsPerStep; } // ecery 2 revolutions we account for the remainder to avoid the clock drifting since we calibrated to the minute and not to the step while ((micros() - referenceTime) < (microsecondsRemainder * 2)){}; referenceTime += (microsecondsRemainder * 2); } Je précise que le stepper est réglé pour le Nema que j'utilise. C'est un Nema17 donné pour 1.68A/phase, donc j'ai réglé le stepper à 0.5V (calculé 0.6V mais j'ai pris un peu de marge, n'ayant pas besoin du couple maxi). Je cherche donc à rendre la rotation du moteur la plus fluide possible. Est ce quelqu'un a une idée de ce que je pourrais tester ? Dois-je revoir tout le code au final ou juste faire des adaptations ? Merci d'avance
pommeverte Posté(e) Octobre 21, 2022 Posté(e) Octobre 21, 2022 (modifié) Salut, Tu ne pourras rien améliorer avec ce matériel puisque le pilote (ou driver et non stepper ) est configuré à son maximum (1/32 de pas). Pour avoir un meilleur comportement, tu peux : ajouter une démultiplication en sortie de moteur pour le faire tourner plus vite et/ou remplacer le DRV8825 par un TMC2208 ou un 09 si tu as besoin du couple maxi du moteur Modifié (le) Octobre 21, 2022 par pommeverte
joyeufetar Posté(e) Octobre 21, 2022 Auteur Posté(e) Octobre 21, 2022 Salut, D'abord, merci pour tes réponses Sinon, le but n'est pas de faire tourner le moteur plus vite, mais de "lisser" la rotation. d'ailleurs, si dans le programme Arduino, j'augmente le nombre de step par révolution, le moteur tourne plus vite et complètement librement, plus d'accoups. J'ai déjà utilisé plusieurs fois des drv8825, et je n'ai jamais remarqué qu'ils posaient soucis Quand à passer sur un TMC, j'y avais pensé mais ça me fait modifier le pcb vu que certaines pins ne correspondent pas avec ceux du drv. Merci pour ton aide en tout cas PS : j'ai voulu mettre une vidéo montrant ce que ça donne actuellement mais ça dépasse la limite de fichier possible. je vais voir pour l'heberger ailleurs.
pommeverte Posté(e) Octobre 21, 2022 Posté(e) Octobre 21, 2022 Le 21/10/2022 at 11:09, joyeufetar a dit : Sinon, le but n'est pas de faire tourner le moteur plus vite, mais de "lisser" la rotation Dérouler je sais bien, mais lorsqu'un moteur pas à pas tourne vite, on sent moins les changements de pôles. C'est le principe des moteurs pas à pas Le 21/10/2022 at 11:09, joyeufetar a dit : Quand à passer sur un TMC, j'y avais pensé mais ça me fait modifier le pcb vu que certaines pins ne correspondent pas avec ceux du drv. Dérouler tu devrais revérifier alors . A part le reset et le sleep, c'est compatible 1
joyeufetar Posté(e) Octobre 21, 2022 Auteur Posté(e) Octobre 21, 2022 Ca marche, merci, je vais re-regarder tout ça alors
joyeufetar Posté(e) Octobre 26, 2022 Auteur Posté(e) Octobre 26, 2022 Hello, Alors, je reviens un peu sur le sujet. J'ai effectivement comparé le drv avec un tmc2208 que j'avais sous la main. Les pins sont effectivement globalement les mêmes, sauf 2. Sur le drv, les pins RST et SLP étaient alimentées en 5V pour permettre le bon fonctionnement du stepper. 5V fournis via la pin 5v de l'arduino. Je mets le schéma du circuit ici pour montrer comment c'est connecté : Or, sur le tmc, ces 2 pins sont CLK et PDN. Après recherche dans la doc, je n'ai pas du tout l'impression d'en avoir besoin, en tout cas pour mon projet. Si j'ai bien compris la pin CLK ajoute une fonction d'horloge au stepper, c'est bien ça ? D'ailleurs, je ne vois pas bien comment je pourrais la gérer au final. Et la pin PDN, si j'ai toujours bien compris permet une gestion automatique de coupure ? La encore, je n'en ai pas besoin car le stepper devra tourner en continue de toute façon. Vous confirmez ? Du coup, à la base, le pcb fournissait du 5v sur ces 2 pins (vu qu'il était prévu pour un drv et non pour un tmc). Quel est le risque d'alimenter en 5v les deux pins du tmc, sachant que du coup, ces 2 pins sont reliées ensemble... Est ce que ça ne risque pas de foutre le bordel ? Est ce qu'il ne vaudrait mieux pas que je supprime directement les pins du tmc ? histoire d'être tranquille. Voila, Merci d'avance
pommeverte Posté(e) Octobre 26, 2022 Posté(e) Octobre 26, 2022 Salut, La broche PDN/UART sert: soit à réduire le courant de maintien lorsque le moteur ne tourne pas soit à communiquer en UART (com série) avec le TMC2208. Le mieux est de laisser cette broche non connectée, tu seras dans le 1er cas (réduction du courant de maintien) La broche CLK est effectivement une entrée horloge. Le module gère lui-même l'horloge, pas la peine de s'embêter à en ajouter une externe. Comme la broche PDN, tu la laisses non connectée. Le 26/10/2022 at 08:12, joyeufetar a dit : Est ce qu'il ne vaudrait mieux pas que je supprime directement les pins du tmc ? histoire d'être tranquille Dérouler J'imagine que tu sous-entends dessouder..., la réponse est "oui" Il y a une autre différence, c'est la sortie Fault qui devient une broche d'alimentation logique +5V . Il faut donc relier cette broche au 5V. Tu trouveras des infos à la fin de cette page Coté programme, tu pourras sélectionner le mode 1/16 pas en inversant l'état de MS1, c'est à dire en remplaçant cette ligne: digitalWrite(M1,LOW); // microstep, regle en 1/32 par digitalWrite(M1,HIGH); // microstep, regle en 1/16 Remarque: M2 n'est pas utilisée mais tu peux laisser le routage en l'état il est possible que tu soit obligé d'inverser le sens de rotation: digitalWrite(dir,HIGH); //direction 1
joyeufetar Posté(e) Octobre 26, 2022 Auteur Posté(e) Octobre 26, 2022 Salut, Merci pour tes réponses. Oui, quand je disais supprimer les pins, c'était soit dessouder, soit couper les pins au ras. Mais oui, l'idée était de les virer. Au niveau du programme, c'est pas un soucis, j'ai déjà adapté les steps, réglé les microsteps au 1/16, et j'ai commenté la ligne M2 (qui du coup, ne me sert plus à rien). Concernant la direction de rotation, pas besoin de changer dans le programme, avec le pcb, j'ai juste à retourner la fiche du moteur Par contre, je ne comprends pas à quoi sert la pin "Fault" (VIO pour le tmc2208). Pourquoi faut il la relier au 5v ? Que gère-t-elle en faite ? Si jamais elle n'est pas reliée, qu'est ce que cela implique ?
pommeverte Posté(e) Octobre 26, 2022 Posté(e) Octobre 26, 2022 (modifié) Le 26/10/2022 at 11:20, joyeufetar a dit : j'ai juste à retourner la fiche du moteur Dérouler sur un NEMA???? habituellement, il y a un détrompeur sur les connecteurs... mais peu importe, c'est pas vraiment une difficulté Le 26/10/2022 at 11:20, joyeufetar a dit : Par contre, je ne comprends pas à quoi sert la pin "Fault" (VIO pour le tmc2208) Dérouler sur un TMC22xx, tu as 1 broche d'alimentation pour le moteur Vmot, et 1 pour la logique Vio, les calculs si tu préfères. Le 26/10/2022 at 11:20, joyeufetar a dit : Si jamais elle n'est pas reliée, qu'est ce que cela implique ? Dérouler je pense que le moteur ne tournera pas car les signaux de sortie ne devrait pas être pilotés. Modifié (le) Octobre 26, 2022 par pommeverte 1
joyeufetar Posté(e) Octobre 26, 2022 Auteur Posté(e) Octobre 26, 2022 Le 26/10/2022 at 11:27, pommeverte a dit : sur un NEMA???? habituellement, il y a un détrompeur sur les connecteurs... mais peu importe, c'est pas vraiment une difficulté Dérouler Côté moteur, je suis d'accord qu'on a pas le choix Mais côté pcb, c'est juste un connecteur dupont, donc je peux le mettre dans le sens que je veux. Le 26/10/2022 at 11:27, pommeverte a dit : sur un TMC22xx, tu as 1 broche d'alimentation pour le moteur Vmot, et 1 pour la logique Vio, les calculs si tu préfères. je pense que le moteur ne tournera pas car les signaux de sortie ne devrait pas être pilotés. Dérouler Les calculs d'interpolation je suppose ? J'avais testé comme ça, juste pour voir et le moteur fonctionnait parfaitement, d'ou la question. Mais ok, pas de soucis pour le relier au 5v, c'est pas ce que ça coute Merci pour ton aide en tout cas 1
pommeverte Posté(e) Octobre 26, 2022 Posté(e) Octobre 26, 2022 (modifié) Le 26/10/2022 at 11:32, joyeufetar a dit : je peux le mettre dans le sens que je veux Dérouler Peut-être mais j'ai un sérieux doute: tu vas alimenter les bobines de la même manière au final Le 26/10/2022 at 11:32, joyeufetar a dit : J'avais testé comme ça, juste pour voir et le moteur fonctionnait parfaitement, d'où la question Dérouler d'accord, intéressant Modifié (le) Octobre 26, 2022 par pommeverte
joyeufetar Posté(e) Octobre 26, 2022 Auteur Posté(e) Octobre 26, 2022 (modifié) Le 26/10/2022 at 11:35, pommeverte a dit : Peut-être mais j'ai un sérieux doute: tu vas alimenter les bobines de la même manière au final Dérouler Tant que les deux coils sont reliés correctement, y'a aucun soucis Disons que dans mon cas, j'ai plusieurs façons de faire la même chose Modifié (le) Octobre 26, 2022 par joyeufetar
joyeufetar Posté(e) Octobre 27, 2022 Auteur Posté(e) Octobre 27, 2022 Salut Alors, voila, les modifs sont faites (retrait propre des pins non nécessaires et adaptation du tmc pour l'alimenter en 5v sur la pin VIO). Voila ce que ça donne avec alimentation en 5v : J'ai souder une pin à l'opposé de l'autre sur la pin VIO, pour pouvoir faire des tests rapidement d'alimentation ou non de la dite pin. Et bien, franchement, avec ou sans alimentation, je ne vois aucune différence. Donc pas sur que ce soit nécessaire. Après, c'est peut être juste pour mon besoin que je n'ai pas besoin d'elle, je ne sais pas. Merci @pommevertepour ton aide en tout cas 1
pommeverte Posté(e) Octobre 27, 2022 Posté(e) Octobre 27, 2022 Salut, C'est bien beau tout ça , mais coté moteur, ça s'est amélioré? 1
joyeufetar Posté(e) Octobre 27, 2022 Auteur Posté(e) Octobre 27, 2022 Ah ba y'a pas photos. C'est le jour et la nuit niveau rotation. C'est bien plus fluide qu'avant 1
pommeverte Posté(e) Octobre 27, 2022 Posté(e) Octobre 27, 2022 Cool! J'avais pas percuté, mais c'est ça que tu es en train de faire? sympa 1
joyeufetar Posté(e) Octobre 28, 2022 Auteur Posté(e) Octobre 28, 2022 Héhé, c'est le principe. Mais c'est pas ce modèle la ^^ Sans compter que le tiens a l'air quand même sacrément complexe. C'est celui la que je fais : Marble clock Sauf que j'ai tout adapté pour faire avec les moyens du bord (je ne voulais utiliser que du matériel de récup) : - upscale du modèle initial de 150% pour coller aux billes que j'avais à dispo (avec découpe de certaines pièces vu que ça ne rentrait plus sur l'imprimante ^^) - Nema17 à la place du Nema8 (donc il a fallu revoir tout le boitier électronique) - Et du coup, maintenant, tmc2208 à la place du drv8825 Le projet est maintenant terminé, voila le rendu : Une chose que j'avais oublié aussi, c'est qu'avec un drv8825, ça fait pas mal de bruit parasite... Je me souviens maintenant pourquoi j'étais passé aux tmc un peu partout sur les imprimantes A plus ou moins court terme, je pense quand même lui faire un caisson transparent autour, histoire d'atténuer le bruit des billes. Parce que la, à chaque dizaine, ça fout un bordel ^^ 2 1
pommeverte Posté(e) Octobre 28, 2022 Posté(e) Octobre 28, 2022 (modifié) Salut, Le 28/10/2022 at 08:25, joyeufetar a dit : histoire d'atténuer le bruit des billes Dérouler Ça c'est toi qui l'dit, parce que sans vidéo, c'est pas sûr qu'on te croie . Bien sûr, c'est un argument bidon pour te demander une p'tite vidéo du système en action Modifié (le) Octobre 28, 2022 par pommeverte 1
joyeufetar Posté(e) Octobre 28, 2022 Auteur Posté(e) Octobre 28, 2022 Tiens, voila la vidéo qui résume tout le principe C'est celle que projet initial, mais malgré les modifs que j'ai pu faire de mon côté, le principe est exactement le même Clock 1 1
chacha007 Posté(e) Novembre 28, 2022 Posté(e) Novembre 28, 2022 Le 21/10/2022 at 08:45, joyeufetar a dit : Je cherche donc à rendre la rotation du moteur la plus fluide possible. Dérouler Salut, Idem que toi, à la recherche d'un mouvement fluide; J'ai connecté les M0 M1 et M2 au 5V et le résultat est correct... Rotation unidirectionnelle et vitesse gérée par un potentiomètre : const int stepPin = 3; const int dirPin = 4; const int potPin = 1; int potval = 0; int vitesse=0; void setup() { pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT); digitalWrite(dirPin,HIGH); } void loop() { potval = analogRead(potPin); vitesse= map(potval,0 , 1023, 800, 100); digitalWrite(stepPin,HIGH); delayMicroseconds(vitesse); digitalWrite(stepPin,LOW); delayMicroseconds(vitesse); } Vous en pensez quoi ? Merci
joyeufetar Posté(e) Novembre 28, 2022 Auteur Posté(e) Novembre 28, 2022 Salut, Ta façon de faire est différente de la mienne. De mon côté, je ne pouvais pas jouer sur la vitesse de rotation, elle était calculée automatiquement. Du coup, ça me posait soucis, car à basse vitesse, avec un drv8825, ça crée des saccades... Toi, si tu peux gérer la vitesse de rotation, tu n'as plus ce soucis. En augmentant la vitesse, tu vas finir par lisser les saccades. Enfin, c'est ce que je pense après tous les tests que j'ai pu effectuer. ++ 1
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant