Задать вопрос
@Gryphon88

Как измерить температуру воздуха с точностью +/- 0,1С за возможно короткое время?

Здравствуйте,
передо мной стоит задача сделать термостатируемый полугерметичный объём, одной из подзадач является измерение температуры заборного воздуха и воздуха в объёме с точностью 0,1С не реже раза в минуту (хорошо бы каждые 5-10 секунд) на протяжении 0,5-72ч, чтобы работал ПИД. Температура снаружи объёма комнатная (17-30С), внутри объёма 36,6С (в будущем могут быть задачи 30-45, маловероятно 52-53). Поскольку тираж - 1 экз, и бюджет ограничен, в качестве датчиков я взял старые добрые ds18b20, благо их максимальное разрешение 0,0625С и средняя ошибка при основной рабочей температуре -0,2С.
Я хочу решить проблему плытия со временем или при наборе колебаниях температуры (выход на режим, остывание после работы) и базовой (пере)калибровки. Для этого я предполагаю поступить тупо: поставить на входе и в объёме по нескольку датчиков и усреднять показания внутри группы (если удастся считывать показания датчиков более-менее единомоментно, то простое среднее по датчикам, иначе скользящее среднее и фильтр Калмана).
Насколько я понял работу с ds18b20 и 1-wire вообще (и вот это я хочу уточнить особо!), если на шине несколько датчиков, мы должны опрашивать их по очереди, не подавая нового запроса на измерение, пока не выполнен текущий. Если я прав, то опрос каждого датчика займёт 750мс + оверхед протокола, и использовать гроздь датчиков в рамках текущих требований не получится.

Отсюда вопросы:
1. Правильный ли путь точного измерения температуры я выбрал, или Вы посоветуете что-то другое, например, таки откалибровать датчики и перекалибровывать их через определенные интервалы времени?
2. Правильно ли я понял процедуру опроса датчиков, или можно им подать сначала всем (по очереди или всем сразу через SKIP_ROM) команду на измерение, а потом по одном считать?
3. Как повысить скорость опроса в рамках задачи, не сажая каждый датчик на свою ногу микроконтроллера?
  • Вопрос задан
  • 950 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
@pfg21
ex-турист
1. взять высокоточные датчики температуры. Pt к примеру. калбировать не имея калибровочнго "опорного" датчика бессмысленно.
2. да. сначала разослать сигнал запуска измерения температуры, потом опросить. опрос можно делать не торопясь - данные сохраняются в регистре до след.измерения.
3. использовать источник тока. питание отделить от сигнала. попробовать поработаь на максимальной частоте
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@n12eq3
очень правильная концепция разработки продукта. при этом если провести начальную калибровку датчиков, выяснить отклонение каждого и учтя это (разработав математический аппарат, например на пайтон + нейросеть на raspberry) - тогда можно получить точность и повыше 0.1 градуса. например float можно легко усреднить до 0.01 градуса или ещё выше.
а для (пере)калибровки приложить в комплекте бачок с водой и кипятильником - залив дистиллят можно получить калибровочную температуру в 100 градусов (примерно), а подсыпав соли можно задать любую кастомную температуру (пере)калибровки для использования фильтра Калмана с скользящим окном.
Ответ написан
@pokk-pokk
3) Посмотрите в сторону датчиков LM75A, работает по I2C так что можно насадить на неё кучу, разрешающая способность 0.125 градусов (да чуть по хуже но может есть другие) Время преобразования (Temperature conversion) 100 ms
Ответ написан
Комментировать
xztau
@xztau
Я
Фиг знает. ds18b20 дают погрешность в градус. Не знаю, как Вы собирались их калибровать.
Если нужна точность в 0,1 градуса, то собирают на мостовых схемах с термосопротивлением Pt100 (1000) или как то так. Дороговато, конечно, зато промышленно.
Ну, или какой-нибудь LMT70, наверное, пойдёт.
Или разобрать электронный градусник (который медицинский) на детали. Там, наверняка, чего-нибудь есть.
---
(датчики и на разные ноги контроллера посадить можно - всё равно протокол программный.)
Ответ написан
Комментировать
@semen-pro
Возьмите Pt100 и обдувайте вентилятором, для более быстрого измерения температуры воздуха
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы