В этой статье я постораюсь поделится опытом работы с цифровым акселерометром от ST Microelectronics.
Такой датчик позволяет получать данные о своем ускорении. В отличии от аналоговых датчиков, где для чтения нужен АЦП, здесь необходимо лишь настроить сенсор на нужный режим работы и считать готовую инфу. Чтение происходит посредством либо SPI, либо I2C интерфейса, на выбор. Получив данные, микроконтроллер может использовать их как угодно.
Мне доводилось работать с 2-мя датчиками семейства — lis202dl и lis302dl. Отличаются они только количеством осей, поэтому далее буду говорить о 3-х осевом.
Основные фичи: Программируемый предел измерения. Можно выбрать 2 фиксированных значения: 2G/8G. Нужно выставлять в зависимости от применения. Если поставить 2G, то можно точнее измерять не очень большие ускорения и наоборот для 8G.
Внутренний программный фильтр. Мега полезная вещь. Меняет характер выдаваемых данных с относительного на абсолютный и наоборот. Поясню на примере: при выключенном фильтре сенсор будет постоянно «чувствовать» притяжение земли и если его ось Z будет направлена перпендикулярно земле, то по ней мы будем постоянно иметь максимальные значение ускорения. А если включить фильтр и оставить датчик в покое, то пока мы не приложим к нему ускорение, на всех осях будет 0.
2 программируемых выхода прерываний. Если не нужно постоянно получать точное значение ускорения, а лишь превышение какого-либо порога, то можно задать этот самый порог и ждать изменения на соответствующей ноге.
Основной и сильно заметный (для начинающего) минус датчика — размер. Он очень маленький. Корпус (LGA14) совершенно не паябельный, но это только на первый взгляд. Я паял его по методу уважаемого DI HALT'а из его статьи о аналоговом акселерометре MMA7260Q. Нарисовал footprint с направляющими уголками. Нанес припоя на дорожки, обильно смазал флюсом, отцентрировал по уголкам, и касаясь дорожек паяльником запаял датчик. Если кто-то захочет повторить, то footprint'ы для Sprint Layout 5 и DipTrace можно найти в конце статьи.
Если же вы не уверены в твердости рук или просто не хотите парится, то можно найти готовые платки переходники, где все уже запаяно до нас. Также есть отладочные платы и от самих ST в том числе.
Схемы подключения на примере Tiny2313: I2C — не забываем подтяжку обоих линий до VCC. Чтобы чип понял что мы хотим пообщаться с ним по 2-м проводам, нужно седьмую ногу (CS) подтянуть к VCC. Нога SDO в этом режиме служит для задания I2C адреса датчика: если её притянуть к VCC, то датчик отзовется на адрес 0b0011101, если к земле (как в примере) — на 0b0011100.
SPI — вывод CS (Chip Select) можно подключать к любой ноге МК, аппаратный интерфейс его не контролирует и приходится дергать его программно.
На обоих схемах подключены выводы прерываний (INT1, INT2 — восьмая и девятая ноги). Это необязательно, их нужно подключать по необходимости.
Датчик питается напряжением от 2,16 до 3,6 В. Если у МК тоже низкое напряжения питания (в моем случае он с индексом «V», то есть с пониженным VCC), то оптимально питать их от одного источника, например в 3,3 В. Если же у МК VCC = 5В, то варианта 2: либо согласовывать I/O линии по уровням, либо забить и не согласовывать. В одном из девайсов я так и поступил, все работало, но так делать не стоит. Я вас предупредил:)
Что касается программы, то используются аппаратная реализация интерфейса (USI). В прилагаемом архиве лежит проект на СИ для AVR STUDIO. МК — Tiny2313. Подключение к датчику по SPI. Программа читает регистр «WHO I AM» и шлет данные о ускорении по оси X через USART.
Привет! я вот решил по и2ц работать с ним…
i2c_start;
i2c_write(0b00111000);
i2c_write(0x0f);
i2c_start;
i2c_write(0b00111001);
who=i2c_read(1);
printf(" WHO = ");
printf("%u",who);
результат 255..(???)
cs на питании
sdo на земле.в чём косяк
Комментарии (1)
RSS свернуть / развернутьi2c_start;
i2c_write(0b00111000);
i2c_write(0x0f);
i2c_start;
i2c_write(0b00111001);
who=i2c_read(1);
printf(" WHO = ");
printf("%u",who);
результат 255..(???)
cs на питании
sdo на земле.в чём косяк
andrej666
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.