Если вы заинтересовались измерением магнитного поля — например, хотите проверить, насколько мощные магниты на холодильнике, собрали учебный проект или занимаетесь геофизикой — датчик HMC5883L станет одним из самых простых и доступных способов это сделать. Это компактная цифровая «компасная» микросхема, общающаяся по I2C.
Самое интересное, что позволяет сделать HMC5883L под руками: собрать на его основе магнитометр с чувствительностью в несколько миллигаусс и при этом не собирать аналоговые схемы. Ниже я опишу, как выйти на получение реальных числовых данных по каждой оси.
- Почему именно HMC5883L и какие у него альтернативы
- Что понадобится
- Электрическое подключение — без ошибок
- Регистровая модель и первые значения
- Пайка SOT-23: не так страшен чёрт, как его малюют
- Критические ошибки и как их избежать
- Калибровка: от сырых отсчётов к реальным данным
- Сравнение вариантов реализации
- Что делать, если нужно измерять слабые поля
- Практические рекомендации
- Как выбрать вариант под свою задачу
- Частые неисправности и способы их устранения
- Заключение
Почему именно 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 и далее. Последовательность действий:
- Записать в регистр 0x00 значение режима (однократное или непрерывное измерение)
- Установить регистр 0x01 — значение шкалы и рабочей частоты измерений
- В регистре 0x02 выбирается режим работы
- Прочитать 6 байт начиная с регистра 0x03 — старший и младший байты по осям X, Z, Y
Важный момент: порядок байт big-endian. Первые два байта — X, затем Z, затем Y. После сборки надо получить знаковое 16-битное число со знаком.
Пример для Arduino с непрерывным режимом и диапазоном ±1,3 Га:
- Wire.beginTransmission(0x1E); Wire.write(0x02); Wire.write(0x00); Wire.endTransmission();
- 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) / 2scale = (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, чтобы понять логику работы датчика. Когда освоите калибровку и получите стабильные показания — можно переходить к более компактным решениям с пайкой чипа на собственную плату.
Главное — не пренебрегайте калибровкой и развязкой по питанию. Именно эти два момента чаще всего определяет, будет ли ваш магнитометр показывать реальные значения или просто генерировать случайные числа.



