martedì 6 ottobre 2015

Correzione dell'errore periodico nel sistema di tracking del telescopio (PEC)

Tutti i sistemi di tracking di telescopio sono affetti da errori periodici dovuti principalmente a piccole eccentricità negli ingranaggi. Questo provoca problemi durante le esposizioni fotografiche prolungate generando un "mosso" nel senso della ascensione retta dovuto ai periodismi con tempi comparabili alla durata dell'esposizione fotografica. L'elemento che spesso disturba di più è la vite senza fine del riduttore che è connessa meccanicamente con l'albero del motore. Nel caso del telescopio che stiamo realizzando l'albero del motore completa un giro in 78 secondo, un tempo che direttamente comparabile con la durata tipica delle esposizioni da 120 a 240 secondi.

Per risolvere questo problema adottiamo una soluzione meccanica/elettronica già applicata con successo al telescopio Schmidt dell'Osservatorio di Bassano Bresciano.

Insieme dei pezzi meccanici del gruppo motore riduttore

Nella progettazione del gruppo motore riduttore è stato inserito sull'albero un disco con una piccola fessura ed una forcella ottica che sente il passaggio della fessura nel giro del motore.

Particolare della forcella ottica

Particolare del disco con fessura 

Per effettuare la correzione occorre rilevare sperimentalmente il valore dell'errore e metterlo in relazione con la fase della rotazione del motore rilevata dal segnale della forcella ottica.
L'errore più essere ben approssimato con una sinusoide della quale occorre calcolare ampiezza e sfasamento.

Errore rilevato per telescopio Schmidt

In questo progetto l'albero del motore compie una rotazione con 3200 passi da 1/16.
All'oggetto StepAxis è stato aggiunto una funzione che riceve ingresso l'ampiezza e la fase della sinusoide. Con questi valori è compilata una tabella di 3200 elemento con il numero di passi di compensazione dell' errore per ogni punto della rotazione.

/*---------------------------------------------------------------------------

  enable/disable PEC

---------------------------------------------------------------------------*/

void StepAxis::PEC( bool Enable, int Amplitude, int Phase, int StepOneRotation)
{
  double                        CurrPhase;              // current Phase
  double                        CurrAmplitude;      // current Amplitude;
  int                               Offset;                    // sin offset fo soft start
  int                               i;

  PECEnable = Enable;                               // store enable
  PECStepOneRotation = StepOneRotation;   // store StepOneRotation

  if ( PECEnable == true )                              // other actions only when enabled
  {      
    PECSyncDone = false;                                // sync need to be renew
    if ( StepOneRotation > STEPEXIS_MAX_PEC_TABLE )     // clamp for maximum steps
      StepOneRotation = STEPEXIS_MAX_PEC_TABLE;
      CurrPhase = Phase + (double)i*360.0/(double)StepOneRotation; // current phase in degree
      CurrPhase /= 180.0/M_PI;
      CurrAmplitude = sin(CurrPhase) * (double)Amplitude;
    // table computing
    for ( i=0; i<StepOneRotation; i++ )
    {
      CurrPhase = Phase + (double)i*360.0/(double)StepOneRotation; // current phase in degree
      CurrPhase /= 180.0/M_PI;
      CurrAmplitude = sin(CurrPhase) * (double)Amplitude;
      if ( i == 0 )
        Offset = CurrAmplitude;
      PECTable[i] = CurrAmplitude - Offset;    
    }
  }
}


Nella gestione del movimento è rilevata la posizione in cui arriva il segnale dalla forcella ottica e memorizzato il valore dell'encoder virtuale nella variabile (PECSyncPhase).

// detect strobe rising when PEC enabled and positioning is finished
if ( PECStrobe == true && PECOldStrobe == false && PECEnable == true && Phase == PHASE_STOPPED )  
  {
    PECSyncPhase = Encoder;             // store sync value from encoder      
    PECSyncDone = true;                     // PEC syncronization is done 
  }
  PECOldStrobe = PECStrobe;

A questo punto la correzione dell'errore diventa un gioco da ragazzi. E' ricavato PECIndex come modulo sulla distanza tra il setpoint di posizione che si intende impostare (Temp3) e la posizione individuata dalla forcella ottica (PECSyncPhase). Il modulo è fatto sul numero di passi per un giro di rotazione (PECStepOneRotation). Il valore di PECIndex sarà in questo caso sempre compreso tra 0 e 3199.
Con questo valore si consulta la tabella e si ricava il valore di correzione (PECValue) e lo si aggiunge al set point di posizione stesso.

 if ( TrackingEnable == true && PECEnable == true && PECSyncDone == true )
  {
    PECIndex = (Temp3 - PECSyncPhase) % PECStepOneRotation;
    PECValue = PECTable[PECIndex];
    Temp3 += PECValue;
  }

  ApplySetpoints( Temp3, VelocitySetpoint ); 

Questa tenica applicata al telescopio Schmidt ha portato a questo risultato


Alla sinistra un ingrandimento di una foto ad un campo stellare senza controllo PEC abilitato, a destra lo stesso campo con controllo PEC abilitato

Questa versione di software si può scaricare all'indirizzo
http://www.osservatoriobassano.org/TCS2015/SoftV05.zip