Подключение датчика Холла к микроконтроллеру AVR ATmega16

Принцип действия датчиков Холла основан на так называемом «эффекте Холла», открытым Эдвином Холлом (Edwin Hall) в 1869 году. Этот эффект гласит: «эффект Холла основан на явлении возникновения поперечной разности потенциалов (называемой также холловским напряжением) при помещении проводника с постоянным током в магнитное поле».

Подключение датчика Холла к микроконтроллеру AVR ATmega16: внешний вид конструкции

В данной статье этот эффект будет разобран с практической точки зрения. Мы рассмотрим подключение датчика Холла к микроконтроллеру ATmega16 (семейство AVR) и будем использовать светодиод для демонстрации эффекта Холла когда будем подносить магнит к датчику Холла.

Что такое эффект Холла

Эффект Холла можно рассмотреть с точки зрения движения зарядов (заряженных частиц) в магнитном поле. Чтобы понять на практике как это происходит подсоединим батарею к проводнику как показано на рисунке ниже. Электрический ток (i) в этом случае начнет протекать по проводнику от положительного контакта батареи к ее отрицательному контакту.

Схема для пояснения эффекта Холла

Но поток электронов (e-) в этом случае будет направлен в противоположном направлении, то есть от отрицательного контакта батареи к ее положительному контакту. В этот момент времени если мы измерим напряжение (разность потенциалов) на концах проводника (поперек его) как показано на рисунке ниже, то оно будет равно нулю.

При отсутствии магнитного поля напряжение на поперечных концах проводника равно 0

Теперь создадим магнитное поле над проводником как показано на следующем рисунке.

При наличии магнита на поперечных концах проводниках появляется напряжение Холла

И если в этот момент времени мы измерим напряжение на концах проводника (поперечных прохождению тока), то оно будет отлично от нуля. Это напряжение и называется «напряжением Холла», а само это явление называется «эффектом Холла».

Необходимые компоненты

Микроконтроллер ATmega16
Источник питания с напряжением 5 Вольт
Программатор AVR-ISP, USBASP или другой подобный
Кварцевый генератор 16 МГц
Конденсатор 100 нФ (2 шт.)
Конденсатор 22 пФ (2 шт.)
Кнопка
Соединительные провода
Макетная плата
Светодиод

Работа схемы

Схема устройства приведена на следующем рисунке.

Схема подключения датчика Холла к микроконтроллеру AVR ATmega16

Программирование микроконтроллера 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;
}

Применения датчика Холла

Датчики Холла широко используются там, где необходимо измерять силу магнитного поля или определять полюс магнита. Но кроме этого существует и достаточно много специфических применений подобных датчиков, к которым можно отнести:

  • бесконтактный датчик (приближения) в мобильных телефонах;
  • механизм переключения передач в самоходных транспортных средствах;
  • контроль (инспектирование) различных труб и трубопроводов;
  • контроль скорости вращения.

Исходный код программы на языке С (Си) с пояснениями

Программа для рассматриваемой схемы представлена следующим фрагментом кода на языке С (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.

#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; // выключаем светодиод
}
}
}

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
13 просмотров


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *