Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов
Перезагрузить страницу Акселерометр + МК: дружба по ассемблеру
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
cybernetic cybernetic вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.04.2011
Адрес: SPb
По умолчанию Акселерометр + МК: дружба по ассемблеру - 09.07.2011, 14:15

Уважаемые господа (и, возможно, дамы), пишу я к Вам с такой вот проблемой идеологического характера.
Надо мне обработать данные в МК, поступающие от акселерометра. А инструментал ассемблера крайне скуден: сложить, вычесть, да сдвинуть. В связи с чем у меня возникла парочка вопросов:
1. Данные в вольтах поступают на АЦП микроконтроллера. Каким образом мне перевести вольты в непосредственное значение ускорения.
2. Далее надо бы получить из ускорения - перемещение. Насколько я помню, для этого надо парочку раз проинтегрировать по времени. Но, как уже было упомянуто выше, инструментал ассемблера достаточно скуден, и как провернуть подобную аферу для меня пока остается загадкой...

Собственно, уважаемые господа (и, возможно, дамы), слезно взываю к Вашей помощи по этим двум вопросам.

С наилучшими пожеланиями.
Ответить с цитированием
  (#2 (permalink)) Старый
SunnyA SunnyA вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 9 раз(а) в 9 сообщениях
Регистрация: 08.03.2007
По умолчанию 10.07.2011, 00:16

По первому вопросу - скорее всего значение ускорения - результат вычисления некоторой формулы, которая в качестве параметра принимает вольты. Сама формула скорее всего линейна, чтобы ее узнать необходимо заглянуть в документацию по конкретной модели акселерометра.

Сложение, вычитание и сдвиг позволяют реализовать все математические операции (Вам скорее всего потребуются операция умножения). Стандартные реализации гуглятся.

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

Если же все-таки необходима реализация интегрирования на ассемблере, то, возможно, хватит того, что интеграл приближенно можно вычислить по формулам правых/левых прямоугольников, трапеций или Симпсона. Все перечисленные формулы гуглятся или ищутся в википедии.
Ответить с цитированием
  (#3 (permalink)) Старый
cybernetic cybernetic вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.04.2011
Адрес: SPb
По умолчанию 10.07.2011, 12:44

SunnyA, "скорее всего значение ускорения - результат вычисления некоторой формулы, которая в качестве параметра принимает вольты. Сама формула скорее всего линейна, чтобы ее узнать необходимо заглянуть в документацию по конкретной модели акселерометра", - это-то я знаю. Только вот в datasheet'e к акселерометру нет такой формулы. То, что она линейная в некоторых посторонних источниках также было отписано. Возможно даже она "звучит" так: чувствительность = напряжение/ускорение. Но что-то по этой формуле и с информацией из datasheet'а у меня не клеится... Более того, поглядеть на datasheet можно, ежели указать в поисковом запросе MMA2201.
Ответить с цитированием
  (#4 (permalink)) Старый
SunnyA SunnyA вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 9 раз(а) в 9 сообщениях
Регистрация: 08.03.2007
По умолчанию 11.07.2011, 20:42

Посмотрел даташит, да он немного куцеват) Конкретных формул там действительно нет, но если я все правильно понял, то дальнейшее может помочь.

Из таблицы на странице 3 из графы OUTPUT signal узнаем, что выдаваемый сигнал на самом деле линеен, кроме того при нулевом g выходное напряжение равно половине VDD, что равняется приблизительно 2.5 вольта.

На странице 6 находим комментарий "When positioned as shown, the Earth’s gravity will result in a positive 1g output". Я так подозреваю, что расположив контроллер указанным образом и померив выходное напряжение, можно отградуировать датчик. (помним, что его показания линейны)
Ответить с цитированием
  (#5 (permalink)) Старый
SunnyA SunnyA вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 9 раз(а) в 9 сообщениях
Регистрация: 08.03.2007
По умолчанию 11.07.2011, 21:04

Кроме того, на странице 4 в пункте self-test описывается, что если подтянуть вверх 4й пин, то устройство входит в режим самотестирования. При этом оно выдает в качестве output результат измерения фиктивного ускорения. Странно, что там не указана конкретная величина этого фиктивного ускорения. Возможно (но я бы не стал давать гарантии), что величина тестового фиктивного ускорения будет равна чему-то очевидному, в духе 1g.

Лучше все же отградуировать датчик, как написал выше. Но если это невозможно по каким-либо причинам, то возможно подойдет и этот способ.

Отпишитесь что ли о результатах потом. Интересно же =)
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
cybernetic cybernetic вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.04.2011
Адрес: SPb
По умолчанию 11.07.2011, 21:19

Дык у меня пока что косяк в плане самотестирования. Ибо, во-первых, физически схемы пока нету, а, во-вторых, мне сказали обойтись без самотеста, в связи с тем, что его некуда подключать будет - всё занято...
Ответить с цитированием
  (#7 (permalink)) Старый
SunnyA SunnyA вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 9 раз(а) в 9 сообщениях
Регистрация: 08.03.2007
По умолчанию 12.07.2011, 11:17

Тогда остается градуировать прибор, как написал в сообщении #4 этой темы. Нормальная на самом деле ситуация, МК с аналоговым выходом часто выдают значения "в попугаях", которые потом приходится сопоставлять реальным цифрам с помощью опытов..
Ответить с цитированием
  (#8 (permalink)) Старый
cybernetic cybernetic вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.04.2011
Адрес: SPb
По умолчанию 31.07.2011, 15:14

В общем, вроде как я разобралась с обоими вопросами.

По поводу ускорения: так как зависимость линейная, я прикинула как будет выглядеть ускорение прямо в коде. АЦП контроллера вмещает 12 разрядов. А акселерометр меряет от -40 до +40 g. То бишь -40 это у нас 0000h, а +40 это у нас 0fffh. Ну и можно прикинуть что там между ними.

По поводу интеграла: прикинула самым простым методом. Картинка получается как по методу прямоугольников.
Ответить с цитированием
  (#9 (permalink)) Старый
SunnyA SunnyA вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 9 раз(а) в 9 сообщениях
Регистрация: 08.03.2007
По умолчанию 31.07.2011, 23:28

Цитата:
Сообщение от cybernetic Посмотреть сообщение
По поводу ускорения: так как зависимость линейная, я прикинула как будет выглядеть ускорение прямо в коде.
Да, идея хорошая, но все равно для успокоения придется проверить ее на практике. (или Вы уже как раз это и проделали, а я не понял)

Может (или могло), например, оказаться, что 0g соответствует 0000h, +40g соответствует 07ffh, а -40g соответствует 0fffh. (представление чисел в дополнительном коде) Или еще какие-нибудь фокусы.

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

Вопрос - если не секрет, как Вы будете определять перемещение по показаниям акселерометра? Просто с точки зрения акселерометра состояние полного покоя или состояние равномерного движения со скоростью 1 м/с ничем неотличимы, а перемещение, как понимаете, разное..
Ответить с цитированием
  (#10 (permalink)) Старый
cybernetic cybernetic вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.04.2011
Адрес: SPb
По умолчанию 01.08.2011, 20:24

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

А перемещение буду мерить путем двойного интегрирования ускорения. Специфика прибора такова, что равномерно он двигаться не будет.
Ответить с цитированием
  (#11 (permalink)) Старый
6136 6136 вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 13.08.2011
По умолчанию 14.08.2011, 00:45

Обратите внимание на то, что сигнал у акселерометра пропорционален напряжению питания (в описании абзац Ratiometricity)
если возможно изменение наклона акселерометра, то постоянный уровень надо измерять после установки акселерометра непосредственно переда замером

коэфф.преобразования акселерометра при 5В и 25градусах 50мВ/g (от 47.5 до 52.5, т.е., разброс +-5%)

если для 12-разрядного АЦП используется в качестве Uref напряжение 5В,
то коду 0000h соответствует 0В на входе АЦП,
а коду 2^12-1 или 4095, или 0FFFh соответствует 5В

пропорция для ускорения 1g:
4095ед.АЦП - 5000мВ
1/К - 50мВ

1/К=40,95 [1/g] или К=1/40,95 [g]

2.5В при 0g - половина напряжения питания, соответствует С=2048 ед.АЦП

если код АЦП, например, 4000
ускорение= (4000 - 2048) *К

для ассемблера К лучше домножить на 2*N (сдвинуть N раз влево) и отбросить дробную часть, N выбрать исходя из нужной точности, удобно сдвигать на 8, 16, 24,... разряда
если домножить наше значение К на 2^16, получим 1600.39 или 1600 - точность при отсечении дробной части выше, чем +-5% у паспортного коэф-та преобразования акселерометра.

3-байтный результат (4000-2048)*1600 = 3123200 или 2FA800 - ускорение, два младших байта - дробная часть (сдвигали коэффициент 16 раз влево или на 2 байта)
____

правильнее акселерометра калибровать вместе с АЦП,
если калибровочных средств нет, можно калибровать ускорением силы тяжести - расположить акселерометр так, чтобы на чувствительный элемент воздействовало +1g, записать результат (К1), затем -1g (К2), посчитать коэффициент:
К=2/(К1-К2) [g],
приложить 0g - записать постоянную составляющую C

если же возможен разный наклон акселерометра, перед измерением в отсутствие измеряемого ускорения надо определять постоянную составляющую С, записывать в память и вычитать именно ее при определении результата

----
если задача передавать значение ускорения в РС - проще считать там,
если при достижении какого-то порога выполнять какие-то действия,
удобнее ничего в МК не считать, а пороги задавать в кодах АЦП

Последний раз редактировалось 6136; 14.08.2011 в 00:53
Ответить с цитированием
Пользователь сказал cпасибо:
DjeZ (14.08.2011)
  (#12 (permalink)) Старый
cybernetic cybernetic вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.04.2011
Адрес: SPb
По умолчанию 18.08.2011, 19:35

6136, да, мои выводы были по большей части именно такие. Собственно, программу-то я уже пару недель как написала, осталось проверить работу вместе с датчиком.
Но, к слову сказать, парочка подробностей меня заинтересовали. Буду иметь в виду. Спасибо.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по ассемблеру Hirurg Задания за деньги 3 07.11.2011 20:43
Мужчина+Женщина=Дружба! *АЛХИМИК* Опросы и мнения 41 10.05.2011 18:17
Дружба imported_FAN Любые вопросы от новичков 8 13.02.2011 10:24
Задача по ассемблеру про массивы an2503 Задания за деньги 5 22.01.2011 14:55
Дружба между мужчиной и женщиной Nataliffka Общетематический 18 04.12.2008 23:14
Подскажите грамотный учебник по flat ассемблеру Roof Assembler 9 03.09.2007 23:41
Нужно решение задачи по ассемблеру за деньги в Волгограде!!! MUVN Задания за деньги 0 18.05.2006 03:55
Нужно решить задачу по ассемблеру. Lenita Задания за деньги 3 07.04.2006 14:01



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов