Поиск

Как невнимательность убивает эксперимент


Долго думал, как так может быть, что имеющие заводские калибровки датчики ползут практически нос к носу, отличаясь лишь постоянным слагаемым. А проблема вот в чем: изменяя логгер для пары термодатчиков на работу с N штуками я в процессе отладки при вычислении температур поставил тупо 0 вместо номера датчика. И забыл это убрать…
Вот такая веселуха.
Ничего переделывать не буду, но из оставшихся датчиков попарно проверю несколько штук и сравню, насколько у них хорошо показания согласуются.

Написал прошивку, вычисляющую код на MCU, что в принципе не очень хорошо, но если флеш-памяти будет достаточно, можно так будет и оставить (все меньше шансов напутать еще раз индексы констант для всяких разных датчиков).
Забавно получилось: сначала сделал функцию с использованием double, размер прошивки вырос от 3400 до 11300 Байт! Замена double на float вместо ожидаемого уменьшения, наоборот, увеличила размер прошивки до 12300Б (видимо, софтовая библиотека плавающей точки написана под double, а для float еще дополнительные преобразования идут). Понятно, что на МК, не умеющем даже аппаратного деления целых чисел, считать что-то с плавающей точкой — тот еще моветон. И я сделал алгоритм на fixed point (но пришлось тащить int64t для вычислений). В итоге размер кода получился 8300Б, что ненамного меньше варианта для double. А учитывая то, что рекуррентная формула вычисления температуры на fixed point вносит дополнительные ошибки (до ±0.04°C), я плюнул, и оставил double.

Завтра надо будет выбрать один из четырех экранчиков (LCD, LED и oLED), которые я притащил из дома, написать код работы с ним и соорудить эдакое переносное устройство, при помощи которого я смогу проверять температуры, которые намеряют мне датчики на зеркале. По грубым отклонениям от среднего можно будет вычислить те датчики, где нет нормального контакта со стеклом, или которые вообще оторвали при монтаже разгрузок. eddy_em.livejournal.com

Добавить комментарий