Принцип действия датчиков Холла основан на так называемом "эффекте Холла", открытым Эдвином Холлом (Edwin Hall) в 1869 году. Этот эффект гласит: "эффект Холла основан на явлении возникновения поперечной разности потенциалов (называемой также холловским напряжением) при помещении проводника с постоянным током в магнитное поле".
В данной статье этот эффект будет разобран с практической точки зрения. Мы рассмотрим подключение датчика Холла к микроконтроллеру ATmega16 (семейство AVR) и будем использовать светодиод для демонстрации эффекта Холла когда будем подносить магнит к датчику Холла.
Что такое эффект Холла
Эффект Холла можно рассмотреть с точки зрения движения зарядов (заряженных частиц) в магнитном поле. Чтобы понять на практике как это происходит подсоединим батарею к проводнику как показано на рисунке ниже. Электрический ток (i) в этом случае начнет протекать по проводнику от положительного контакта батареи к ее отрицательному контакту.
Но поток электронов (e-) в этом случае будет направлен в противоположном направлении, то есть от отрицательного контакта батареи к ее положительному контакту. В этот момент времени если мы измерим напряжение (разность потенциалов) на концах проводника (поперек его) как показано на рисунке ниже, то оно будет равно нулю.
Теперь создадим магнитное поле над проводником как показано на следующем рисунке.
И если в этот момент времени мы измерим напряжение на концах проводника (поперечных прохождению тока), то оно будет отлично от нуля. Это напряжение и называется "напряжением Холла", а само это явление называется "эффектом Холла".
Необходимые компоненты
- Микроконтроллер ATmega16 (купить на AliExpress).
- Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
- Кварцевый генератор 16 МГц (купить на AliExpress).
- Датчик Холла (купить на AliExpress).
- Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
- Конденсатор 22 пФ (2 шт.) (купить на AliExpress).
- Источник питания с напряжением 5 Вольт.
- Кнопка.
- Светодиод (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Работа схемы
Схема устройства приведена на следующем рисунке.
Программирование микроконтроллера ATmega16 для взаимодействия с датчиком Холла
Программировать микроконтроллер ATmega16 мы будем с помощью программатора USBASP и программы Atmel Studio7.0. Полный текст программы приведен в конце данной статьи.
Для данной программы мы задействуем всего два контакта микроконтроллера ATmega16: к одному из них мы будем подключать датчик Холла, а к другому – светодиод. В начале программы необходимо будет подключить нужные нам библиотеки.
Определим входной контакт для чтения данных от датчика Холла.
#define hallIn PA0
Зададим необходимые параметры для этого вывода микроконтроллера ATmega16.
DDRA=0xFE;
PINA=0x01;
Если магнит находится рядом с датчиком Холла, то в зависимости от значения на выходе контакта PORTA0 включаем или выключаем светодиод.
if(bit_is_clear(PINA,hallIn)){
PORTA=0b00000010;
}
else{
PORTA=0b00000000;
}
Применения датчика Холла
Датчики Холла широко используются там, где необходимо измерять силу магнитного поля или определять полюс магнита. Но кроме этого существует и достаточно много специфических применений подобных датчиков, к которым можно отнести:
- бесконтактный датчик (приближения) в мобильных телефонах;
- механизм переключения передач в самоходных транспортных средствах;
- контроль (инспектирование) различных труб и трубопроводов;
- контроль скорости вращения.
Исходный код программы на языке С (Си) с пояснениями
Программа для рассматриваемой схемы представлена следующим фрагментом кода на языке С (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include<avr/io.h> #define hallIn PA0 // будем подсоединять датчик Холла к контакту PA0 int main(void) { DDRA=0xFE; // PA0 конфигурируем на ввод (для датчика Холла), а PA1 – на вывод (для светодиода) while(1) { PINA=0x01; // инициализируем PA0 if(bit_is_clear(PINA,hallIn)){ // проверяем находится ли поблизости магнит PORTA=0b00000010; // включаем светодиод } else // если магнита нет поблизости { PORTA=0b00000000; // выключаем светодиод } } } |