Андрей Смирнов
Время чтения: ~10 мин.
Просмотров: 5

ТАХОМЕТР НА ДАТЧИКЕ ХОЛЛА

Датчик Холла — это датчик магнитного поля. Он был так назван из-за принципа своей работы — : если в магнитное поле поместить пластину с протекающим через неё током, то электроны в пластине будут отклоняться в направлении, перпендикулярном направлению тока. В какую именно сторону будут отклоняться электроны, зависит от полярности магнитного поля:

  1. Электроны
  2. Пластина
  3. Магниты
  4. Магнитное поле
  5. Источник тока

Различная плотность электронов на сторонах пластины создаёт разность потенциалов, которую можно усилить и измерить, что датчики Холла и делают. Датчики Холла (далее просто ДХ) бывают аналоговыми и цифровыми. Аналоговый преобразует индукцию магнитного поля в напряжение, знак и величина которого будут зависеть от полярности и силы поля. Цифровой же выдаёт лишь факт наличия/отсутствия поля, и обычно имеет два порога: включения — когда значение индукции выше порога, датчик выдает логическую единицу; и выключения — когда значение ниже порога, датчик выдаёт логический ноль. Наличие зоны нечувствительности между порогами называется и служит для исключения ложного срабатывания датчика на всяческие помехи — аналогично работает цифровая электроника с логическими уровнями напряжения. Цифровые ДХ делятся ещё на униполярные и биполярные: первые включаются магнитным полем определённой полярности и выключаются при снижении индукции поля; биполярные же включаются полем одной полярности, а выключаются полем противоположной полярности.Аналоговый ДХ Его размер — всего 4×3 мм, и он имеет три вывода:analog_sensor.jpg Как видно, питание датчику нужно биполярное — тогда на южный полюс магнита датчик будет реагировать положительным уровнем на выходе, на северный — отрицательным, а на отсутствие поля — нулевым. Однако можно обойтись однополярным питанием — в этом случае уровень на выходе (Vo) в половину напряжения питания (Vdc/2) будет означать отсутствие магнитного поля, Vo > Vdc/2 — южный полюс, Vo < Vdc/2 — северный. Характеристики при однополярном питании 5 В и температуре от -40 до 85 °C:

  • Потребляемый ток: от 6 до 10 мА
  • Выходной ток: от 1.0 до 1.5 мА
  • Выходное напряжение: от 1.0 до 1.75 мВ/Гс, в среднем 1.4 мВ/Гс (милливольт на )
  • Нулевая точка: от 2.25 до 2.75 В, в среднем 2.5 В
  • Магнитный диапазон: от ±650 Гс до ±1000Гс
  • Время отклика: 3 мс

Из этих данных следует, что при стандартном питании от Arduino (+5V, GND) при 25 °C датчик в отсутствие магнитного поля будет выдавать 2.5 В, а на поле силой 1000 Гс — 2.5 ± 1.4 В. Соответственно, если воспользоваться АЦП, разброс значений будет примерно в диапазоне от 280 до 800 со нулевой точкой в 512. Приступим к экспериментам. Подключаем вывод “+” к 5V Arduino, вывод “-” к GND, оставшийся — к Analog 0: Заливаем в Arduino следующий скетч: Не спеша подносим магнит вплотную сначала одним полюсом, потом другим, глядя в Serial monitor:analog_sensor_log.pngЦифровой биполярный ДХ Выглядит он точно так же, как и аналоговый, даже выводы расположены так же:digital_sensor.jpg Тут можно не бояться, биполярный он только в магнитном смысле, а питание ему можно подавать вполне себе обычное, однополярное. К слову, питание этот датчик принимает в довольно широком диапазоне — от 3.8 до 24 В, а ток может отдавать до 100 мА, что позволяет непосредственно от него запитывать управляемые им устройства (например, реле). Чувствительность у него почти точь-в-точь как у аналогового SS49E: от -600 Гс до -1000 Гс (северный полюс магнита) и от 600 Гс до 1000 Гс. Подключается он чуть посложнее, чем аналоговый: выход датчика Q нужно подтянуть к питанию резистором в 10 кОм, так как выход у него с открытым коллектором: А вот и суперсложное подключение, где выход Q подключен к цифровому пину 2: Зальём в Arduino ещё один крутой скетч: Теперь подносим магнит то одним полюсом, то другим и смотрим в Serial monitor: Обратите внимание — датчик не переключается, пока не поднесёшь магнит другим полюсом, а ещё он очень чувствительный и переключается магнитом, вытащенным из дохлого CD-ROM’а, на расстоянии около 2 см!Применение Датчики Холла используются в качестве бесконтактных выключателей, как замена герконам, для бесконтактных замеров тока в проводниках, управления моторами, чтения магнитных кодов, измерения уровня жидкости (магнитный поплавок) и т.д. Ну а я, имея два цифровых биполярных ДХ, сделаю бесконтактный магнитный . Принцип прост: на вращающийся диск лепим рядышком два магнита разными полюсами вверх (для униполярных ДХ хватит одного), а над ними размещаем цифровые ДХ и снимаем показания. Можно использовать скетч из статьи про энкодеры, но смотреть на стрелочки скучно, ведь хочется ещё посчитать обороты, так что напишем новый: Выглядеть конечная установка может так: Я разобрал старый нерабочий жёсткий диск и установил на его пластину два магнита от системы позиционирования головки CD-ROMа на расстоянии ~5 мм друг от друга, а датчики разместил на креплении над пластиной, на расстоянии ~15 мм друг от друга. Вот как оно работает: Если не нужно знать направление вращения, а хочется просто считать обороты, то можно обойтись вообще одним униполярным датчиком и одним магнитом (:

В этом проекте мы будем использовать датчик Холла и плату Arduino Uno для измерения напряженности магнитного поля. Мы будем использовать датчик Холла с наименованием UGN3503U, который измеряет величину напряженности магнитного поля и обеспечивает на своем выходе аналоговое напряжение пропорциональное напряженности магнитного поля, которое мы затем будем переводить с помощью аналогового-цифрового преобразования в Arduino в цифровой вид. Датчик измеряет напряженность магнитного поля (электромагнитную индукцию) в гауссах (GAUSS). Один гаусс равен одной десятитысячной Тесла (Тл).

Величину напряженности магнитного поля, преобразованную в цифровую форму с помощью Arduino, мы затем будем показывать на ЖК дисплее 16х2.

Плата Arduino имеет 6 каналов АЦП (аналогового-цифрового преобразования). Любой из них можно использовать в качестве аналогового входа. АЦП Arduino Uno имеет разрешающую способность 10 бит, что соответствует значениям целых чисел в диапазоне 0-(2^10) 1023. Это означает что входное напряжение в диапазоне от до 5 Вольт преобразуется в целое число от 0 до 1023. То есть одному цифровому значению (шагу) соответствует шаг аналогового напряжения 5/1024= 4.9mV.

В нашем проекте мы будем подключать аналоговый выход датчика Холла к контакту ‘A0’ платы Arduino Uno.

Более подробно о датчике Холла можно прочитать в этой статье: подключение датчика Холла к микроконтроллеру AVR.

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

Работа схемы и программы

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

Жидкокристаллический (ЖК) дисплей 16×2 использует 16 контактов для своей работы в случае если нужен черный цвет. Если черный цвет не нужен, то достаточно 14 контактов. В этом случае контакты черного цвета можно либо запитать, либо оставить их как есть. То есть из 14 контактов ЖК дисплея мы имеем 8 контактов для данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или GND&+5v), 3-й контакт для управления контрастностью (VEE) – определяет насколько «толстыми» будут выглядеть символы на экране, и 3 управляющих контакта (RS&RW&E).

На представленной схеме мы использовали только 2 управляющих контактах ЖК дисплея – это позволяет лучше понять логику работы схемы начинающим. Контакт для управления контрастностью и READ/WRITE сравнительно редко используются и в нашем случае их можно замкнуть на землю. Это переводит ЖК дисплей в режим чтения и обеспечивает ему максимальную контрастность. Поэтому нам нужно только управлять состоянием контактов ENABLE и RS чтобы передавать символы и данные на ЖК дисплей.

ARDUINO IDE позволяет пользователю использовать ЖК дисплей в 4 битном режиме. Этот режим позволяет уменьшить число используемых контактов ARDUINO. 4-битный режим взаимодействия с ЖК дисплеем предусмотрен для ARDUINO по умолчанию, поэтому нет необходимости предпринимать какие либо действия чтобы его включить. В представленной схеме можно увидеть, что мы использовали 4-битный режим (D4-D7). То есть у нас с ARDUINO соединено 6 контактов ЖК дисплея: 4 контакта для передачи данных и 2 контакта для управления.

Чтобы задействовать АЦП в Arduino Uno необходимо сделать следующие вещи:

1. analogRead(pin); 2. analogReference(); 3. analogReadResolution(bits);

Плата Arduino Uno по умолчанию имеет опорное напряжение АЦП равное 5 В. То есть максимальное входное напряжение для АЦП будет равно 5 В. Но поскольку некоторые датчики обеспечивают на своем выходе напряжение в диапазоне 0-2.5 В, то в этом случае если мы будем использовать опорное напряжение АЦП 5 В, то мы потеряем в точности преобразования. Поэтому в Arduino предусмотрена специальная команда для изменения опорного напряжения АЦП (“analogReference();”.

Максимальная разрешающая способность (разрешение) АЦП платы Arduino составляет 10 бит, изменить его можно с помощью команды “analogReadResolution(bits);”. Эта функция может быть полезна в некоторых случаях, например, когда нужно увеличить скорость аналого-цифрового преобразования.

Теперь, если все установки работы с АЦП выполнены, мы можем непосредственно считать значение с выхода АЦП с помощью функции “analogRead(pin);”, где “pin” обозначает номер контакта, с которого мы будем считывать аналоговый сигнал. В нашем случае это будет контакт “A0”. Значение с выхода АЦП можно сразу присвоить переменной целого типа (integer) с помощью команды “int ADCVALUE = analogRead(A0);”.

Для взаимодействия с ЖК дисплеем прежде всего необходимо подключить библиотеку для работы с ним с помощью инструкции ‘#include ’. Эта библиотека сразу по умолчанию включает 4-битный режим взаимодействия с ЖК дисплеем.

После этого необходимо сообщить Arduino тип подключаемого ЖК дисплея. ЖК дисплеи бывают различных типов, например 20×4, 16×2, 16×1 и т.д. В нашем случае мы будем подключать к Arduino ЖК дисплей 16×2, поэтому нам необходимо использовать инструкцию ‘lcd.begin(16, 2);’.

Далее плате Arduino необходимо сообщить, к каким ее контактам мы подключили ЖК дисплей. В соответствии с представленной схемой нам необходимо использовать команду LiquidCrystal lcd(8, 9, 10, 11, 12, 13), которая сообщит Arduino что ЖК дисплей подключен к ее контактам 8, 9, 10, 11, 12 и 13.

После выполнения всех этих действий можно приступать к передаче данных на ЖК дисплей.

Исходный код программы

Представленная программа должна делать следующие действия: как только вблизи датчика Холла появляется какой-нибудь магнит (магнитное поле) напряжение на его выходе изменяется, значение этого напряжения подается на АЦП платы Arduino, которая переводит его в цифровую форму (число от 0 до 1023). После этого значение напряженности магнитного поля высвечивается на ЖК дисплее.

#include // подключение библиотеки для работы с ЖК дисплеемLiquidCrystal lcd(8, 9, 10, 11, 12, 13); // контакты Arduino, к которым подключен ЖК дисплейchar ADCSHOW[5]; // инициализация символьного массива чтобы отображать результат АЦП

void setup(){  lcd.begin(16, 2); // устанавливаем число столбцов и строк ЖК дисплея}

void loop(){  lcd.print(«FluxDensity»); // показываем строку «FluxDensity»  lcd.setCursor(0, 1); // передвигаем курсор на вторую линию  lcd.print(«(in Gauss):»); // показываем строку «(in Gauss): «  String ADCVALUE = String((analogRead(A0)-515)/3.76);/* поскольку у нас опорное напряжение АЦП 5 В и разрешение АЦП 10 бит, то получаем 5/1024 = 5mV инкремента на одно значение. Используемый нами датчик Холла обеспечивает изменение напряжения 1.3 В на изменение напряженности магнитного поля на 1 ГауссПоэтому нам чтобы получить значение напряженности поля в Гауссах мы должны разделить значение АЦП на 3.76. Но в самом начале мы должны отнять 2.5 В (515 в единицах АЦП) поскольку это соответствует нулю в Гауссах (так откалиброван датчик) */  ADCVALUE.toCharArray(ADCSHOW, 5); // конвертируем значение АЦП в символьный массив  lcd.print(ADCSHOW); // отображаем на экране ЖК дисплея значение напряженности магнитного поля  lcd.print(«G «);  lcd.setCursor(0, 0); // передвигаем курсор в 1-й столбец 1-й строки}

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

297 просмотров

ВНИМАНИЕ!

Если вы не знаете, куда подключить Arduino, где взять программу для прошивки, как установить драйвера, как всё настроить и как устанавливать библиотеки – читайте статейку “Первые шаги с Arduino”, ссылка справа от этого текста. Там же разобраны типичные ошибки, описаны варианты питания и есть краткий FAQ.

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)

Screenshot_3-1024x568.png

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)
  • Библиотека разархивируется в папку

  • Поковырявшись в библиотеке, можно найти управление яркостью дисплея

Screenshot_2-1024x571.png

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)
  • Функция map – преобразует диапазон частот вращения (в примере от 0 до 1500) в диапазон угла поворота сервомашинки (в примере от 0 до 180 – максимально возможный для сервы)

Screenshot_4-1024x566.png

  • 3 цифровой пин используется как источник питания (+5В) для датчика Холла. Для этого в setup() прописано подать сигнал высокого уровня на 3 пин.
  • 2 пин принимает прерывания. Для нано и уно это 2 и 3 пины, и при объявлении прерывания она называются соответственно 0 и 1 (0 это второй, 1 это третий)

Screenshot_1-1024x568.pngИспользуемые источники:

  • http://robocraft.ru/blog/594.html
  • https://microkontroller.ru/arduino-projects/izmerenie-napryazhennosti-magnitnogo-polya-s-pomoshhyu-arduino/
  • https://alexgyver.ru/source_tahometer/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации