Порядок калибровка нуля и чувствительности датчиков кип. Заметка о калибровке датчиков положения в домашних условиях

Декабрь 2012

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

Многие производители оборудования обещают простое, как «дважды два», включение заменяемых модулей системы, которые не требуют замены существующих сетей, проводки, системных корпусов и источников питания, и при этом сокращение времени простоя с недель и месяцев до «дня и меньше».

Эффективность датчиков

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

Датчики давления

Точность датчиков давления, составляет, как правило, от 0,25% диапазона измеряемого давления. Для сценариев применения с менее строгими требованиями, точность может быть примерно в районе 1,25% диапазона.

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

Автоматизированные системы калибровки работают с помощью программируемого источника давления для производства заданных сигналов давления, применяемых к датчику, который должен быть откалиброван. Вначале записываются показания датчика до калибровки. Далее датчик тестируется с увеличением и уменьшением входных сигналов для учета любого появления эффекта гистерезиса. Затем система сравнивает полученные данные с критериями приемлемости калибровки для датчиков давления и автоматически определяет, должен ли датчик быть откалиброван. Если это так, система обеспечивает необходимые сигналы к датчику, чтобы откалибровать его и держит входное значение постоянным на протяжении промежутка, пока вносятся корректировки, и низшее давление, на котором он должен быть откалиброван. После этого система выдает отчет, который включает в себя данные до и после калибровки и сохраняет их для анализа тенденций и обнаружения зарождающегося отказа.

Датчики температуры

Типичный вид промышленных датчиков температуры, термометр сопротивления (ТС), как правило, не достигает точности более 0,05 - 0,12°C при 300°C, при этом, обычно, требуется обеспечить точность более чем 0,1°С при 400°C. Процесс установки термометров сопротивления также может приводить к дополнительным ошибкам в точности. Другой распространенный вид датчика температуры, термопара, как правило, не может обеспечить точность лучше, чем 0,5°C при температурах до 400°C. Чем выше температура, тем меньшую точность термопары обычно можно достичь.

Калибровка термометров сопротивления

Точность датчика температуры устанавливается путем калибровки, сравнивая его показания с универсальной калибровочной таблицей или индивидуальной калибровкой в высокоточной среде. ТС, в отличие от термопары, могут быть «очищены» и перекалиброваны после установки. Промышленные датчики температуры, как правило, калибруются в резервуарах со льдом, водой, маслом или песком, а также в печи, или путем комбинирования этих методов. Тип калибровочного резервуара зависит от выбранного температурного диапазона, требований к точности и от применения датчиков. Процесс калибровки обычно включает в себя измерение температуры калибровочного резервуара с использованием стандартного термометра. Для индивидуально калиброванных ТС, точность обеспечивает процесс калибровки, который в свою очередь зависит от точности оборудования, используемого для калибровки, а также ошибок, таких как гистерезис, самонагревание, интерполяция и ошибки при монтаже.

Калибровка термопары

Если ТС может быть перекалиброван и после установки, то термопара - нет. Термопару, которая потеряла свою калибровку, следует заменить. Промышленные термопары обычно не калибруются индивидуально. Вместо этого, их показания сравниваются со стандартными справочными таблицами. Для калибровки используются, как правило, один из двух методов: метод сличения (в котором ЭДС термопары сравнивается с эталонным датчиком) или метод фиксированной точки (ЭДС термопары измеряется в нескольких установленных состояниях). При оценке точности датчика температуры, важно учитывать не только калибровку самого датчика, но также влияние установки датчика и условий технологического процесса на эту точность.

Датчики. Как оценить время отклика?

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

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

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

Проверка без отрыва от производства

Существуют некоторые методы, которые часто упоминаются как тестирование на месте или он-лайн тестирование. Они были разработаны для проверки калибровки и времени отклика датчиков, уже используемых в каком-либо процессе. Для датчиков температуры, тест LCSR (Loop Current Step Response ) будет проверять динамические характеристики наиболее распространенных датчиков температуры - термопар и термометров сопротивления - там, где они установлены в операционном процессе. Метод LCSR показывает фактическое время отклика ТС (термометра сопротивления) «в процессе эксплуатации».

В отличие от термометров сопротивления и термопар, время отклика датчиков давления, уровня и расхода обычно не изменяется после установки. Это потому, что эти датчики являются электромеханическими устройствами, которые работают независимо от температуры окружающей среды и температуры процесса. Трудность в оценке датчиков давления связана с наличием системы процесс - провод - сенсорный интерфейс, которая соединяет датчик с фактическим процессом. Эти измерительные линии (провода) добавляют несколько миллисекунд задержки времени отклика датчиков. Хотя эта задержка незначительна, гидравлические задержки могут добавить десятки миллисекунд времени отклика для измерения давления системы.

Методика анализа шума позволяет измерять время отклика датчиков давления и измерительных линий в одном тесте. Как и в методе LCSR, техника анализа шума не мешает эксплуатации, использует существующие выходы датчиков для определения их времени отклика, и может быть выполнена удаленно для датчиков, которые установлены на производстве. Методика анализа шума основана на принципе контроля нормального выхода переменного тока датчиков давления с помощью быстрой системы сбора данных (частота от 1 кГц). Переменный ток на выходе датчика, который называется «шум», производится случайным колебаниями в процессе, связанными с турбулентностью, вибрацией и другими естественными явлениями. Так как эти посторонние шумы происходят на более высоких частотах, чем динамический отклик датчиков давления, они могут быть выделены из сигнала с помощью низкочастотной фильтрации. Как только сигнал переменного тока или шум отделяется от сигнала постоянного тока с использованием оборудования обработки сигнала, сигнал переменного тока усиливается, передается через сглаживающую фильтрацию, оцифровывается и хранится для последующего анализа. Этот анализ дает динамическое время реакции датчика давления и измерительных линий.

Существует ряд оборудования для сбора и анализа данных об уровне шума для датчиков давления. Коммерческое оборудование для спектрального анализа может собирать данные шумы и выполнять анализ в реальном времени, но это оборудование обычно не в состоянии справиться с множеством алгоритмов анализа данных, необходимых для получения результатов с точным временем отклика. Именно поэтому системы сбора данных на базе ПК, состоящие из изолированных узлов, усилителей и фильтров для формирования сигнала и его сглаживания, часто являются оптимальным выбором для сбора данных шумов и их анализа.

Срок службы датчиков

Когда следует заменять датчики? Ответ прост: заменять датчики следует по истечению срока службы, установленного производителем на указанный продукт, например 20 лет. Однако, это может быть очень дорого и нецелесообразно.

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

Многие шутят, что датчики, которые работают правильно надо «оставить в покое», а высококачественные датчики «в возрасте» вполне могут быть так же хороши, если не лучше, чем новые датчики той же модели и того же производителя.


Очень часто пользователи устройств на ОС Android сталкиваются с проблемами, связанными с нестабильной работой датчиков смартфона/планшета. Например, когда вам звонят, и вы подносите устройство к уху, не происходит блокировка дисплея, и вы нечаянно нажимаете кнопку сброса вызова. Или обратная ситуация, когда после разговора экран не хочет загораться. Эта конкретная проблема вызвана неправильной работой датчика приближения.

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

Дабы не отходить от вышесказанного, в первую очередь рассмотрим настройку датчика приближения. Все манипуляции будут производиться над устройством на ОС Android 5.0.2, поэтому для разных версий могут быть небольшие отличия в инструкциях.

Калибровка датчиков приближения и освещения

Способ первый

Первым делом необходимо попасть в инженерное меню вашего устройства. Для этого используем специальную программу, например, "Запуск Инженерного меню MTK", которую вы можете скачать по указанной

1. Скачиваем, устанавливаем и запускаем приложение.

2. После запуска переключаемся на вкладку под названием "Hardware Testing"
3. Пролистываем в самый низ списка и находим здесь пункт "Sensor".
4. В следующем окне выбираем пункт под названием "Light/Proximity Sensor".
5. Жмем на PS Calibration и выбираем пункт Calibration.
Двигая рукою над датчиком можно увидеть, как меняется значение PS от маленьких до больших величин. При приближении руки оно должно возрастать и наоборот. Кроме того, это значение должно изменяться в зависимости от падения света на датчик. Если это происходит, то датчик в калибровке не нуждается.

Если же он никак не реагирует, то кладем смартфон на горизонтальную поверхность и нажимаем кнопку Do calibration. После этого появится сообщение Calibration success. Теперь датчик должен работать стабильно. Если этого не произошло, переходим к следующему способу.

Способ второй

Мы будем использовать стороннюю программу "Датчик приближения: Сброс", которую вы можете скачать

Скачиваем, устанавливаем и запускаем "Датчик приближения: Сброс".

Нажимаем на огромную кнопку "Calibrate Sensor".


Закрываем рукой наш датчик и жмем кнопку Next.


Затем убираем руку с датчика и повторно нажимаем Next.

После этого нажимаем красную кнопку "Calibrate" и подтверждаем действие, нажав кнопку "Confirm".

Затем появится запрос о предоставлении рут-прав данной программе. Разрешаем и через несколько секунд устройство перезагрузится.


Вот и все. Если после всех этих манипуляций датчик приближения продолжает "тупить", то остается только один вариант: отнести смартфон в сервисный центр, ибо больше мы ничего сами сделать не сможем.

Калибровка тачскрина

Многие пользователи часто сталкиваются со следующей проблемой: при нажатии на экран он либо не реагирует, либо воспринимает касание "не в том месте". Чтобы справиться с этой неприятностью, необходимо произвести калибровку экрана.

Способ первый

Мы воспользуемся сторонней программой Touchscreen Calibration, которую вы можете скачать

1. Скачиваем, устанавливаем и запускаем вышеуказанное приложение.

2. Нажимаем синюю кнопку" Calibrate".


3. Программа попросит совершить один "тап" по экрану.


4. После одиночного нажатия, потребуется совершить двойной "тап".

5. Затем от нас потребуется совершить длительное нажатие.


6. Следующий шаг, проводим пальцем вправо по дисплею.


7. Затем ставим два пальца на экран и сдвигаем их друг к другу, будто хотим уменьшить изображение или текст.


8. Затем совершаем обратное действие, будто бы хотим увеличить изображение.


9. На экране появится сообщение Calibrate Successful, которое означает, что все прошло успешно.



Способ второй

Используем еще одну популярную программу Display Calibration, которую можно найти по указанной

Скачиваем, устанавливаем и запускаем Display Calibration.

Нажимаем большую синюю кнопку "Calibrate".


По завершению процесса появится сообщение "Calibrate Successful", подтверждающее удачное окончание калибровки.

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

Калибровка акселерометра (Gsensor)

Акселерометр нужен нам для выполнения ряда важных функций: он отвечает за ориентацию устройства в пространстве, используется многими приложениями и.т.д. Благодаря этому мы (геймеры) можем наслаждаться теми играми, которые используют эту функцию. Чаще всего это конечно, гонки. И если Gsensor будет "тупить", то это наверняка нас огорчит. Однако оставим это лирическое отступление в стороне и перейдем к делу.

Способ первый

В данном случае воспользуемся инженерным меню андроид-устройства.

1. Заходим в инженерное меню смартфона/планшета, используя вышеупомянутую программу .

2. Переходим во вкладку "Hardware Testing".
3. В самом низу находим пункт "Sensor" и нажимаем на него.
4. Выбираем "Калибровка сенсора".
5. Далее нажимаем кнопку "Калибровка Gsensor".

6. Устройство должно лежать на ровной горизонтальной поверхности. Текущие данные должны быть равны нулю (у меня на задней крышке неровности, поэтому показания на скриншоте немного неточные).Нажимаем кнопку "Калибровать (точность 40%)" и через пару секунд увидим сообщение "Operation Succeed".

Вот и все, выходим из инженерного меню. Теперь акселерометр откалиброван.

Способ второй

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

Скачиваем, устанавливаем и запускаем данное приложение.

На экране мы увидим большое перекрестие с зеленым центром, а также красный шарик. Поворачиваем наш смартфон/планшет так, чтобы шарик закатился в зеленую зону, а затем нажимаем кнопку "Calibrate" (целая миниигра получилась).


Дожидаемся завершения процесса.

Вуаля, все готово. Отметим, что плюсом данной программы является автоматическая калибровка акселерометра. Это очень удобно. В дальнейшем вам не придется следить за работой Gsensora, при малейших неточностях приложение само откалибрует его.

Способ третий

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

1. Скачиваем, устанавливаем и запускаем Spirit Level.

2. Нажимаем кнопку "CAL".


3. В появившемся меню повторно нажимаем эту же кнопку во всех пяти пунктах.
4. Появится вот такое сообщение.


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

Калибровка магнитометра

Данный датчик необходим для определения магнитных полей Земли. Без него не будет работать ни один встроенный или установленный пользователем компас. Эта функция будет полезна охотникам, путешественникам, туристам и др.

Способ первый

Для калибровки магнитометра воспользуемся чудесным приложением " Компас" от разработчика MacroPinch. Помимо калибровки, которая является лишь дополнительной функцией, это приложение представляет собой полноценный компас. Прогу можно скачать

Скачиваем, устанавливаем и запускаем приложение "Компас".

Нажимаем кнопку "меню" в правом верхнем углу экрана.


В появившемся списке ставим ползунок "калибровка" в активное положение.

Все. Теперь магнитометр будет работать идеально.

Итог

1. Заходим в приложение.

2. Нажимаем кнопку "Quick TuneUp".

Вот и все. Программа за несколько минут "отшлифует" практически все датчики устройства и даже произведет калибровку аккумулятора.

Если у вас возникли какие-то проблемы или вопросы в процессе калибровки датчиков, опишите их в комментариях к статье, и мы обязательно вам поможем!

  • Tutorial

Для некоторых датчиков ускорения требуется дополнительная калибровка нуля после монтажа на плату. Когда я увидел несколько исходников с калибровкой датчиков ускорения, где составляющая G учитывалась просто путём вычитания из оси Z величины = 9,8 м/с2 - появилась идея написать данную заметку.

Структура публикации

  • Проблема
  • Как правильно получить точки?
  • Как вычислить центр шара?
  • Об ошибках при замерах

Проблема

В чём проблема - МЕМС-датчики после монтажа в плату претерпевают незначительные деформации, которые влияют на:
  • положение нуля;
  • масштабирование измеряемых величин;
  • перпендикулярность осей к друг-другу.
И если масштабирование и перпендикулярность нарушаются не так заметно, то положение нуля сбивается ощутимо. Например, если перевести типичную величину смещения нуля для акселерометра датчика MPU9250 в м/с 2 , то это получается в районе 0,2 м/с 2 . Т. е. датчик неподвижен, но при этом показывает ускорение, а через 5 секунд мы получаем скорость в 1 м/с. С одной стороны, все данные датчиков всегда пропускают через какой-либо фильтр (например такой). Но с другой стороны зачем фильтру постоянно компенсировать это смещение? Ведь датчик будет показывать движение там, где его нет. Это снижает точность результата. А всего то нужно один раз найти величину смещения и потом во время работы датчика вычитать эту величину из его показаний.

Простейшее решение для поиска величины смещения нуля, которое сразу приходит в голову - это создать условия, при которых датчик точно должен показывать ноль. Значение, регистрируемое на датчике - это и есть величина смещения нуля! Так? Но нет - на акселерометр постоянно действует сила тяжести. Чтобы её избежать, понадобится невесомость (подбрасывание не подойдёт). На компас действует магнитное поле Земли, а на гироскоп её вращение. Так что, если у вас нет персонального звездолёта, то придётся что-то придумать.

Второе решение, которое сразу приходит в голову - это поставить датчик (а точнее его оси) в такое положение, при котором мы точно будем знать, что должен показывать датчик. Разница между тем, что датчик показывает и тем, что он должен показывать - и будет смещение нуля! Так? Например, мы знаем, что если акселерометр поставить в уровень с горизонтом, то по идее, вектор ускорения свободного падения будет направлен точно вдоль оси Z датчика. Величину вектора ускорения мы знаем.

Однако есть проблема. Заключается она в том, что мы не можем точно установить оси датчика в уровень с горизонтом. Дело в том, что поверхность на которую мы будем опираться не параллельна печатной плате. Та в свою очередь не параллельна площадке на которой расположен датчик. Сам датчик не ровно стоит на своей площадке и оси внутри датчика не параллельны корпусу датчика. Погрешность в установки оси относительно горизонта на 1 градус, даёт проекцию, сопоставимую по размерам с величиной самого смещения нуля, которое мы хотим найти. В случае магнитометра, мы вдобавок не знаем, куда направлен вектор магнитного поля. В теории - на север. Но на практике, само магнитное поле Земли неоднородно по напряжённости и направлению. Плюс ближайшие металлические предметы вносят свои коррективы.

Постановка задачи и способ решения

Задача звучит так: нужно определить вектор смещения нуля, используя показания датчика, который всегда будет регистрировать вектор смещения + постоянный вектор внешнего воздействия (ускорение свободного падения, вращение Земли, магнитное поле Земли), величину и направление которого мы не знаем (в случае с акселерометром величину мы знаем, но опять же масштаб датчика может быть не равен 1).

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

Как правильно получить точки?

Для облегчения самой процедуры измерения, можно написать простенькую программу. Она должна фиксировать показание датчиков, когда прибор неподвижен. Нам останется только поворачивать прибор в нужные положения. Для того, чтобы определить неподвижное состояние, подходит и не калиброванный акселерометр - просто берём разницу между текущим значением и предыдущим. И если больше уровня шума, то значит фиксируем движение. У меня порог получается в районе 0,07G. Если держите руками, будет получаться больше этого значения. Я использовал для фиксации положения малярный скотч. Если всё-равно не получается - проверьте, нет ли рядом холодильника, вентилятора или чего-то подобного.

Как это может быть в коде

// здесь у вас глобальные по модулю переменные static TSumSensorsData g_sens_data; static int32_t g_sens_data_sum_cnt; static uint8_t g_sens_data_num; // здесь какое-то прерывание, при получении данных с датчиков IS_INTERRUPT void on_dma_raw_ready_calibrate_step1() { SensorRawBuffer *raw = sensor_get_raw_buffer(); g_sens_data.acc_x += swap_i16(raw->accell_x_unswap); g_sens_data.acc_y += swap_i16(raw->accell_y_unswap); g_sens_data.acc_z += swap_i16(raw->accell_z_unswap); g_sens_data.gyro_x += swap_i16(raw->gyro_x_unswap); g_sens_data.gyro_y += swap_i16(raw->gyro_y_unswap); g_sens_data.gyro_z += swap_i16(raw->gyro_z_unswap); g_sens_data.mag_x += raw->mag_x_raw * g_mag_calibrate.kx; g_sens_data.mag_y += raw->mag_y_raw * g_mag_calibrate.ky; g_sens_data.mag_z += raw->mag_z_raw * g_mag_calibrate.kz; g_sens_data_sum_cnt++; } //это вызывается из main void sensors_calibrate_program(FlashROM *flash_ptr) { double calibrate_result_error; TVector16 calibrate_result; int32_t radius; uint8_t raw_is_deleted; TVector16 raw; . . . // определяю неподвижность g_sens_data_sum_cnt = 0; g_sens_data_num = 0; int16_t prev_avg_x = 0; int16_t prev_avg_y = 0; int16_t prev_avg_z = 0; int8_t low_motion_cnt = 0; while(low_motion_cnt < ACCEL_NO_MOTION_DETECT_COUNT) { if (g_sens_data_sum_cnt >= ACCEL_NO_MOTION_DETECT_SAMPLES) { uint8_t new_data_num = (g_sens_data_num + 1) & 1; g_sens_data.acc_x = 0; g_sens_data.acc_y = 0; g_sens_data.acc_z = 0; g_sens_data.gyro_x = 0; g_sens_data.gyro_y = 0; g_sens_data.gyro_z = 0; g_sens_data.mag_x = 0; g_sens_data.mag_y = 0; g_sens_data.mag_z = 0; g_sens_data_sum_cnt = 0; uint8_t old_data_num = g_sens_data_num; g_sens_data_num = new_data_num; // вот эта операция не может быть выполнена во время работы прерывания // (так по-простому можно разделить два потока, не имея операционки) // здесь всё очень просто - нахожу среднюю int16_t avg_x = g_sens_data.acc_x / g_sens_data_sum_cnt; int16_t avg_y = g_sens_data.acc_y / g_sens_data_sum_cnt; int16_t avg_z = g_sens_data.acc_z / g_sens_data_sum_cnt; // собственно получаю разницу с предыдущим значением int16_t dx = avg_x - prev_avg_x; int16_t dy = avg_y - prev_avg_y; int16_t dz = avg_z - prev_avg_z; prev_avg_x = avg_x; prev_avg_y = avg_y; prev_avg_z = avg_z; // если акселерометр регистрировал низкую активность if ((abs_i16(dx) <= ACCEL_NO_MOTION_DETECT_AVG_VALUE)&&(abs_i16(dy) <= ACCEL_NO_MOTION_DETECT_AVG_VALUE)&&(abs_i16(dz) <= ACCEL_NO_MOTION_DETECT_AVG_VALUE)) { // тогда мы регистрируем точку raw.x = avg_x; raw.y = avg_y; raw.z = avg_z; raw.x = g_sens_data.gyro_x / g_sens_data_sum_cnt; raw.y = g_sens_data.gyro_y / g_sens_data_sum_cnt; raw.z = g_sens_data.gyro_z / g_sens_data_sum_cnt; raw.x = g_sens_data.mag_x / g_sens_data_sum_cnt; raw.y = g_sens_data.mag_y / g_sens_data_sum_cnt; raw.z = g_sens_data.mag_z / g_sens_data_sum_cnt; low_motion_cnt++; // даём звуковой сигнал beep(); // и даём фору себе 2 секунды отклеить скотч, пока датчик в руках - программа регистрирует движение // прилепили - получили точку // поэтому всё получится быстро и весело delay_ms(2000); } } } . . . }


Чтобы получить шар на графике, нужно крутить устройство с датчиком по определённой схеме. Для этих целей хорошо подойдёт глобус, так как имеет разметку. Можно подумать, что лепить нужно по всему глобусу. Но это не так.

Пример неправильного результата



Нужно датчик лепить не по всей поверхности глобуса, а на один меридиан. Допустим берём семь точек на меридиане (первая и последняя на северном и южном полюсе). В каждой точке меридиана прикладываем ваше устройство к глобусу и ещё крутим устройство вокруг своей оси с определённым шагом, например 30-35 градусов. Получается если вокруг своей оси поворачивать 12 раз, то в 7 точках всего получается 84 замера.

Прелесть метода в том, что всё можно сделать “на коленке”. Точность позиционирования особой роли не играет, просто нужно крутить по схеме, чтобы вектор внешнего воздействия на графике нарисовал шар. Правильный выглядит примерно так - см. рис (отметкой обозначен центр).

Как вычислить центр шара?

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

Уравнение шара выглядит так: (X - A) 2 + (Y - B) 2 + (Z - C) 2 = R 2 , где X, Y, Z - координаты точки, лежащей на шаре. A, B, C - это координаты центра на осях x, y и z соответственно. R - радиус шара. Можно построить систему уравнений и каким-то методом постараться попроще решить эту систему. А можно просто перебором найти центр (это типа метод последовательных приближений). Смысл метода прост: величина ошибки (X - A) 2 + (Y - B) 2 + (Z - C) 2 - R 2 должна стремиться к нулю. А значит сумма этих величин для всех точек сферы также должна стремиться к нулю. Зная это, мы можем подобрать такие значения A, B и C, для которых величина ошибки для всех точек будет минимальной. Зона перебора ограничивается габаритами шара (условный куб). То есть мы последовательно должны поставить центр шара во все точки куба и посчитать ошибку. Там где минимальная ошибка - там и центр.

В качестве R нужно брать теоретическую величину вектора внешнего воздействия - для акселерометра, это ускорение свободного падения, для компаса - это средняя величина магнитного поля Земли, для гироскопа - скорость вращения Земли. Разумеется в формуле должны быть величины одной размерности (условные единицы датчика или м/с 2 , градус/с и т. д.). Удобней пересчитывать в условные единицы соответствующего датчика.

Условные единицы датчика = Величина * Разрешение датика / (Максимальный предел измерения - Минимальный предел измерения)
Например: Сколько условных единиц должен показать 16-битный датчик ускорения с пределом измерения ±2g при воздействии на датчик только ускорения свободного падения?:
9,8 м/с 2 * 65536 / (2g + 2g) = 9,8 м/с 2 * 65536 / (2 * 9,8 м/с 2 + 2 * 9,8 м/с 2) = 16384 у. е. датчика.


Кстати, если точно знать радиус шара, то можно вычислить центр только по его «дольке». То есть по точкам, которые расположены только на кусочке поверхности шара. Но это не наш случай.

Как ускорить поиск центра шара?

Нужно искать центр не во всём кубе (габариты шара), а по линии, начало у которой произвольное, каждая следующая точка ближе к действительному центру и окончание - в центре. Предположим, что мы начинаем с точки (0; 0; 0)… Мы всегда движемся с постоянным шагом. Поэтому если представить набор кубиков 3х3х3, где каждая грань равна величине шага и также представить, что текущее положение - это средний кубик, то у нас есть 9 + 8 + 9 вариантов, куда поставить следующую точку. Мы просто должны находясь в каждой точке, посчитать в какой из соседних 26 точках ошибка будет меньше. Если окажется, что ошибка меньше в текущей точке, а не в одной из соседних, то значит она стоит в центре и перебор окончен.

Как это может быть в коде

Public Function get_err(A As Double, B As Double, C As Double, R As Double) As Double Dim x, y, z As Double Dim sigma As Double Dim row_n As Long get_err = 0 For row_n = 1 To 15 x = Application.ActiveWorkbook.ActiveSheet.Cells(row_n, 1).Value y = Application.ActiveWorkbook.ActiveSheet.Cells(row_n, 2).Value z = Application.ActiveWorkbook.ActiveSheet.Cells(row_n, 3).Value get_err = get_err + abs((A - x) ^ 2 + (B - y) ^ 2 + (C - z) ^ 2 - R ^ 2) Next End Function . . . A = 0 B = 0 C = 0 Do While True min_sigma = 0 For ai = -1 To 1 For bi = -1 To 1 For ci = -1 To 1 sigma = get_err(A + ai, B + bi, C + ci, 16384) If sigma < min_sigma Or min_sigma = 0 Then ai_min = ai bi_min = bi ci_min = ci min_sigma = sigma End If Next Next Next If ai_min = 0 And bi_min = 0 And ci_min = 0 Then Exit Do End If A = A + ai_min B = B + bi_min C = C + ci_min Loop . . .

Как ещё ускорить поиск центра шара?

Нужно искать с переменным шагом. Сначала ищем центр крупным шагом. Нашли центр, уменьшаем шаг и от него начинаем искать дальше. И так далее, пока не получите результат необходимой точности.

Как это может быть в коде

Public Function get_err(A As Double, B As Double, C As Double, R As Double) As Double Dim x, y, z As Double Dim sigma As Double Dim row_n As Long get_err = 0 For row_n = 1 To 15 x = Application.ActiveWorkbook.ActiveSheet.Cells(row_n, 1).Value y = Application.ActiveWorkbook.ActiveSheet.Cells(row_n, 2).Value z = Application.ActiveWorkbook.ActiveSheet.Cells(row_n, 3).Value get_err = get_err + abs((A - x) ^ 2 + (B - y) ^ 2 + (C - z) ^ 2 - R ^ 2) Next End Function . . . A = 0 B = 0 C = 0 step = 1000 Do While True min_sigma = 0 For ai = -1 To 1 For bi = -1 To 1 For ci = -1 To 1 sigma = get_err(A + ai * step, B + bi * step, C + ci * step, 16384) If sigma < min_sigma Or min_sigma = 0 Then ai_min = ai bi_min = bi ci_min = ci min_sigma = sigma End If Next Next Next If ai_min = 0 And bi_min = 0 And ci_min = 0 Then step = step / 10 If step < 0.01 Then Exit Do End If Else A = A + ai_min * step B = B + bi_min * step C = C + ci_min * step End If Loop . . .

Об ошибках при замерах

Во время замеров могут быть ситуации, когда по каким-то причинам результат замера может оказаться сильно дальше от поверхности шара. Или это может быть множество точек. Или вообще в результате замеров может получиться не шар, а “яйцо” или “дирижабль”. В этом случае, разумеется, нужно повторить все замеры, выявив возможные причины ошибок. Например, для магнитометра это может быть болт или гвоздь в столе и прямо над ним вы проводите замеры. И чем ниже по мередиану опускать датчик, тем сильнее металл будет влиять на результат. Поэтому нужно определить порог допустимой величины ошибки. Чтобы не переделывать замеры из-за нескольких явно ошибочных точек, можно применить фильтр. Принцип действия фильтра очень простой - вычислив первый раз центр, отсортируйте точки по уровню ошибки в каждой из них. Часть точек с наибольшей ошибкой можно просто выбросить (например 10%). Затем нужно повторить поиск центра.

Итог

У метода довольно хорошая точность. Метод позволяет обходиться простыми подручными средствами (мяч, банка и т. п.). Достаточно быстро работает. Простой код. Во многих датчиках есть специальные регистры, куда можно записать найденное значение, и датчик будет сам на лету его вычитать. Такие регистры обычно имеют префикс «TRIM», как в MPU9260, или «OFFSET», как в LSM303. А вот всем известный LIS302DL таких регистров не имеет.

Не забывайте ставить плюсик, если понравилось. Пишите в комментариях свои способы калибровки датчиков.

Теги:

  • инерциальная навигация
  • калибровка
  • центр сферы
Добавить метки

Современные системы ГБО осуществляют мониторинг наличия газа в баллоне путем зажигания светодиодов на кнопке переключения газ/бензин, которая расположена в салоне автомобиля. Этот удобный способ позволяет автомобилисту мониторить наличие газа в не выходя из кабины. Но иногда на индикаторе уровня газа отображаются совершенно неверные значения, в этом случае требуется калибровка датчика уровня топлива.

Когда делают настройку

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

Можно доверить процедуру профессионалам, но зачем платить не малые деньги за то, что можно сделать самостоятельно?

В первую очередь следует понять, а показывал ли индикатор уровня газа правильное значение раньше? Если нет, то понадобится чуть больше времени и специальный кабель ГБО, чтобы подключить электронный блок управления к ноутбуку и выставить верное значение датчика уровня газа.

Для каждого датчика в блоке управлении необходимо выставить свое значение. Следует также знать о том, какой именно датчик установлен у Вас в системе и по какой схеме он работает – измеряет сопротивление, либо меряет напряжение.
Выставив нужные параметры датчика следует перейти к самой калибровке.

Пошаговый алгоритм калибровки

Обратите внимание! Калибровка датчика уровня топлива производится на пустом газовом баллоне. Если в баллоне есть остатки топлива — калибровку начинать не следует!

Калибровка датчика уровня газа производится следующим образом:

  • Подать напряжение на кнопку переключения газ/бензин. Сделать это можно включив зажигание автомобиля и дождаться зажигания индикации кнопки. Заводить машину не обязательно.
  • Нажать кнопку переключения газ/бензин, дождаться звукового сигнала.
  • Выключить зажигание в течение трех секунд, при этом не отпуская кнопки.
  • После того, как кнопка войдет в режим программирования (сопровождается индикацией роста уровня топлива от минимального значения до максимального и наоборот).
  • Заправить полный баллон газа до «отсечки».
  • Включить зажигание, машину при этом заводить не нужно.
  • При успешной калибровке индикация роста уровня топлива от минимального до максимального значения и обратно должна пройти два раза, после чего отобразить «полный бак». Все индикаторы зеленого цвета должны гореть.

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

Для определенных целей регулирования, напри­мер для регулирования нагревательной установки, бы­вает важно измерять разность температур. Это изме­рение может быть осуществлено, в частности, по раз­ности между наружной и внутренней температурой или температурой на входе и выходе.

Рис. 7.37. Измерительный мост для определения абсолютных значений температуры и разности температур в 2-х точках; U Br – напряжение моста.

Принципиальное устройство измерительной схемы показано на рис. 7.37. Схема состоит из двух мостов Уитстона, причем используется средняя ветвь (R3 – R4) обоих мостов. Напряжение между точками 1 и 2 ука­зывает разность температур между Датчиками 1 и 2, тогда как напряжение между точками 2 и 3 соот­ветствует температуре Датчика 2, а между точками 3 и 1 - температуре Датчика 1.

Одновременное измерение температуры Т 1 или Т 2 и разности температур Т 1 – Т 2 важно при определе­нии термического КПД тепловой машины (процесс Карно). Как известно, коэффициент полезного дей­ствия W получается из уравнения W = (Т 1 – Т 2)/Т 1 = ∆Т)/Т 1 .

Таким образом, для определения нужно только найти отношение двух напряжений ∆U D 2 и ∆U D 1 между точками 1 и 2 и между точками 2 и 3.

Для точной настройки описанных приборов, пред­назначенных для измерения температуры, нужны до­вольно дорогие калибровочные устройства. Для об­ласти температур 0...100°С в распоряжении пользо­вателя имеются вполне доступные опорные темпера­туры, так как 0°С или 100°С по определению яв­ляются соответственно точками кристаллизации пли кипения чистой воды.

Калибровка по 0°С (273,15°К) осуществляется в воде с тающим льдом. Для этого изолированный со­суд (например, термос) заполняют сильно измельчен­ными кусками льда и заливают водой. Через несколь­ко минут в этой ванне устанавливается температура, точно равная 0°С. Погрузив датчик температуры в эту ванну, получают показания датчика, соответствующие 0°С.

Аналогично действуют и при калибровке по 100°С (373,15 К). Металлический сосуд (например, кастрюлю) наполовину заполняют водой. Сосуд, разу­меется, не должен иметь никаких отложений (на­кипи) на внутренних стенках. Нагревая сосуд на плитке, доводят воду до кипения и тем самым дости­гают 100-градусной отметки, которая служит второй калибровочной точкой для электронного термометра.

Для проверки линейности калиброванного таким образом датчика необходима, по меньшей мере, еще одна контрольная точка, которая должна быть рас­положена как можно ближе к середине измеряемого диапазона (около 50°С).

Для этого нагретую воду снова охлаждают до ука­занной области и ее температуру точно определяют с помощью калиброванного ртутного термометра, имею­щего точность отсчета 0,1°С. В области температур около 40°С для этой цели удобно применять меди­цинский градусник. Путем точного измерения темпе­ратуры воды и выходного напряжения получают третью опорную точку, которая может рассматри­ваться как мера линейности датчика.

Два различных датчика, откалиброванные выше­описанным методом, дают совпадающие показания в точках Р 1 и Р 2 , несмотря на их различные характе­ристики (рис. 7.38). По дополнительное измерение, например температуры тела, выявляет нелинейность характеристики В датчика 2 в точке Р 1 . Линейная характеристика А датчика 1 в точке Р 3 соответствует точно 36,5% полного напряжения в измеряемом диа­пазоне, тогда как нелинейная характеристика В со­ответствует явно меньшему напряжению.

Рис. 7.38. Определение линейности характеристики датчика с диапазоне 0...100ºС. Линейная (А ) и нелинейная (В ) характери­стики датчиков совпадают в опорных точках 0 и 100ºС.

=======================================================================================

    Датчики температуры из платины и никеля

    Термопары

    Кремниевые датчики температуры

    Интегральные датчики температуры

    Температурный контроллер

    Терморезисторы с отрицательным ТКС

    Терморезисторы с положительным ТКС

    Датчик уровня на основе терморезистора с положительным ТКС

    Измерение разности температур и калибровка датчиков

ДАТЧИКИ ДАВЛЕНИЯ, РАСХОДА И СКОРОСТИ

Как и датчики температуры, датчики давления отно­сятся к наиболее широкоупотребительным в технике. Однако для непрофессионалов измерение давления представляет меньший интерес, так как существую­щие датчики давления относительно дороги и имеют лишь ограниченное применение. Несмотря на это, рас­смотрим некоторые варианты их использования.