Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Вс янв 08, 2017 09:23:40
Копия топика с форума Easyelectronics.
Всем доброго времени суток!
Задумал я сделать себе парочку показометров, чтобы вывесить один на балкон, а второй на стенку, и чтоб они мне температуру говорили. Заморачиваться с терморезисторами и программной реализацией 1-wire для ds18b20 было лень, поэтому взял вышеуказанную микруху. Все настроил, все работает, но есть одно "но". В комнате (судя по ртутному термометру) +24 градуса, а мой градусник показывает +29..+30. Причем если дать ему постоять выключенным, а потом включить, то он тоже сначала показывает +25, а потом плавно выползает на +30.
На плате термометра греться совершенно нечему (питание от 12 вольт через DC/DC), к тому же, сам термодатчик расположен на выпиленном кусочке платы, к нему идут только дорожки питания и IIC.
Попытался уводить датчик в сон, а запрашивать температуру раз в 5 секунд. Не помогло.
Сейчас запрос температуры производится раз в минуту, все остальное время датчик спит. Картина та же: при включении +27, потом плавный разогрев до +32.
Что интересно, термодатчик, встроенный в микросхему MPU6050, тоже показывает +32, причем сразу после включения.
Кто что может посоветовать?
Вс янв 08, 2017 09:47:14
А датчик в том же корпусе расположен? На 5-6 градусов может подогреваться воздух внутри прибора
Вс янв 08, 2017 10:09:53
Мурато Мяуконни писал(а):На 5-6 градусов может подогреваться воздух внутри прибора
Да, я это уже заметил. С корпусом оно греется чуть ли не до 40 градусов. Сейчас плата висит на стене без корпуса.
UPD. Сейчас ради эксперимента прижал к микрухе радиатор от компьютерного чипсета. Температура сначала упала до +27, а сейчас снова ползет вверх.
Вс янв 08, 2017 15:09:40
А питание то в норме? Фильтрация питания, выбросы, в том числе и отрицательные?
Пн янв 09, 2017 10:10:15
Питание от ноутбучного импульсного БП через DC/DC на MP2307DN. Висят конденсаторы - электролиты по 100 мкФ и керамика по 0,1 мкФ на входе и на выходе. На самой микросхеме по питанию висит свой конденсатор на 0,1 мкФ. Осциллографом ткнуться возможности нет, но я питал все это дело от программатора (читай - от компового USB), и результат был тот же.
На той же ИзиЭлектроникс нашел тему про завышение температуры этими датчиками. Автор пишет, что у разных производителей разные показатели саморазогрева. Так вот вопрос: неужели решение проблемы - в тупом переборе датчиков в поисках того, который меньше всего врет?
Пн янв 09, 2017 11:08:43
Саморазогрев при работе вполне возможен - просто в таком случае вносите поправку для конкретного кристалла.
Пн янв 09, 2017 11:27:59
Я просто не пойму, с чего ему греться? В режиме сна он по даташиту потребляет всего 4 мкА (в реальности не замерял), что и током-то считать нельзя. При таком токе он не должен греться от слова совсем. А в режиме сна он у меня находится 80% рабочего времени.
Пн янв 09, 2017 12:07:44
А при переходе к рабочему режиму потребление увеличивается.
Соответственно и время, необходимое для стабилизации собственной температуры перед измерением какое-то необходимо...
Иногда лучше все время рабочий режим сохранять, чем ожидать ту стабилизацию при каждом измерении.
Тем более, что применение LM75 предпочтительно с точки зрения терморегулятора с программируемым порогом сработки.
Печалька лишь в необходимости перепрограммирования того порога при каждом включении - ежли б данные в ЕЕПРОМ хранились...
Пн янв 09, 2017 13:10:44
Видимо, все-таки придется перелезть на DS18b20 с ее 1-Wire. Жаль, LM75 дешевле на порядок (190 рублей против 20 в Чип-Дипе).
Я не думаю, что программная корректировка значения есть выход. Потому что значение температуры после саморазогрева явно есть величина нелинейная. По-хорошему тут нужна калибровка по нескольким точкам... И тут встает вопрос: а чем же оно тогда лучше тупого терморезистора?
Пн янв 09, 2017 18:10:28
Может просто с чипом не повезло? Пробовали заменить?
Чт фев 09, 2017 03:57:52
Я бы попробовал для начала сделать 2 эксперимента.
1. Запитать датчик не от цифрового dc/dc, а от обычного транса с выпрямителем.
2. Линию данных (i2c) и питание датчика (если они идут вместе) разнести на некоторое расстояние. Т.к. если идут помехи по питанию, то появляется шум на i2c. Возможно это и дает погрешность.
Источник dc/dc питания нужен с LC фильтром на выходе, дабы уменьшить пульсации. Скорее всего высокочастотный преобразователь дает помехи на линию данных.
Чт фев 09, 2017 04:18:09
Zat писал(а):появляется шум на i2c. Возможно это и дает погрешность
Это может "дать" хаотические результаты, но никак не систематическую погрешность. Интерфейс-то цифровой.
Если датчик вынесен на проводах, то чтобы он стабильно работал, должен быть конденсатор по питанию у самых выводов датчика. Если питание в паузах снимается, то надо давать время на установление напряжения питания. Ну и не забывать делать паузу перед чтением на время преобразования.
Чт фев 09, 2017 15:18:16
Lexter писал(а):Zat писал(а):появляется шум на i2c. Возможно это и дает погрешность
Это может "дать" хаотические результаты, но никак не систематическую погрешность. Интерфейс-то цифровой.
Интерфейс-то, да, цифровой, но и DC/DC с цифровым ШИМом
Т.е. некоторая стабильность все же присутствует.
Я тут недавно смотрел осциллографом что может твориться на линии питания... это просто капец, разве что нет тараканов.
На i2C подтяжка стоит на 5-10к с двух сторон ? А то некоторые не ставят, забывают.
Датчик температуры работает на основе измерения сопротивления материала от температуры, для чего АЦП требуется качественное опорное напряжение(собственно, оно то и дает точность измерений). Дальше данные оцифровываются встроенным АЦП и результат идет на I2C. Если предположить, что питание имеет нестабильность, скажем размах 100 mV, то и сопротивление, и результаты измерений будут отличаться от реалий. Тем более, что показания не занижают температуру, а завышают. Т.е., если следовать закону R=U/I, то при повышенном напряжении(пульсации) растет сопротивление ( как при нагревании). Собственно, это и показывают выходные данные. Если температура была бы ниже, чем должна, то наверное надо искать в другом месте проблему.
Как вариант, я бы запитал датчик скажем от батарейки и посмотрел результат (коль нет возможности осцилопом глянуть). Если результат не меняется, то и копать глубже. Но я бы грешил на питание в первую очередь.
Чт фев 09, 2017 18:00:59
Zat писал(а):...Интерфейс-то, да, цифровой, но и DC/DC с ...
Нарисуйте на бумажке, как выглядит последовательный код с числами, скажем, 30, 31, 32... и представьте, как должна выглядеть наводка, чтобы так искажала код. Не вводите людей в заблуждение. Такой код выдаёт датчик, и наводки тут не при чём. Надо смотреть его реальную температуру, находится ли в допуске напряжение питания, не перегружен ли выход (повышенный выходной ток тоже може приводить к саморазогреву), а главное - чётко выдерживать требуемые временные интервалы при обращении к датчику.
Да, и насчёт АЦП тоже мимо. В этих датчиках нет АЦП. Там два импульсных генератора с разной температурной зависимостью и счётчики.
Чт фев 09, 2017 18:57:19
Датчик не на проводах: он на выпиленном фрагменте платы. Конденсатор по питанию рядом датчиком присутствует. Подтягивающие резисторы есть со стороны датчика, на контроллере цифровая подтяжка входов включена.
Рвать питание не пробовал, но сейчас склоняюсь именно к этому варианту, потому что больше ничего не придумывается.
Питание схемы производится от сетевого адаптера от ноутбука (примерно 19 вольт), потом на самой плате стоит DC/DC. Пробовал вместо него ставить линейник - та же песня.
Чип не пробовал менять, но DS18b20 дает (внезапно!) точно такой же результат: +27 и плавный разогрев до +32. Дальше показания колеблются в зависимости от окружающей температуры, но ниже +32 результат не получал. Начинаю думать, что у меня в комнате реально +32) Покупать ртутник только для того, чтобы откалибровать цифровой датчик считаю странным, но рассматриваю и такой вариант.
Чт фев 09, 2017 20:19:35
Lexter писал(а):Zat писал(а):Да, и насчёт АЦП тоже мимо. В этих датчиках нет АЦП. Там два импульсных генератора с разной температурной зависимостью и счётчики.
Видать показалось.
x8973 писал(а):Датчик не на проводах: он на выпиленном фрагменте платы. Конденсатор по питанию рядом датчиком присутствует. Подтягивающие резисторы есть со стороны датчика, на контроллере цифровая подтяжка входов включена.
Просто сейчас открыл даташит, там черным по белому написано - резисторы 5кОм с двух сторон. В контроллере, если не ошибусь, подтяжка 40кОм, не помню.
x8973 писал(а): Рвать питание не пробовал, но сейчас склоняюсь именно к этому варианту, потому что больше ничего не придумывается.
Питание схемы производится от сетевого адаптера от ноутбука (примерно 19 вольт), потом на самой плате стоит DC/DC. Пробовал вместо него ставить линейник - та же песня.
Для чистоты эксперимента, я бы отказался от всяких цифровых преобразователей. Может он и хороший, но тут же вопрос не лишь бы заработал, а понять почему, чтобы была повторяемость с правильным результатом.
В даташите говорится о том, чтобы все выводы не висели в воздухе, а были подтянуты либо к земле, либо к питанию. Адресная шина особенно.
Также почти жирным указано, пульсации искажают результат. В целом, все тоже самое, что я и говорил ранее, так же как и питание разнести с I2C, и пересечение допускается только под прямым углом. Вроде ничего нового, банальные правила. Если и это не поможет, то надо смотреть уже что именно читается из регистра, как преобразуется код и т.д. Тут уже могут быть чисто программные ошибки. Но пока надо разобраться со схемотехникой.
Чт фев 09, 2017 20:58:11
Вот дизайн платы. Датчик в самом верху. В центре - семисегментник, слева - DC/DC.
Пт фев 10, 2017 05:09:52
Так светодиодный индикатор тоже греется, причем в зависимости от количества светящихся и времени свечения температура различаться будет. Да и источником помех немалым является (ШИМ с мультиплексированием при динамической индикации).
Пт фев 10, 2017 10:47:00
3-й контакт (OS) через резюк 10к тоже должен быть подтянут на питание (по даташиту), а сейчас он в воздухе.
Даже переведу кусочек из даташита, т.к. этот момент очень важен:
Вывод OS является выходом с открытым стоком без внутренней
подтяжки. Подключите подтягивающий резистор от вывода OS к +VS.
Использование больших значений сопротивления(подтяжки)
уменьшает любую температурную
ошибку из-за самонагрева от тока поступающего на вывод OS.
Как я понимаю, на выводе OS висит мосфет(внутри чипа), и он служит для управления включением вентиляторов в системах охлаждения. Типа, при 85 градусах включить, при 60 градусах выключить. Собственно, этот выход, когда висит в воздухе и греется. Чтобы он не грелся,
его подрубают на плюсовой выход, дабы что-то висело на нем, и шёл маааленький ток. А т.к. надо именно измерить температуру, а не использовать режим переключателя, то этот вывод через резюк 10 кОм должен быть подключен к плюсовой шине питания.
Надо пробовать
.
Пт фев 10, 2017 12:14:31
Zat писал(а):Собственно, этот выход, когда висит в воздухе и греется.
Что-то я не совсем понимаю, как транзистор, к которому не подключена нагрузка, может греться. Но раз даташит велит, то надо делать. Попробую на досуге.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.