Hall-effectsensoren zijn een van de terugkoppelingsopties die we in onze lineaire actuatoren aanbieden om positie- en snelheidsinformatie te leveren. Onze PA-04-HS en PA-100 hebben Hall-effectsensoren op de standaardmodellen. Terwijl meerdere van onze andere actuatoren op maat kunnen worden besteld met Hall-effectsensoren.
WAT IS EEN HALL-EFFECTSENSOR?
Een Hall-effectsensor is een elektronisch component dat een spanning genereert op basis van de sterkte van het magnetisch veld dat erdoorheen loopt. Wanneer deze sensor wordt gecombineerd met schakelingen voor spanningsdrempel-detectie, kan een signaal met twee toestanden worden geproduceerd. In onze actuatoren is de Hall-effectsensor ontworpen om een tweekanaals signaal te genereren, met golfvormen in een van twee binaire toestanden: aan of uit. Deze twee signalen zullen stijgen en dalen terwijl de elektrische Motor draait, met een faseverschil van 90° ertussen, zoals hieronder getoond. De frequentie van deze pulsen, in relatie tot de positieverandering in de actuator, is afhankelijk van de totale resolutie en verschilt tussen onze verschillende actuatoren.
HOE WORDEN DEZE HALL-SIGNALEN UITGELEZEN?
Hoe gebruik je een Hall-effectsensor
Bij het uitlezen van een digitaal signaal op een microcontroller zijn er twee hoofdmethoden: polling en interrupts. Polling is een geprogrammeerde methode waarbij een microcontroller periodiek de status van een ingang controleert om te zien of er een wijziging is geweest. Interrupts daarentegen zijn een hardwaremechanisme dat de focus van het programma van de microcontroller onmiddellijk verlegt wanneer het signaal op een ingang verandert. Elk van deze methoden heeft zijn voor- en nadelen en kent toepassingen waarvoor ze beter geschikt zijn. In ons geval willen we het exacte moment weten waarop een signaal van toestand verandert, dus gebruiken we interrupts. Om een Hall-effectsensor met Arduino-microcontrollers te gebruiken, wordt een interrupt ingezet. Door een ISR (Interrupt Service Routine) te maken, kan de Arduino een codeblok direct uitvoeren zodra een gedefinieerde wijziging op een gespecificeerde ingang wordt gedetecteerd. Hieronder staat een voorbeeld van een ISR voor een Arduino; een aangepaste versie die de gedetecteerde signalen naar LED’s stuurt, is één manier om een Hall-effectsensor te testen.
Een Arduino programmeren om Hall-effectsensoren uit te lezen - interrupt-methode
|
// globale volatile variabelen zijn nodig om gegevens door te geven tussen de // hoofdcode en de ISR's volatile byte signalA; // welke pins met interrupts kunnen worden gebruikt hangt af van het board dat je // gebruikt // zal een stijgende of een dalende flank detecteren // het tegenovergestelde van de huidige toestand signalA = !signalA; |
WAAR MOET JE IN DE TOEPASSING REKENING MEE HOUDEN?
Omdat de signalen die we uitlezen een hoge frequentie hebben, zijn er enkele aandachtspunten. Ten eerste: hoe lang heeft het programma nodig om de code in de ISR uit te voeren? Hoeveel afzonderlijke signalen hebben een ISR nodig? Hoe hoog is de kloksnelheid van de microcontroller?
Een probleem dat kan optreden met een lange ISR is dat de ISR opnieuw wordt geactiveerd voordat hij de code van de vorige keer heeft afgerond. Het wordt aanbevolen om zo min mogelijk noodzakelijke code in een ISR te plaatsen om dit te helpen voorkomen.
In de bovenstaande voorbeeldcode zijn twee signalen ingesteld met afzonderlijke interrupts. Beide signalen zijn nodig om de bewegingsrichting van de lineaire actuator te detecteren; dit gebeurt door te controleren welk signaal eerst van laag naar hoog verandert. Het nadeel van het inschakelen van interrupts op beide signalen is dat er tweemaal zoveel ISR-code wordt uitgevoerd. In toepassingen waar de bewegingsrichting van de actuator niet nodig is of al duidelijk is uit het draaiende programma, hoeft slechts één signaal met een interrupt-service-routine te worden ingesteld.
Sommige microcontrollers bieden de mogelijkheid om de kloksnelheid te verhogen. De kloksnelheid bepaalt hoe snel de microcontroller het programma kan uitvoeren. Als de frequentie van de uitgelezen signalen hoog is, moet de kloksnelheid mogelijk worden verhoogd om dit bij te benen. Het is echter energiezuiniger om een zo laag mogelijke kloksnelheid te gebruiken die de toepassing toelaat.
WAT GEBEURT ER ALS DE MICROCONTROLLER NIET SNEL GENOEG IS?
Na de bovenstaande overwegingen kan het soms voorkomen dat de microcontroller niet snel genoeg is om door de hoofdcode heen te komen en de ISR’s bij te benen. In zulke gevallen kun je een extra microcontroller gebruiken. Eén microcontroller kan de ISR’s afhandelen, de data uitlezen en de benodigde gegevens doorgeven aan een andere microcontroller, waar de hoofdcode ononderbroken kan draaien.