ZX-CMPS3 Модуль электронного компаса
ZX-CMPS3 Модуль электронного компаса
CMPS-03 – Модуль компаса
Более ранние версии можно определить по наличию в центре печатной платы керамического
резонатора с частотой 8МГц в серебристом корпусе. В новых версиях он отсутствует.
Плата модуля CMPS-03
Дополнительная плата коммутации с кнопкой калибровки и подтягивающими резисторами шины I2C
Версия 14 реализована в марте 2007 года
Обзор
Данный модуль компаса разработан специально для применения в роботах в качестве указателя для
целей навигации. Задача модуля — передача кода, соответствующего углу поворота корпуса робота
относительно направления на север. В компасе применены микросхемы датчиков магнитного поля
KMZ51 компании Philips (NXP), обладающие достаточной чувствительностью для определения
магнитного поля Земли..
Выходные сигналы двух этих датчиков, установленных перпендикулярно друг к другу используются
для расчета направления горизонтальной составляющей магнитного поля Земли. Прибор имеет
большое количество примеров его совместного применения с рядом популярных микроконтроллеров.
Подключение модуля компаса
Выводы модуля
Вывод 1. +5 В. Модуль компаса питается постоянным напряжением 5 В и потребляет ток 25 мА
(номинал).
Имеется два варианта получения значения угла ориентации компаса.
На выводе 4 присутствует ШИМ сигнал, а на выводах 2 и 3 — сигналы интерфейса I2C.
Выводы 2 и 3 являются сигналами интерфейса I2C, обеспечивая прямое считывание значения угла
ориентации компаса. Если Вы не используете этот интерфейс для измерений, то эти выводы должны
быть подключены к плюсу источника питания (+5 В) через подтягивающие резисторы. Сопротивление,
резисторов должно быть близким к 47 кОм, его точность не очень критична
Вывод 4 Сигнал ШИМ — это сигнал, модулированный по ширине импульса, в котором длительность
высокого уровня сигнала пропорциональна текущему значению угла ориентации компаса.
Длительность (ширина) импульса находится в пределах от 1 мс (0 градусов) до 36,99 мс (359,9
градусов) или иначе говоря равна 100 мкс/градус + 1 мс смещение нуля. Пауза между соседними
импульсами (низкий уровень сигнала) 65 мс, то есть полная длительность одного такта сигнала лежит
в диапазоне от 66 мс до 102 мс. Импульсы формируются 16-ти разрядным таймером
микроконтроллера, обеспечивающим разрешение 1 мкс, однако не рекомендуется рассчитывать на
измерение таким способом с точностью лучше, чем 0,1 градус (10 мкс). При использовании для
измерения выхода ШИМ убедитесь в том что выводы интерфейса I2C SDA и SCL подключены к
плюсу источника питания +5 В через подтягивающие резисторы, так как эти выводы не имеют
встроенных резисторов на плате
Вывод 5 используется для индикации текущего процесса калибровки (активный уровень — низкий).
При желании к этому выводу можно подключить индикаторный светодиод , другой вывод которого
подключается к плюсу источника питания +5 В через резистор сопротивлением 390 Ом.
Вывод 6 предоставляет одну из двух возможностей калибровки компаса. Другой способ — запись
числа 255 (0xFF) в командный регистр. Полная инструкция по калибровке имеется ниже в этом
описании. Вывод калибровки имеет встроенный подтягивающий резистор, поэтому не требуется
применять каких-либо дополнительных действий после завершения процесса калибровки.
Выводы 7 и 8 в настоящее время не используются. Они имеют встроенные подтягивающие
резисторы и не требуют установки дополнительных компонентов.
Вывод 9 Общий вывод источника питания (0 В).
Интерфейс I2C
Протокол обмена данными по интерфейсу I2C такой же, как например протокол обмена с
популярными микросхемами памяти EEPROM, например 24C04
Вначале посылается стартовый бит. За ним следует адрес модуля (0XC0) с низким уровнем бита
read/write. Далее следует адрес регистра, который Вы хотите опросить. За ним следует повторный
стартовый бит и снова адрес модуля с высоким уровнем бита read/write (0XCI).
Далее Вы считываете один или два байта 8-ми или 16-ти разрядного регистра в виде постоянно
повторяющейся последовательности.
Данные 16-ти разрядного регистра передаются старшим битом вперед . Компас имеет массив из 16-ти
однобайтных регистров. Некоторые из них объединены в пары для организации 16-ти битового
хранения данных.
Регистр |
Функция |
0 |
Номер версии программного обеспечения (Версия 14 или выше) |
1 |
Направление компаса как byte (в пределах 0-255 на полный оборот) |
2,3 |
Направление компаса как Word (0-3599 в пределах 0-359,9 градусов) |
4,5 |
Внутренний тест — Датчик1 — полученный дифференциальный сигнал как 16- битовое значение со знаком (word) |
6,7 |
Внутренний тест — Датчик2 — полученный дифференциальный сигнал как 16- битовое значение со знаком (word) |
8,9 |
Внутренний тест — Датчик1 необработанное измеренное значение — 16-битное число со знаком (word) |
10,11 |
Внутренний тест — Датчик1 необработанное измеренное значение — 16-битное число со знаком (word) |
12 |
Код разблокировки1 — коды требуются для изменения адреса I2C или для восстановления заводской калибровки |
13 |
Код разблокировки2 |
14 |
Код разблокировки3 |
15 |
Регистр команд (см. описание в тексте) |
Регистр 0 содержит номер версии прошивки модуля компаса (версия 14 на момент написания этого
документа).
Регистр 1 содержит значение угла ориентации, преобразованное в число от 0 до 255. Это может
быть удобнее, чем значения 0-360 для некоторых приложений, так как использует только один байт
для отображения этого угла (тогда как 0-360 потребуют двух байт). Этого вполне достаточно если не
требуется высокая точность.
Регистры 2 и 3 (Старший байт первый) содержат 16-ти разрядное беззнаковое число integer в
диапазоне 0-3599. Оно соответствует значениям угла 0-359,9 радусов.
Ркгистры с 4 по 11 — регистры встроенного теста.
Регистры 8,9 и 10,11 содержат «сырые» данные измерений датчиков. Это сигналы, поступающие
напрямую от датчиков представляют собой исходную точку для всех внутренних расчетов для
определения угла ориентации компаса.
Регистры 12,13 и 14 предназначены для записи кодов разблокировки для изменения адреса I2C и
восстановления заводских параметров калибровки.
Регистр 15 — командный регистр
Интерфейс I2C не имеет встроенных на плате подтягивающих резисторов, поэтому требуется наличие
в схеме этих резисторов в любом месте, обычно они устанавливаются на master устройстве. Они
должны быть подключены на обеих линиях — SDA и SCL, но только в одном месте шины (не на
каждом модуле).
В случае обмена на частотах до 400 кГц рекомендуется использовать резистор сопротивлением 1,8
кОм, при частотах до 1 МГц сопротивление должно бить 1,2 кОм или даже 1 кОм.
Модуль компаса разработан для работы со стандартной частотой шины синхронизации (SCL) равной
100 кГц, однако эта частота может быть увеличена до 1 МГц с помощью следующих действий:
На скоростях выше 160 кГц центральный процессор не может ответить достаточно быстро, чтобы
прочитать данные I2C. Поэтому маленькая задержка в 50 мкс должна быть вставлена с любой
стороны последовательности передачи адреса регистра. Нигде больше в процессе обмена никаких
задержек не потребуется. Разработчиками модуль тестировался на скоростях обмена при частоте
SCL 1,3 МГц. Модуль компаса может работать только как Slave устройство на шине I2C и не может
быть Master.
Регистр команд
Регистр 15 является регистром команд. Всего команд немного — 0xC0-CE для изменения адреса I2C
и 0xF2 для восстановления данных заводской калибровки, что требует перечисленных ниже кодов
разблокирвки. Также команда 255 (0xFF) для запуска процедуры самокалибровки, для которой кодов
разблокировки не требуется.
Изменение адреса I2C с заводской установки по умолчанию 0xC0
Начиная с версии 14 теперь стало возможным изменение адреса I2C модуля компаса на один из
восьми возможных: . 0xC0, 0xC2. 0xC4. 0xC6,0xC8. 0xCA. 0xCC или 0xCE.
Это делается путем записи в регистры 12, 13 и 14 кодов разблокировки и нового адреса в регистр
команд 15. Помните при этом, что коды разблокировки для изменения адреса I2C отличаются от кодов
разблокировки для восстановления заводских установок калибровки.
Регистр 12 | Регистр 13 | Регистр 14 | Регистр 15 |
0xA0 | 0xAA | 0xA5 | 0xC2 |
В приведенном примере адрес изменится на 0xC2 и новый адрес станет активным немедленно. Не
забудьте нанести метку на компас CMPS03 с новым адресом.
Вы можете выполнить это за одну транзакцию интерфейса I2C, установив адрес регистра 12 и
записав четыре байта. Внутренний указатель регистра будет при этом инкрементироваться
автоматически.
Восстановление заводской калибровки
Начиная с версии 14 стало возможным восстановление заводских калибровочных установок. Для
этого нужно записать коды разблокировки в регистры 12, 13 и 14 и команды restore (0xF2) в
командный регистр 15. обратите внимание на то, что коды разблокировки для этого отличны от кодов
разблокировки дляизменения адреса I2C.
Регистр 12 | Регистр 13 | Регистр 14 | Регистр 15 |
00x55 | 0x5A | 0xA5 | 0xF2 |
Перед началом калибровки Вы должны точно знать направления на Север, Юг, запад и Восток.
Помните, что это магнитные полюса. А не географические.
Возьмите обычный магнитный компас и определите эти направления. В течение всего процесса
калибровки компас должен быть расположен горизонтально, не наклоняйте его.
Удалите все магнитные и металлические предметы подальше от компаса во время его калибровки, в
том числе и Ваши наручные часы..
Метод I2C
Для калибровки с использованием шины I2C Вы должны записать код 255 (0xff) в регистр 15 по
одному разу для каждой стороны света — Север, Восток, Юг и Запад.
Значение 255 автоматически стирается из регистра после окончания калибровки по каждому
направлению.
Последовательность установки сторон света может быть любой, но все четыре стороны должны быть
откалиброваны.
Например:
- Установите корпус компаса горизонтально, поверните его на север. Запишите число 255 врегистр 15. На выводе калибровки (вывод 5) установится низкий уровень сигнала.
- Установите корпус компаса горизонтально, поверните его на Восток, запишите код 255 в регистр 15.
- Установите корпус компаса горизонтально, поверните его на Юг, запишите код 255 в регистр15.
- Установите корпус компаса горизонтально, поверните его на Запад, запишите код 255 врегистр 15. На выводе калибровки (вывод 5) установится высокий уровень сигнала.
Вот и все.
Метод использования Выхода калибровки
Для запуска калибровки используется Вывод 6. Вывод 6 имеет встроенный подтягивающий резистор и
не требует дополнительных мер после завершения процесса калибровки.
Для запуска калибровки Вы должны подать низкий уровень на Вывод 6, после чего на него надо
подать высокий уровень — и так для всех четырех сторон света — Севера, Востока, Юга и Запада.
Для этого подойдет простая кнопка, подключенная к Выводу 6 и 0 В источника питания.
Последовательность выбора сторон света для калибровки может быть любой, но необходимо
откалибровать все четыре стороны.
Например:
- Установите корпус компаса горизонтально, повернув его на Север. Быстро нажмите и отпустите кнопку калибровки. На Выводе 5 появится низкий уровень.
- Установите корпус компаса горизонтально, повернув его на Восток. Быстро нажмите и отпустите кнопку калибровки.
- Установите корпус компаса горизонтально, повернув его на Юг Быстро нажмите и отпустите
- кнопку калибровки.
- Установите корпус компаса горизонтально, повернув его на Запад. Быстро нажмите и отпустите кнопку калибровки. На Выводе 5 появится высокий уровень.
Вот и все
Очень важно то, чтобы калибровка была выполнена для всех четырех сторон света (выполнены все
четыре шага описанного выше алгоритма).
Когда Вы запускаете Шаг 1 калибровки, на Выводе 5 появляется сигнал низкого уровня, который вновь
меняется на высокий уровень после окончания 4-го Шага калибровки. Для того. Чтобы видеть что
идет процесс калибровки Вы можете подключить светодиод в выводу 5 к плюсу источника питания
через резистор сопротивлением 390 Ом.
Перед запуском уровень должен быть высоким (светодиод не горит) .
Установочная схема модуля компаса CMPS03
PDF версия руководства пользователя (Рус).