Самодельный измеритель магнитного поля на HMC5883L: от идеи до работающего прибора

Если вы заинтересовались измерением магнитного поля — например, хотите проверить, насколько мощные магниты на холодильнике, собрали учебный проект или занимаетесь геофизикой — датчик HMC5883L станет одним из самых простых и доступных способов это сделать. Это компактная цифровая «компасная» микросхема, общающаяся по I2C.

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

Почему именно HMC5883L и какие у него альтернативы

Главное преимущество HMC5883L — цифровой выход и простота подключения. Это готовая «система в кристалле». Внутри есть собственный АЦП, поэтому вы получаете уже оцифрованные значения магнитного поля в микротеслах (или миллигауссах), а не аналоговый сигнал с неизбестным напряжением. Он работает от напряжения питания 2,16 В — 3,6 В.

Основные характеристики:

  • Диапазон измерений: от ±0,88 Га до ±8,1 Га (выбирается настройкой)
  • Число осей: 3 (X, Y, Z)
  • Интерфейс: I2C (адрес 0x1E)
  • Разрешение: от 730 до 230 значений на Га.
  • Корпус: часто продаётся в виде готовых модулей на печатной плате

Ключевой момент — пайка SOT-23. Готовые модули удобны для быстрого старта, но если ваша задача — например, автономный регистратор с жёсткими ограничениями по габаритам, то придётся работать с «голым» чипом. SOT-23 — это корпус с тремя ножками на расстоянии 0,95 мм, а сам чип HMC5883L выполнен в корпусе LGA с контактными площадками по периметру. Это требует аккуратности.

Ближайший аналог — QMC5883L, более новый чип с тем же протоколом и похожими характеристиками. Он реже подделывается, и многие модули на рынке уже используют именно его, путая маркировку. На уровне кода они часто совместимы. Если важен большой лимит на поле (до ±50 Га) — смотрите HMC5843.

Что понадобится

Стартовый набор:

  • Сам датчик HMC5883L (модуль или чип в SOT-23)
  • Микроконтроллер с I2C (Arduino, ESP32 и т.п.)
  • Для версии с чипом — печатная плата, паяльный фен или microscope
  • Блок питания 3,3 В с низким уровнем помех
  • Провода, разъём

Подтяжки линий I2C (4,7 кОм к питанию) уже стоят на majority модулей.

Электрическое подключение — без ошибок

Ниже типовые выводы для чипа HMC5883L:

  • VDD — питание 2,16 — 3,6 В
  • GND — общий провод
  • SCL — тактовая линия I2C
  • SDA — данные I2C
  • DRDY (Data Ready) — опционально, сигнал готовности

Если линия DRDY не подключена — контроллер просто опрашивает датчик в программном режиме по таймеру.

Обратите внимание: шина I2C находится в диапазоне напряжения питания датчика. Если датчик запитан от 3,3 В, и на подтяжках к 5 В может сработать защита входа и сбой интерфейса. Поэтому используйте микроконтроллер с логикой 3,3 В или согласитель уровней.

Регистровая модель и первые значения

Внутри датчика работают три 16-битных АЦП. Начало измерения и доступ к результатам — через регистры 0x03 и далее. Последовательность действий:

  1. Записать в регистр 0x00 значение режима (однократное или непрерывное измерение)
  2. Установить регистр 0x01 — значение шкалы и рабочей частоты измерений
  3. В регистре 0x02 выбирается режим работы
  4. Прочитать 6 байт начиная с регистра 0x03 — старший и младший байты по осям X, Z, Y

Важный момент: порядок байт big-endian. Первые два байта — X, затем Z, затем Y. После сборки надо получить знаковое 16-битное число со знаком.

Пример для Arduino с непрерывным режимом и диапазоном ±1,3 Га:

  1. Wire.beginTransmission(0x1E); Wire.write(0x02); Wire.write(0x00); Wire.endTransmission();
  2. Wire.requestFrom(0x1e, 6); если получено 6 байт — x = Wire.read() << 8 | Wire.read(); z = Wire.read() << 8 | Wire.read(); y = Wire.read() << 8 | Wire.read();

Полученные значения преобразуются в Гауссы: умножением на коэффициент масштаба. Для диапазона ±1,3 Га он равен 1,0 / 1370 для 1370 LSB/Га.

Если у вас модуль на QMC5883L — регистры те же, но могут быть нюансы с порядком осей и инициализацией.

Пайка SOT-23: не так страшен чёрт, как его малюют

Чип HMC5883L в настоящем корпусе, который продаётся радиолюбителям, часто представляет собой LGA-корпус с контактными площадками по периметру, а не классический SOT-23. Поэтому под «SOT-23» здесь мы будем понимать малогабаритный планарный корпус, который просто паяется к плате.

Что нужно учесть при пайке:

  • Перед монтажом обязательно проверьте распиновку по даташиту конкретного корпуса
  • Флюс точечно наносится на контактные дорожки платы
  • Чип позиционируется пинцетом при помощи увеличения
  • Нагрев — феном с узким соплом или термовоздушной паяльной станцией
  • Температура пайки: 240-260°C для стандартных бессвинцовых паяльных сплавов
  • Время нагрева — минимально, чтобы не перегреть кристалл

Если нет возможности паять мелкие корпуса — лучше начать с готового модуля на печатной плате.

Критические ошибки и как их избежать

Начинающие часто делают три классические ошибки:

  • Подтяжки на 5 В при питании датчика 3,3 В — датчик не определяется на I2C или уходит в сбой
  • Отсутствие конденсатора развязки — рядом с выводом VDD обязательно должен стоять керамический конденсатор 0,1 мкФ
  • Ожидание максимальной точности без калибровки — показания без коррекции имеют систематическую погрешность до десятков процентов

Если вы не получаете стабильных нулевых показаний при отсутствии магнитных материалов рядом — это не поломка, а нормальное смещение. Именно поэтому нужна калибровка.

Калибровка: от сырых отсчётов к реальным данным

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

Для каждой оси X, Y, Z найти:

  • offset = (max + min) / 2
  • scale = (max - min) / 2

Затем каждый отсчёт обрабатывается как:

calibrated = (raw - offset) / scale

Это устраняет постоянную составляющую смещение и выравнивает чувствительность осей. После такой калибровки погрешность падает до единиц процентов в рабочем диапазоне.

Если вы измеряете напряжённость поля в Гауссах — не забудьте перевести значения в физические единицы с учётом выбранного диапазона датчика.

Сравнение вариантов реализации

Вариант Чувствительность Сложность пайки Рекомендация
Готовый модуль HMC5883L ±0,88 — ±8,1 Га Нет Для быстрого старта и учебных проектов
Чип HMC5883L в LGA-корпусе ±0,88 — ±8,1 Га Высокая Для компактных самодельных устройств
QMC5883L (модуль) ±0,88 — ±8,1 Га Нет Если нужна замена HMC5883L без переделки кода
HMC5843 ±50 Га Средняя Для измерения сильных магнитных полей

Что делать, если нужно измерять слабые поля

HMC5883L имеет собственные шумы порядка 0,1 — 0,2 мГаусса в полосе частот до 10 Гц. Для измерения геомагнитного поля (около 0,5 Гаусс) этого достаточно, но для точных научных задач — маловато.

Пути улучшения:

  • Усреднение выборок (100-1000 отсчётов) снижает шум в √N раз
  • Фильтр нижних частот на выходе АЦП — программно или аппаратно
  • Экранирование от внешних магнитных помех
  • Использование дифференциального метода — измерение разницы с эталонным полем

Практические рекомендации

  • Всегда начинайте с модуля, а не с голого чипа — это сэкономит время на отладку
  • Печатную плату для чипа проектируйте с короткими дорожками I2C и земляным полигоном
  • Не ставьте датчик рядом с мощными ключами, реле или электродвигателями
  • При пайке чипа используйте термопасту и флюс, но не переусердствуйте — излишки могут закоротить выводы
  • Если вы паяете чип вручную — сначала зафиксируйте его капляй клея, затем паяйте по одному выводу

Как выбрать вариант под свою задачу

Если вы делаете учебный проект или первый магнитометр — берите готовый модуль HMC5883L или QMC5883L. Вы быстро получите результат и разберётесь с программной частью.

Если вам нужен компактный датчик для своего устройства — имеет смысл купить чип и спроектировать плату под него. Но учтите, что пайка потребует увеличения и термовоздушной станции.

Если вы измеряете сильные магнитные поля — смотрите в сторону HMC5843 с диапазоном ±50 Га.

Если важна высокая точность и стабильность — добавьте в схему датчик температуры для термокомпенсации и выполните индивидуальную калибровку.

Частые неисправности и способы их устранения

  • Датчик не отвечает на I2C — проверьте питание, подтяжки, адрес (0x1E), отсутствие коротких замыканий
  • Показания не меняются — убедитесь, что вы запустили измерение и читаете правильные регистры
  • Слишком большие показания шума — проверьте развязку по питанию, экранировку, отсутствие источников помех рядом
  • Перегрев чипа при пайке — уменьшите температуру фена и время нагрева

Заключение

Самодельный измеритель магнитного поля на HMC5883L — это реальный рабочий инструмент, который можно собрать за вечер. Начните с готового модуля и Arduino, чтобы понять логику работы датчика. Когда освоите калибровку и получите стабильные показания — можно переходить к более компактным решениям с пайкой чипа на собственную плату.

Главное — не пренебрегайте калибровкой и развязкой по питанию. Именно эти два момента чаще всего определяет, будет ли ваш магнитометр показывать реальные значения или просто генерировать случайные числа.

radio-blog.ru — электроника и технологии