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

Kuinka lukea Hall-anturin signaali Arduinon avulla

Hall-anturit ovat yksi palautevaihtoehdoista, joita tarjoamme lineaarisissa toimilaitteissamme sijainti- ja nopeustiedon tuottamiseen. PA-04-HS- ja PA-100-malleissamme on Hall-anturit vakiolaitteissa. Lisäksi useita muita toimilaitteitamme voidaan tilata räätälöitynä Hall-antureilla.

Selaa Arduino-mikro-ohjaimiamme täydelliseen toimilaitteen hallintaan!

MIKÄ ON HALL-ANTURI?

Hall-anturi on elektroniikkakomponentti, joka tuottaa jännitteen sen läpi kulkevan magneettikentän voimakkuuden perusteella. Kun anturi yhdistetään jännitteen kynnysarvon tunnistavaan piiriin, voidaan tuottaa kaksitilainen signaali. Toimilaitteissamme Hall-anturi on suunniteltu tuottamaan kaksikanavainen signaali, jonka aaltomuodot ovat kahdessa binaaritilassa: päällä tai pois. Nämä kaksi signaalia nousevat ja laskevat, kun sähköinen moottori pyörii, ja niiden välillä on 90°:n vaihe-ero, kuten alla näkyy. Pulssien taajuus suhteessa toimilaitteen sijainnin muutokseen riippuu kokonaisresoluutiosta ja vaihtelee toimilaitteidemme välillä.

Hall effect sensors 

MITEN NÄITÄ HALL-SIGNAALEJA LUETAAN?

Kuinka käyttää Hall-anturia

Kun mikro-ohjaimella luetaan digitaalista signaalia, on kaksi päämenetelmää: pollaus ja keskeytykset. Pollaus on ohjelmallinen tapa, jossa mikro-ohjain tarkistaa säännöllisin väliajoin tulon tilan nähdäkseen, onko se muuttunut. Keskeytykset taas ovat laitteistomekanismi, joka vaihtaa mikro-ohjaimen ohjelman huomion välittömästi, kun tulosignaalissa tapahtuu muutos. Molemmissa menetelmissä on puolensa, ja kumpikin sopii parhaiten erilaisiin käyttökohteisiin. Meidän tapauksessamme haluamme tietää tarkan hetken, jolloin signaalin tila muuttuu, joten käytämme keskeytyksiä. Jotta Hall-anturia voidaan käyttää Arduino-mikro-ohjainten kanssa, käytetään keskeytystä. Luomalla ISR:n (Interrupt Service Routine, keskeytyspalvelualiohjelma) Arduino voidaan ohjelmoida suorittamaan koodilohko välittömästi, kun määritelty muutos havaitaan tietyssä tulossa. Alla on esimerkki ISR:stä Arduinolle; muokattu versio, joka ohjaa havaitut signaalit LEDeille, on yksi tapa testata Hall-anturia.

Arduinon ohjelmointi Hall-antureiden lukemiseen – keskeytysmenetelmä

// globaaleja volatile-muuttujia tarvitaan datan siirtoon

// pääohjelman ja ISR:ien välillä

volatile byte signalA;
volatile byte signalB;

// keskeytysten kanssa käytettävät pinnit riippuvat käyttämästäsi

// kehikosta/levystä
const byte inputA = 2;
const byte inputB = 3;

void setup() {
  // ota sisäiset vastukset käyttöön tulopinneissä
  pinMode(inputA, INPUT_PULLUP);
  pinMode(inputB, INPUT_PULLUP);
  // lue tulojen alkuperäinen tila
  signalA = digitalRead(inputA);
  signalB = digitalRead(inputB);

  // havaitsee nousevan tai laskevan reunan
  attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
  attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,CHANGE);

}

void loop() {
  // Tässä ohjelma voi hyödyntää signaalitietoa
}

void signalA_ISR() {
  // kun muutos havaitaan, se on aina

  // nykyisen tilan vastakkainen

  signalA = !signalA;
}

void signalB_ISR() {
  signalB = !signalB;
}

PA-04-HS:ssa on sisäänrakennettu Hall-palaute!

MITÄ SOVELLUKSESSA PITÄÄ HUOMIOIDA?

Koska luettavat signaalit ovat korkeataajuisia, on tehtävä muutamia huomioita. Ensinnäkin, kuinka kauan ohjelmalta kestää suorittaa ISR:n koodi? Kuinka monelle erilliselle signaalille tarvitaan omat ISR:t? Kuinka nopea on mikro-ohjaimen kellotaajuus?

Ohjelmassa, jossa ISR on pitkä, voi ilmetä ongelma, että ISR laukeaa uudelleen ennen kuin edellinen suoritus on saanut sisältämänsä koodin valmiiksi. Tämän välttämiseksi suositellaan pitämään ISR:ssä vain välttämätön vähimmäiskoodi.

Yllä olevassa esimerkkikoodissa kaksi signaalia on asetettu erillisillä keskeytyksillä. Molempia tarvitaan lineaarisen toimilaitteen liikesuunnan tunnistamiseen; tämä tehdään tarkistamalla, kumpi signaali vaihtaa matalasta korkeaan ensin. Haittapuolena on, että keskeytyksiä on tällöin kahdelle signaalille, jolloin ISR-koodia ajetaan kaksinkertainen määrä. Sovelluksissa, joissa toimilaitteen liikesuuntaa ei tarvita tai se on muuten pääteltävissä ohjelmasta, riittää, että vain yksi signaali kytketään keskeytyspalvelurutiiniin.

Joissakin mikro-ohjaimissa kellotaajuutta voidaan nopeuttaa. Kellotaajuus määrää, millä nopeudella mikro-ohjain kykenee ajamaan ohjelmaa. Jos luettavien signaalien taajuus on korkea, kellotaajuutta voi olla nostettava, jotta pysytään perässä. Energiataloudellisempaa on kuitenkin käyttää niin hidasta kellotaajuutta kuin sovellus sallii.

MITÄ JOS MIKRO-OHJAIN EI OLE TARPEEKSI NOPEA?

Edellä mainittujen huomioiden jälkeen voi joskus käydä niin, ettei mikro-ohjain ehdi käydä pääkoodia läpi ja pysyä ISR:ien tahdissa. Tällöin kannattaa käyttää toista mikro-ohjainta. Toinen mikro-ohjain voi ajaa ISR:t, lukea datan ja välittää tarvittavat tiedot toiselle mikro-ohjaimelle, jolla pääkoodi voidaan suorittaa ilman keskeytyksiä.