Главная › Форумы › Конструкторское бюро › Автоматизация › Автоматика LuckyBox › Подключения термисторов (NTC) на шину 1Wire
-
АвторСообщения
-
05.09.2022 в 20:14 #102542
Данная схема позволяет подключать до 8 термисторов (NTC) 10 кОм с характеристикой B25/100: 3950.
Реализовано авто определение количества подключенных термисторов. На самой шине так же могут присутствовать и датчики DS18B20.
Диапазон от -25 до +125 гр.С. Разрешение, из за нелинейности термисторов, получается такое:
до -11 = 0.0185 – 0.0090
до +25 = 0.0090 – 0.0035
до +80 = 0.0035 – 0.005
до +108 = 0.005 – 0.01
до +125 = 0.01 – 0.016
В любом диапазоне разрешение явно превосходит сами DS18B20. Пляска показаний при измерении происходит на уровне 3 – 7 тысячных градуса в диапазоне от +25 до +100, т.е. 1 разряд АЦП.
Сами измерения АЦП синхронизированы с сетью 50Гц, т.е. за период 20 миллисекунд производится по 16 выборок на каждый канал. Данный подход существенно снизил пляску значений АЦП в младших разрядах.
Немного пояснений по самому алгоритму:
При включении происходит авто определение подключенных датчиков и присвоение им внутренних серийных номеров:
1-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x01, ( CRC=0x83 )
2-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x02, ( CRC=0x61 )
3-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x03, ( CRC=0x3F )
4-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x04, ( CRC=0xBC )
5-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x05, ( CRC=0xE2 )
6-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x06, ( CRC=0x00 )
7-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x07, ( CRC=0x5E )
8-й датчик = 0x28, 0x00, 0x55, 0x44, 0x33, 0x22, 0x08, ( CRC=0x1F )
Занимает этот процесс 24 миллисекунды, соответственно устройство автоматики (или иной контроллер) не должно ранее этого периода начать определять присутствие и идентифицировать цифровые датчики на шине.
Далее все идет практически по стандартному протоколу 1Wire. Сам опрос и расчеты для 8 датчиков занимает 700 миллисекунд. Есть одно исключение, в использованной библиотеке “OneWireHub”, есть ошибка в обработке команды на преобразование температуры (0xCC, 0x44). По уму на старт измерения надо бы использовать перехват именно этой последовательности, но лень искать глюк в чужой библиотеке. Выкрутился так – если от любого устройства на шине 1Wire в течении 100 миллисекунд нет телодвижений, мы производим измерения АЦП по каналам и производим вычисления, саму шину 1Wire мы при этом не анализируем (и ни как ей не мешаем). В реальных применениях, глюков из за такого метода у меня не возникало на реальных устройствах.
Так же стоит уточнить как передаем показания с полной точностью. В самой посылке от датчика летит 9 байт, в первых двух температура с разрешением как и у DS18B20 (0.0625), а вот в третьем и четвертом как раз полная разрядность наших измерений (15 бит вместо 12 у DS`ок). В данных ячейках у реальных датчиков хранятся значения для режима термостата, нижний и верхний порог температур, используется данный режим только если датчик работает автономно, соответственно с чистой совестью можем их использовать в своих целях ))).
ПО написано в среде Arduino версии 1.8.5, SDK для контроллера ATmega328P 1.6.20. Думаю так проще для повторения.
Проверена работа на автоматиках LuckyBox, Contronius, просто на отдельной Ардуиновской платке для опроса DS`ок с библиотекой OneWire, и на схеме с PIC контроллером используемом совершенно не для наших задач.
Схема, печатная плата и исходники, в архиве ниже.Вложения:
Вы должны войти для просмотра вложений.06.09.2022 в 05:14 #102547Точность резисторов в делителе важна?
06.09.2022 в 11:08 #102550Желательно ставить с допуском 1%. Хотя сами NTC-термисторы имеют точность 0.5%, 1% и 2%. Что нам продают китайцы, большой вопрос ))). В общем то я стремился получить минимальные колебания температуры, а не достоверность до сотых градуса. Автоматика Contronius к примеру, позволяет проводить их калибровку.
06.09.2022 в 11:22 #102552Сергей, поясни по коду. Почему в инициализации при поиске первого датчика ты его прокручиваешь дважды, а остальные – по разу?
readADS(0, 2)
readADS(1, 1)
readADS(2, 1)06.09.2022 в 15:28 #102557Почему в инициализации при поиске первого датчика ты его прокручиваешь дважды, а остальные – по разу?
O!!!
Забыл поправить, изначально у всех было по 2 опроса, потом для сокращения времени сделал по одному, убедившись что четко определяет. В общем то ни на что не повлияет.p.s. Просто лишний раз убеждаюсь, что как редактор кода, Ардуинка слишком убога…, ничерта не видно и в глаза не бросается.
07.09.2022 в 20:15 #102573Подскажите, что поменять в схеме, чтобы подключить термистор 100 кОм? Хочется подключить термощуп от кухонного термометра.
08.09.2022 в 09:51 #102588Наверное пропорционально увеличить резистор 6,2 кОм..
Правда не разбирался ещё, как исходный код отрабатывает отсутствие одной из плат. Мало ли, на ходу отвалилась.08.09.2022 в 10:16 #102589Подскажите, что поменять в схеме, чтобы подключить термистор 100 кОм?
Андрей правильно подсказал, пропорционально увеличить резисторы в измерительной цепи: 6к2 и 10к заменить соответственно на 62к и 100к, так же можно и конденсаторы с 1мкФ уменьшить до 0.1мкФ.
Сегодня выложу подправленную прошивку, вылечил библиотеку “OneWireHub” и подправил свою ошибку с передачей показаний в контроллер с повышенной разрядностью.
08.09.2022 в 10:55 #102590А если использовать одну плату, подрезать код нуно?
или так прокатит?08.09.2022 в 11:38 #102591Подправил прошивку и добавил модель корпуса для печати. Так что архив из первой темы не актуален, а отредактировать не могу.
Теперь корректно отрабатывает команда на конвертацию температуры (0xCC, 0x44), ну и еще некоторые болячки либы “OneWireHub” подправил.
Изменились серийники “подставных” датчиков:
1-й датчик = 0x28, 0x10, 0x55, 0x44, 0x33, 0x22, 0x01), 0xD8
2-й датчик = 0x28, 0x20, 0x55, 0x44, 0x33, 0x22, 0x02), 0xD7
3-й датчик = 0x28, 0x30, 0x55, 0x44, 0x33, 0x22, 0x03), 0xD2
4-й датчик = 0x28, 0x40, 0x55, 0x44, 0x33, 0x22, 0x04, 0xC9
5-й датчик = 0x28, 0x50, 0x55, 0x44, 0x33, 0x22, 0x05, 0xCC
6-й датчик = 0x28, 0x60, 0x55, 0x44, 0x33, 0x22, 0x06, 0xC3
7-й датчик = 0x28, 0x70, 0x55, 0x44, 0x33, 0x22, 0x07, 0xC6
8-й датчик = 0x28, 0x80, 0x55, 0x44, 0x33, 0x22, 0x08, 0xF5
Так же добавил поддержку нескольких типов NTC-термисторов:
B(25/100) = 4300
B(25/100) = 3988
B(25/100) = 3950
B(25/100) = 3625
B(25/100) = 3530
B(25/100) = 3492
B(25/100) = 3380
их тип выбирается в самом начале скетча.А если использовать одну плату, подрезать код нуно?
Не знаю. Опрос по I2C я же штатный Arduino`вский использую, специально кол-во плат ADS1115 не проверяю.
Вложения:
Вы должны войти для просмотра вложений.08.01.2023 в 17:02 #107539Скажите , выход с этой платы (фиолетовый и зеленый ) подключается автоматике лакибокс ? Прямо на esp rx tx ? Я бы тоже махнул DS18B20 : не точные , часто глючят или вообще отваливаются . Беру в китае . Возможно оригинальные и супер , да где же взять…
08.01.2023 в 18:24 #10754409.01.2023 в 15:37 #107582Прямо на esp rx tx ?
Зачем? Нет конечно же.
Она что , вообще с лакибокс не связана ?
09.01.2023 в 16:51 #107586Схему то открой для общего понимания, если повторять надумал.
В продаже таких нет. Пока. И неизвестно, планируется ли.17.01.2023 в 12:01 #107817Насколько сильное влияние на точность показаний датчиков оказывают наводки от включенного ТЭНа?
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.