How to Read the Signal from a Hall Effect Sensor Using an Arduino

Slik leser du signalet fra en Hall-effektsensor ved hjelp av en Arduino

Hall-effektsensorer er et av tilbakemeldingsalternativene vi tilbyr i våre lineære aktuatorer for å gi informasjon om posisjon og hastighet. Vår PA-04-HS og PA-100 har Hall-effektsensorer på standardenhetene. Mens flere av våre andre aktuatorer kan spesialbestilles med Hall-effektsensorer.

Se vårt utvalg av Arduino-mikrokontrollere for ultimat aktuatorkontroll!

HVA ER EN HALL-EFFEKT-SENSOR?

En Hall-effektsensor er en elektronisk komponent som genererer en spenning basert på styrken til magnetfeltet som strømmer gjennom den. Når denne sensoren er paret med en spenningsterskeldeteksjonskrets, kan et signal med to tilstander produseres. I vår aktuatorer, Hall-effektsensoren er konstruert for å produsere et tokanals signal med bølgeformene kvantifisert i en av to binære tilstander; på eller av. Disse to signalene vil stige og falle når den elektriske motoren roterer med en 90° faseforskjell mellom seg, som vist nedenfor. Frekvensen til disse pulsene, slik de er relatert til endringen av posisjon i aktuatoren, er avhengig av deres totale oppløsning og varierer mellom våre forskjellige aktuatorer.

Hall effect sensors 

HVORDAN LESES DISSE HALLSIGNALENE?

Slik bruker du en Hall-effektsensor

Når man leser et digitalt signal på en mikrokontroller, finnes det to hovedmetoder: polling og avbrudd. Polling er en programmert metode der en mikrokontroller periodisk sjekker tilstanden til en inngang for å se om det har vært en endring. Avbrudd er en maskinvaremekanisme som umiddelbart flytter fokuset til mikrokontrollerens program når signalet endres på en inngang. Hver av disse metodene har sine fordeler og ulemper, og hver har bruksområder de er bedre egnet for. I vårt tilfelle vil vi vite det nøyaktige øyeblikket når et signal endrer tilstand, så vi vil bruke avbrudd. For å bruke en halleffektsensor med Arduino mikrokontrollere et avbrudd brukes. Ved å opprette en ISR eller Interrupt Servicing Routine kan Arduinoen fås til å utføre en kodedel umiddelbart når en definert endring oppdages på en spesifisert inngang. Et eksempel på en ISR for en Arduino er vist nedenfor. En modifisert versjon som dirigerer de oppdagede signalene til LED-er er én måte å teste en Hall-effektsensor på.

Programmering av en Arduino til å lese Hall-effektsensorer - avbruddsmetoden

// globale volatile variabler er nødvendige for å sende data mellom

// hovedprogram og ISR-ene

flyktig bytesignalA;
flyktig bytesignalB;

// pinnene som kan brukes med avbrudd avhenger av kortet du bruker

// bruker
konstant byte inputA = 2;
konstant byte inputB = 3;

void oppsett() {
// aktiverer interne motstander på inngangspinnene
pinMode(inputA, INPUT_PULLUP);
pinMode(inputB, INPUT_PULLUP);
// les starttilstanden til inngangene
signalA = digitalRead(inputA);
signalB = digitalRead(inputB);

// vil oppdage en stigende eller fallende kant
attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,CHANGE);

}

tomromsløkke() {
// Det er her signalinformasjonen kan brukes i et program
}

void signalA_ISR() {
// når en endring oppdages, vil den alltid være det

// til det motsatte av nåværende tilstand

signalA = !signalA;
}

void signalB_ISR() {
signalB = !signalB;
}

Vår PA-04-HS leveres med innebygd Hall-effekttilbakemelding!

HVA MÅ VURDERES I SØKNADEN?

Siden signalene vi leser kommer til å være høyfrekvente, er det noen hensyn å ta. For det første, hvor lang tid vil det ta for programmet å kjøre koden i ISR-en? Hvor mange separate signaler må ha ISR-er? Hvor rask er mikrokontrollerens klokkehastighet?

Et problem som kan oppstå i et program med en lang ISR er at ISR-en vil bli utløst igjen før den har fullført koden den inneholder fra forrige gang den ble utløst. Det anbefales å beholde den minimale mengden kode som er nødvendig i en ISR for å unngå dette problemet.

I eksempelkoden ovenfor er to signaler satt opp med separate avbrudd. Begge signalene er nødvendige for å oppdage bevegelsesretningen til den lineære aktuatoren. Dette gjøres ved å sjekke hvilket signal som endres fra lav til høy før det andre. Ulempen med å aktivere avbrudd på begge signalene er at det er dobbelt så mye ISR-kode som skal kjøres. I applikasjoner der bevegelsesretningen til aktuatoren ikke er nødvendig eller allerede er tydelig fra programmet som kjører, trenger bare ett signal å settes opp med en avbruddsrutine.

Noen mikrokontrollere har muligheten til å endre klokkehastigheten for å bli raskere. Klokkehastigheten endrer hastigheten mikrokontrolleren kan kjøre programmet med. Hvis frekvensen på signalene som leses er høy, må klokkehastigheten kanskje økes for å holde tritt. Det er imidlertid mer energieffektivt å bruke en så lav klokkehastighet som applikasjonen tillater.

HVA SKJER HVIS MIKROKONTROLLEREN IKKE ER RASK NOK?

Etter at ovennevnte vurderinger er gjort, er mikrokontrolleren noen ganger rett og slett ikke rask nok til å komme seg gjennom hovedkoden og holde tritt med ISR-ene. I slike tilfeller kan det være lurt å bruke en ekstra mikrokontroller. Én mikrokontroller kan brukes til å kjøre ISR-ene, lese dataene og deretter overføre de nødvendige dataene til en annen mikrokontroller hvor hovedkoden kan kjøres uten å bli avbrutt.