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

Как да прочетете сигнала от сензор на Холов ефект с помощта на Arduino

Adam Morissette
Adam Morissette
PA Engineer

Сензорите на Хол са една от опциите за обратна връзка, които предлагаме в нашата линейни задвижващи механизми да предоставя информация за местоположение и скорост. Нашите PA-04-HS и PA-100 имат сензори на Хол на стандартните устройства. Докато няколко други наши задвижващи механизми могат да бъдат поръчани по поръчка със сензори на Хол.

Разгледайте нашата гама от микроконтролери Arduino за върховен контрол на задвижващите механизми!

КАКВО Е СЕНЗОР НА ХОЛОВ ЕФЕКТ?

Сензорът на Хол е електронен компонент, който генерира напрежение въз основа на силата на магнитното поле, преминаващо през него. Когато този сензор е сдвоен със схема за откриване на праг на напрежение, може да се генерира сигнал с две състояния. В нашия задвижващи механизми, сензорът на Хол е проектиран да генерира двуканален сигнал с форми на вълната, определени в едно от две двоични състояния: включено или изключено. Тези два сигнала ще се покачват и спадат, докато електрическият мотор се върти с фазова разлика от 90° между тях, както е показано по-долу. Честотата на тези импулси, тъй като те се отнасят до промяната на позицията в задвижващия механизъм, зависи от общата им разделителна способност и се различава между различните ни задвижващи механизми.

Hall effect sensors 

КАК СЕ РАЗЧЕТАВАТ ТЕЗИ СИГНАЛИ НА ЗАЛАТА?

Как да използвате сензор на Хол

При четене на цифров сигнал на микроконтролер има два основни метода: запитване и прекъсвания. Запитването е програмиран метод, при който микроконтролерът периодично проверява състоянието на входа, за да види дали е имало промяна. Прекъсванията са хардуерен механизъм, който незабавно измества фокуса на програмата на микроконтролера, когато сигналът се промени на входа. Всеки от тези методи има своите плюсове и минуси и всеки има приложения, за които е по-подходящ. В нашия случай ще искаме да знаем точния момент, в който сигналът променя състоянието си, така че ще използваме прекъсвания. За да използваме сензор на Хол с... Микроконтролери Arduino Използва се прекъсване. Чрез създаване на ISR или Interrupt Servicing Routine (рутина за обслужване на прекъсвания), Arduino може да бъде накарано да изпълни секция от код незабавно, когато бъде открита определена промяна на зададен вход. Пример за ISR за Arduino е показан по-долу. Модифицирана версия, насочваща откритите сигнали към светодиоди, е един от начините за тестване на сензор на Хол.

Програмиране на Arduino за четене на сензори с ефекта на Хол - метод на прекъсване

// са необходими глобални променливи, които да предават данни между

// главната програма и ISR-ите

нестабилен байтов сигналA;
нестабилен байтов сигналB;

// пиновете, които могат да се използват с прекъсвания, зависят от платката, която използвате

// използваме
константен байт inputA = 2;
константен байт inputB = 3;

невалидна настройка() {
// активиране на вътрешни резистори на входните пинове
pinMode(inputA, INPUT_PULLUP);
pinMode(inputB, INPUT_PULLUP);
// прочитане на началното състояние на входовете
signalA = digitalRead(inputA);
сигналB = цифровоЧетене(входB);

// ще засече нарастващ или низходящ фронт
attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
прикачиПрекъсване(цифровПинКъмПрекъсване(входB),сигналB_ISR,ПРОМЯНА);

}

невалиден цикъл() {
// Тук информацията за сигнала може да се използва в програма
}

невалиден signalA_ISR() {
// когато бъде открита промяна, тя винаги ще бъде

// към противоположното на текущото състояние

сигналА = !сигналА;
}

невалиден сигналB_ISR() {
сигналB = !сигналB;
}

Нашият PA-04-HS е с вградена обратна връзка с ефект на Хол!

КАКВО ТРЯБВА ДА СЕ ПРЕДВИДАТ В ЗАЯВЛЕНИЕТО?

Тъй като сигналите, които отчитаме, ще бъдат високочестотни, е необходимо да се вземат предвид няколко неща. Първо, колко време ще отнеме на програмата да изпълни кода в ISR? Колко отделни сигнала трябва да имат ISR? Каква е тактовата честота на микроконтролера?

Проблем, който може да възникне в програма с дълъг ISR, е, че ISR ще се задейства отново, преди да е завършил кода, който съдържа от предишния път, когато е бил задействан. Препоръчително е да се запази минималното необходимо количество код в ISR, за да се избегне този проблем.

В примерния код по-горе, два сигнала са настроени с отделни прекъсвания. И двата сигнала са необходими, за да се открие посоката на движение на линейния задвижващ механизъм, като това се прави чрез проверка кой сигнал се променя от нисък към висок преди другия. Недостатъкът на разрешаването на прекъсвания и за двата сигнала е, че ще се изпълни два пъти повече ISR код. В приложения, където посоката на движение на задвижващия механизъм не е необходима или е вече очевидна от изпълняваната програма, само един сигнал ще трябва да бъде настроен с рутина за обслужване на прекъсвания.

Някои микроконтролери имат възможност за промяна на тактовата честота, за да бъде по-бърза. Тактовата честота променя скоростта, с която микроконтролерът може да изпълнява програмата. Ако честотата на четените сигнали е висока, може да се наложи да се увеличи тактовата честота, за да се поддържа. По-ефективно от гледна точка на енергията обаче е да се използва възможно най-ниска тактова честота, която приложението позволява.

КАКВО СЕ СЛУЧВА, АКО МИКРОКОНТРОЛЕРЪТ НЕ Е ДОСТАТЪЧНО БЪРЗ?

След като горните съображения са направени, понякога микроконтролерът просто не е достатъчно бърз, за да обработва основния код и да е в крак с ISR-тата. В тези случаи може да е добре да използвате допълнителен микроконтролер. Един микроконтролер може да се използва за изпълнение на ISR-тата, четене на данните и след това предаване на необходимите данни към друг микроконтролер, където основният код може да се изпълни без прекъсване.