Démo d'avancement du goto prédictif...

Ce n’est pas encore parfait mais on approche... :)


https://www.youtube.com/watch?v=CCw-PU-hffA

L'ATmega2560 de la MKS MINI au taquet...

Après avoir bien poussé les optimisations de code, voici un benchmark montrant les impulsions d’un des moteurs pas à pas poussées au maximum des capacités de la carte Arduino (le mode PWM permettrait d’aller encore plus loin mais sans aucun retour pour le comptage de pas donc incompatible avec les besoins du projet)...

arduino-moteur-pas-a-pas-frequence-max

Interprétation de la mesure à l’analyseur logique:
Le code exécuté dans l’interruption en elle même prend 3,375us (remise à zéro du compteur du timer comprise) avec une périodicité d’à peine 8us soit plus de 123 000 impulsions par seconde!!! On arrive ici à la limite extrême en se limitant à un seul moteur. En prenant un peu de marge cela signifie qu’en déplacement bi moteurs (A.D. et déclinaison en simultané) pour du goto on peut sans complexe espérer atteindre les 50Khz avec encore un peu de temps CPU pour le reste du programme.

Pour atteindre de telles performances, le code des interruptions moteur a été réduit à sa plus simple expression (comptage de pas + envoi impulsion moteur). Toutes les fonctions d’écriture -digitalWrite()- ont été optimisées avec l’excellente librairie Arduino-GPIO. Enfin, la gestion des accélérations/décélérations, changement de direction, activation/désactivation moteur, ont été dévolues à un timer dédié servant de « modulateur de fréquence » comme le montre cette capture...

accel-timer

Les avantages:
- Le fonctionnement des moteurs à vitesse constante est très peu gourmand en temps processeur.
- Cela ouvre la porte pour faire sans souci du goto en microstepping 1/16 là où d’autres projets sont contraints de basculer à la volée en 1/2 pas voire même en fullstep pour tenir la cadence.
- L’intégration du rattrapage de jeu et la correction d’erreur périodique pourront se faire au niveau du timer d’accélération sans impacter les performances des interruptions moteur.

TeenAstro utilise la librairie Ephemeris

Pour changer un peu, j’ai le plaisir de vous présenter le superbe projet TeenAstro de Charles! :)

teenasto


Si comme moi vous êtes amateur du système FS2 conçu et commercialisé par Astro Electronic, l’hommage ne vous aura pas échappé... :)

raquette-TeenAstro raquette-fs2


Personnellement, j’utilise encore un FS2 sur la monture ZX4 Trassud supportant mon Mewlon 250. Bien que vieillissant, il est reste très agréable à l’usage... :)

mewlon-250-fs2

Donc pour faire simple, TeenAstro c’est le FS3 que beaucoup ont longtemps attendu. En se basant sur une version modifiée du code du projet OnStep, Charles s’est lancé dans l’aventure de créer un kit reprenant le concept de simplicité et d’efficacité du FS2 mais mis au goût du jour.

Et pour les calculs d’éphémérides et conversions astronomiques c’est ma librairie Ephemeris qui s’y colle. Cela fait plaisir de la voir utilisée sur un beau projet comme ça! :)

Vous pouvez découvrir tous les détails et avancées de TeenAstro dans cette discussion initiée par Charles sur le forum webastro.net...
https://www.webastro.net/forums/topic/158652-teenastro-une-variante-onstep-en-kit/

Démo gestion des moteurs pas à pas du télescope

Bien. Depuis quinze jours, j’ai effectué un gros gros taf sur la gestion des moteurs. J’ai repensé en profondeur l’algorithme s’occupant des interruptions timer. Illustration en vidéo... -Désolé pour la qualité du son. Mon PC n’aime pas la chaleur actuelle.-

https://www.youtube.com/watch?v=dwV1hC2yCYI

Le résultat est sans appel en terme de performances mais aussi de simplicité de code. L’ajout du rattrapage de jeu et la modulation de fréquence pour la correction d’erreur périodique devrait être une partie de plaisir par la suite. :)

Dans l’immédiat, je travaille maintenant sur le goto car j’en ai besoin pour d’autres projets. Mon idée serait de ne pas compter les pas à la volée en regardant si on est pas trop loin mais plutôt de créer un modèle mathématique permettant de déterminer le temps de déplacement nécessaire à la milliseconde près pour chaque axe. L’idée est séduisante sur le papier mais dans les faits cela demande beaucoup de précision.

Affaire à suivre...

Contrôle de l'accélération et estimation des pas pour le goto

Les choses commencent à devenir intéressantes. J’évoquais dans le précédant billet l’intérêt d’un micro contrôleur en terme de précision. L’avantage indéniable des moteurs pas à pas est comme leur nom l’indique « les pas ». En comptant chaque pas au niveau logiciel, on peut contrôler la position avec une grande précision. Mais cette force est aussi une faiblesse car qui dit contrôle dit responsabilité. On ne peut pas dire à un moteur pas à pas d’aller à un endroit précis, d’accélérer ou de décélérer de façon autonome en le branchant et en claquant des doigts. Tout doit être géré par le programme.

Reprenons l’exemple d’une accélération comme celle que j’utilise pour ma monture...

courbe-acceleration


Dans la réalité, pour obtenir un tel résultat, je dois progressivement augmenter la fréquence des pas moteur de 0 à 100% de la vitesse souhaitée. Le graphique ci-dessous montre des paliers de 0.1s d’accélération pour passer de 0 à 400Hz (vitesse solaire de ma monture avec micro stepping de 1/16) en 2 secondes.

comptage des pas acceleration moteur


Astuce: Après avoir étudié la question, j’ai fait le choix sur Arduino d’utiliser le Timer 0 pour gérer les accélérations/décélérations/inversions de mes moteurs. Il faut savoir que ce timer matériel est notamment utilisé par les fonctions delay(), millis() et micros() sur Arduino. On peut néanmoins l’utiliser pour peu de ne pas modifier sa fréquence (calée à 1ms ) en le programmant pour lever une seconde interruption sur la même base de temps...

// Timer0 is already used for millis() - we'll just interrupt somewhere
// in the middle and call the "Compare A" function below
OCRA = 0xAF;
TIMSK |= _BV(OCIE0A);

Le nombre de timers matériels étant très limités sur une carte Arduino (seulement 4 timers sur Uno et 6 timers sur les cartes MEGA) c’est donc un luxe non négligeable de ne pas en monopoliser un juste pour le timing des variations de vitesse. Sur ma MKS MINI, il me reste donc 5 timers matériels soit la possibilité de piloter les 4 drivers de moteur pas à pas avec une grande précision.


A la fin de mon accélération, j’aurais donc théoriquement parcouru la somme des pas des paliers de mon graphique soit... 201 pas. Et le goto dans tout cela? Et bien le comptage de pas c’est la base bien sûr car comme dans la vie: pour savoir où l’on va, il faut savoir d’où l’on vient! -je suis d’humeur littéraire aujourd’hui. Profitez, c’est cadeau.- On peut donc évaluer de façon assez précise, au niveau logiciel, le temps nécessaire pour atteindre un point donné et s’épargner l’achat de couteux encodeurs de position.

Aujourd'hui c'est optimisation...

On me demande souvent pourquoi avoir choisi de développer sur plateforme Arduino MEGA? Après tout, on fait quoi avec 16MHz et 8Ko de SRAM!?! Un Raspberry PI serait hachement plus puissant!

Et bien oui mais non. Il n’y a pas que la puissance qui compte. Un Arduino ne fait pas grand chose mais il le fait bien. C’est un véritable environnement temps réel. Bien maîtrisé, il est capable de piloter des entrées/sorties avec une régularité et une finesse que n’atteindra jamais un puissant PC qui lui est certes très performant mais qui doit faire beaucoup de choses à la fois (sans même qu’on le sache).

Dans le cadre de moteurs pas à pas par exemple, la régularité est primordiale. La capture ci-dessous montre les pulsations de chaque pas moteur en ascension droite et déclinaison sur mon projet. La précision obtenue est supérieure à la micro seconde.

100x-sideral-speed


Voilà c’était la pensée du jour. Je retourne à mon optimisation de code pour grappiller de précieux cycles d’horloge. Au passage, si vous codez sur Arduino de manière un peu avancée, je vous recommande de tester l’excellente librairie Arduino-GPIO de Mikael Patel: https://github.com/mikaelpatel/Arduino-GPIO. Elle permet de remplacer notamment les fonctions digitalRead() et digitalWrite() de la librairie Arduino par des accès hyper optimisés.

Saturne et Mars au CN-212

Deux photos sans prétention de Mars et Saturne prises le 15 Août soir pour le plaisir. Le seeing était tout juste correct mais c'était l'occasion de tester ma barlow powermate 2x avec l'APN et la nouvelle électronique.

saturne-cn212-takahashi-mks-mini

mars cn212 takahashi mks mini arduino

CN-212 à F/D 12,4 + Barlow 2x + 5D MKIII. Shoot en mode vidéo RAW Magic Lantern et zoom 3x. Traitement avec MLVToMovie, AS2 et Registax 6.

D’ailleurs pour rappel, si vous êtes sur Mac, sachez que j’ai mis à dispo des versions Mac d’AS2, Registax 6 et même Iris...
http://mlvtomov.eliotis.com/goodies/index.html

MKS MINI sous les étoiles

Premier crash test sous le ciel avec le nouveau prototype 2018 basé sur une carte contrôleur MKS MINI pour imprimante 3D. Il reste pas mal de chemin à faire côté logiciel mais déjà le gain est indéniable par rapport à l’électronique d’origine: 4 vitesses au lieu de deux, gestion des moteurs en micro stepping 1/16, mise au point motorisée, courbes d’accélération/décélération sinusoïdale donnant des mouvement très doux sans aucun accoup de freinage. A l’usage c’est vraiment un plaisir. :D

proto-em10-mk-mini-4

proto-em10-mk-mini-5

Aperçu de la courbe d’accélération de type sinusoïdale...

courbe-acceleration

Comme le montre le graphique, on obtient un démarrage et un arrêt très doux offrant un bon amortissement de l’inertie du télescope. Pour plus d’infos, voir cet ancien billet: Accélération/décélération: Sinus or not Sinus?

MKS MINI aux commandes...

Les choses avancent doucement mais surement. La mise au point motorisée est maintenant intégrée. Dans l’immédiat, le contrôle se fait avec la manette SEGA en attendant de reprendre la partie raquette tactile qui viendra compléter le système.

https://www.youtube.com/watch?v=ckrY5U3mfkk

Le projet a bien évolué depuis ses débuts. Simplifions, simplifions, simplifions! Reste à intégrer une led d’éclairage pour le viseur polaire, prévoir une connectique pour le câble de la motorisation de la mise au point et ajouter la deuxième connectique DB-9 pour la future télécommande tactile. A partir de là on sera pas mal niveau matériel côté monture.

detail-motorisation-mks-mini

Test motorisation mise au point du CN-212

https://www.youtube.com/watch?v=uoLb24RszUE

Vref pour MKS MINI V2.0

Attention pour les personnes intéressées par l’usage d’une MKS-MINI. Les premières versions utilisaient des drivers DRV8825. La version 2 utilise des drivers HR4988. Il en résulte que le calcul Vref permettant d’ajuster l’intensité du courant a changé. La formule est dorénavant:

I = Vref / 0.8.



MKS mini V2.0 makerbase

Documentation Makerbase:

datasheet-mks-mini-v2.0-makerbase

Traduction:

« 1. Algorithme actuel du driver 4988: i = vref /0.8.
Vref par défaut est environ 0.8v.
Le courant par défaut est 1.0A. Le courant maximal est 2.0A.  »


Source: https://github.com/makerbase-mks/Datasheet/blob/master/Chinese%20datasheet/MKS%20MINI%20V2.0%20数据手册.pdf