Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Работа с ИК-матрицей MLX90640

Ср авг 03, 2022 05:38:41

Вчера приехала тепловизионная ИК-матрица MLX90640 . Открыл даташит на нее, вначале вроде всё понятно. Но. Но вот дальше - ёлы палы такая куча формул что прям капец аж. Сижу туплю теперь вот. Не могу понять. Там вроде как есть некоторые калибровочные данные, сохраненные для каждого пикселя матрицы во внутренней еепром. И вроде бы как нужно вначале прочесть все 768 ячеек по 4х16 бит калибровочных данных? А потом по этим монструозным формулам высчитывать зафиксированную температуру каждым пикселем. Вот же черт. Хотел сделать себе недорогой тепловизор. Надо было вначале мануал на сенсор смотреть, блин :)))

Re: Работа с ИК-матрицей MLX90640

Ср авг 03, 2022 09:30:13

Я с этой фигней пытался на STM32F103 работать. Ну, это до того, как я кучу корней в вычислениях увидел. На МК без аппаратных флоатов лучше и не пытаться: он же считать будет просто вечность! Разве что реализовать целочисленную арифметику и табулировать корни на заданный интервал (поначалу вычислять с точностью до десятичной градуса, а уж на последнем этапе загрубить до целых)...
Некоторые формулы в даташите - бред. Я в одну как-то втыкал-втыкал, пока не понял, что эта адова дробь элементарной булевой функцией выражается! Думаю, там можно и остальное упростить, если понадобится.
Что до считывания, эта зараза не тянет опцию "считать скопом все нужные данные", либо считывать порегисторно, либо кусочками байт по 256 (это - более вменяемый вариант, т.к. считывать нужно много, а скорость очень низкая - уж не гигагерцы).
И да, китайцы - сволочи: я два раза купил этот MLX, так оба приехали без заводской калибровки на отрицательные температуры! А мне как раз температуру неба измерять (ИК-allsky камеру делать)! Паразиты!..

P.S. На алике продаются уже готовые "недорогие тепловизоры" (около 6тыр) на основе этих сенсоров. Я не знаю, как китаезы реализовали там арифметику, но основано это на все том же STM32F103! Подозреваю, что они тупо не вычисляют температуру, а отображают лишь "условные единицы".

Re: Работа с ИК-матрицей MLX90640

Ср авг 03, 2022 09:41:24

Дешёвые тепловизоры за 6 тыс, они с матрицей 8х8, это вообще ерунда, ничего не разобрать из-за интерпрляции, да и цифрам доверять не стоит.
А в этом сенсоре хотя-бы 32х24 пикселя уже что-то хоть.
Более-мнее нормальный готовый тепловизор от 50 тыс начинается. Вот и хочу попробовать что-то сделать.
На работе пользовался тепловизор ом Testo, вообще шикарная штука, 320х240 ИК-пискелей, но стоит полляма рубликов..
Последний раз редактировалось MLX90640 Ср авг 03, 2022 09:51:27, всего редактировалось 1 раз.

Re: Работа с ИК-матрицей MLX90640

Ср авг 03, 2022 09:47:15

MLX90640, нет, за 6тыр уже нормальные, на MLX90640. Те, которые 8х8 от 3000р.
Вот, первый попавшийся.
А в совсем уж дорогущих выполнено совмещение изображения от веб-камеры с изображением от тепловизора.

В общем, я решил, что как вернусь из Еревана в конце августа, буду софт непосредственно на одноплатнике писать. К нему же при желании и USB'шную обычную камеру прилепить можно (какую-нибудь дешевенькую CMOS'ину от ZWO или Atik тысяч за 15-20 рублей), совместив изображения.

P.S. Кстати, я первый датчик почти за 6000р покупал, сейчас же они меньше 3000. Добавляем одноплатник за 2000р - дешевле получается, чем просят за готовое УГ на микроконтроллере!
А одноплатник-то, в отличие от STM32F103, умеет флоаты! И корни сможет шустро посчитать без необходимости выделять 64кБ флеша под таблицы.
И, в отличие от МК, на одноплатнике уже есть WIFI и ethernet: подключайся себе удаленно по ssh или через самописный сервачок, да забирай данные!

Re: Работа с ИК-матрицей MLX90640

Пт авг 05, 2022 09:54:31

Я сделал самый маленький тепловизор на этом сенсоре, экране LH133T 240*240 и STM32F103. Получил несколько кадров в секунду (2-3). Конечно, заводскую библиотеку немного переделал, где можно, заменил флоат на инт и заменил умножения сдвигами. Написал структуры регистров для простого доступа. Позже начал переделывать программу на FreeRTOS, но потерял интерес - нужно переделывать чтение I2C с программного опроса на работу с прерываниями, пока лежит полуфабрикат.

Re: Работа с ИК-матрицей MLX90640

Пт авг 05, 2022 11:45:20

А я сейчас смотрю, на какой макетке потестировать бы. У BluePill на F103C8 дубовый I2C, не шибко хочется с ним связываться. Плата с H750 с TFT-дисплеем и видеокамерой подойдет по всем параметрам, но там еще работа с дисплеем не готова и двухрядные гребенки разъемов не припаяны. На BlackPill с F401 нет дисплея на плате. Наверно вначале возьму что-то простое, без дисплея, просто чтобы попробовать получить данные и посмотреть, что и в каком виде приходит с сенсора. В общем виде, вначале у меня была такая идея - совместить картинки с ИК-сенсора и видеокамеры OV7725. Но это программа-максимум, в долгосрочной перспективе, если интерес не пропадет.
В готовых библиотеках не люблю копаться, как по мне, так проще самому написать, чем разгребать и переделывать сторонние библы.

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 00:38:27

Забульбенил на Orange Pi Zero2. Все сделал по даташиту, но все равно хрень какую-то выдает: хоть RMS в районе 0.2-0.3%, температуры на реальность не очень-то похожи. Хоть на кадре на фоне теплых стен комнаты меня "видно", когда беру зажигалку, пламя отображается как 33-35℃. Я - около 28, фон - около 25-27.
А еще странность обнаружилась со сменой частоты опроса: как бы, судя по даташиту, это - вообще не экспозиция, однако, как только частота ниже 16Гц (а чем меньше частота, тем меньше и шум), температуры резко возрастают. Будто бы реально это - экспозиция. Только в даташите ни хрена не написано, на каком этапе корректировать тепловой поток на время экспозиции!..

Да, их "родная" библиотека на 64-битной архитектуре вообще не работает. И еще они там пытаются в паре мест писать несуществующие флаги (а потом - прочитать их, естественно, это приводит к ошибке).

P.S. wiringpi не умеет работать с 16-битными адресами регистров. Поэтому я, поковырявшись в документации на I2C, сделал свое. И считывание сделал блоками по 256 байт (т.е. по 128 uint16_t за присест). Специально сравнивал этот метод и тупое считывание последовательно по регистру: все ОК.

Надо, наверное, еще раз внимательно перечитать весь даташит и проверить свой код, хотя это было сделано уже несколько раз ☹

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 12:18:05

Что-то, я смотрю, этот приемник вообще никому не интересен. И никто с ним не работал ☹
Ладно, мне не привыкать пионером быть!

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 16:30:51

Нет, почему же. Я начал, только пока отложил в сторону по причине другого проекта.
А так то вообще то да, вещь спецфицссская, дорогая, да связана с алгоритмами обработки изображений и экстраполяции, посему и мало кто берется за нее. На выходных наверно займусь, пора бы уже. Подобрал к ней дисплейчик, 160х128 цветной.

пламя отображается как 33-35℃

Хм, странно. Я на пламя чето не пробовал направлять. Может, не так считывается? Или с арифметикой чето не так?

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 16:36:19

MLX90640, на МК? Это ж придется брать что-нибудь с математическим сопроцессором, всякая халява вроде STM32F303 или F407 вряд ли сгодится. У меня на одноплатнике аж 3мс обсчитывается картинка (там для каждого пикселя минимум 4 квадратных корня надо вычислить: сначала корень четвертой при вычислении примерной температуры, а потом еще корень четвертой - для коррекции по температурным диапазонам)!
Жаль, у меня для сравнения нет "оригинала". Потому как те два, что я на али купил, наверняка отбраковка. Там нет калибровки на отрицательные температуры, а также уж больно странные результаты оно выдает...
Надо будет по образцу данных проверить свой алгоритм: вдруг я где-то очепятку сделал, из-за чего у меня неправильно что-то считается…

Кстати, непонятно, на кой черт сделан режим "64Гц": на скорости I2C в 100кГц при считывании блоками по 256 байт на всю "страницу" уходит около 160мс. А страницы в автоматическом режиме обновляются за 15.6мс. Т.е. чтобы реализовать реально такую скоростищу, нужно больше мегагерца сделать I2C! Сильно сомневаюсь, что оно при этом будет стабильно.
Последний раз редактировалось Eddy_Em Ср сен 21, 2022 16:41:12, всего редактировалось 1 раз.

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 16:39:40

STM32H743 или H750 хотел.

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 16:42:55

MLX90640, делай уж лучше тоже на апельсинке. Даже на али девборды с этим МК в 2 и больше раз дороже "апельсинки"... И там будет нормальное программирование в нормальном линуксе, а с STM32 — сношения с толстенным даташитом (т.к. я сомневаюсь, что у тебя, скажем, тот же USB-CDC есть для этого МК; да и просто даже если экранчик подключать, придется неплохо пописать кода с нуля).

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 16:45:05

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

Re: Работа с ИК-матрицей MLX90640

Ср сен 21, 2022 17:08:14

GARMIN, похоже на то, что намного эффективней будет вообще забить на дебильный алгоритм melexis'а с калибровками (которые все равно не работают), а читать сырые данные и обрабатывать их самостоятельно. Откалибровать по однороному фону с постоянной известной температурой - и дело в шляпе. Скажем, направил на кипящую поверхность азота - получил 97К. Направил на поверхность воды с плавающим льдом - получил 273К. Направил на кипящую поверхность воды - 373К… Правда, трех точек маловато будет, надо еще что-то промежуточное…

Re: Работа с ИК-матрицей MLX90640

Пт сен 23, 2022 09:25:04

А я, года три назад, делал так: подключил MLX90640 к STM32F103C8 по I2C, а стм-ку подключил к андроид-смартфону через USB.
На стм-ке минимум обработки - только управление режимами ик-матрицы и трансляция сырых данных в смартфон.
Вся математика и визуализация на Андроиде. Тоже оптимизировал фабричный код - менял на целочисленную математику и выпрямлял кривую логику.
Фишка смартфона - на экране можно накладывать картинку с ик-матрицы на видео с камеры. получается примерно так:
https://www.youtube.com/watch?v=qSE62GnjrJQ
прошивку для стм и програму для смартфона писал сам :).

Re: Работа с ИК-матрицей MLX90640

Вс сен 25, 2022 07:34:50

Eddy_Em, Калибровка датчиков MLX90640 проводится с помощью нелинейной интерполяции, не знаю какого порядка. Причём разработчики постарались все флоаты уместить в нескольких битах ограниченного ПЗУ. Отсюда бОльшая часть проблем с математикой. Я не думаю, что вы сможете правильно повторить весь процесс калибровки. Тем более, я сам его не знаю в точности, только видел, как манипулятор устанавливает блоки датчиков в коробку с абсолютно чёрным телом заданной температуры. Даже видео записал. Я в это время занимался другим проектом.

Я расписал значения битовых масок регистров MLX90640, что позволило оптимизировать время расшифорвки считанных калибровочных констант.
Далее, я расшифрованные константы пишу во флеш микроконтроллера, чтобы не делать это каждый раз при старте, одновременно это экономит до 16 килобайт оперативной памяти, и позволяет использовать более дешёвый микроконтроллер.
Две вещи, которые меня остановили:
1) я так и не написал I2C на прерываниях, чтобы использовать его поверх FreeRTOS, так как считывание большого объёма данных тормозит остальные процессы.
2) три датчика которые я испытывал, имеют неправильную калибровку. По центру показания близки к реальным, а ближе к краям матрицы температуры уходят в глубокий минус. Поскольку датчики подарены с конвейера, у меня нет убеждения, что это не отладочная партия.
Есть мысль выложить проект на гит, так как дальше я его развивать не имею намерения.

Re: Работа с ИК-матрицей MLX90640

Вс сен 25, 2022 10:14:55

У меня уже все заработало, я на гитхаб выложил.
Оба датчика с али - отбраковка, углы совсем хреновые.

Re: Работа с ИК-матрицей MLX90640

Ср дек 28, 2022 17:42:30

Eddy_Em, вот только собрал с Вашего гита проект под BPI-M2 Zero. И вроде все работает, не ругается, но температура всегда от 31 до 27, куда бы не направил. Правда, в примере массив для одного кадра. если раскоментить цикл до 3-х, то на на пером шаге вообще какой-то мусор, а 2-й и 3-й опять от 31(верхний-левый угол) до 27(правый-нижний).

Re: Работа с ИК-матрицей MLX90640

Ср дек 28, 2022 17:58:25

Я раза три по алгоритму проходился — вроде бы, точно по даташиту сделал. У меня тоже фигню какую-то показывало, все никак не мог на улице различить горы от неба. Пока заторомозил с этим делом (нужны германиевые окошки, чтобы все это можно было надежно на улице разместить и экспериментировать дальше).
Но у меня дома показывало в районе 20-30 (на стены - 20-24, на себя - 27-30), на улицу - около 4-8 (в сентябре, когда там +12 было).

Re: Работа с ИК-матрицей MLX90640

Ср дек 28, 2022 18:15:39

направлял на паяльник. Без толку. Есть mlx90640-library. Может для сравнения результатов на ней что-то можно по-быстрому собрать? У меня срок на али заканчивается. А я так и не понял рабочий сенсор или нет
Ответить