Автоматическая калибровка акселерометра

Тема в разделе "WASM.A&O", создана пользователем Black_mirror, 13 мар 2010.

  1. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Имеется устройство содержащее три взаимоперпендикулярных акселерометра. Каждый акселерометр выдаёт некоторое напряжение пропорциональное проекции действующего ускорения на ось акселерометра. Далее это напряжение поступает на АЦП, и по запросам выдаётся наружу. Хочется сделать так, чтобы выдаваемая величина была не абстрактными попугаями, а имела более физический смысл, например 1000 единиц равно одному g(ускорение свободного падения). Для этого нужно найти точку нуля и коэффициенты пересчёта для каждой оси и сохранить их во флеш памяти. Я думаю, что переходить в режим калибровки имеет смысл только после включения питания при длительном(к примеру 10 секунд) отсутствии запросов на выдачу данныхакселерометр. Для калибровки можно взять точки в которых среднее значение напряжения за длительный интервал будет максимальным или минимальным, а среднеквадратичное отклонение минимальным. Эти точки соответствуют значениям, когда одна из осей совпадает или противоположна направлению g. В общем, коробку по очереди кладём на каждую из 6 её граней, и когда получим все 6 точек, сохраняем их в памяти, выдаём наружу сообщение что калибровка завершена и переходим в рабочий режим. Ну а вопросы собственно заключаются в следующем:
    как отличать точки друг от друга при самой первой калибровке?
    как уточнять оценку точки?
    когда принимать решение о сохранении данных?
     
  2. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    схранить их всех, сколько бы их ни было, а потом сравнить дельты. если какихто дельт буднт не хватать - выдать сообщение
    как и в эл весах. по нажатию кнопки "калибровка"
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    qqwe
    Извне на устройство очень немного способов воздействия, кроме того что его можно трясти и переворачивать, еще можно только включать/выключать питание и запросы на выдачу данных, кнопки калибровка конструкцией тоже не предусмотренно. В общем устройство должно как-то само определять, что оно находится в неподвижном состоянии(шум порядка 10% от g), сравнивать эту точку с другими, ну и сохранять как только получит все точки. За секунду устройство успевает произвести около 10000 измерений, то есть для получения достоверной точки можно усреднять хоть по 10000 значений, считать дисперсию или СКО, откидывать целые блоки, заменять уже усреднённые блоки блоками с меньшим разбросом.
    Пока я наверно буду брать две последние усреднённые(буду брать среднее для блока с минимальной дисперсией, по ней же буду принимать решения та же самая это точка или уже другая) точки, если дельта между ними по одной из осей существенно больше (раз в 5-10) дельты по двум другим осям. То есть чтобы откалибровать устройство по одной из осей его нужно будет перевернуть вверх ногами по отношению к предыдущему положению.
     
  4. Protorus

    Protorus New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2009
    Сообщения:
    51
    Извини если не по делу, но ведь подобные устройства калибруются не каждый раз при включении?
    Калибруются они, например, на вибростенде, перед установкой на объект, иначе маштабные коэффициенты не определить.
     
  5. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Protorus
    Ну в нормальном режиме переворачивать устройство никто не будет, поэтому оно не сможет получить все 6 точек и ничего во flash записывать не будет.
     
  6. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Black_mirror
    боюсь, что без внешнего сигнала на калибровку не получится обойтись. даже при наличии дополнительных, откалиброваных датчиков (манометров, барометров)

    в принципе, можно использовать чтонибудь датчико-центрируещее (точность, я так понял не нужна). и это среднее положение принять за 0.

    можно еще отталкиваться от изменений показаний, а не от постоянного значения

    можно оттолкнуться от известной силы тяжести
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Black_mirror
    А смысл? Зачем это надо? Гистерезис сильный? Скорее всего да вот по нему и отличишь.

    Когда датчик стоит на столе ускорения нет. Не отличишь масштаб. А без стенда я себе это плохо представляю как можно масштаб отличить.

    И вообще ИХМО авто калибровка она только для игрушек, а в серьезных вещах только мешает.
     
  8. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Pavia
    Есть. Где-то около 10 м/с^2.
     
  9. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    На датчик, лежащий на столе, действует сила тяжести (== m * g) и сила стола (== m * g), в противоположных направления. Ускорение 10 м/с^2 у датчика будет, если его стол падает вблизи поверхности Земли в вакууме. С другой стороны, в этом случае уже вряд ли корректно говорить, что датчик "стоит на столе".
     
  10. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Ты акселерометр пробовал включить, и померять напряжение, которое он выдаёт? Он действительно регистрирует ускорение ~10м/с^2, даже если он неподвижен. А вот если датчик будет падать под действием силы тяжести, то он будет находится в состоянии невесомости, и не будет регистрировать никакого ускорения.
    Причины сего описаны в учебнике физике, по-моему девятого класса.
     
  11. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    r90
    >Ты акселерометр пробовал включить, и померять напряжение, которое он выдаёт?
    У нас нет акселерометра же.

    >Он действительно регистрирует ускорение ~10м/с^2, даже если он неподвижен.
    Разумеется, он может регистрировать что-то, но если суммарный вектор сил, действующих на датчик, равен нулю (т.е. датчик покоится или движется с неизменной скоростью), это регистрируемое "что-то" не является ускорением (не является ускорением в общепринятом смысле этого слова).

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

    r90
    Что такое ускорение? Ускорение – это скорость изменения скорости. Скорость изменяется с течением времени – есть ускорение. Скорость неизменна – нет ускорения.
     
  12. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Sol_Ksacap
    Хорошо. Отлично!
    А теперь вернёмся к нашим баранам. Будем считать, что акселерометр регистрирует на самом деле не ускорение, но нечто иное, влияет ли этот факт на возможность его калибровки относительно g?
     
  13. Protorus

    Protorus New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2009
    Сообщения:
    51
    Sol_Ksacap, r90
    по мне, так оба в чем то правы, но это теория
    довелось мне как-то, поработать с микросхемой AD8552 (там измерения по осям X и Y, но это не важно), так вот в одном статическом положении положении, на нее действует ускорение +g (на выходе 2.65 В), повернув на 90 градусов 0g (2.55 В), еще раз на 90, уже 180 относительно начального, то -g (на выходе 2.45 В)
    а почему так происходи, можно посмотреть в datasheet на нее
     
  14. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    r90
    >Будем считать, что акселерометр регистрирует на самом деле не ускорение, но нечто иное, влияет ли этот факт на возможность его калибровки относительно g?
    Нет, абсолютно не влияет. В этой теме мы не показывали и не хотим показывать никаких сомнений в возможности калибровки покоящегося акселерометра, но также не показывали и не хотим показывать никаких сомнений в невозможности этого. Мы лишь попытались очистить недоразумение о наличии ускорения у покоящегося прибора (никакого гнидосбора здесь, пожалуйста – для точных формулировок на человеческом языке понадобится много времени).

    Сейчас заглянули таки в wiki. Актуально, показываемая акселерометром величина – это перегрузка. Иными словами, это вес тела на единицу массы. Или, по-другому, это отношение силы, с которой прибор действует на опору, к его массе.
     
  15. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Sol_Ksacap
    И стоило ли оно того? Вот мы хоть на метр (секунду, ампер, килограмм) приблизились к решению задачи? Замечание про то, что это теория, мне лично очень понравилось.
     
  16. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    С определением того, что устройство лежит неподвижно, вроде не сложно - взяли кучу измерений, апроксимировали прямой, посмотрели угол наклона, выбрали из всех прямых, построенных по различным наборам, прямую с минимальным по модулю углом. Или можно сделать еще проще - ставим злой низкочастотный фильтр, и из всего что он выдаёт запоминаем минимум и максимум для каждой оси. Только вот когда принимать решение, об остановке и сохранении точек, всё еще не придумал. Вообще амплитуда шумов(может это вибрации от кулера в ноуте) примерно +/-100 единиц(но такие пики не очень частые, большая часть шумов в +/-50 единиц укладывается, но усредняться они чтобы превратиться в неподвижную точку как-то не особо желают) при чувствительности 500-600 единиц на 1g.
    А вопрос у меня в данный момент возник по поводу злого фильтра, кто-то может подсказать как считать коэффициенты в sinc-фильтре?
     
  17. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Есть подозрение, что для моего случая коэффициенты sinc-фильтра будут просто 1/N. Интересно, его в рекурсивную форму можно перевести?
     
  18. Protorus

    Protorus New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2009
    Сообщения:
    51
    эх, где же редактирование, где-то выше указал левые AD8552, вместо правильной ADXL321
    Black_mirror
    что за странное устройство у вас, на которое ника нельзя воздействовать? нужно же его как-то перевести в режим калибровки? а там уж там проще будет разобраться, где какая ось и когда остановить по ней калибровку
    P.S. можно для этого использовать тот-же интерфейс, по которому данные передаются куда-то..
     
  19. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Задачка была решена следующим образом:
    0) Через пару минут отсутствия запросов на получение данных устройство переходит в режим калибровки.
    1) Для определения, что устройство лежит неподвижно, использовалось сравнение текущей (суммарной по всем трём осям) дисперсии за последние N измерений с минимальной дисперсией: if(cur_D<k1*min_D) //у меня k1=4
    2) В качестве начального значения дисперсии было выбрано некоторое разумное приближение(раза в 2 больше реальной дисперсии), а потом оно обновлялось по следующему алгоритму if(cur_D<k2*min_D) min_D=min_D*(1-k3)+k3*cur_D //k2=2, k3=1/256
    3) Пока устройство лежит неподвижно, обновлялось суммарное значение для каждой оси и счётчик значений. Как только устройство начинало двигаться, если было просуммированно не менее k4 точек, вычислялось среднее арифметическое по каждой оси, после чего определялось, получили мы все нужные точки или нет, как описано в следующем пункте:
    4) Для каждой оси были заведены переменные avg_min, avg_max(усредненные минимум и максимум) и state:
    0 - точек еще нет
    1 - одна точка, её значение записано в avg_min и avg_max
    2 - две точки, разница ежду ними более 1/4*range, но менее 3/4*range
    3 - две точки и разница между ними более 3/4*range(калибровка для данной оси завершена)
    Изначально для range берётся разумное приближение, а потом оно вычисляется как разность между максимальным и минимальным средним.
    5) Когда переменные state для всех осей переходят в состояние 3, данные сохраняются во flash.
     
  20. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Black_mirror
    я так понял, что при отсутствии большого дифферента в показаниях датчиков около 2 мин - прибор решает, что на него ничего счас кроме g не действует? могут быть проблемы при длительных равномерных внешних ускорениях. например, разгон/торможение поезда, взлет/посадка самолета, лифт, с машинами такое бывает. можно еще напридумать. хотя я не знаю, что за и для чего прибор.

    ну и раз в 2 минуты переписывать одну и ту же ячейку флэши - срок ее жизни ~20000 мин == ~14 сут. (из расчета 10000 гарантированых перезаписей флэша в авр. хотя, говорят, проверяли и почти в 10 раз больше, но это ненадежно).