Подключения термисторов (NTC) на шину 1Wire

Главная Форумы Конструкторское бюро Автоматизация Автоматика LuckyBox Подключения термисторов (NTC) на шину 1Wire

  • В этой теме 9 ответов, 3 участника, последнее обновление 2 месяца сделано Sergey_r.
Просмотр 10 сообщений - с 1 по 10 (из 10 всего)
  • Автор
    Сообщения
  • #102542
    Sergey_r
    Участник
    • Ответов: 2914
    @serjrv

    Данная схема позволяет подключать до 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 контроллером используемом совершенно не для наших задач.
    Схема, печатная плата и исходники, в архиве ниже.

    Вложения:
    Вы должны войти для просмотра вложений.
    3+
    #102547
    Андрей
    Участник
    • Ответов: 931
    @5-158

    Точность резисторов в делителе важна?

    0
    #102550
    Sergey_r
    Участник
    • Ответов: 2914
    @serjrv

    Желательно ставить с допуском 1%. Хотя сами NTC-термисторы имеют точность 0.5%, 1% и 2%. Что нам продают китайцы, большой вопрос ))). В общем то я стремился получить минимальные колебания температуры, а не достоверность до сотых градуса. Автоматика Contronius к примеру, позволяет проводить их калибровку.

    0
    #102552
    Андрей
    Участник
    • Ответов: 931
    @5-158

    Сергей, поясни по коду. Почему в инициализации при поиске первого датчика ты его прокручиваешь дважды, а остальные – по разу?
    readADS(0, 2)
    readADS(1, 1)
    readADS(2, 1)

    0
    #102557
    Sergey_r
    Участник
    • Ответов: 2914
    @serjrv

    Почему в инициализации при поиске первого датчика ты его прокручиваешь дважды, а остальные – по разу?

    O!!!
    Забыл поправить, изначально у всех было по 2 опроса, потом для сокращения времени сделал по одному, убедившись что четко определяет. В общем то ни на что не повлияет.

    p.s. Просто лишний раз убеждаюсь, что как редактор кода, Ардуинка слишком убога…, ничерта не видно и в глаза не бросается.

    0
    #102573
    Максим
    Участник
    • Ответов: 2
    @n0vex

    Подскажите, что поменять в схеме, чтобы подключить термистор 100 кОм? Хочется подключить термощуп от кухонного термометра.

    0
    #102588
    Андрей
    Участник
    • Ответов: 931
    @5-158

    Наверное пропорционально увеличить резистор 6,2 кОм..
    Правда не разбирался ещё, как исходный код отрабатывает отсутствие одной из плат. Мало ли, на ходу отвалилась.

    0
    #102589
    Sergey_r
    Участник
    • Ответов: 2914
    @serjrv

    Подскажите, что поменять в схеме, чтобы подключить термистор 100 кОм?

    Андрей правильно подсказал, пропорционально увеличить резисторы в измерительной цепи: 6к2 и 10к заменить соответственно на 62к и 100к, так же можно и конденсаторы с 1мкФ уменьшить до 0.1мкФ.

    Сегодня выложу подправленную прошивку, вылечил библиотеку  “OneWireHub” и подправил свою ошибку с передачей показаний в контроллер с повышенной разрядностью.

    0
    #102590
    Андрей
    Участник
    • Ответов: 931
    @5-158

    А если использовать одну плату, подрезать код нуно?
    или так прокатит?

    0
    #102591
    Sergey_r
    Участник
    • Ответов: 2914
    @serjrv

    Подправил прошивку и добавил модель корпуса для печати. Так что архив из первой темы не актуален, а отредактировать не могу.
    Теперь корректно отрабатывает команда на конвертацию температуры (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 не проверяю.

    Вложения:
    Вы должны войти для просмотра вложений.
    0
Просмотр 10 сообщений - с 1 по 10 (из 10 всего)
  • Для ответа в этой теме необходимо авторизоваться.