Статті бази ▾ ← Усі бази знань
Автоматика oCBot
Концепція та філософія12 Ласкаво просимо до екосистеми oCBotЗвідки взявся oCBotІдеологія oCBotСфери призначення та режими роботиПериферійні пристроїСвобода периферіїБазові скрипти автоматизаціїВіртуальні панелі оператораСкладні сценарії та логіка автоматизаціїМультиконтролерністьЗагальний огляд автоматики oCBotАрхітектура та опис
Підтримувані контролери20 Контролер Kincony KC868-A6Підключення живлення й USB на KC868-A6Реле й аналогові виходи KC868-A6Сухі контакти й аналогові входи KC868-A6Твердотілка, драйвер помпи й датчики: підключення до колодки DA/IOШини й роз'єми KC868-A6: RS485, I2C, 1-Wire і рештаЩо зайнято на ESP32 у KC868-A6: карта GPIOЯк зібрати щиток на KC868-A6Як прогнати сценарії без куба: тестовий стенд для KC868-A6Контролер Kincony KC868-A16Підключення живлення й USB на KC868-A16Проміжне реле й контактор АСКО-УКРЕМ на KC868-A16Силові виходи KC868-A16: MOSFET замість релеСухі контакти й аналогові входи KC868-A16Шини й мережа KC868-A16: Ethernet, RS485, I2C, 1-WireЩо зайнято на ESP32 у KC868-A16: карта GPIOЯк зібрати щиток на KC868-A16Як прогнати сценарії без куба: тестовий стенд для KC868-A16Контролер WT32-ETH01Універсальний ESP32 DevKit (Custom)
Каталог периферійних пристроїв9 Датчики температуриДатчики тискуДатчики рівня рідиниДатчики потоку (витратоміри)Виконавчі механізми (Клапани, Насоси, ТЕНи)Датчики середовища (Вологість, Світло, Тиск)Датчики електричні та вагиОргани керування (Кнопки, Енкодери)Електродвигуни та вентилятори
Складання та Перший запуск (DIY)26 Збирання контролера oCBot своїми рукамиПервинне прошивання та запуск контролераШвидке підключення Wi-Fi через BluetoothПідключення ТЕНів та регуляторів потужностіВибір та підключення електромагнітних клапанівКілька плат PCA9685 на одній шиніПін OE — апаратне зняття всіх виходівПлата PCA9685 зблизька — що на ній є і навіщоПлата розширення PCA9685 — 16 каналів ШІМСервопривід на платі PCA9685 — режим 50 ГцТвердотілки на платі розширенняПідключення LCD та OLED дисплеїв по шині I2CДвигун і частотний перетворювач: силове підключенняПроводка датчиків DS18B20: чому зникають показанняПромисловий протокол RS485 (Modbus RTU)Термометри стартового комплекту: ланцюжок на M12 і ящик з нержавійкиЧастотник AE200 (Yingshida) по Modbus: клеми, параметри й регістр завдання частотиЧастотник CFM310 по Modbus: панель RS485, сервісне меню і три регістриЧастотник Ennera FCE по Modbus: налаштування і діагностикаЧастотник без Modbus (900E): пуск реле й оберти 0–10 ВШина RS485 на кілька пристроїв: шлейф, термінатори, адресиВаги на тензодатчиках (NAU7802)Роз'єми M12: кодування A, B, D, X і кількість контактівРоз'єми M12: трійники, вилки, гнізда і заглушкиРоз'єми M12: чим захистити від води — корпус, кабель, IPУсунення типових несправностей
Робота з веб-інтерфейсом17 Головна сторінка (Home)Діаграма процесу (Flow)Сценарії автоматизаціїРедактор скриптівПульти оператораДизайнер пультів HMI DesignerПериферіяПлати та шиниЗагальні налаштуванняОбладнанняТочки монтажуНалаштування графіківОновлення прошивкиНалаштування Wi-FiЛогиПорталПро програму
Написання сценаріїв (C++ Скрипти)10 Огляд скриптівМій перший сценарій: Крок за крокомШІМ-відбір: Як налаштувати клапан правильноНалаштування ПІД-регулятора для стабілізаціїАвтоматизація температурних пауз при затиранні солодуСкрипт ББКРегулювання тискуРозрахунок ABV за температурою париСкрипт «Розрахунок ABV»ABV у сценаріях
Безпека, Хмара та Інтеграція5 Система безпеки oCBot: Захист від аварійСтворення хмарного кабінету UA DistilleryЯк опублікувати звіт про перегонкуШеринг кастомних пультів оператора (HMI)Інтеграція з Home Assistant та MQTT
Сценарії5
ББК5 Сценарій ББК: що робить автоматика і де вона чекає на васББК: залізо й прив'язки — без чого сценарій не стартуєББК: параметри за етапами — що означає кожен і як обратиББК: перший запуск — спочатку на воді, потім брагаББК: аварії — що написано на картці, чому і що робити

Проводка датчиків DS18B20: чому зникають показання

Написано для прошивки 0.2.181 (коміт 3df2d3d) · порталу 0.0.205Можливо, застаріло: поточна прошивка 0.2.205, поточний портал 0.0.236

Датчик, який «іноді пропадає», — не дрібниця. Без вдалого читання довше 15 секунд прошивка вважає його мертвим: картка показує «нема даних», а блокування тримає вимкненими ТЕНи, що до нього прив'язані. На апараті це виглядає як нагрів, що смикається без причини. Тими самими датчиками з тією ж прошивкою на столі все працює, тому людина зазвичай міняє датчики. Датчики тут майже ніколи ні до чого. Причина — у проводці між платою й гільзою, і вона виправляється.

Стаття — про роз'єми 1-Wire плат KC868-A6 (IO-1, IO-2) і KC868-A16 (HT1, HT2, HT3). Куди який дріт на самій колодці, розібрано в статтях про шини A6, шини A16 і колодку DA/IO. Тут розібрано, чому зібрана за ними шина на апараті може губити датчики.


Як це виглядає в житті#

Бойовий A6, три DS18B20 на апараті з 24 кВт нагріву й мішалкою на частотнику:

Що міряли за добу Значення
подій «нема даних» по всіх датчиках 255
з них у датчика куба 166
типова тривалість відвалу (медіана) 2 хв
найдовший відвал 83 хв
ті самі датчики й прошивка на стенді 0

Відвали в кожного датчика свої, одночасно вони не пропадали. Вони не залежать ні від температури, ні від того, чи ввімкнений нагрів, ні від мішалки. Тож справа не в тому, що «ТЕН наводить, коли гріє». Справа в самій лінії: на апараті вона настільки погана, що частина читань просто не доходить.


Підтяжка: на платі вже є, додати можна одну#

На KC868-A6 і KC868-A16 на кожному роз'ємі 1-Wire вже стоять резистор 4.7 кОм до 3.3 В і 100 Ом послідовно до ніжки ESP32 (аркуш Sensors принципової схеми: R23/R31 на A6, R157/R29/R150 на A16). Прошивка додатково вмикає внутрішню підтяжку ESP32, але вона слабка (~45 кОм) і погоди не робить. Для кабелю в кілька метрів плата готова як є.

Довгий кабель — інша справа. Кабель має ємність, і що він довший, то повільніше 4.7 кОм витягує лінію з нуля в одиницю: фронт затягується, і датчик або плата читає не той біт. Для кабелю понад 10 м загальну підтяжку опускають до 2.2–3.3 кОм. На KC868 для цього досить одного резистора між клемою даних і 3V на самій колодці, паралельно до того, що на платі:

Додали біля плати Разом із 4.7 кОм на платі
10 кОм 3.2 кОм
4.7 кОм 2.35 кОм

Що не робити — ставити по резистору на кожен датчик. Модулі й адаптери DS18B20 часто продаються з уже впаяним 4.7 кОм (маркування 472). Три такі модулі на одній шині разом із платою дають 1.2 кОм. Підтяжка тоді залежить від того, скільки модулів причеплено, а датчикові з кожним резистором важче притиснути лінію до нуля. Потрібна одна свідома підтяжка біля плати, а не випадкова сума.

Нотатка

На ESP32 DevKit і WT32-ETH01 резистора на платі немає. Там зовнішні 4.7 кОм між лінією даних і 3.3 В обов'язкові, бо внутрішньої підтяжки ESP32 для DS18B20 замало.


Три жили, не дві#

DS18B20 уміє жити на двох дротах, живлячись від лінії даних («паразитне живлення»). Прошивка oCBot цього не підтримує. Кожен датчик мусить мати окрему жилу VDD на клему 3V (A6) чи 3.3V (A16), окремо DATA і окремо GND.

Якщо жила живлення обірвана чи не затиснута, картина підступна: при скануванні шини адреси датчиків знаходяться, бо на відповідь адресою датчикові досить заряду з лінії даних, а температури всі 0 °C. Це перевірено на залізі. Нулі на всіх датчиках разом при знайдених адресах означають не «холодно», а обірване живлення.

Живлення датчикам береться з тієї ж колодки. Клема 3V на A6 віддає до 200 мА на все разом, а DS18B20 під час вимірювання бере до 1.5 мА (даташит), тож десяток датчиків бюджету не чіпає.


Ланцюжок, а не зірка#

Порівняння двох схем проводки DS18B20 до KC868. Правильна: одна магістраль із трьох жил від клем плати, датчики куба, колони й дефлегматора сидять на ній один за одним короткими відводами; підтяжка 4.7 кОм на платі, додатковий резистор 10 кОм біля плати лише для кабелю понад 10 метрів; силовий кабель перетинає магістраль навхрест. Неправильна: від плати до однієї скрутки, звідти три довгі відгалуження по 6, 9 і 4 метри до датчиків

1-Wire розрахована на одну лінію, вздовж якої датчики сидять один за одним: від плати до першого датчика, від нього до другого, і так далі (daisy chain). Відвід від магістралі до гільзи — якомога коротший.

«Зірка», коли від плати до однієї скрутки й звідти кожному датчикові свій довгий кабель, — найчастіша причина збоїв на апараті. Кожен кінець відгалуження відбиває фронт сигналу назад. Відбиття з різних кінців приходять у різний час, накладаються на біти, і плата читає сміття. На стенді кабелі короткі, відбиття встигають згаснути, і все працює. На апараті з трьома кабелями по 5–10 м збої йдуть постійно. Цю пастку описує й виробник мікросхеми: Maxim, application note 148 про довгі мережі 1-Wire.

Якщо прокласти ланцюжок фізично незручно (куб з одного боку, колона з іншого), розведіть датчики по різних роз'ємах. У A6 два роз'єми, у A16 три, і кожен — окрема шина зі своєю підтяжкою. Два коротких кабелі на різних шинах завжди кращі за одну зірку на одній. Заразом обрив одного кабелю не гасить усіх датчиків.


Кабель і сусідство з силовими#


Роз'єми й гільзи#

Відвал на хвилини чи години, як 83 хв з таблиці вище, найчастіше дає контакт, а не завада:

Швидка перевірка: відкрити картку датчика й по черзі поворушити кожен роз'єм і клему на його шляху. Якщо від дотику датчик спалахує «нема даних», винуватця знайдено.


Що означає симптом#

Інтерфейс показує «нема даних» після 15 с без вдалого читання, портал отримує подію «нема даних» після 75 с. Короткі збої в секунду-дві на картці не видно. Видно їх у журналі.

Що бачите Що це найімовірніше Куди дивитись
«нема даних» блимає на секунди й зникає, часто погана форма сигналу: завади, відбиття, слабка підтяжка на довгому кабелі зірка чи ланцюжок, сусідство з силовими, підтяжка
«нема даних» висить хвилинами чи годинами на одному датчику, решта на шині живі контакт у його відводі або сам датчик роз'єм, клема, гільза, кабель зонда
зникають усі датчики шини разом магістраль або клема на платі клеми DATA/GND на колодці, перший роз'єм, коротке замикання в кабелі
85 °C нізвідки, потім норма датчик перезапустився від просідання живлення: 85 °C — це значення, з яким він прокидається жила VDD, контакт живлення, скрутки
0 °C на всіх датчиках, а скан шини їх знаходить обірване живлення VDD жила 3V/3.3V до датчиків

Про 85 °C окремо. Справжні 85 °C у кубі цілком можливі, тому просто відкидати таке значення не можна. Прошивка розрізняє два випадки за налаштуванням датчика: oCBot ставить датчикам роздільність 10 біт, а датчик, що щойно перезапустився, повертається до заводських 12 біт. Із першого dev-релізу після 0.2.181 такі хибні 85 °C відкидаються, а справжні показуються.

Що пише журнал#

З того ж релізу прошивка сама пробує прочитати датчик до трьох разів за прохід, тож одиничні збої більше не гасять його на цілий цикл. Раз на 10 хв у журнал (Налаштування → Логи) і на портал іде підсумок лише по тих датчиках, у яких були збої:

sensor 0x…: 37 of 600 reads failed (no answer 5, CRC 31, bad data 1)
Лічильник Що означає Що міняти
no answer датчик не відповів зовсім контакт DATA, живлення, обрив
CRC відповідь прийшла, але зіпсована дорогою завади й відбиття: топологія, вита пара, силові поруч, підтяжка на довгому кабелі
bad data відповідь ціла, але не температура — здебільшого той самий хибний 85 °C живлення датчика

Адреса 0x… та сама, що в Периферії біля датчика.


Порядок пошуку#

  1. Зібрати статистику за добу: які датчики відвалюються, як часто й надовго. Підсумок у журналі каже, чого більше, no answer чи CRC.
  2. Перевірити на столі. Той самий датчик коротким кабелем просто на колодку. Нуль збоїв означає, що датчик справний і шукати треба в проводці.
  3. Розвести по роз'ємах. Проблемний датчик окремим кабелем на вільний роз'єм (IO-1/IO-2 на A6, HT1–HT3 на A16). Якщо збої пішли за датчиком, винен його кабель. Якщо лишились на старій шині, винна магістраль чи сусіди на ній.
  4. Поворушити роз'єми, дивлячись на картку.
  5. Поміряти. Під напругою на кінці кабелю біля датчика між VDD і GND має бути не нижче 3.0 В (мінімум для DS18B20 за даташитом). Без напруги, з від'єднаним кабелем, між клемою даних і 3V має бути близько 4.7 кОм, тобто підтяжка на платі ціла.
  6. Переробити проводку, якщо переважає CRC: ланцюжок замість зірки, вита пара, подалі від силових, на довгому кабелі — додатковий резистор біля плати.

Суміжні статті#