Skip to content

Pulse max ?

Description

L'idée ici est de connaître la fréquence maximale de pulse possible avec GRBL programmé dans une carte Arduino UNO. Ce test est utile car il permet de voir quelle est la limite de la logique utilisée ici, à savoir une carte Arduino 8bits - 16Mhz. Ceci permettra de connaître la Vitesse maximale possible pour une chaîne cinématique donnée et permettra également de comparer les logiques de commandes entre elles.

Principe du test

Pour mémoire, le driver de moteur pas à pas reçoit de la logique de commande 3 broches de commande typiquement, à savoir :

  • Enable : qui active ou pas l'étage
  • DIR : qui fixe la direction de fonctionnement de l'étage
  • STEP : qui reçoit la cadence d'enchaînement des pas, chaque front montant entraînant le passage au pas suivant.

Assez logiquement, GRBL utilise les broches de la carte Arduino pour contrôler les moteurs selon ce schéma :

Le montage du test

Ici, nous allons visualiser la fréquence de pulse (broche STEP) d'un étage, par exemple X, donc la broche qui va nous intéresser est la broche STEP X, à savoir la broche 2 de la carte Arduino. Pour visualiser cela nous utiliserons un oscilloscope, selon :

Aspects mathématiques

  • La fréquence de pulse d'exprime en Hz, à savoir steps/seconde.
  • Le firmware GRBL exprime les vitesses mm/min soit 1/60 mm/seconde
  • Le paramétrage de l'axe se fait en steps/mm.

En fixant le paramétrage de l'axe à 60 steps/mm, la vitesse V en mm/min passée en paramètre F donnera la fréquence : V mm/min * 60 steps/mm = 60 steps/min soit 1 step/sec donc la vitesse V sera la valeur de la fréquence de pulse.

Procédure du test

Pour ce simple test, on communique avec GRBL depuis le terminal série Arduino. Délocker avec $X :

On commence par adapter le paramétrage de GRBL pour notre test, à savoir :

  • fixer la vitesse de X à 60 steps/mm avec la commande $100=60
  • fixer également la vitesse max de X à une valeur élevée pour éviter tout "blocage" par le firmware du pulse max avec la commande $110=600000

Une fois fait on vérifie la bonne prise en compte avec $$ :

On envoie des ordres successifs de mouvement avec des vitesses de plus en plus élevées via le paramètre F et on essaie de trouver le point de blocage, c'est à dire la fréquence max de pulse au delà de laquelle il n'y a plus d'augmentation, même si on augmente la vitesse.

Pour cela :

  • on commence par envoyer un ordre G91 pour passer en relatif (çà simplifie le comportement de GRBL dans notre cas)
  • on envoie une série d'ordre de la forme G1 X100.0 F8888 : adapter la valeur en X en fonction de la durée du train de pulses et la valeur de F est à adapter en fonction du test.

Afin de valider ce qui ci-dessus (à savoir que la vitesse en mm/min passée en paramètre F correspond à la fréquence steps/sec avec les paramétrages utilisés), on peut envoyer un G1 X100 F1000 ce qui donne :

Le carreau fait ici 1ms en largeur, donc on a bien un pulse de 1000 hz. On a par ailleurs 1V en hauteur donc niveau 5V ce qui est logique avec Arduino UNO. Tout est OK donc.

A présent avec l'ordre G1 X1000 F10000 on a bien :

A noter que l'on voit bien la rampe d'accélération qui peut être un peu longue si trop basse... donc on peut monter l'accélération sur X avec l'ordre $120=1000 par exemple qui fixe l'accélération à 1000 mm.s⁻² en X.

L'ordre G1 X5000 F20000 donne bien 5 carreaux à 10µs soit 50µs de période :

L'ordre G1 X5000 F25000 donne bien 4 carreaux à 10µs soit 40µs de période :

L'ordre G1 X5000 F30000 donne bien 3,3 carreaux à 10µs soit 33µs de période :

L'ordre G1 X5000 F40000 donne bien 2.5 carreaux à 10µs soit 25µs de période :

On atteint une limite vers 42000 Hz avec un plantage de l'Arduino au-delà : 42000 Hz passe mais 43000Hz plante...

Conclusion

Avec GRBL sur Arduino UNO, on a un pulse max à 42000 Hz.

Ceci veut dire par exemple qu'avec un moteur 200 pas en 1/16ème pas (soit 3200 pas/tour) couplé à une VAB au pas de 4mm/tour, on peut espérer une VMax de 42000/3200 * 4 = 52,5mm/sec soit 3150 mm/min... et ceci sans prendre en compte une quelconque limite mécanique. Avec un entraînement poulie/courroie de 40mm/tour, on peut espérer une VMax de 525mm/s soit 31,5m/min... Au passage, c'est le cas du X et du Y de la Prusa i3... donc avec les impressions à 60mm/sec on n'est qu'à 15% des possibilités de vitesse de l'électronique.

Info

Les valeurs estimées ici sont de plus des vitesses "plein axe", sachant qu'en pratique on sera plus fréquemment sur des vitesses inférieures sur chaque axe.