Le test de suivi stellaire de la planchette équatoriale motorisée réalisé
sur Capella dans la nuit du 17 janvier fut très positif.
L'asservissement du moteur pas à pas est effectué par un code
Arduino qui inclut une correction de la dérive attendue du suivi stellaire. La correction consiste à considérer la développante du
cercle comme une succession de segments de droites. Voici le code
Arduino ci-dessous :
/*Routine Arduino pour Planchette équatoriale avec moteur pas à pas,
driver de moteur DRV 8825, microstepping à 32 µpas par pas,
utilisation de la bibliothèque de fonctions "accelstepper"
Rotation continue
Mais compensation de dérive
(succesion de segments de droite)
Rembobinage par bouton pressoir
Voir le blog "Astronomie par les trois bouts" :
https://astronomiebbb.blogspot.com/ */
// Inclut la bibliothèque "AccelStepper" :
#include <AccelStepper.h>
// Définit les connections Arduino destinées au contrôle du moteur pas à pas :
#define dirPin 2
#define stepPin 3
// Définit l'utilisation d'un driver (attribution de 1 au type d'interface) :
#define motorInterfaceType 1
// Définit la connection Arduino destinée au microstepping :
#define M012 4
// définit la variable rpm et lui attribue la valeur initiale 20
float Vmoteur=20;
// Définit la variable TempsRef et lui attribue le temps de la carte Arduino
long TempsRef = millis();
// Création du moteur dans le code Arduino :
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// Déclare la pin 8 comme lecture du bouton poussoir
pinMode(8,INPUT);
// Fixe la vitesse maximale du moteur (indispensable) :
stepper.setMaxSpeed(1000);
}
void loop()
{
if(digitalRead(8) == 1)
{
// Ajustement Vmoteur
if ((millis()-TempsRef)>86000) Vmoteur=20.001;
if ((millis()-TempsRef)>162000) Vmoteur=(0.0014709*((millis()-TempsRef)/600000)+19.9978723);
if ((millis()-TempsRef)>300000) Vmoteur=(0.0028689*((millis()-TempsRef)/600000)+19.9902650);
if ((millis()-TempsRef)>600000) Vmoteur=(0.0057442*((millis()-TempsRef)/600000)+19.9591370);
if ((millis()-TempsRef)>1200000) Vmoteur=(0.0095880*((millis()-TempsRef)/600000)+19.8822833);
if ((millis()-TempsRef)>1800000) Vmoteur=(0.0134501*((millis()-TempsRef)/600000)+19.7664368);
if ((millis()-TempsRef)>2400000) Vmoteur=(0.0173800*((millis()-TempsRef)/600000)+19.6109349);
// Fixe le microstepping :
pinMode (M012, OUTPUT);
digitalWrite (M012, HIGH);
// Fixe la vitesse de rotation en nombres de pas par seconde :
stepper.setSpeed(Vmoteur);
// Fait tourner le moteur à la vitesse définie par setSpeed():
stepper.runSpeed();
}
if(digitalRead(8) == 0)
{
// Inactive le microstepping :
pinMode (M012, OUTPUT);
digitalWrite (M012, LOW);
// Fixe la vitesse de rotation en nombres de pas par seconde :
stepper.setSpeed(-100);
// Fait tourner le moteur à la vitesse définie par setSpeed():
stepper.runSpeed();
// Reset les valeurs pour un nouveau suivi
Vmoteur=20;
TempsRef=millis();
}
}
Aucun commentaire:
Enregistrer un commentaire