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

Jak číst signál z Hallova senzoru pomocí Arduina

Adam Morissette
Adam Morissette
PA Engineer

Hallovy senzory jsou jednou z možností zpětné vazby, které nabízíme v našich lineární aktuátory poskytovat informace o poloze a rychlosti. Naše PA-04-HS a PA-100 mají Hallovy senzory na standardních jednotkách. Zatímco několik našich dalších aktuátorů lze s Hallovými senzory objednat na zakázku.

Prohlédněte si naši nabídku mikrokontrolérů Arduino pro dokonalé ovládání aktuátorů!

CO JE HALLŮV SNÍMAČ?

Hallův senzor je elektronická součástka, která generuje napětí na základě síly magnetického pole, které jí protéká. Když je tento senzor spárován s obvody pro detekci prahového napětí, lze vytvořit signál se dvěma stavy. V našem pohonyHallův senzor je navržen tak, aby produkoval dvoukanálový signál s průběhy kvantifikovanými v jednom ze dvou binárních stavů: zapnuto nebo vypnuto. Tyto dva signály budou stoupat a klesat, jak se elektromotor otáčí s fázovým posunem 90°, jak je znázorněno níže. Frekvence těchto pulzů ve vztahu ke změně polohy v aktuátoru závisí na jejich celkovém rozlišení a liší se mezi našimi různými aktuátory.

Hall effect sensors 

JAK SE ČTEJÍ TYTO HALLOVY SIGNÁLY?

Jak používat Hallův senzor

Při čtení digitálního signálu na mikrokontroléru existují dvě hlavní metody: dotazování a přerušení. Dotazování je programovaná metoda, při které mikrokontrolér periodicky kontroluje stav vstupu, aby zjistil, zda došlo ke změně. Přerušení jsou hardwarový mechanismus, který okamžitě přesune zaměření programu mikrokontroléru, když se signál na vstupu změní. Každá z těchto metod má své výhody a nevýhody a každá má aplikace, pro které je vhodnější. V našem případě budeme chtít znát přesný okamžik, kdy signál změní stav, takže použijeme přerušení. Abychom mohli použít Hallův senzor s... Mikrokontroléry Arduino Používá se přerušení. Vytvořením ISR neboli rutiny pro obsluhu přerušení lze Arduino přinutit k okamžitému provedení části kódu, když je na zadaném vstupu detekována definovaná změna. Níže je uveden příklad ISR pro Arduino. Upravená verze směrující detekované signály na LED diody je jedním ze způsobů, jak otestovat Hallův senzor.

Programování Arduina pro čtení Hallových senzorů - metoda přerušení

// pro přenos dat mezi jsou potřeba globální volatile proměnné

// hlavní program a ISR

nestálý bajtový signálA;
signál volatilního bajtuB;

// piny, které lze použít s přerušeními, závisí na použité desce

// používají
konstantní bajt vstupA = 2;
konstantní bajt vstupB = 3;

void setup() {
// povolíme interní rezistory na vstupních pinech
pinMode(vstupA, INPUT_PULLUP);
pinMode(vstupB, INPUT_PULLUP);
// přečte počáteční stav vstupů
signalA = digitalRead(vstupA);
signalB = digitalRead(vstupB);

// detekuje vzestupnou nebo sestupnou hranu
připojitInterrupt(digitalPinToInterrupt(vstupA),signalA_ISR,CHANGE);
attachInterrupt(digitálníPinToInterrupt(vstupB),signálB_ISR,ZMĚNA);

}

void loop() {
// Zde lze v programu použít informace o signálu
}

void signalA_ISR() {
// když je detekována změna, bude vždy

// do opačného stavu než je aktuální

signalA = !signalA;
}

void signalB_ISR() {
signálB = !signálB;
}

Náš PA-04-HS je vybaven vestavěnou zpětnou vazbou s Hallovým efektem!

CO JE TŘEBA V ŽÁDOSTI ZVÁŽIT?

Protože signály, které čteme, budou vysokofrekvenční, je třeba zvážit několik faktorů. Zaprvé, jak dlouho bude programu trvat provedení kódu v ISR? Kolik samostatných signálů musí mít ISR? Jak vysoká je taktovací frekvence mikrokontroléru?

Problém, se kterým se lze setkat v programu s dlouhým ISR, je, že ISR bude spuštěn znovu dříve, než dokončí kód, který obsahuje z předchozího spuštění. Aby se tomuto problému předešlo, doporučuje se v ISR ponechat minimální množství kódu.

Ve výše uvedeném příkladu kódu jsou dva signály nastaveny se samostatnými přerušeními. Oba signály jsou potřebné k detekci směru pohybu lineárního aktuátoru, což se provádí kontrolou, který signál se mění z nízké na vysokou úroveň dříve než ten druhý. Nevýhodou povolení přerušení u obou signálů je, že se spustí dvakrát tolik ISR kódu. V aplikacích, kde směr pohybu aktuátoru není potřeba nebo je již zřejmý ze spuštěného programu, by bylo nutné nastavit pouze jeden signál pomocí rutiny obsluhy přerušení.

Některé mikrokontroléry umožňují změnu rychlosti hodin. Rychlost hodin mění rychlost, s jakou může mikrokontrolér spouštět program. Pokud je frekvence čtených signálů vysoká, může být nutné rychlost hodin zvýšit, aby se udržel tempo. Energeticky efektivnější je však použít co nejnižší rychlost hodin, kterou aplikace dovolí.

CO SE STANE, POKUD MIKROKONTROLÉR NENÍ DOSTATEČNĚ RYCHLÝ?

Po zvážení výše uvedených faktorů se někdy stává, že mikrokontrolér prostě není dostatečně rychlý na to, aby zpracoval hlavní kód a udržel krok s ISR. V takových případech můžete chtít použít další mikrokontrolér. Jeden mikrokontrolér lze použít ke spuštění ISR, čtení dat a následnému přenosu potřebných dat do jiného mikrokontroléru, kde lze hlavní kód spustit bez přerušení.