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

Ako čítať signál z Hallovho snímača pomocou Arduina

Adam Morissette
Adam Morissette
PA Engineer

Hallove snímače patria medzi možnosti spätnej väzby, ktoré ponúkame v našich lineárnych aktuátoroch na poskytovanie informácií o polohe a rýchlosti. Naše PA-04-HS a PA-100 majú Hallove snímače už v štandardných modeloch. Viaceré z našich ďalších aktuátorov je možné na objednávku dodať s Hallovými snímačmi.

Prezrite si náš sortiment mikrokontrolérov Arduino pre maximálne ovládanie aktuátorov!

ČO JE HALLOV SNÍMAČ?

Hallov snímač je elektronická súčiastka, ktorá generuje napätie v závislosti od intenzity magnetického poľa, ktoré ním prechádza. Keď sa tento snímač spojí s obvodom na detekciu prahovej hodnoty napätia, možno vytvoriť signál s dvoma stavmi. V našich aktuátoroch je Hallov snímač navrhnutý tak, aby vytváral dvojkanálový signál, ktorého priebehy nadobúdajú jeden z dvoch binárnych stavov: zapnuté alebo vypnuté. Tieto dva signály stúpajú a klesajú počas rotácie elektrického motora s fázovým posunom 90° medzi nimi, ako je zobrazené nižšie. Frekvencia týchto impulzov vo vzťahu k zmene polohy v aktuátore závisí od celkového rozlíšenia a líši sa medzi jednotlivými aktuátormi.

Hallove snímače 

AKO SA ČÍTAJÚ TIETO HALLOVE SIGNÁLY?

Ako používať Hallov snímač

Pri čítaní digitálneho signálu na mikrokontroléri existujú dve hlavné metódy: dotazovanie a prerušenia. Dotazovanie je programová metóda, pri ktorej mikrokontrolér v pravidelných intervaloch kontroluje stav vstupu, aby zistil, či došlo k zmene. Prerušenia sú hardvérový mechanizmus, ktorý okamžite presmeruje vykonávanie programu mikrokontroléra, keď sa na vstupe zmení signál. Obe metódy majú svoje výhody a nevýhody a každá sa lepšie hodí na iné použitia. V našom prípade chceme poznať presný okamih, keď sa signál zmení, preto použijeme prerušenia. Na použitie Hallovho snímača s mikrokontrolérmi Arduino sa využíva prerušenie. Vytvorením ISR (obslužnej rutiny prerušenia) možno Arduino prinútiť okamžite vykonať časť kódu, keď sa na zadanom vstupe zistí definovaná zmena. Nižšie je uvedený príklad ISR pre Arduino; upravená verzia, ktorá smeruje zistené signály na LED, je jedným zo spôsobov, ako otestovať Hallov snímač.

Programovanie Arduina na čítanie Hallových snímačov – metóda s prerušeniami

// globálne volatilné premenné sú potrebné na prenos údajov medzi

// hlavným programom a ISR

volatile byte signalA;
volatile byte signalB;

// piny použiteľné s prerušeniami závisia od dosky, ktorú

// používate
const byte inputA = 2;
const byte inputB = 3;

void setup() {
  // aktivujte vnútorné rezistory na vstupných pinoch
  pinMode(inputA, INPUT_PULLUP);
  pinMode(inputB, INPUT_PULLUP);
  // prečítajte počiatočný stav vstupov
  signalA = digitalRead(inputA);
  signalB = digitalRead(inputB);

  // bude detegovať nábežnú aj zostupnú hranu
  attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
  attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,CHANGE);

}

void loop() {
  // tu možno v programe použiť informácie zo signálov
}

void signalA_ISR() {
  // keď sa zistí zmena, vždy to bude

  // opak aktuálneho stavu

  signalA = !signalA;
}

void signalB_ISR() {
  signalB = !signalB;
}

Náš PA-04-HS prichádza s integrovanou Hallovou spätnou väzbou!

ČO TREBA ZOHĽADNIŤ V APLIKÁCII?

Keďže signály, ktoré čítame, budú vysokej frekvencie, treba zvážiť niekoľko vecí. Najprv: ako dlho bude programu trvať vykonanie kódu v ISR? Koľko samostatných signálov potrebuje vlastnú ISR? Aká je taktovacia frekvencia mikrokontroléra?

Problém, ktorý sa môže vyskytnúť pri programe s dlhšou ISR, je, že ISR sa spustí znova skôr, než dokončí kód z predchádzajúceho spustenia. Aby ste sa tomuto problému vyhli, odporúča sa ponechať v ISR len nevyhnutné minimum kódu.

V príkladovom kóde vyššie sú dva signály nastavené s oddelenými prerušeniami. Obe sú potrebné na detekciu smeru pohybu lineárneho aktuátora – zisťuje sa to kontrolou, ktorý signál sa z nízkej na vysokú úroveň mení skôr. Nevýhodou aktivácie prerušenia pre oba signály je, že sa spustí dvojnásobné množstvo kódu v ISR. V aplikáciách, kde smer pohybu aktuátora nie je potrebný alebo je už zrejmý z bežiaceho programu, stačí nastaviť obslužnú rutinu prerušenia len pre jeden signál.

Niektoré mikrokontroléry umožňujú zvýšiť taktovaciu frekvenciu, aby boli rýchlejšie. Taktovacia frekvencia určuje, akou rýchlosťou môže mikrokontrolér spúšťať program. Ak je frekvencia čítaných signálov vysoká, možno bude potrebné takt zvýšiť, aby sa stíhalo. Energeticky efektívnejšie je však používať tak čo najnižšiu taktovaciu frekvenciu, akú aplikácia dovolí.

ČO AK MIKROKONTROLÉR NIE JE DOSŤ RÝCHLY?

Aj po uvedených úvahách môže byť mikrokontrolér niekedy jednoducho príliš pomalý na to, aby prechádzal hlavným kódom a súčasne stíhal ISR. V takých prípadoch môžete využiť ďalší mikrokontrolér. Jeden mikrokontrolér môže obsluhovať ISR, čítať údaje a potom potrebné údaje preniesť do iného mikrokontroléra, kde sa môže hlavný kód vykonávať bez prerušenia.