5458 / 2818 / 565
Регистрация: 07.11.2019
Сообщений: 4,639

Датчик температуры

25.12.2024, 12:05. Показов 695. Ответов 11

Author24 — интернет-сервис помощи студентам
Имеются в наличии датчики MY18E20-15 от китайской компании Mysentech, это аналог DS18B20. В даташите упоминается, что возможна установка разрешения 14 бит. Но как правильно это сделать не описано. На сайте https://github.com/cpetrich/counterfeit_DS18B20 сказано что чтобы вывести содержимое конфигурационного регистра нужно вызвать недокументированную функцию с кодом 0x8B. Это работает. А вот как изменить этот тайный регистр (какой код функции и какая последовательность байт), чтобы установилось 14 битное разрешение нигде не сказано.
На сайте производителя тоже ничего толкового не нашел. Возможно что кто-то работал с этими датчиками и знает как включить режим 14бит?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.12.2024, 12:05
Ответы с готовыми решениями:

цифровой датчик температуры
Понадобился датчик температуры водопроводной воды и системы отопления. Юзатся должен в частном доме, давление невысокое, вкручиваться...

Датчик температуры + Кулер 3pin
Добрый день Уважаемые форумчане! Подскажите пожалуйста, если можно приведите простенькую схему. Нужно охлаждать алюминиевый радиатор,...

датчик для передачи температуры в программу\
вобщем идея приложения такова... в моем университете разрабатывают платформу для растягивания металических балок (небольшого размера), в...

11
818 / 743 / 96
Регистрация: 23.11.2021
Сообщений: 4,162
Записей в блоге: 10
25.12.2024, 12:21
У него точность ниже плинтуса. Что вы пытаетесь сделать, включив 14-битный режим? Откалибровать датчик по платиновому TRD?

Добавлено через 10 минут
Скачал даташит, почитал. Действительно, явно не описано, как включить 14 бит. А весь протокол полностью слизан с DS18B20. Единственная возможность - попробовать в 7 бит конфигурационного регистра записать 1. Но все равно это не поможет. Учитывая то, что данный датчик даже дешевле паршивого DS18B20, скорей всего, даже после калибровки его точность вряд ли будет выше пары десятых градуса.

Если нужно точно измерять, то либо калиброванные платиновые TRD, либо полупроводниковые TSYS01 и им подобные. Если вторые откалибровать по платине, реально около пяти соток точность (но, конечно, в узком диапазоне - градусов на 40).
1
5458 / 2818 / 565
Регистрация: 07.11.2019
Сообщений: 4,639
25.12.2024, 13:34  [ТС]
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Единственная возможность - попробовать в 7 бит конфигурационного регистра записать 1.
Да, и как это сделать..? Какую функцию вызывать? Абсолютная точность мне не сильно нужна. Важна больше воспроизводимость каждого отдельного датчика. В конечном итоге измеряется разница температур теплоносителя на входе и выходе системы. Эта разница достигает порядка 2-5 градусов, а цена деления 0.0625 градуса, хотелось бы поменьше. В конце концов, если заявляется 14 бит, то почему бы это не использовать.
0
3633 / 2544 / 572
Регистрация: 11.09.2009
Сообщений: 9,176
25.12.2024, 14:08
Цитата Сообщение от u235 Посмотреть сообщение
заявляется 14 бит
В регистре конфигурации для установки разрешения задействовано только 2 бита, итого 4 режима. И это 9, 10, 11 и 12 бит. Ничего другого этими битами не установишь, если только не задействовать ещё бит. В принципе, там полно неиспользованных, так что можно попробовать поперебирать. Вряд ли этот "недокументированный" бит в другом регистре. А результат контролировать по читаемым регистрам температуры - в даташите приведён формат для 14 бит, - старшие два бита (знака) - это дополнительные два младших бита.
Кстати, а вообще выходной формат действительно соответствует DS18B20? При установке разрешения 9 - 12 бит, старшие биты регистра температуры все "знак", или может два старших бита постоянно два дополнительных младших бита температуры? Проверяли?
0
818 / 743 / 96
Регистрация: 23.11.2021
Сообщений: 4,162
Записей в блоге: 10
25.12.2024, 14:15
Цитата Сообщение от u235 Посмотреть сообщение
Какую функцию вызывать?
Что значит "функцию"? Просто передать данные согласно протоколу.
Я когда-то возился с ними на STM32F103.
Цитата Сообщение от u235 Посмотреть сообщение
Абсолютная точность мне не сильно нужна. Важна больше воспроизводимость
Так это же одно и то же (после калибровки)! А без калибровки они вообще непригодны: врать могут до полутора-двух градусов. Тестировал я с десяток B20 и пяток S20… Даже копеечные китайские NTC на 1кОм дают значительно лучшую точность при вычислении по формуле (а после калибровки - и того лучше).
Цитата Сообщение от u235 Посмотреть сообщение
разница температур теплоносителя
О, здесь проще: достаточно взять штук 10-15 датчиков, засунуть в импровизированный термостат, да прогнать в рабочем диапазоне температур. Потом выкинуть те, у которых слишком высокие отклонения от медианы, а для остальных просто использовать аддитивную поправку к медиане. Можно даже кубическую параболу на это дело натянуть, чтобы поточней дельты измерять.
Цитата Сообщение от u235 Посмотреть сообщение
цена деления 0.0625 градуса, хотелось бы поменьше
А смысл, если они будут врать минимум на 0.2℃?

Добавлено через 1 минуту
Вот, у меня в ЖЖшке.

Добавлено через 22 секунды
Блин, 12 лет уже минуло ☺









В общем, советую взять копеечных китайских NTC, смотать их в кучку, замотать фольгой, да прогнать в заданном диапазоне. Потом можно кусочно-линейной интерполяцией полученные кривые приблизить (про это я тоже в ЖЖ писал) - чтобы вычислять температуры на МК без флоатов. Для точностей в районе десятых на не очень широких диапазонах температур (градусов 20) годится элементарный делитель на резисторе с таким же сопротивлением (лучше брать 10кОм термисторы, чтобы не было сильного саморазогрева) и 12-битный встроенный АЦП МК. Штук 16 один МК окучит спокойно. А многоногие - так чуть ли не 32 безо всяких внешних мультиплексоров и АЦП!..
0
5458 / 2818 / 565
Регистрация: 07.11.2019
Сообщений: 4,639
25.12.2024, 19:30  [ТС]
i8085, да 9-12 бит по описанию работают так как и у DS. А вот 14 бит включается отдельно. Причем на сайте произволителя есть FAQ про 14 бит. Но какой hex код имеет функция для переключения - не ясно.
Видимо придеться экспериментировать самостоятельно методом перебора...

Eddy_Em, функцию в смысле
Function commands из даташита. convert t это (44h) и т.д.

Пока что шумы (отличие измерений при постоянной температуре) на уровне именно 0. 0625 градусов. Т.е. ограничения явно в разрядности. Думаю, на будущее, надо АКФ считать и дисперсию для датчиков. А дальше винеровская фильтрация должна помочь.

Аналоговые датчики скорее всего не подойдут из-за помех и наводок, т.к. оборудование под 100 кВА
и работает в ВЧ диапазоне. Все что можно заземлено и заэкранировно, но..
Термисторы надо бы попробовать, просто скептически к ним пока что отношусь. Может быть для измерения именно разницы температур какую-нибудь мостовую схему задействовать необходимо..
0
818 / 743 / 96
Регистрация: 23.11.2021
Сообщений: 4,162
Записей в блоге: 10
25.12.2024, 19:54
Цитата Сообщение от u235 Посмотреть сообщение
Function commands из даташита
А, ну так все просто: нужно в конфигурационный регистр "волшебное число" записать.
Но, как я уже говорил, 9 бит, 12 бит или 14 для таких откровенно дерьмовых датчиков значения не имеет. Даже 9 бит для них - потолок!
Цитата Сообщение от u235 Посмотреть сообщение
Аналоговые датчики скорее всего не подойдут из-за помех и наводок, т.к. оборудование под 100 кВА
Ну так читать 1000 раз в секунду — вуаля, медиана от помех поможет избавиться.
Цитата Сообщение от u235 Посмотреть сообщение
Может быть для измерения именно разницы температур какую-нибудь мостовую схему задействовать необходимо..
Возможно, будет сложней откалибровать.
0
3633 / 2544 / 572
Регистрация: 11.09.2009
Сообщений: 9,176
25.12.2024, 20:55
Цитата Сообщение от u235 Посмотреть сообщение
Причем на сайте произволителя есть FAQ про 14 бит.
Ткни в ссылочку, а то чего-то такого там не видел.
0
5458 / 2818 / 565
Регистрация: 07.11.2019
Сообщений: 4,639
25.12.2024, 21:20  [ТС]
i8085, Вот:
http://www.mysentech.com/newsinfo/4808140.html
и тут еще документы http://www.mysentech.com/szwdxpmy18e20
А это как выглядят колебания температуры датчика в 12 битном режиме. Т.е. как я говорил, плюс-минус один бит.
Миниатюры
Датчик температуры  
0
3633 / 2544 / 572
Регистрация: 11.09.2009
Сообщений: 9,176
25.12.2024, 23:50
Цитата Сообщение от u235 Посмотреть сообщение
Вот:
Так там вполне подробно написано, как включить 14 бит:
Кликните здесь для просмотра всего текста
2. Когда MY18E20 необходимо использовать встроенный 14-битный АЦП, как изменить функцию конфигурации?

Когда MY18E20 необходимо использовать встроенный 14-битный АЦП, функция конфигурации изменяется следующим образом:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
uint8_t [B]Trim14 = 0x01[/B];
 
boolWriteV3ttrim (uint8_t Trim14)
{
uint8_t scrb [sizeof (MY18E20_SCRPARAMETERS)];
MY18E20_SCRPARAMETERS *scr = (MY18E20_SCRPARAMETERS *) scrb;
/*Читаем 9 байт. 7-й байт — это регистр конфигурации системы, а 8-й байт — регистр состояния системы. Последний байт — это контрольная сумма первых 8 — CRC. */
если (MY18E20_ReadParameterV3_SkipRom (scrb) == ЛОЖЬ)
{
вернуть FALSE /*проверка CRC не удалась*/;
}
 
/* Вычисляем контрольную сумму первых 8 полученных байтов и сравниваем ее с полученным 9-м байтом CRC. */
if(scrb[8] !=0xA5)// MY_OW_CRC8(scrb, 8))
{
вернуть FALSE /*проверка CRC не удалась*/;
  }
 
[B]scr->ttrim|= Trim14;[/B]
 
MY18E20_WriteParameters_SkipRom (scrb, я)
вернуть ИСТИНА;
}
 
bool MY18E20_ReadParameterV3_SkipRom (uint8_t *scr)
{
int16_t а;
uint8_t j;
/*размер < sizeof(MY18E20_SCRATCCHPAD_READ)*/
если (OW_ResetPresence() == ЛОЖЬ)
вернуть ЛОЖЬ;
OW_WriteByte (SKIP_ROM);
OW_WriteByte (READ_PARAMETERS);
для (а=0; а <9; а++)
  {
*scr++ = OW_ReadByte();
}
вернуть ИСТИНА;
}
 
bool MY18E20_WriteParameters_SkipRom (uint8_t *scr)
{
int16_t а;
uint8_t j;
если (OW_ResetPresence() == ЛОЖЬ)
вернуть ЛОЖЬ;
OW_WriteByte (SKIP_ROM);
OW_WriteByte (WRITE_PARAMETERS);
for(a=0; a <sizeof(MY18E20_SCRPARAMETERS); a++)
  {
OW_WriteByte(*scr++);
}
вернуть ИСТИНА;
(машинный перевод)


а именно:
Trim14 = 0x01;
...
scr->ttrim|= Trim14;

Выглядит как полноценное описание. Единственное, не написано, какой из регистров ttrim и что это за регистр. Что-то описания структуры scr не вижу. Наверное где-то в другом месте. И байт конфигурации у них в этом примере почему-то назван седьмым, а не четвёртым, как в даташите (байт 4 - configuration register)... Или правда в седьмой писать надо, в "пользовательский"?
Возможно, что надо прочитать все 9 байт, установить в "1" бит "0" регистра ttrim и записать все 9 обратно. Хотя в configuration register и так по умолчанию в бите 0 единица... Может нужна повторная запись? Но это же будет "штатная" установка разрядности. Биты 5 и 6 в configuration register никуда же не денутся...
Не, непонятно.
0
5458 / 2818 / 565
Регистрация: 07.11.2019
Сообщений: 4,639
26.12.2024, 01:12  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
Наверное где-то в другом месте.
Ага.. Где-то в другом месте.. Найти бы еще это место..
Code
1
OW_WriteByte (WRITE_PARAMETERS);
WRITE_PARAMETERS где определен и чему равен??? Собственно в этом и вопрос.
0
5458 / 2818 / 565
Регистрация: 07.11.2019
Сообщений: 4,639
07.01.2025, 13:40  [ТС]
Решил задачу, благодаря информации на сайте Chris Petrich'а
Вобщем код инструкции записи: 0xAB
Записал в setup():
Code
1
2
3
4
5
6
7
8
9
10
sensDs.reset();  // сброс шины
sensDs.write(0xCC, POWER_MODE); // пропуск ROM 
sensDs.write(0x8B, POWER_MODE); // чтение недокументированного конфигурационного регистра 16|80|0|4A|D|18|7F|19|A5|
sensDs.read_bytes(bufData, 9);  // чтение памяти датчика, 9 байтов
bufData[0]|=trim14; // trim14=0x01
sensDs.reset();
sensDs.write(0xCC, POWER_MODE); // пропуск ROM 
sensDs.write(0xAB, POWER_MODE); // обновление недокум файла конф.
sensDs.write_bytes(bufData, 1, POWER_MODE);
delay(300);
Результаты измерения выдаются в 14 бит, но дисперсия показаний датчика (шумы) порядка 1.3-1.5 бит.
Еще порадовало время измерения: опрос датсика с периодом 30 мсек работает нормально (видимо 15 это минимальное время опроса).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.01.2025, 13:40
Помогаю со студенческими работами здесь

Датчик температуры с оповещением по смс или через приложение
Доброго времени суток! Такая ситуация, в серверной в выходные отключился кондиционер и к понедельнику в ней была парилка, хорошо всё...

Датчик
Здраствуйте! Делаю простой датчик преград по такой схеме: http://robozone.su/uptoods/posts/2008-04/1207727620_tsop_schem.gif ...

Емкостной датчик
Парни, подскажите, нужна микросхема-коммутатор что-то типа наших КТ. Сопротивление канала доли ома, чем ниже тем лучше. Смысл такой,...

Акустический датчик
Эксперимента ради, собрал я такую штуковину: http://img440.imageshack.us/img440/928/dscn2468s.jpg По сути дела это датчик,...

датчик угла
решил тут попробовать сделать датчик угловых положений, чтобы можно было поинтересней поиграться с шаговиком. Возник вопрос с АЦП. Какой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Обнаружение объектов в реальном времени на Python с YOLO и OpenCV
AI_Generated 29.04.2025
Компьютерное зрение — одна из самых динамично развивающихся областей искусственного интеллекта. В нашем мире, где визуальная информация стала доминирующим способом коммуникации, способность машин. . .
Эффективные парсеры и токенизаторы строк на C#
UnmanagedCoder 29.04.2025
Обработка текстовых данных — частая задача в программировании, с которой сталкивается почти каждый разработчик. Парсеры и токенизаторы составляют основу множества современных приложений: от. . .
C++ в XXI веке - Эволюция языка и взгляд Бьярне Страуструпа
bytestream 29.04.2025
C++ существует уже более 45 лет с момента его первоначальной концепции. Как и было задумано, он эволюционировал, отвечая на новые вызовы, но многие разработчики продолжают использовать C++ так, будто. . .
Слабые указатели в Go: управление памятью и предотвращение утечек ресурсов
golander 29.04.2025
Управление памятью — один из краеугольных камней разработки высоконагруженных приложений. Го (Go) занимает уникальную нишу в этом вопросе, предоставляя разработчикам автоматическое управление памятью. . .
Разработка кастомных расширений для компилятора C++
NullReferenced 29.04.2025
Создание кастомных расширений для компиляторов C++ — инструмент оптимизации кода, внедрения новых языковых функций и автоматизации задач. Многие разработчики недооценивают гибкость современных. . .
Гайд по обработке исключений в C#
stackOverflow 29.04.2025
Разработка надёжного программного обеспечения невозможна без грамотной обработки исключительных ситуаций. Любая программа, независимо от её размера и сложности, может столкнуться с непредвиденными. . .
Создаем RESTful API с Laravel
Jason-Webb 28.04.2025
REST (Representational State Transfer) — это архитектурный стиль, который определяет набор принципов для создания веб-сервисов. Этот подход к построению API стал стандартом де-факто в современной. . .
Дженерики в C# - продвинутые техники
stackOverflow 28.04.2025
История дженериков началась с простой идеи — создать механизм для разработки типобезопасного кода без потери производительности. До их появления программисты использовали неуклюжие преобразования. . .
Тестирование в Python: PyTest, Mock и лучшие практики TDD
py-thonny 28.04.2025
Тестирование кода играет весомую роль в жизненном цикле разработки программного обеспечения. Для разработчиков Python существует богатый выбор инструментов, позволяющих создавать надёжные и. . .
Работа с PDF в Java с iText
Javaican 28.04.2025
Среди всех форматов PDF (Portable Document Format) заслуженно занимает особое место. Этот формат, созданный компанией Adobe, превратился в универсальный стандарт для обмена документами, не зависящий. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru