giovedì 17 settembre 2015

Terzo passo: posizionamento con regolazione della velocità

Terza versione provvisoria del software.

Dopo la pausa estiva ho ripreso il lavoro implementando il puntamento con la gestione completa degli assi di ascensione retta e di declinazione. Il movimento ora avviene con la possibilità di selezionare la velocità massima, tale  velocità è raggiunta con una rampa di accelerazione. La stessa rampa è usata durante la decelerazione. E' gestito il cambio dinamico del passo da intero a 1/16 di passo.
Il cuore della è l’oggetto StepAxis (in linguaggio C++) che permette di muovere un motore passo passo come un asse di telescopio. Sono istanziati due di questi oggetti, uno per l’ascensione retta ed uno per la declinazione. La gestione prevede in varie situazioni delle attese temporali, queste sono realizzate senza introdurre ritardi (tipo funzione Delay), ma con una serie di macchine a stati. Così l’esecuzione risulta essere veloce senza bloccare le altre operazioni svolte dalla CPU

Lo schema mostra le parti più rilevanti del software nell'oggetto StepAxis.

Due sono le funzioni ad alto livello che l’oggetto dispone per il posizionamento del motore:
Goto.  Riceve in ingresso la coordinata da raggiungere e la velocità massima da utilizzare (in percentuale sulla massima possibile). Converte la coordinata da Ore/minuti/secondi (o gradi/minuti/secondi) in passi di motore. Converte la velocità massima in step al tempo di campionamento. La funzione termina rapidamente lasciando le informazioni all’interno dell’oggetto insieme il comando di esecuzione del movimento. Quando la funzione esce il movimento non è ancora iniziato
Stop. La funzione termina rapidamente lasciando il comando di stop con rampa di decelerazione  all’interno dell’oggetto. Quando la funzione esce lo stop non è ancora iniziato.
Le altre funzioni coinvolte nella movimentazione sono:
MoveManagement. E' chiamata rigorosamente una volta ogni 1/100 di secondo. Il suo campito è di gestire la generazione della traiettoria di posizionamento. Riceve in ingresso: la velocità di partenza, l’accelerazione, la velocità massima e la posizione da raggiungere. Con questi parametri, tramite una macchina a stati costruisce un profilo trapezoidale con rampa di accelerazione, velocità di crociera e rampa di decelerazione. La rampa di decelerazione inizia quando lo spazio residuo del movimento è quello corretto per terminare la decelerazione sulla posizione finale. Il movimento inizia applicando immediatamente la velocità di 200 hz in modo da superare di getto le frequenze di risonanza tipiche del motori passo passo. Quando è ricevuto un comando di stop la rampa di decelerazione inizia immediatamente.
ApplySetpoints. E' chiamata esclusivamente da MoveManagement. Riceve in ingresso i setpoint di posizione e velocità da applicare ai motori.  Quando la velocità è superiore ad un certo valore essa viene usata in modo esclusivo per la determinazione della frequenza di clock (controllo di velocità). Quando la velocità è inferiore, è utilizzato solo il set point di posizione (controllo di posizione). In caso di ascensione retta la funzione è in grado di cambiare dinamicamente lo step tra intero e 1/16. Tutte queste funzionalità sono realizzate tramite un’altra macchina a stati. In alcune commutazioni di segnali la macchina ha bisogno di tempi di attesa. In queste condizioni è attivato un segnale di attesa che raccolto dalla funzione MoveManagement che sospende la generazione del profilo di posizionamento. Così facendo si evita accumulo di errore tra la posizione richiesta e quella effettiva.
OutputForDriver. E' la più critica. E’ chiamata all’interno dell’interrupt temporizzato che scatta ogni 100 us. Lo scopo è quello di creare il segnale di clock regolare con jitter pressoché nullo. I motori passo passo sono piuttosto permalosi e non sopportano segnali di clock irregolari o brusche variazioni di velocità, specie alle alte velocità. La funzione riceve in ingresso : il numero di impulsi che devono essere emessi, la distanza temporale tra un impulso ed il successivo e di quanto varia il conteggio ad ogni colpo di clock (nel caso di cambio tra passo intero e 1/16). La funzione restituisce il valore di conteggio encoder (simulato) relativo alla posizione del motore e l’indicazione di emissione impulsi di clock termina. All’interno è attiva una ulteriore macchina a stati.


In questo video è possibile vedere il software Polypus ce gira su PC, connesso al sistema TCS105. In partenza il telescopio e puntato sulla stella Belatrix, eseguendo in puntamento sulla stella Betelgeuse si può vedere:

  • il motore di ascensione retta che si muove a 1/16 di passo sino ad un punto di sincronismo in cui è possibile cambiare il passo
  • cambia la movimentazione in passi interi
  • accelera la velocità da 200hz a 500hz
  • mantiene la velocità sino nel pressi della coordinata finale
  • decelera da 500hz a 200hz
  • cambia la movimentazione a 1/16 di passo
  • esegue il posizionamento finale di precisione
Questa versione di software si può scaricare all'indirizzo
http://www.osservatoriobassano.org/TCS2015/SoftV03.zip



Nessun commento:

Posta un commento