I sensori ad effetto Hall sono una delle opzioni di Feedback che offriamo nei nostri attuatori lineari per fornire informazioni su posizione e velocità. I nostri PA-04-HS e PA-100 dispongono di sensori ad effetto Hall nelle unità di serie. Inoltre, diversi altri nostri attuatori possono essere ordinati su misura con sensori ad effetto Hall.
CHE COS'È UN SENSORE AD EFFETTO HALL?
Un sensore ad effetto Hall è un componente elettronico che genera una tensione in base all'intensità del campo magnetico che lo attraversa. Quando questo sensore è abbinato a circuiteria di rilevamento delle soglie di tensione, può produrre un segnale a due stati. Nei nostri attuatori, il sensore ad effetto Hall è progettato per produrre un segnale a due canali, con le forme d’onda quantizzate in due stati binari: on oppure off. Questi due segnali salgono e scendono man mano che il motore elettrico ruota, con uno sfasamento di 90° tra loro, come mostrato sotto. La frequenza di questi impulsi, in relazione alla variazione di posizione nell’attuatore, dipende dalla risoluzione complessiva e varia tra i nostri diversi attuatori.
COME SI LEGGONO QUESTI SEGNALI HALL?
Come usare un sensore ad effetto Hall
Per leggere un segnale digitale su un microcontrollore esistono due metodi principali: polling e interrupt. Il polling è un metodo programmato in cui il microcontrollore controlla periodicamente lo stato di un ingresso per verificare se è avvenuta una variazione. Gli interrupt, invece, sono un meccanismo hardware che sposta immediatamente l’attenzione del programma del microcontrollore quando il segnale cambia su un ingresso. Entrambi i metodi hanno pro e contro e sono più adatti a determinate applicazioni. Nel nostro caso vogliamo conoscere l’esatto istante in cui un segnale cambia stato, quindi useremo gli interrupt. Per utilizzare un sensore ad effetto Hall con i microcontrollori Arduino si impiega un interrupt. Creando una ISR (Interrupt Service Routine), l’Arduino può eseguire immediatamente una sezione di codice quando viene rilevata una variazione definita su un ingresso specificato. Di seguito è riportato un esempio di ISR per Arduino; una versione modificata che instrada i segnali rilevati verso dei LED è un modo per testare un sensore ad effetto Hall.
Programmare un Arduino per leggere sensori ad effetto Hall - metodo con interrupt
|
// global volatile variables are needed to pass data between the // main program and the ISR's volatile byte signalA; // the pins that can be used with interrupts depend on the board you // are using // will detect a rising or a falling edge // to the opposite of the current state signalA = !signalA; |
COSA BISOGNA CONSIDERARE NELL'APPLICAZIONE?
Poiché i segnali che leggeremo saranno ad alta frequenza, ci sono alcune considerazioni da fare. Primo: quanto tempo impiegherà il programma a eseguire il codice nella ISR? Quanti segnali distinti richiedono una ISR? A quale frequenza di clock funziona il microcontrollore?
Un problema che può presentarsi con una ISR lunga è che l’interrupt venga attivato di nuovo prima che abbia terminato di eseguire il codice della chiamata precedente. Si raccomanda di mantenere nella ISR solo il codice strettamente necessario per evitare questo problema.
Nell’esempio di codice sopra, due segnali sono configurati con interrupt separati. Entrambi sono necessari per rilevare la direzione di movimento dell’Attuatore lineare: si verifica quale segnale passa da basso ad alto prima dell’altro. Lo svantaggio di abilitare gli interrupt su entrambi i segnali è che verrà eseguito il doppio del codice delle ISR. Nelle applicazioni in cui la direzione di movimento dell’Attuatore non è necessaria o è già evidente dal programma in esecuzione, è sufficiente configurare una sola ISR su un segnale.
Alcuni microcontrollori consentono di aumentare la frequenza di clock. La frequenza di clock determina la velocità con cui il microcontrollore esegue il programma. Se la frequenza dei segnali letti è elevata, potrebbe essere necessario aumentare la frequenza di clock per stare al passo. Tuttavia, è più efficiente dal punto di vista energetico utilizzare la frequenza di clock più bassa possibile compatibilmente con l’applicazione.
COSA SUCCEDE SE IL MICROCONTROLLORE NON È ABBASTANZA VELOCE?
Anche dopo aver tenuto conto delle considerazioni sopra, a volte il microcontrollore non è abbastanza veloce da eseguire il codice principale e stare al passo con le ISR. In questi casi può essere utile impiegare un microcontrollore aggiuntivo. Un microcontrollore può occuparsi delle ISR, leggere i dati e quindi trasmettere le informazioni necessarie a un altro microcontrollore, sul quale il codice principale può essere eseguito senza interruzioni.