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 il y a 20 minutes, joyeufetar a dit : Sinon, le but n'est pas de faire tourner le moteur plus vite, mais de "lisser" la rotation 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 il y a 22 minutes, 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. 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. Il y a 2 heures, joyeufetar a dit : Est ce qu'il ne vaudrait mieux pas que je supprime directement les pins du tmc ? histoire d'ĂȘtre tranquille 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Ă©) il y a 7 minutes, joyeufetar a dit : j'ai juste Ă retourner la fiche du moteur  sur un NEMA???? habituellement, il y a un dĂ©trompeur sur les connecteurs... mais peu importe, c'est pas vraiment une difficultĂ© il y a 7 minutes, joyeufetar a dit : Par contre, je ne comprends pas Ă quoi sert la pin "Fault" (VIO pour le tmc2208) 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. il y a 7 minutes, joyeufetar a dit : Si jamais elle n'est pas reliĂ©e, qu'est ce que cela implique ? 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 il y a 6 minutes, 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Ă© 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.  il y a 6 minutes, 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. 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Ă©) il y a 3 minutes, joyeufetar a dit : je peux le mettre dans le sens que je veux Peut-ĂȘtre mais j'ai un sĂ©rieux doute: tu vas alimenter les bobines de la mĂȘme maniĂšre au final il y a 3 minutes, joyeufetar a dit : J'avais testĂ© comme ça, juste pour voir et le moteur fonctionnait parfaitement, d'oĂč la question d'accord, intĂ©ressant ModifiĂ© (le) Octobre 26, 2022 par pommeverte
joyeufetar PostĂ©(e) Octobre 26, 2022 Auteur PostĂ©(e) Octobre 26, 2022 (modifiĂ©) il y a 42 minutes, 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 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, Il y a 11 heures, joyeufetar a dit : histoire d'attĂ©nuer le bruit des billes Ă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 10:45, joyeufetar a dit : Je cherche donc à rendre la rotation du moteur la plus fluide possible. 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