Quando si utilizza l’encoder, in abbinamento a un motore che sposta un dispositivo, avanti e indietro, lungo un asse, senza perdere il riferimento iniziale, è importante conoscere se l’encoder ha perso il passo.
L’utilizzo della gestione dell’encoder con Quadencoder::CheckforChange, segnala l’errore della perdita di passo, restituendo il valore “255”.
Gli oggetti e le variabili utilizzate per il programma sono simili a quelli utilizzati nel programma di test, con l’eccezione della variabile “Cambiastato” che diventa di tipo Byte e l’aggiunta della variabile “SegnalaErrore”, di tipo Bool.
oggetti da inserire nel 3D System panel
$PORT.B7
Variabili da utilizzare nel programma
Count
Delay
SegnalaErrori
SwA
Changed
Interrupt IOC:
Collego l’uscita A e B dell’encoder, a due pins di una porta, disponibile, del microcontrollore.
In questo esempio ho selezionato i pins 0 e 1 della porta B.
porte IOC disponibili
in verde sono visibili i pins utilizzabili, sulla porta B
creazione della macro richiamata dall’Interrupts
macro Check_encoder
Quando i segnali presenti ai pins 0 e 1 della porta B, cambiano stato logico, il Component macro
Changed=QuadEncoder::CheckForChange()
Dipendente dalla variabile Changed, aumenta il valore della variabile Count.
La funzione Decisione controllo se è stato generato il valore 255.
If Changed = 255?
dovuto alla perdita di passi dell’encoder, con la funzione Calcolo, imposta la variabile SegnalaErrori a 1.
CheckForChange: controlla se il segnale in uscita dall’encoder ha cambiato stato logico.
Restituisce 1, se è cambiato o non è cambiato, 255 se c’è un errore
Parametri: non ci sono parametri.
Valore di ritorno: Byte.
Diagramma di flusso
Ciclo principale:
Loop: While = 1
B7 -> SwA.
Che controlla lo stato logico presente sul pin 7 della porta B, cui è collegato il pulsante Sw_push.
if SegnalaErrore >= 1
per controllare se è avvenuto un codice di errore 255 da CheckForChanged.
In caso di errore
Cursor 10,0
LCDI2C::PrintString(“Perdita di passi”)
visualizzazione della scritta ”perdita di passi” alla posizione 10 della riga 0 del display.
Se non ci sono errori,
If Count = 360
Se il contatore raggiunge il numero 360 (giro completo del potenziometro presente sul simbolo dell’encoder).
QuadEncoder::ResetCounter
Count = 0
Queste operazioni resettano a zero il Counter e la variabile Count.
l’istruzione Rotational Increment, agisce sul movimento dell’encoder.
serve per controllare il movimento lungo un asse meccanico, dopo aver fissato il punto di riferimento con un microswitch.
1.000000
In Panel Properties dell’encoder nella impostazione Simulation, imposto il Rotation Increment = 1.000000 per far corrispondere il numero 360 con un giro completo dell’encoder.
CICLO DI RITARDO
eseguo 1000 volte l’istruzione prima di iniziare un nuovo ciclo .
If Delay > 1000
fintanto che il valore 1000 non è superato
Delay = Delay + 1
incrementa il valore della variabile Delay di 1 , ad ogni ciclo
raggiunto il valore Delay > 1000
Delay = 0
azzera la variabile Delay.
C Code
Riccardo Monti