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

Hur man läser signalen från en Hall-effektsensor med hjälp av en Arduino

Halleffektsensorer är ett av de återkopplingsalternativ vi erbjuder i våra linjära ställdon för att tillhandahålla positions- och hastighetsinformation. Vår PA-04-HS och PA-100 har Hall-effektsensorer på originalenheterna. Medan flera av våra andra ställdon kan specialbeställas med Hall-effektsensorer.

Bläddra bland vårt utbud av Arduino-mikrokontroller för ultimat ställdonsstyrning!

VAD ÄR EN HALL-EFFEKTSENSOR?

En Hall-effektsensor är en elektronisk komponent som genererar en spänning baserad på styrkan hos det magnetfält som flyter genom den. När denna sensor paras ihop med en spänningströskeldetekteringskrets kan en signal med två tillstånd produceras. I vår ställdon, Halleffektsensorn är konstruerad för att producera en tvåkanalig signal med vågformer kvantifierade i ett av två binära tillstånd; på eller av. Dessa två signaler kommer att stiga och falla när elmotorn roterar med en 90° fasskillnad mellan sig, som visas nedan. Frekvensen för dessa pulser i relation till positionsförändringen i ställdonet beror på deras totala upplösning och skiljer sig mellan våra olika ställdon.

Hall effect sensors 

HUR LÄSES DESSA HALLSIGNALER?

Hur man använder en Hall-effektsensor

När man läser en digital signal på en mikrokontroller finns det två huvudmetoder; polling och avbrott. Polling är en programmerad metod där en mikrokontroller regelbundet kontrollerar tillståndet för en ingång för att se om det har skett en förändring. Avbrott är en hårdvarumekanism som omedelbart flyttar fokus för mikrokontrollerns program när signalen ändras på en ingång. Var och en av dessa metoder har sina för- och nackdelar, och var och en har tillämpningar som de är bättre lämpade för. I vårt fall vill vi veta det exakta ögonblicket när en signal ändrar tillstånd, så vi kommer att använda avbrott. För att kunna använda en halleffektsensor med Arduino mikrokontroller ett avbrott används. Genom att skapa en ISR eller Interrupt Servicing Routine kan Arduino fås att köra en kodsektion omedelbart när en definierad förändring detekteras på en specifik ingång. Ett exempel på en ISR för en Arduino visas nedan, en modifierad version som dirigerar de detekterade signalerna till lysdioder är ett sätt att testa en Hall-effektsensor.

Programmering av en Arduino för att läsa Hall-effektsensorer - avbrottsmetod

// globala volatila variabler behövs för att skicka data mellan

// huvudprogram och ISR:erna

flyktig bytesignalA;
flyktig bytesignalB;

// vilka pinnar som kan användas med avbrott beror på vilket kort du använder

// använder
konstant byte ingångA = 2;
konstant byte ingångB = 3;

void setup() {
// aktivera interna motstånd på ingångspinnarna
pinMode(inputA, INPUT_PULLUP);
pinMode(inputB, INPUT_PULLUP);
// läs ingångarnas initiala tillstånd
signalA = digitalRead(ingångA);
signalB = digitalRead(ingångB);

// kommer att upptäcka en stigande eller fallande kant
attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,CHANGE);

}

void loop() {
// Det är här signalinformationen kan användas i ett program
}

void signalA_ISR() {
// när en förändring upptäcks kommer den alltid att vara

// till motsatsen till det nuvarande tillståndet

signalA = !signalA;
}

void signalB_ISR() {
signalB = !signalB;
}

Vår PA-04-HS har inbyggd Hall-effektåterkoppling!

VAD BEHÖVER HÄNSYNS I ANSÖKAN?

Eftersom signalerna vi läser av kommer att vara högfrekventa finns det några saker att tänka på. För det första, hur lång tid tar det för programmet att exekvera koden i ISR:n? Hur många separata signaler behöver ha ISR:er? Hur snabb är mikrokontrollerns klockhastighet?

Ett problem som kan uppstå i ett program med en lång ISR är att ISR:n utlöses igen innan den har slutfört den kod den innehåller från föregående gång den utlöstes. Det rekommenderas att behålla den minimala mängd kod som krävs i en ISR för att undvika detta problem.

I exempelkoden ovan konfigureras två signaler med separata avbrott. Båda signalerna behövs för att detektera den linjära ställdonets rörelseriktning, detta görs genom att kontrollera vilken signal som ändras från låg till hög före den andra. Nackdelen med att aktivera avbrott på båda signalerna är att det krävs dubbelt så mycket ISR-kod som kommer att köras. I applikationer där ställdonets rörelseriktning inte behövs eller redan framgår av programmet som körs, skulle endast en signal behöva konfigureras med en avbrottsrutin.

Vissa mikrokontroller har möjlighet att ändra klockhastigheten för att bli snabbare. Klockhastigheten ändrar hastigheten med vilken mikrokontrollern kan köra programmet. Om frekvensen på de signaler som läses är hög kan klockhastigheten behöva ökas för att hålla jämna steg. Det är dock mer energieffektivt att använda en så låg klockhastighet som applikationen tillåter.

VAD HÄNDER OM MIKROCONTROLLERN INTE ÄR TILLRÄCKLIGT SNABB?

Efter att ovanstående överväganden har gjorts, är mikrokontrollern ibland helt enkelt inte tillräckligt snabb för att ta sig igenom huvudkoden och hålla jämna steg med ISR:erna. I dessa fall kan du vilja använda en extra mikrokontroller. En mikrokontroller kan användas för att köra ISR:erna, läsa data och sedan överföra den data som behövs till en annan mikrokontroller där huvudkoden kan exekveras utan att avbrytas.