Пытаюсь оптимизировать работу с MLX90640 на МК
Запись от Eddy_Em размещена 11.09.2025 в 20:49
Показов 5347
Комментарии 0
|
Я чуть ли не больше года назад начал было работу с этими датчиками. Весело реализовал по даташиту почти весь алгоритм обработки данных, но делал это на STM32F103. Как дошел до корней, понял, что вычисления затянутся очень надолго (ведь у этого МК нет FPU, да еще и тормоз он - тот еще). Портировал код на "апельсинку" и заметил непонятные вещи: вычисляемые температуры вообще какими-то "от балды" были. Было много более важных дел, так что, забил я до поры до времени. А на этой неделе решил таки возобновить работу. Сначала взял предоставляемый melexis тестовый файл - для проверки своих "библиотек". И сразу наткнулся на несоответствие, еще на этапе вычисления коэффициентов. Проверил по даташиту, нашел у себя три опечатки. После этого все заработало четко. Сегодня вечером перенес код на МК, так что теперь он заработал и на STM32F303CBT6. Тесты занимают достаточно много места во флеше (да там еще и математическую библиотеку линковать пришлось ради sqrtf), так что вот:
Конечная цель всей этой работы - инфракрасная allsky-камера, чтобы наш комплекс "Астро-М" (из пяти 0.5-м телескопов) наконец-то можно было по-человечески автоматизировать (пока что решение открыть телескоп для начала наблюдений принимает человек, а с этим allsky полностью все будет на совести компьютера). Как говорится, астроном спит - наблюдения идут. Предполагаю расположить 4-5 датчиков с полем 75°×110° так, чтобы захватывать всю полусферу неба (разве что ниже 10-15° над горизонтом не обязательно: там все равно наблюдения не ведутся). В принципе, пока что ОЗУ со свистом хватает для пяти датчиков. Еще и на буферы для передачи по USART останется (на компьютер данные через оптоволокно будут идти по RS-232 или RS-485), и на какие-нибудь дополнительные нужды. Цикл обработки одной "подстраницы" занимает примерно 4.2мс, т.е. целиком обработка страницы уложится в 8.5мс. Одна "подстраница" данных (при том, что там половина - ненужные! Уж не знаю, зачем melexis так нарукожопил…) по I2C на скорости 1МГц передается около 14мс. Следовательно, обработка предыдущей "подстраницы" выполнится быстрей, чем прием следующей (!!!). Вот уж не ожидал… Теперь понятно, как китайцы на экранчике "видосики" рисуют. Самое интересное, что в настройках датчика предельная скорость обновления - 64Гц. Даже если это - для одной "субстраницы", а не полного кадра, период обновления около 16мс выходит - лишь немногим больше времени, за которое это обновление будет выдано в I2C. Интересно, как чип умудряется с такими скоростями справляться. Нам же все равно нужно максимум раз в 30с картинку обновлять. Ну, забавы для можно, конечно, и 1Гц поставить. Посмотрим, это нужно уже экспериментально выбирать наиболее оптимальный режим. Интересно было бы сравнить с быстродействием "родной" библиотечки от melexis. За какое время у них вычисляется полный кадр на том же самом МК? Я же, глядя в код, подозреваю, что можно еще немного оптимизировать. Еще можно будет попробовать этот код под STM32F103CBT6 собрать. Правда, на 5 датчиков там ОЗУ однозначно не хватит. С другой стороны, можно ведь схитрить: зачем константы каждый раз считывать в память, если можно их один раз считать, посчитать и сохранить во флеше? | |||||
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


