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

Sådan læser du signalet fra en Hall-effektsensor ved hjælp af en Arduino

Hall-effektsensorer er en af de feedback-muligheder, vi tilbyder i vores lineære aktuatorer at give positions- og hastighedsoplysninger. Vores PA-04-HS og PA-100 har Hall-effektsensorer på standardenhederne. Mens flere af vores andre aktuatorer kan bestilles efter bestilling med Hall-effektsensorer.

Gennemse vores udvalg af Arduino mikrocontrollere for den ultimative aktuatorstyring!

HVAD ER EN HALL-EFFEKT-SENSOR?

En Hall-effektsensor er en elektronisk komponent, der genererer en spænding baseret på styrken af det magnetfelt, der strømmer gennem den. Når denne sensor parres med et spændingstærskeldetekteringskredsløb, kan der produceres et signal med to tilstande. I vores aktuatorer, Hall-effektsensoren er designet til at producere et tokanals signal med bølgeformer kvantificeret i en af to binære tilstande; tændt eller slukket. Disse to signaler vil stige og falde, når elmotoren roterer med en 90° faseforskel mellem dem, som vist nedenfor. Frekvensen af disse impulser, som de relaterer sig til ændringen af position i aktuatoren, afhænger af deres samlede opløsning og varierer mellem vores forskellige aktuatorer.

Hall effect sensors 

HVORDAN LÆSES DISSE HALLSIGNALER?

Sådan bruger du en Hall-effektsensor

Når man aflæser et digitalt signal på en mikrocontroller, er der to hovedmetoder; polling og afbrydelser. Polling er en programmeret metode, hvor en mikrocontroller periodisk kontrollerer tilstanden af et input for at se, om der har været en ændring. Afbrydelser er en hardwaremekanisme, der øjeblikkeligt flytter fokus i mikrocontrollerens program, når signalet ændrer sig på et input. Hver af disse metoder har sine fordele og ulemper, og hver har anvendelser, som de er bedre egnede til. I vores tilfælde vil vi gerne vide det nøjagtige øjeblik, hvor et signal ændrer tilstand, så vi vil bruge afbrydelser. For at bruge en hall-effektsensor med Arduino mikrocontrollere en afbrydelse bruges. Ved at oprette en ISR eller Interrupt Servicing Routine kan Arduinoen fås til at udføre en kodesektion med det samme, når en defineret ændring detekteres på en specificeret indgang. Et eksempel på en ISR til en Arduino er vist nedenfor. En modificeret version, der dirigerer de detekterede signaler til LED'er, er én måde at teste en Hall-effektsensor på.

Programmering af en Arduino til at aflæse Hall-effektsensorer - afbrydelsesmetode

// globale volatile variabler er nødvendige for at overføre data mellem

// hovedprogram og ISR'erne

flygtigt bytesignalA;
flygtigt bytesignalB;

// de ben, der kan bruges med interrupts, afhænger af det printkort, du bruger

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

void opsætning() {
// aktiverer interne modstande på indgangsbenene
pinMode(inputA, INPUT_PULLUP);
pinMode(inputB, INPUT_PULLUP);
// læs den oprindelige tilstand af inputtene
signalA = digitalRead(inputA);
signalB = digitalRead(inputB);

// vil detektere en stigende eller faldende kant
attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,ÆNDRING);

}

void loop() {
// Det er her, signalinformationen kan bruges i et program
}

void signalA_ISR() {
// når en ændring registreres, vil den altid være

// til det modsatte af den nuværende tilstand

signalA = !signalA;
}

void signalB_ISR() {
signalB = !signalB;
}

Vores PA-04-HS leveres med indbygget Hall-effekt-feedback!

HVAD SKAL DER OVERVEJES I ANSØGNINGEN?

Da de signaler, vi aflæser, vil være højfrekvente, er der et par overvejelser, der skal gøres. For det første, hvor lang tid vil det tage programmet at udføre koden i ISR'en? Hvor mange separate signaler skal have ISR'er? Hvor hurtig er mikrocontrollerens clockhastighed?

Et problem, der kan opstå i et program med en lang ISR, er, at ISR'en vil blive udløst igen, før den har fuldført den kode, den indeholder fra sidste gang, den blev udløst. Det anbefales at beholde den minimale mængde kode, der er nødvendig i en ISR, for at undgå dette problem.

I eksempelkoden ovenfor er to signaler oprettet med separate afbrydelser. Begge signaler er nødvendige for at detektere bevægelsesretningen for den lineære aktuator. Dette gøres ved at kontrollere, hvilket signal der skifter fra lav til høj før det andet. Ulempen ved at aktivere afbrydelser på begge signaler er, at der er dobbelt så meget ISR-kode, der skal køres. I applikationer, hvor aktuatorens bevægelsesretning ikke er nødvendig eller allerede er tydelig fra det program, der kører, skal kun ét signal oprettes med en afbrydelsesrutine.

Nogle mikrocontrollere har mulighed for at ændre clockhastigheden for at gøre den hurtigere. Clockhastigheden ændrer den hastighed, hvormed mikrocontrolleren kan køre programmet. Hvis frekvensen af de signaler, der læses, er høj, skal clockhastigheden muligvis øges for at følge med. Det er dog mere energieffektivt at bruge en så langsom clockhastighed, som applikationen tillader.

HVAD SKER DER, HVIS MIKROCONTROLLEREN IKKE ER HURTIG NOK?

Efter ovenstående overvejelser er gjort, er mikrocontrolleren nogle gange simpelthen ikke hurtig nok til at komme igennem hovedkoden og følge med ISR'erne. I disse tilfælde kan du bruge en ekstra mikrocontroller. Én mikrocontroller kan bruges til at køre ISR'erne, læse dataene og derefter overføre de nødvendige data til en anden mikrocontroller, hvor hovedkoden kan udføres uden at blive afbrudt.