Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.07.2012, 13:49  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию HMC5883 Компас

Нашел на просторах интернет-аукциона интересный чип. Это интегральный компас с интерфейсом I2c и точностью 1-2 градуса. Описание прилагаю.
Купить можно отдельно чип по цене $4.45, а так же и готовую плату не на много дороже.

В этой теме будем разбираться, как с ним работать. Для продвинутых товарищей тема особого интереса не представляет и уж тем более не обойдется без жгучих издевок Станислава. Но все же.
Итак, для запуска нам понадобится работать с переферией I2c. Мне было проще прилепить самодельную плату на демоборд с ARM STM32F103VC на борту. Кому-то будет сподручнее PIC. Существует вероятность так же появления в теме ярых фанатов Меги. Так что уровень интерфейса мы опустим и сразу перейдем к протоколу.
Итак, в данном чипе используется как класическая адресация к нужному регистру при помощи указателя, так и быстрый доступ сразу с интересующих нас данных. При первом включении надо убедится, что микросхема подключена правильно и интерфейс работает исправно. Для этого надо прочитать содержимое регистров идентификации чипа. Сделать это можно классическим образом - через указатель.
- I2c START
- I2c address 0x3C (write)
- I2c Send Byte 0x10 //указатель на первый ID регистр А
- I2c Repeat START
- I2c Read Byte + ACK //читаем содержимое ID-A
- I2c Read Byte + ACK //читаем содержимое ID-B
- I2c Read Byte + NACK //читаем содержимое ID-C
- I2c STOP
Сравниваем с мануалом. Должно получится 0x48, 0x34, 0x33.
Если получилось, идем дальше. Начальная конфигурация.
Для начальной конфигурации достаточно записать в регистр MODE значение 0x00. После этого чип начинает работать. Настройки по-умолчанию вполне годятся для большинства задач.
Для STM32 код выглядит так:

Код:
unsigned char I2C_Write_Byte (I2C_TypeDef* I2Cx, unsigned char i2c_address, unsigned char i2c_pointer, unsigned char data)
{
	while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));	
	I2C_GenerateSTART (I2Cx, ENABLE);
	while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT));  
	I2C_Send7bitAddress(I2Cx, i2c_address, I2C_Direction_Transmitter);
	while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
	I2C_SendData(I2Cx, i2c_pointer);
	while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
	I2C_SendData(I2Cx, data);
	while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
	I2C_GenerateSTOP(I2Cx, ENABLE);
	delay_ms(5);
	return 0;
}
Код не самый оптимальный. В том плане, что если сигнала ACK не последует, программа зависнет в вечном ожидании. Но для начала сгодится.
Дальше нужно дождаться данных. Для этого можно либо подождать фиксированное время, либо дождаться логической единички на пине RDY, но я предпочитаю опрашивать бит RDY(0) STATUS регистр на предмет готовности.
Как я уже писал, данные принимаются по упрощенному алгоритму.

- I2c START
- I2c address 0x3D (read)
- I2c read + ACK x5 раз
- I2c read + NACK х1 раз
- I2c STOP
В итоге имеем 6 байт. Старший и младший байты координаты Х. Далее Z и Y.
Далее, при помощи тригонометрии можно получить угол. Это я рассмотрю в следующий раз. В принципе, примеры под ардуино свободно гуглятся.
Свои коды так же прилагаю кому интересно.
Микросхема интересная, призываю участников к обсуждению.
Надеюсь, на следующей неделе допишу анимацию и выложу видео.
Вложения:
Тип файла: rar HMC5883L.rar (339.9 Кб, 147 просмотров)
Тип файла: rar I2C_Compas.rar (600.2 Кб, 150 просмотров)
Реклама:

Последний раз редактировалось Easyrider83; 27.07.2012 в 15:27.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
warel (29.06.2019)
Непрочитано 02.06.2013, 01:42  
michail777
Прохожий
 
Регистрация: 02.06.2013
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
michail777 на пути к лучшему
По умолчанию Re: HMC5883 Компас

Подойдет ли твоя программа на STM32F103VET6, и если нет что надо будет поменять?
michail777 вне форума  
Сказали "Спасибо" michail777
warel (29.06.2019)
Непрочитано 02.06.2013, 08:02  
vla-serenkov
Частый гость
 
Регистрация: 08.08.2008
Сообщений: 34
Сказал спасибо: 12
Сказали Спасибо 16 раз(а) в 10 сообщении(ях)
vla-serenkov на пути к лучшему
По умолчанию Re: HMC5883 Компас

Собирал компас на магнитомодуляционных датчиках по техзаданию. Необходимая точность плюс-минус 1 градус и оказалось:
1. Заявленная точность зависит в худшую сторону от самого магнитного поля Земли, которое пульсирует с амплитудой до нескольких процентов. Спектр частот до килогерца. Магнитные бури это как раз про этот случай.
2. Двухкоординатный магнитометр будет иметь ещё большую погрешность из-за аппаратной погрешности, вызванной промежутком времени между отсчётами, во время которых амплитуда и вектор магнитного поля будут уже другими.
3. Разработку нужно проводить с учётом требований метрологии. Наладку-калибровку проводить на стенде, где магнитное поле постоянно по амплитуде и направлению.
4. Элементы электроники практически могут намагничиваться и вносят дополнителную погрешность. Их нужно проверять на восприимчивость к магнитному полю при помощи магнита. Например, выводы микросхем и транзисторов намагничиваются и вносят дополнителную погрешность.
vla-serenkov вне форума  
Сказали "Спасибо" vla-serenkov
warel (29.06.2019)
Непрочитано 29.06.2013, 16:34  
aalleexxaa
Частый гость
 
Регистрация: 09.02.2013
Сообщений: 22
Сказал спасибо: 7
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
aalleexxaa на пути к лучшему
По умолчанию Re: HMC5883 Компас

напишу и в этой теме: датчик подключаю, настройки устанавливаю согласно даташита, удачно считываю Identification register A,B,C. т.е. Работа по I2C правильная, данные получаю корректные. Теперь задам вопрос по получению данных по координатам осей: на плате нарисованы X и Y стрелочки, Z - точка. Стрелкой X направляю примерно на север. С платы получаю только данные без математики и обработки. 255-167-255-67-0-1. Согласно даташиту, данные считываются как X,Z,Y. Здесь: x[0]=255, x[1]=167, z[0]=255, z [1]=67, y[0]=0, y[1]=1. Стоит чуть повернуть плату (ось вращения совпадает с осью X) и данные искажаются x[0]=255, x[1]=167, z[0]=255, z[1]=67, y[0]=255, y[1]=254. Далее попытаемся сосчитать угол x=255*256+167=65447 y=255*256+254=65534 Однако согласно даташита значение X,Y,Z должно лежать в пределах 0x07FF‹значение‹0xF800
(2047‹значение‹63488 ) где что у меня не так? Далее при повороте с юга на восток изменяется значения только младших байтов X и Y. Правильно ли это?
aalleexxaa вне форума  
Сказали "Спасибо" aalleexxaa
warel (29.06.2019)
Непрочитано 29.06.2013, 16:54  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: HMC5883 Компас

Я поэтому и больше не мучился с этим компасом, что начал получать с него значения, которые мне ни о чем не говорили ))
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
warel (29.06.2019)
Непрочитано 29.06.2013, 23:38  
Alecsej
Вид на жительство
 
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
Alecsej на пути к лучшему
По умолчанию Re: HMC5883 Компас

Цитата:
X,Y,Z должно лежать в пределах 0x07FF‹значение‹0xF800
(2047‹значение‹63488 )
что не есть верно.
0x07FF‹значение‹0xF800 в переводе в знаковый
2047 ... -2048
Alecsej вне форума  
Сказали "Спасибо" Alecsej
warel (29.06.2019)
Непрочитано 30.06.2013, 12:55  
aalleexxaa
Частый гость
 
Регистрация: 09.02.2013
Сообщений: 22
Сказал спасибо: 7
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
aalleexxaa на пути к лучшему
По умолчанию Re: HMC5883 Компас

тогда, по моей полученной строке, значения лежат в пределах -255..255
а где скрываются другие значения +-1790?
aalleexxaa вне форума  
Сказали "Спасибо" aalleexxaa
warel (29.06.2019)
Непрочитано 30.06.2013, 13:39  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,772 раз(а) в 5,896 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: HMC5883 Компас

Не смотрел конкретно, но, обычно, повышенная разрядность результата измерений настраивается, а по умолчанию - 8 бит. Посмотрите в ДШ.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме  
Сказали "Спасибо" akegor
warel (29.06.2019)
Непрочитано 30.06.2013, 16:26  
aalleexxaa
Частый гость
 
Регистрация: 09.02.2013
Сообщений: 22
Сказал спасибо: 7
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
aalleexxaa на пути к лучшему
По умолчанию Re: HMC5883 Компас

может кто скинуть свои конкретные данные, которые получаете в зависимости от напарвления (хотя бы по четырем сторонам света) с модуля без расчетов с описанием настроек регистров, которые используете?
используете ли вы magnetic declination при корректировке угла направления, как это используется в библиотеке для ardunio?

Последний раз редактировалось aalleexxaa; 30.06.2013 в 17:18.
aalleexxaa вне форума  
Сказали "Спасибо" aalleexxaa
warel (29.06.2019)
Непрочитано 30.06.2013, 17:37  
Alecsej
Вид на жительство
 
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
Alecsej на пути к лучшему
По умолчанию Re: HMC5883 Компас

Цитата:
тогда, по моей полученной строке, значения лежат в пределах -255..255
а где скрываются другие значения +-1790?
По умолчанию диапазон +/- 1.3 гаусс, 1092 разряда на гаусс.
Для средних широт напряженность магнитного поля Земли .5 Га, так что должно получатся примерно -512 ... 512.
Цитата:
Не смотрел конкретно, но, обычно, повышенная разрядность результата измерений настраивается, а по умолчанию - 8 бит. Посмотрите в ДШ.
а разрядность там всегда одна 12 бит.
Alecsej вне форума  
Сказали "Спасибо" Alecsej
warel (29.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компас v.8 3D Lipa Proteus, KiCAD и другие ECAD 10 04.04.2010 17:07
Компас 3D V10+ algenkel Proteus, KiCAD и другие ECAD 14 29.09.2009 13:09
[Решено] КОМПАС V.8 3D Лего Proteus, KiCAD и другие ECAD 5 17.08.2006 19:43
Компас Dozer Измерительное оборудование 4 05.07.2005 11:28
Компас CD_Eater Измерительное оборудование 5 26.08.2004 17:45


Часовой пояс GMT +4, время: 08:34.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot