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

Kako prebrati signal s Hallovega senzorja z Arduinom

Hallovi senzorji so ena od možnosti povratne zveze, ki jih ponujamo v naših linearnih aktuatorjih za posredovanje informacij o položaju in hitrosti. Naša PA-04-HS in PA-100 imata Hallove senzorje že v standardnih izvedbah. Več naših drugih aktuatorjev je mogoče po meri naročiti s Hallovimi senzorji.

Prebrskajte našo ponudbo mikrokrmilnikov Arduino za vrhunski nadzor aktuatorjev!

KAJ JE HALLOV SENZOR?

Hallov senzor je elektronska komponenta, ki generira napetost glede na jakost magnetnega polja, ki teče skozenj. Ko je ta senzor povezan z vezjem za zaznavanje napetostnega praga, lahko dobimo signal z dvema stanjema. V naših aktuatorjih je Hallov senzor zasnovan za tvorbo dvo-kanalnega signala, katerega valovne oblike se pojavljajo v enem od dveh binarnih stanj: vklop ali izklop. Ta dva signala naraščata in padeta med vrtenjem električnega motorja, med njima je 90° faznega zamika, kot je prikazano spodaj. Frekvenca teh pulzov v povezavi s spremembo položaja v aktuatorju je odvisna od skupne ločljivosti in se razlikuje med našimi različnimi aktuatorji.

Hallovi senzorji 

KAKO BEREMO TE HALLOVE SIGNALE?

Kako uporabiti Hallov senzor

Pri branju digitalnega signala na mikrokrmilniku sta dve glavni metodi: poizvedovanje (polling) in prekinitve. Poizvedovanje je programska metoda, pri kateri mikrokrmilnik periodično preverja stanje vhoda, ali je prišlo do spremembe. Prekinitve pa so strojni mehanizem, ki ob spremembi signala na vhodu takoj preusmeri pozornost programa mikrokrmilnika. Obe metodi imata svoje prednosti in slabosti in vsaka je bolj primerna za določene primere uporabe. V našem primeru želimo poznati natančen trenutek, ko se signal spremeni, zato bomo uporabili prekinitve. Za uporabo Hallovega senzorja z mikrokrmilniki Arduino se uporabi prekinitev. Z ustvarjanjem ISR (Interrupt Service Routine) lahko Arduino takoj izvede del kode, ko je na določenem vhodu zaznana definirana sprememba. Spodaj je prikazan primer ISR za Arduino; ena od možnosti, kako testirati Hallov senzor, je prilagojena različica, ki zaznane signale usmerja na LED-diode.

Programiranje Arduina za branje Hallovih senzorjev – metoda s prekinitvami

// globalne volatilne spremenljivke so potrebne za prenos podatkov med

// glavnim programom in ISR-ji

volatile byte signalA;
volatile byte signalB;

// pini, ki jih je mogoče uporabiti s prekinitvami, so odvisni od plošče, ki jo

// uporabljate
const byte inputA = 2;
const byte inputB = 3;

void setup() {
  // omogoči notranje upore na vhodnih pinih
  pinMode(inputA, INPUT_PULLUP);
  pinMode(inputB, INPUT_PULLUP);
  // preberi začetno stanje vhodov
  signalA = digitalRead(inputA);
  signalB = digitalRead(inputB);

  // bo zaznal naraščajoči ali padajoči rob
  attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
  attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,CHANGE);

}

void loop() {
  // Tu lahko v programu uporabimo informacije o signalu
}

void signalA_ISR() {
  // ko je zaznana sprememba, bo vedno

  // nasprotna trenutnemu stanju

  signalA = !signalA;
}

void signalB_ISR() {
  signalB = !signalB;
}

Naš PA-04-HS ima vgrajeno Hallovo povratno zvezo!

KAJ JE TREBA UPOŠTEVATI PRI UPORABI?

Ker bodo signali, ki jih beremo, visokofrekvenčni, je treba upoštevati nekaj dejavnikov. Prvič, kako dolgo bo program potreboval za izvedbo kode v ISR? Koliko ločenih signalov mora imeti svoje ISR-je? Kako hitra je taktna frekvenca mikrokrmilnika?

Težava, ki se lahko pojavi v programu z obsežno ISR, je, da se ISR sproži znova, še preden dokonča kodo, ki jo je vseboval ob prejšnjem proženju. Priporočljivo je, da v ISR vključite le minimalno potrebno količino kode, da se temu izognete.

V zgornjem zglednem delu kode sta dva signala nastavljena z ločenimi prekinitvami. Oba signala sta potrebna za zaznavo smeri gibanja linearnega aktuatorja; to se izvede tako, da preverimo, kateri signal prej preide iz nizkega na visok nivo. Slabost omogočanja prekinitev na obeh signalih je, da se izvede dvakrat več kode v ISR-jih. V aplikacijah, kjer smer gibanja aktuatorja ni potrebna ali je že razvidna iz programa, ki teče, bi bilo treba z rutino ob prekinitvi nastaviti le en signal.

Nekateri mikrokrmilniki omogočajo spremembo taktne frekvence na višjo. Taktna frekvenca določa, s kakšno hitrostjo lahko mikrokrmilnik izvaja program. Če je frekvenca prebranih signalov visoka, bo morda treba taktno frekvenco povečati, da boste sledili. Vendar je z vidika porabe energije učinkovitejše uporabljati tako nizko taktno frekvenco, kot jo dopušča aplikacija.

KAJ SE ZGODI, ČE MIKROKRMILNIK NI DOVOLJ HITER?

Po upoštevanju zgornjih dejavnikov se včasih zgodi, da mikrokrmilnik preprosto ni dovolj hiter, da bi prešel skozi glavno kodo in hkrati sledil ISR-jem. V takšnih primerih boste morda želeli uporabiti dodaten mikrokrmilnik. Eden mikrokrmilnik lahko poganja ISR-je, prebira podatke in nato potrebne podatke posreduje drugemu mikrokrmilniku, kjer lahko glavna koda teče brez prekinitev.