AVRastro

 

Accueil
Astro
TimEOS

Présentation

AVRastro est un dispositif permettant de piloter finement une monture équatoriale : il gère les deux moteurs pas à pas afin de suivre le mouvement du ciel. Voici quelques caractéristiques :

  • entraînement direct des moteurs : pas d'engrenages, ni de courroie, uniquement un coupleur d'axes sans jeu mécanique
  • commande en micro-pas : le moteur pas à pas tourne très régulièrement
  • gestion du moteur de mise au point sur un crayford William Optics
  • joystick, clavier, afficheur LCD : maniement très facile
  • PEC : correction d'erreur périodique après apprentissage des défauts
  • catalogue d'astres : messier, ngc, étoiles brillantes

Ce dispositif a été réalisé avec des microcontrôleurs AVR d'Atmel : des ATtiny2313 pour le contrôle des moteurs et un ATmega32 pour gérer l'ensemble.

Je me suis inspiré d'un autre dispositif très connu, PicAstro qui est construit à partir des processeurs PIC de Microchip.

Pour l'instant, j'en suis à réaliser le logiciel par petits morceaux, en fonction du temps disponible et des idées. Ce qui suit est donc provisoire, susceptible d'être changé.

Problème à résoudre

Ma monture Mizar n'est pas exploitable en ciel profond. La dérive est bien trop aléatoire et trop grande pour pouvoir dépasser quelques secondes de pose. J'ai donc décidé de suivre l'exemple de Picastro : remotoriser et piloter finement les moteurs.
Moteurs pas à pas

J'ai acheté des modèles 400 pas par tour, 0.9° par pas et je les ai monté en prise directe sur la vis sans fin. C'est un essai.

Conception de l'électronique

J'ai prévu deux parties reliées par un cable souple : une raquette et un boitier de puissance. La raquette comprend un afficheur LCD 2 lignes de 16 caractères pour afficher les coordonnées visées par la monture et permettre de choisir autre chose avec un système de menu. Le boitier de puissance est le plus complexe : il commande les deux moteurs pas à pas ascension droite et déclinaison, il commande aussi un moteur de mise au point, une résistance chauffante. Voici davantage de détails sur ces éléments.

Raquette

Choix du microcontrôleur

J'ai fait un choix arbitraire, sans vraiment regarder les autres possibilités, c'est un ATmega 32 qui fera vivre la raquette. Je l'ai choisi parce qu'il est rapide, son code machine est compact et puissant. J'ai besoin de nombreuses entrées/sorties et de pouvoir mettre des librairies mathématiques pour les calculs de coordonnées.

Voici une image de ce contrôleur et son brochage. Ce qui m'intéresse : 8 convertisseurs A/N 10 bits et trois ports d'entrée/sorties. Deux timers 8 bits avec PWM et un timer 16 bits à deux sorties. Ca laisse pas mal de liberté dans l'attribution des fonctions. Il contient 16384 mots pour les programmes, c'est confortable par rapport à ce que j'ai besoin, mais seulement 2Ko de RAM, ce qui est très peu. 1Ko d'eeprom pour mémoriser la configuration, c'est très bien.

ATmega32-16PUbrochage du ATmega32

Afficheur et clavier

L'afficheur LCD est un modèle standard rétroéclairé. Les images sont pompées du commerce qui m'a vendu les composants.

Il est assez grand pour afficher les textes : nom du menu courant, coordonnées célestes, valeurs...

Il fonctionne en mode 8 bits, il faut donc connecter 12 fils : D0-7, RS, RW, E et BL le rétro-éclairage. J'ai choisi d'utiliser le port B pour les données, et le poids fort du port D pour le contrôle. Le rétroéclairage est réalisé de la même manière que sur TimeEOS, avec un PWM produit par un timer.

Le clavier est construit à l'aide d'un potentiomètre :
joystick analogique 2 axes
et de 4 boutons poussoirs :
joystick analogique 2 axes

Le potentiomètre permet de choisir le menu ou le sous-menu. Le bouton vert permet de descendre dans un sous-menu, le bouton rouge permet d'en sortir. Les deux autres boutons permettent d'incrémenter ou décrémenter les valeurs.

Sur le plan technique, le potar est connecté à l'entrée analogique ADC3, les boutons sont reliés à port A4-7. Il suffit de consulter deux registres dans l'ATmega32 pour avoir la totalité des informations : position du menu et boutons enfoncés.

Joystick

Ce joystick analogique possède deux axes : 
joystick analogique 2 axes
Il permet de commander les mouvements de la monture plus agréablement que les boutons tout ou rien des raquettes classiques. Ici, la vitesse de mouvement de la monture dépend de l'angle du manche. Avec une bonne configuration de la sensibilité, on peut aussi bien faire du suivi fin que des déplacements rapides. Pour ajuster la sensibilité, j'ai rajouté un potentiomètre : dans un sens, le joystick devient très peu sensible, il faut mettre le manche dans le coin pour bouger vite, dans l'autre sens le joystick devient très sensible.

Normalement le joystick sert à orienter la monture, mais dans certains menus, il permet de saisir des données, par exemple les coordonnées à rejoindre (menu goto).

Du point de vue technique, il faut seulement disposer de trois entrées analogiques (A/N) : deux pour le joystick et une pour le potar de sensibilité. C'est le logiciel qui gère les données : on lit des nombres entre 0 et 255 qui représentent directement l'angle des potars. Sur l'ATmega32, j'ai utilisé les pattes ADC0-2 pour ça.

Catalogue d'astres

Il s'agit d'une mémoire de 32Ko contenant tout le catalogue Messier et d'autres astres. En principe, on peut arriver à coder le nom et les coordonnées sur 16 octets, ce qui fait 2048 objets mémorisables, ce qui est largement suffisant.

Cette mémoire se trouve sur le bus I2C. Il est très facile de lire son contenu avec les librairies i2c fournies par Atmel (note AVR215).

Horloge, calendrier

C'est un circuit I2C qui donne l'heure et la date. Ca permet de convertir des coordonnées célestes en coordonnées terrestres, afin de savoir si un astre est visible et pour la mise en station, de viser des étoiles à l'est et au méridien.

Boitier de puissance

Le boitier de puissance alimente l'ensemble et fait fonctionner tous les composants.

Moteurs pas à pas ascension droite et déclinaison

Les moteurs sont alimentés par un L298.
L298 circuit de puissancebrochage du L298

Ce circuit amplifie le courant pour les deux bobinages des moteurs. Il lui manque juste des diodes rapides pour le protéger des retours d'induction.

C'est un microcontrôleur ATtiny2313 qui crée les signaux de commande pour le L298.

ATmega32-16PUbrochage du ATmega32

Vu du micro-contrôleur, il faut fournir deux signaux PWM ainsi que quatre valeurs logiques pour indiquer le quadrant de l'angle. Cette solution a permis de ne pas compliquer l'électronique, ni le logiciel. C'est expliqué dans ce qui suit.

Un moteur pas à pas bipolaire (le plus simple, celui que j'ai utilisé) contient deux bobines à angle droit qui encadrent un aimant tournant. Les extrémités sont A et B pour la première bobine, C et D pour la seconde. On alimente l'un des fils, les autres restant à la masse. Voici ce qui se passe quand on alimente successivement A puis C puis B puis D : le champ magnétique tourne et fait tourner le rotor au milieu. NB: les signes 0 et + signifient qu'on met une tension sur ces deux points, la masse au 0 et le +5V ou +12V sur le +.

position Aposition Cposition Bposition D

Il existe des circuits qui génèrent cette succession d'alimentations afin de tourner dans un sens ou dans un autre. Cette solution est dite par pas entiers : le moteur effectue des quarts de tour à chaque changement. La solution des micropas est décrite abondamment sur la toile. Elle consiste à alimenter simultanément les deux bobines mais avec une énergie différente : par exemple, soit un angle de 30° à faire, on met B=cos(30°)=0.7*5V et C=sin(30°)=0.5*5V. Les champs magnétiques des deux bobines s'additionnent et créent un champ orienté à 30° comme demandé, le rotor se place dans cette direction intermédiaire.

En fait, à l'origine, les moteurs bipolaires n'étaient pas destinés à faire des moteurs pas à pas, ils travaillaient en mode synchrone avec deux courants altenatifs sinusoïdaux déphasés de 90° (synchrone : leur vitesse de rotation = la fréquence des courants).

angle intermédiaire

Tout le problème est de produire ces courants variables avec un microcontrôleur : faire des sinusoïdes déphasées. On utilise généralement un signal PWM : pulse width modulation. Un PWM est un signal de haute fréquence fixe et de rapport cyclique variable. Le schéma suivant montre un signal pwm. La fréquence des fronts montants est constante, ce qui change c'est le rapport cyclique, c'est à dire le pourcentage du temps passé dans l'état haut : entre 0% et 100%. Ce % est indiqué en haut de la figure. Un signal carré possède un rapport cyclique de 50%.

principe du signal PWM

Ce qui est intéressant avec un PWM, c'est quand on l'intègre sur une durée assez grande, comme le fait un moteur : l'énergie que fournit le PWM varie selon le rapport cyclique. Si on veut arrêter le moteur, on met 0%, si on veut qu'il tourne à fond, on met 100%. Pour un moteur, il faut utiliser une fréquence assez élevée, de quelques dizaines de kilohertz. De cette façon, le moteur ne vibre pas, on entend un sifflement très aigu.

Les signaux PWM sont très facile à faire générer par un micro-contrôleur, il suffit d'utiliser un timer et de faire passer la sortie à un quand ce timer arrive à sa limite (overflow) et mettre la sortie à zéro quand le timer atteint un seuil précis (compare match). Par exemple, en 8 bits, overflow = 256 et match varie entre 0 et 255 pour représenter les %. L'ATtiny2313 demande de remplir deux registres pour mettre ça en marche.

Pour finir sur ce point, pour un moteur bipolaire, il faut générer quatre PWM de même fréquence mais déphasés de 90° entre eux de la manière suivante :

principe du signal PWM

Mais ca demande un contrôleur avec 4 sorties PWM identiques. Or le 2313 n'en a que deux paires, deux de 8 bits, deux de 16 bits. Comme j'ai besoin d'un PWM pour la mise au point et que tout peut être fait par logiciel, j'ai choisi de ne gérer que 2 PWM (OC0A et OC0B) et de rajouter un petit circuit logique pour créer les signaux manquants. Donc, en sortie du contrôleur, on doit génèrer ces 6 signaux (qu'on pourrait réduire à 4 si on avait des inverseurs, mais ça rajoute encore un autre circuit) :

principe du signal PWM

Il suffit d'un simple circuit logique de portes AND pour obtenir les signaux du moteur : A = EN_A et PWM_AB, B = EN_B et PWM_AB... Au final, voici le schéma de principe de la commande des moteurs et se reporter au schéma complet pour la réalisation.

principe de commande des moteurs

Comme il y a deux moteurs à gérer, il y a deux contrôleurs 2313. C'est très étonnant, mais c'est l'un des composants les moins chers de cette platine. Ils coûtent 2€20 pièce, tandis que les L298 coûtent presque 6€ pièce. Il vaut mieux ajouter un microcontrôleur et du logiciel plutôt que de la logique et de l'électronique.

Moteur de mise au point.

C'est un moteur à courant continu, qui tourne à une vitesse dépendant de la tension qu'on lui injecte. Je l'ai piloté par un L293D et deux sorties PWM de l'un des ATtiny2313 (OC1A et OC1B).  Le moteur s'arrête quand le rapport cyclique est égal à 0% dans les deux PWM. Il faut en changer un seul pour que le moteur se mette à tourner dans l'un des sens.

Relais de commande

J'ai eu envie de rajouter un relais pour alimenter ou non la résistance chauffante qui enlève la buée de l'objectif. Il suffit d'une sortie sur l'un des contrôleurs et d'un transistor avec sa diode de protection pour faire ça. La raquette permet de définir des cycles d'allumage et d'extinction de ce relais.

Intervallomètre

Il est très facile d'ajouter un CD4066 pour piloter un EOS350. Ce sont les mêmes concepts que pour TimEOS. Tout est piloté par logiciel : la raquette envoie une commande i2c au boitier de puissance pour déclencher les poses. Pour l'instant, je n'ai pas d'appareil, donc cette fonctionalité n'est pas programmée.

Correction de l'erreur périodique (PEC)

J'ai rajouté une mémoire I2C de 32Ko permettant de mémoriser les corrections de l'erreur périodique. Pour l'instant, je n'ai pas développé le code correspondant à ça. Le principe retenu est d'altérer l'angle de position du moteur : selon l'angle demandé, on positionne le moteur en avance ou en retrait.

Correction du jeu (backlash)

Le principe est d'ajouter un angle prédéfini quand on change de sens de mouvement.

Alimentation de puissance à découpage

Les moteurs demandant 2A sous 5V, il m'a fallu faire une alimentation à grand rendement. J'ai fait une alimentation à découpage. L'un des problèmes est le filtrage des parasites des moteurs entre eux et avec l'alimentation des circuits logiques. Après essais, il semble préférable de trouver des moteurs alimentés en 12V plutôt qu'en 5V, on perd quand même beaucoup d'énergie dans la chute de tension et les moteurs alimentés en PWM et l'alimentation fonctionnant sur le même principe ont tendance à se gêner...

Schéma de principe et réalisation

Voici les deux schémas correspondant à ces réflexions :

schéma de la raquette

schéma de la carte de commande des moteurs

Voici quelques photos des prototypes. Ils ont été réalisés sur des plaques à pastilles pour pouvoir facilement faire des modifications.

boitier de commande

raquette

vue d'ensemble


Rédaction en cours, c'est loin d'être fini...

Accueil | Astro | TimEOS

La dernière mise à jour de ce site date du 14/10/2007. © Pierre Nerzic 2007.