|
PrésentationAVRastro 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 :
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ésoudreMa 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 à pasJ'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'électroniqueJ'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. RaquetteChoix du microcontrôleurJ'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. Afficheur et clavierL'afficheur LCD est un modèle standard rétroéclairé. Les
images sont pompées du commerce qui m'a vendu les composants. 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 : 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. JoystickCe joystick analogique possède deux axes : 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'astresIl 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, calendrierC'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 puissanceLe boitier de puissance alimente l'ensemble et fait fonctionner tous les composants. Moteurs pas à pas ascension droite et déclinaisonLes moteurs sont alimentés par un 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. 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 +. 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). 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%. 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 : 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) : 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. 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 commandeJ'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ètreIl 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écoupageLes 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éalisationVoici les deux schémas correspondant à ces réflexions : Voici quelques photos des prototypes. Ils ont été réalisés sur des plaques à pastilles pour pouvoir facilement faire des modifications. Rédaction en cours, c'est loin d'être fini...
|
La dernière mise à jour de ce site date du 14/10/2007. © Pierre Nerzic 2007.