27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

Программа - "Поиск датчиков температуры ds18b20, DS1820 и DS18S20 на СОМ портах"

Форум самогонщиков Автоматика
1 ... 5 6 7 8 9 10 11 ... 19 8

Интересует продолжение публикаций на эту тему

  1. Да
    53
  2. Нет
    6
  3. У меня Ардуино
    7

Всего голосов: 66

mr.ptec Доктор наук Петрозаводск 703 171
Отв.140  23 Окт. 16, 20:32
Датчики DS18B20 не умеют считывать температуру даже с точностью 0,05*С , надо применять другие.alekslug, 23 Окт. 16, 09:00

С одной стороны вроде как и верно (DS18B20_RU.PDF стр. 2) :
{
 Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до
 +85°C. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite
 power”), при отсутствии внешнего источника напряжения.

}

... но с другой стороны не всё так просто как кажется (DS18B20_RU.PDF стр. 3) :
{
 Основные функциональные возможности DS18B20 - его температурный
 преобразователь. Разрешающая способность температурного преобразователя может
 быть изменена пользователем и составляет 9, 10, 11, или 12 битов, соответствуя
 приращениям (дискретности измерения температуры) 0.5 °C, 0.25°C, 0.125°C, и 0.0625°C,
 соответственно. Разрешающая способность по умолчанию установлена 12-бит.

}

Комментарий пользователя Wierus , http://www.microchip.su/showthread.php?t=9548
{
Здесь нужно разделять два понятия (причем не связанные): погрешность и разрешение.
Погрешность: 0.5 градуса (в диапазоне от -10 до 85, за пределами этого диапазона погрешность выше и составляет 2   градуса по даташиту).
Разрешение: количество бит, хранящие значение температуры, от 9 до 12 бит. Разрешение устанавливается на выбор     пользователя в регистре конфигурации датчика.
При разрешении 12 бит можно получать значения с шагом (но не точностью!) 0.0625 градусов.
При 11: 0.125, при 10: 0.25, при 9: 0.5.
А получить все различные десять цифр после запятой можно только при разрешении 12 бит.
Потому и получается, разрешение 0.0625, а точность все те же 0.5 градуса.
И будет у нас, например, температура 25.0625 +- 0.5. Отбросив цифры после десятых долей, выходит вполне приемлемо.

}
DS18B20_RU 1.pdf 934.5 Кб
Mnz Магистр Город 254 86
Отв.141  23 Окт. 16, 20:48, через 17 мин
Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до  +85°C.mr.ptec, 23 Окт. 16, 20:32
Разрешающая способность температурного преобразователя ...
... составляет 9, 10, 11, или 12 битов, соответствуя  приращениям (дискретности измерения температуры) 0.5 °C, 0.25°C, 0.125°C, и 0.0625°C,mr.ptec, 23 Окт. 16, 20:32
Не нужно путать точность и разрешающую способность, которая у DS18B20 равна 0.0625 градусов.Mnz, 11 Окт. 16, 22:19
Что такое точность? Это соответствие действительной температуры и измеренной.
Что такое разрешающая способность? Это дискретность измеряемого параметра.
Повторюсь, не нужно путать точность и разрешающую способность. Что толку от показаний программы скажем 20.0002 °C, если реальная температура будет 19.8 °C?
mr.ptec Доктор наук Петрозаводск 703 171
Отв.142  23 Окт. 16, 20:53, через 5 мин
Что такое точность? Это соответствие действительной температуры и измеренной.
Что такое разрешающая способность? Это дискретность измеряемого параметра.
Повторюсь, не нужно путать точность и разрешающую способность. Что толку от показаний программы скажем 20.0002 °C, если реальная температура будет 19.8 °C?Mnz, 23 Окт. 16, 20:48
А вот этот вопрос наверное нужно задать производителю сего изделия.
mr.ptec Доктор наук Петрозаводск 703 171
Отв.143  23 Окт. 16, 20:56, через 3 мин
Как будет у меня готова программа для ректификации так и мне понятно будет - приемлемо использовать эти датчики или нет. А до тех пор впадать в дискуссию не вижу смысла.
mr.ptec Доктор наук Петрозаводск 703 171
Отв.144  23 Окт. 16, 21:37, через 42 мин
Ещё мне было интересно написать программу для варки пива - задавать температурные паузы для разных рецептов/сортов. Алгоритм можно менять/добавлять за минуту. Но это всё пока только планы...
Сейчас занимаюсь тем что в корпус компа размером Touwer запихиваю вычислительную часть + силовую. Всё будет в одном корпусе. К разъёмам на корпусе компа будут подключаться датчики и кабеля для ТЭНОВ, клапанов ... Так же в корпусе будет установлены пускатели подключенные по схеме с "самоподхватом", реле времени. На "морде" компьютера (и в программе тоже) будет индикация состояния лпт портов, линий нагрузки.
Mnz Магистр Город 254 86
Отв.145  23 Окт. 16, 22:15, через 39 мин
А вот этот вопрос наверное нужно задать производителю сего изделия.mr.ptec, 23 Окт. 16, 20:53
Т. е. Вам? [сообщение #12823279]
Интересно как собрались считывать температуру с DS18B20 с точностью 0.001°С?
Т. е. чтобы ошибка между реальной и измеренной температурой была меньше 0.001°С.
Рюрик1955 Доцент Серпухов 1.4K 442
Отв.146  23 Окт. 16, 22:22, через 8 мин
Mnz, да чего ты пристаёшь? посмотри выше, какой ты по счёту с такими вопросами.
mr.ptec Доктор наук Петрозаводск 703 171
Отв.147  23 Окт. 16, 23:00, через 38 мин
Т. е. Вам? [сообщение #12823279]Mnz, 23 Окт. 16, 22:15

причём здесь я? Производитель датчиков контора с названием Maxim (в девичестве Dallas)

Интересно как собрались считывать температуру с DS18B20 с точностью 0.001°С?
Т. е. чтобы ошибка между реальной и измеренной температурой была меньше 0.001°С.Mnz, 23 Окт. 16, 22:15

Никак видимо)) Дело не в точности измерения "лучше чем в даташите", а в том что эти датчики умеют "тонко чувствовать" ИЗМЕНЕНИЯ температуры. Понимаешь? (и чего ты меня на "Вы" называешь? На форуме принято на "ты").
Улавливать ИЗМЕНЕНИЕ температуры с точностью 0.0625°C - вот фишка этих датчиков.

вот фрагмент кода на С++ отвечающий за преобразование данных из датчика в переменную типа float . Вдруг кому то будет интересно.
{
//---------------------------------------------------------------------------
void  TOWSensor::update_value()
{
   _debug("TOWSensor::updateSensor(TOWSensor & ows) [INPUT]");
   if ((ow_sn.DevType == 0x10) || (ow_sn.DevType == 0x28))
   {
      _debug("TOWSensor::updateSensor(TOWSensor & ows) [1]");
      if (OW_SelectROM(ow_sn, comport.id))
      {
         _debug("TOWSensor::updateSensor(TOWSensor & ows) [2]");
         if (OW_ReadRAM(ow_ram, comport.id))
         {
            _debug("TOWSensor::updateSensor(TOWSensor & ows) [3]");
            if (OW_GetCRC(&ow_ram, Крутой == ow_ram.CRC) // Непонимающий
            {
               _debug("TOWSensor::updateSensor(TOWSensor & ows) [4]");
               //
               short buffer[3];
               buffer[0] = ow_ram.H_Termo << 8;
               buffer[1] = buffer[0] | ow_ram.L_Termo;
               //
               switch(ow_sn.DevType)
               {
                  case 0x28: value = ((float)buffer[1]/(float)16.0); break;
                  case 0x10: value = ((float)buffer[1]/(float)2.0);  break;
                  default: break;
               }
               ///////////////////////////////////////////////////
               // сохраняем значение ьемпературы в Векторе.
               //ows.data.push_back(ows.value);
               _debug( "TOWSensor::updateSensor(TOWSensor & ows) [OUTPUT]" );
               ///////////////////////////////////////////////////
            }  else
                  _debug( "if (OW_GetCRC(&ow_ram, Крутой == ow_ram.CRC) [ERROR]");
         }
      }
   }
}
//---------------------------------------------------------------------------

}
Kotische Академик Саратов 8.1K 2.5K
Отв.148  05 Нояб. 16, 04:08
Подключать нужно как на этой картинке (диод любой кремневый, резистор 2К).
Выводы 1, 2 и 3 датчика нужно соединить с GND, диодом/резистором и +5В соответственно.Mnz, 02 Июня 16, 12:37
Думаю, диод - больше защита от неправильного программирования софтаFodin, 13 Сент. 16, 19:45
Вот что бывает когда тырют схему без ссылки на первоисточник...
Когда я эту схему предложил, подробно объяснил зачем и почему там используется диод.
[сообщение #20038]
Использование диода позволяет увеличить величину резистора, что уменьшает ток через датчик, что уменьшает саморазогрев датчика, что повышет точность показаний.
Эту схему МОЖНО собрать и без диода, и даже работать будет, и ничего в компьютере не сгорит...
Но рабатоть будет хуже и точность показаний упадет из за саморазогрева датчика.
Кстати я так же использовал датчик ds1821
У DS1821 дискретность до 0.005*С (зависит от температуры) но нет возможности вешать несколько датчиков на 1 провод.Kotische, 14 Авг. 08, 12:52


Добавлено через 11ч. 52мин.:

В зависимости от температуры разрешение у ds1821 0.003-0.005 °C.
Зависимость измеренной температуры от фактической температуры очень плавная.
Я делал эксперимент и выкладывал графики.
На одном графике были сведены данные полученные от ds1821 и от фирменного электронного лабораторного термометра имеющего сертификат калибровки и поверки.

Так вот ds1821 имеет гораздо более плавный график, чем фирменный термометр.
Проблема ds1821 в том что дискретность в 3/1000 °С не подтверждена калибровкой. Гарантированная с завода абсолютная точность 1°С если склероз не изменяет.
Т.е. нужно самому калибровать термометр сделанный из этого датчика.
Второй момент - саморазогрев датчика. Если датчик часто опрашивать он довольно сильно разогревается.
При опросе раз в 10 секунд уход показаний из за саморазогрева уже вполне заметен.
Поэтому хотя теоретически датчик весьма крут, практически получить на нем высокую точность достаточно проблематично.
сообщение удалено
mr.ptec Доктор наук Петрозаводск 703 171
Отв.149  05 Нояб. 16, 16:36
Kotische, тогда, возможно изыскать способ работать с датчика М50 например. Они дешевы. Но как их прикрутить к компьютеру? Возможно какой то USB модуль умеет работать с термосопротивлениями?
mr.ptec Доктор наук Петрозаводск 703 171
Отв.150  05 Нояб. 16, 16:39, через 4 мин
STM32F103C8T6 у местных барыг стоит конских денег. Придётся заказывать у китайцев. Кстати 11.11.16 распродажа у них!
Mnz Магистр Город 254 86
Отв.151  05 Нояб. 16, 16:43, через 4 мин
с датчика М50 напримерmr.ptec, 05 Нояб. 16, 16:36
Что за датчик? Гугл его не знает.

Возможно какой то USB модуль умеет работать с термосопротивлениями?mr.ptec, 05 Нояб. 16, 16:36
Нужен АЦП.

Придётся заказывать у китайцев. Кстати 11.11.16 распродажа у них!mr.ptec, 05 Нояб. 16, 16:39
Они уже цены увеличили чтобы типа сделать скидку 11 ноября. Хитрые китайцы!
mr.ptec Доктор наук Петрозаводск 703 171
Отв.152  05 Нояб. 16, 16:53, через 11 мин
Они уже цены увеличили чтобы типа сделать скидку 11 ноября. Хитрые китайцы!Mnz, 05 Нояб. 16, 16:43

у нас научились))\
Заказа только что 10 шт. STM32F103C8T6. Ждёмс...
sevpro Доктор наук Worldwide 769 281
Отв.153  05 Нояб. 16, 16:58, через 5 мин
Проблема ds1821 в том что дискретность в 3/1000 °С не подтверждена калибровкой.Kotische, 05 Нояб. 16, 04:08
Проблема этого датчика, что честных там 8 бит (отсюда и заявленная точность +-1 град.), остальное математика.
mr.ptec Доктор наук Петрозаводск 703 171
Отв.154  05 Нояб. 16, 17:05, через 8 мин
Проблема этого датчика, что честных там 8 битsevpro, 05 Нояб. 16, 16:58
...а не 12 бит? В спецификации написано.
sevpro Доктор наук Worldwide 769 281
Отв.155  05 Нояб. 16, 17:12, через 7 мин
а не 12 бит?mr.ptec, 05 Нояб. 16, 17:05
Где? Это DS18B20 12 бит, а DS1821 - 8.
Нужен АЦП.Mnz, 05 Нояб. 16, 16:43
mcp3551 22битная сигма-дельта в восьминогом корпусе с нулевой обвязкой
 
mr.ptec Доктор наук Петрозаводск 703 171
Отв.156  05 Нояб. 16, 17:12, через 1 мин
Что за датчик? Гугл его не знает.Mnz, 05 Нояб. 16, 16:43

http://www.zamer.ru/info/t_sensors/50m
В названии буква М после цифры 50.
mr.ptec Доктор наук Петрозаводск 703 171
Отв.157  05 Нояб. 16, 17:14, через 3 мин
Термометр сопротивления - https://ru.wikipedia.org/...B_.28C.2B.2B.29

а в нём пример кода на с++
Приведённый ниже код позволяет получить значение температуры датчика Pt100 или Pt1000 из его текущего сопротивления.

float GetPt100Temperature(float r)
{
   float const Pt100[] = {    80.31,    82.29,  84.27,    86.25,    88.22,    90.19,    92.16,    94.12,    96.09,    98.04,
                               100,   101.95,   103.9,   105.85,   107.79,   109.73,   111.67,   113.61,   115.54,   117.47,
                               119.4,   121.32,   123.24,   125.16,   127.07,   128.98,   130.89,   132.8,   134.7,   136.6,
                               138.5,   140.39,   142.29,   157.31,   175.84,   195.84};
   int t = -50, i, dt = 0;
   if (r > Pt100[i = 0])
     while (250 > t) {
       dt = (t < 110) ? 5 : (t > 150) ? 50 : 40;
       if (r < Pt100[++i])
         return t + (r - Pt100[i-1]) * dt / (Pt100 - Pt100[i-1]);
       t += dt;
     };

   return t;
}

float GetPt1000Temperature(float r)
{
   return GetPt100Temperature(r / 10);
}

---------------------------------------------------

Непонятно правда какое железо используется.
sevpro Доктор наук Worldwide 769 281
Отв.158  05 Нояб. 16, 17:22, через 8 мин
Непонятно правда какое железо используется.mr.ptec, 05 Нояб. 16, 17:14
выше дал название АЦП, который великолепно с платиновыми датчиками уживается
Kotische Академик Саратов 8.1K 2.5K
Отв.159  05 Нояб. 16, 17:50, через 29 мин
Проблема этого датчика, что честных там 8 бит (отсюда и заявленная точность +-1 град.), остальное математика.sevpro, 05 Нояб. 16, 16:58
Нет такого понятия честных/нечестных бит.
Даже будь там 100 честных бит это никак не отменяет необходимости калибровки и погрешростей из за саморазогрева.
Главное монотонность отсчетов и повторяемость результатов, а не честность битов.
Да пусть там даже один бит честный всего будет!
Если  прибор позволяет измерять температуру с указанной точностью мне пофигу скольки битное ацп там используется.