Використання програмного модуля radCounter для вимірювання потужності іонізуючого випромінювання з трубкою СБМ-20

Передмова

Розробляючи і тестуючи власний пристрій вимірювання рівня радіації з трубкою СБМ-20, ми зіштовхнулися із завищеними рівнями, які показував наш пристрій. Задача перетворення імпульсів з трубки Гейгера-Мюллера, що надходять на вхід контролера виявилася непростою, принаймні підштовхнула нас досконало розібратися у темі. Пошук у інтернет не дав однозначного розуміння, яку формулу приймати за основу розрахунків. Одне що ми знали однозначно, приступаючи до програмування, що весь принцип роботи побудовано на підрахунку імпульсів, які виникають в трубці під час пролітання крізь площину колби трубки радіоактивних частинок.

Врешті-решт, ми розібралися і розробили власний програмний модуль radCounter, що гнучко налаштовується, а головне, вимірює еквівалентну потужність випромінювання з точністю розташованого поруч еталонного дозиметра.

Для того, щоб досягнути якісних результатів вимірювання, необхідно правильно розуміти і налаштувати ключові параметри програмно-апаратної системи вимірювання. Оскільки у більшості випадків ми не можемо впливати на апаратну частину, а також завдяки осцилографу нам відомо, що електроніка працює вірно, залишається сконцентрувати зусилля на програмній частині. Програмний модуль radCounter враховує можливість налаштування усіх важливих параметрів. Деякі параметри доступні для налаштування у змінних виклику на етапі ініціалізації, а деякі константи користувач може налаштувати у вихідному коді. Користувач модуля може легко змінити код для застосування, наприклад, з іншою трубкою Гейгера-Мюллера.

Для мети даної публікації виокремимо наступні характеристки і відповідні їм параметри модуля radCounter:

  • Час одиничного циклу вимірювання;
  • Коефіцієнт перетворення;
  • Дискретна логіка реєстрації вхідних імпульсів контролером;
  • Фільтри брязкоту;
  • Ковзне середнє;
  • Статистика, що накопичується.

Час одиничного циклу вимірювання;

Вивчаючи пропозиції магазинів, читач міг помітити, що однією з характеристик, котру продавці часто наводять у якості переваги, є час вимірювання з моменту вмикання живлення.

Дійсно, час необхідний на вимірювання є дуже важливим, але ми не радимо оцінювати цю характеристику як якусь певну перевагу і ось чому: проміжки часу, через котрі радіоактивні частинки пролітають крізь трубку є неоднорідними, а тому чим коротшим є час вимірювання, тим більшою є похибка. Ідеально було б взагалі, для отримання мікрозівертів на годину, проводити вимірювання протягом години. Але на щастя, у документації трубки наводяться дані, котрі дозволяють нам проводити вимірювання протягом хвилини.

Також слід відмітити, що є технічне рішення, котре дозволяє скоротити час вимірювання за рахунок застосування не однієї, а кількох трубок Гейгера-Мюллера одночасно. На наш погляд це значно підвищує витрати як на самі трубки так і на електроніку довкола трубки і в приладах побутового призначення не є економічно виправданим.

В інших трубках параметри можуть вимагати проводити вимірювання протягом значно більшого або меншого проміжку часу, тому radCounter надає можливість задавати значення тривалості циклу вимірювання у мілісекундах. За замовчуванням radCounter використовує проміжок часу у 60 000 мілісекунд (1 хвилина) див. Рис.1.

Рис.1 Формат виклику метода radCounter.init(), параметр time_out

Наші практичні тести показали, що ні чверть хвилини ні половина хвилини не є гарним рішенням – результати є або сильно завищеними, або заниженими. У той же час, професійний дозиметр (з іншою трубкою), лише робить вигляд, що за 15 секунд щось вимірює – ця цифра також дуже сильно коливається приблизно протягом 60 секунд.

Коефіцієнт перетворення імпульсів у потужність випромінювання

Для того, щоб вивести у консоль розробника чи на дисплей пристрою значення рівня потужності випромінювання у мікро зівертах на годину, нам необхідно знати коефіцієнт перерахунку. Адже реєстратор імпульсів і трубка СБМ-20 у його складі постачає на вхід контролера лише безрозмірні імпульси. Також ми знаємо час, протягом котрого цю кількість імпульсів було отримано.

Документація дає неоднозначні дороговкази для обчислення коефіцієнту перерахунку, а тому ми вирішили перевірити отримані розрахункові дані. Математично ми отримали коефіцієнт 0.0092.

Пошук коефіцієнту і принципів розрахунку у інтернет, для трубки СБМ-20, дав нам декілька результатів:

  • найчастіше, на форумах приводиться коефіцієнт 0.0057;
  • одна з провідних аматорських мереж вимірювання радіації, застосовує 0.0063;

в той же час, нас розрахунки за документацією на СБМ-20

  • приводять до цифри 0.0092.

Відразу скажемо, наш програмний продукт radCounter використовує коефіцієнт 0.0057. Ми зупинилися на цьому значенні, бо провели випробування з еталонним дозиметром в різних умовах і цей коефіцієнт дав аналогічні результати на нашому тестовому стенді з різницею в десятитисячних значеннях після коми.

Про те, яким чином ми розрахувати коефіцієнт перетворення 0.0092 за документацією виробника, ви можете прочитати за посиланням: Перерахунок імпульсів у потужність випромінювання. Але ми радимо не заглиблюватися у математичні розрахунки і будувати перевірене рішення на базі radCounter.

Метод ініціалізації radCounter.init() не дозволяє з боку виклику явно задавати коефіцієнт перерахунку, але у вихідному коді цей коефіцієнт присутній у вигляді константи SBM20_COEF і може бути налаштованим за потреби.

Дискретна логіка реєстрації вхідних імпульсів контролером

Під час розробки власного пристрою, як було вже зазначено, ми зіткнулися із завищеними рівнями радіації, що проявляє себе у значно більшій кількості імпульсів, ніж це має бути за нормальних умов. Наприклад, імпульсів має бути 18-20, а ми бачимо 35-50, а іноді і 70. Вирішили проблему завдяки зміні програмної обробки вхідних імпульсів. Також у процесі розробки фільтрів, вирішення цієї проблеми знайшло своє відображення у системі налаштувань модуля radCounter – ми ввели у метод ініціалізації параметр dir, відповідає за вибір типів обробки переривання на GPIO:

Рис.2 Формат виклику метода radCounter.init(), параметр dir

Як результат наших зусиль, маємо універсальний модуль radCounter, що дозволяє гнучко налаштуватися і видавати правильну кількість імпульсів і відповідну потужність іонізуючого випромінювання.

Пояснення ефекту, з котрим ми зіткнулися, криється у перехідних процесах, що створює розряд у трубці. Контролер на вході очікує сигнал правильної квадратної форми, але в реальності сигнал має наближену до квадратної форми, та з великою кількістю “зубів” по амплітуді.

Апаратно приводити форму до очікуваної немає сенсу, адже тоді ми самі собі “засліплюємо очі” при підрахунку і одночасно підвищуємо собівартість пристрою надлишковою електронікою узгодження і формування форми сигналу.

Фільтри брязкоту

Для додаткового захисту від завад, модуль radCounter надає можливість користувачеві вмикати/вимикати два фільтри, що працюють на різних рівнях обробки вхідних імпульсів від трубки.

Перший, так званий lo_flt, дозволяє ігнорувати подвійні та потрійні хибні-позитивні імпульси, що виникають на порту контролера. Ці хибні спрацювання найчастіше пов’язані з поганими контактами в роз’ємах (штирьові провідники для швидкого монтажу чого тільки вартують у негативному сенсі). Фільтр застосовує можливості API NodeMCU, що надає метод модуля обробки переривань gpio.trig().

Другий фільтр, так званий hi_flt, працює вже на вищому рівні обробки результатів і в свою чергу відкидає всі ті імпульси, котрі фізично не може генерувати трубка СБМ-20 відповідно своїх технічних характеристик. У якості параметра застосовується константа deadtime = 190 мікросекунд. Імпульс, що прямує за попереднім на відстані меншій за deadtime, буде відфільтровано.

Для зручності користування, radCounter передбачає вмикання “ON” чи “OFF” вимикання цих фільтрів з рядка виклику під час ініціалізації:

Рис.3 Формат виклику методу radCounter.init(), параметри lo_flt та hi_glt

Наведемо приклад роботи фільтрів:

Рис.4 Результат циклу роботи модуля radCounter без фільтрів

Ковзне середнє

Для того, щоб усталити покази лічильника, як і в будь-яких сенсорних системах вимірювання, в radCounter використовується ковзне середнє на масиві з п’яти циклів вимірювання. Виглядає це так, як показано на Рис.5:

Рис.5 Результати вимірювання за перші 6 хвилин роботи пристрою – ковзне середнє

Як результат, користувач отримує усталене значення потужності випромінювання, що оновлюється щохвилини без втрати контексту вимірювання за останні 5 одиничних циклів вимірювання, по хвилині кожний.

Як тільки масив з п’яти елементів наповнюється, маркер переходить на перший елемент і оновлює вже його, рухаючись у нескінченному циклі: [1-5]-[1-5]-…[1

У випадку різкої зміни результату вимірювання, кожен наступний цикл вимірювання безпосередньо впливає на цифру поточного середнього значення результату, що є прийнятним. В той же час, випадкові відхилення системи вимірювання, які неодмінно спостерігаються без ковзного середнього, а також заявлені виробником, не впливають і не розгойдують результат.

За зручності потрібно платити – кожна зміна значення можлива не частіше одного разу на хвилину. З іншого боку, вимірювання протягом хвилини, є запорукою правильного вимірювання і це вже було розглянуто раніше.

Статистика, що накопичується

Модуль radCounter крім основних параметрів, також розраховує:

  • вилку мінімального і максимального значення потужності випромінювання;
  • сумарну кількість імпульсів;
  • дозу опромінення мкЗв, як суму доз отриманих за час роботи.
  • кількість циклів вимірювання, що також дорівнює часу вимірювання у хвилинах.

Метод radCounter.read() повертає параметри як функція, що значно спрощує програмування.

Зручне виконання у вигляді модуля з публічними методами

Програмний продукт radCounter виконано як модуль, що легко інтегрується до складу будь-якого проекту на Lua, завдяки реєстрації публічних методів radCounter.init() і radCounter.read() у системному оточенні прошивки NodeMCU.

З описом програмного модуля radCounter можливо за посиланням: Модуль лічильника імпульсів

Висновки

Шановний читач також може прочитати нашу статтю про самостійну розробку модуля вимірювання радіації, але з огляду на власний досвід, що ми отримали під час розробки нашого продукту, ми радимо придбати і використовувати готовий модуль, що вже враховує необхідні налаштування і виконує розрахунок всіх необхідних параметрів. Якби на момент розробки нами лічильника Гейгера для власних потреб ми натрапили на radCounter, то неодмінно придбали б його – модуль дозволяє заощадити купу часу і отримати концентрований досвід.

Бажаємо успіхів!