Делаем дозиметр!

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

По идее да, для 19го нужно указать 250. Но это только для режима поиска. Плюс мне очень не нравится этот софтовый таймер на миллис, пару страниц назад были упоминания, что у некоторых основной цикл отрабатывает довольно медленно (причину пока не нашёл), так что интервал замера будет сильно гулять...
Бодрый обещал вынести общий коэффициент в дефайны, или даже в системное меню. Но ушёл в отпуск :D

Morroc
Offline
Зарегистрирован: 24.10.2016

В обычном замере тоже должно сработать. Ну это самое простое что там можно покрутить для соответствия другой скорости счета. Интервалов останется 200, но уже не по 1 сек 200 раз, а будет другое общее время счета.

1707
Offline
Зарегистрирован: 08.02.2017

tekagi

В очередной раз благодарен за обновление и подробную консультацию по настройке! Спасибо.

Sajsen
Offline
Зарегистрирован: 30.10.2017

Здравствуйте! Наверное финальная версия прошивки под "железо" АРДОС дисплей Nokia5110 (красный) и Мегу8 (8мгц без кварца).

Особенности: считает и всегда может показать дозу за 200 секунд (усреднение) и за 40 секунд (Поиск, т.е. из постоянно заполняемой базы на 200 ячеек берет последних 40), считает процент погрешности измерений по мере заполнения массива базы. Звуковой сигнал при превышении порога 60 мкр.  Есть гистограмма за 80 секунд.
Показывает напряжение батареи, время от включения,  накопленную дозу и время накопления (сохранется в ЕЕПРОМ каждые 5 минут).
Есть возможность подкорректировать накачку(все параметры: время включения транзистора, время выключения, количество циклов), напряжение батареи, порог АЦП для накачки (ниже порога - качаем, выше - не качаем).
Есть сброс накопленной дозы -  нажать Вправо  и не отпуская нажать Меню 
Переключение режимов (экранов) кнопкой Меню (средняя): поиск 40с, поиск40с с подсветкой, замер200с, замер200с с подсветкой, меню. Передвижение  по пунктам меню кнопкой "меню", изменение параметров - Влево, Вправо
 
Осталось 4 свободных байта памяти! Так что дальше оптимизация  только на Асме.
 
Прошивка, , схема, фьюзы, печатная плата (65ммХ105мм) в СпринтЛайаут5 в очередной раз исправленная: есть место для кварца, есть пины UART +Reset.
На фото: режим поиск 40 сек., режим замер 200 сек. , меню настроек

ПС: В плату можно ставить мегу328 (ДИП) с оригинальной (почти) прошивкой см: http://arduino.ru/forum/proekty/delaem-dozimetr?page=16#comment-317157

 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Sajsen, имхо сохранение дозы в еепром лучше привязать не ко времени, а к уровню накопленой дозы, сам уровень между сохранениями вынести в начало в константы. Малый фон - сохраняем реже, бережём ресурс еепром, больше уровень - сохраняем чаще, чтобы случайно не потерять схваченую дозу при выключении питания. В оригинальной прошивке сделано именно так (сохраняем через каждые 20 микрорентген). Да и кода, по идее, это меньше займёт.

Интервал счёта лучше уменьшить до классических для данного датчика 36 секунд, мой экземпляр за 40 слегка завышает показания по сравнению с образцовым радиометром.

За обновление спасибо. Ну и, как обычно, прошу выложить исходники, и напишите, в какой среде собирали прошивку.

Sajsen
Offline
Зарегистрирован: 30.10.2017

tekagi, Мне не нравится привязка сохранения к дозе, у меня оригинальная (ваша) прошивка работала часами, а выкл./вкл. и оказывается что ничего не сохранилось (может естественный фон низкий) - поэтому решил привязать ко времени  (при 5 минутах ожидаемый ресурс непрерывной! работы 11 лет - я посчитал, что это нормально) .

по командам - зто 1 оператор IF + переменная и действие -  меньше никак

У меня датчик старый, он занижает показания (по сравнению с новым), но могу сделать 36 сек не проблема.

Сейчас сравнил с промышленным дозиметром Анри-01-02 (2 датчика  СБМ-20, период счета в 2 раза короче. Прибор без поверки/сертификации) показания похожи в пределах погрешности.

Среда программирования Bascom AVR 2.0.1.5 ... А за код мне стыдно ;-) 

 
tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

В моих правках кода Бодрого тоже велосипеды на костылях, но выкладываю ведь :) Иначе тема развиваться не будет.
Накопление дозы должно вестись круглосуточно, иначе учёт особого смысла не имеет. В сетапе есть возможность задать шаг сохранения, от 1 микрорентгена. Но тут уж дело хозяйское)

Sajsen
Offline
Зарегистрирован: 30.10.2017

Выкладываю версию со временем обсчета 36 секунд (по заявкам)

В архиве: https://yadi.sk/d/a5AVS6lT3RrP3m 

только прошивка + ЕЕР, врнемя обсчета датчика 36 секунд (180 cек)

У меня не получилось низкое потребление энергии от батареи (схема жрет 12-14 милиампер от лития) так что круглосуточная работа возможна только в стационарном варианте, при питании от сети. А в таком случае мне интересно было бы не накопленная доза,  а поминутный график (гистограмма).

Stinger
Offline
Зарегистрирован: 31.01.2018

Здравствуйте! Имеентся счетчик СБТ-10, пишут что он более чувствительный, чем СТС-5. Подскажите, получится ли собрать дозиметр основанный на данном счетчике, и будут ли какие-либо нюансы при использовании его?

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Хороший счётчик, чувствительный, можно отлавливать малые превышения фона. Такой емнип используется в радиометре "Бета" для замера проб в свинцовом домике. Очень хрупкий со стороны слюдяного окна, для носимого прибора я бы его использовать не советовал, для стационарного - самое то.
Теоретически с железом АрДоса его использовать можно, если поставить в каждый анод счётчика индивидуальный ограничивающий резистор. Но для снятия более-менее корректных показаний надо изменять скетч...
З.Ы. СБТ 10, по сравнению с СБМ 20 и СТС 5 весьма недёшев :(

Morroc
Offline
Зарегистрирован: 24.10.2016

По барахолкам бывает за вполне вменяемую цену даже неюзанный и с кое какой проверкой, я на радиокоте нашел, но это редко. Если не нужно измерение действительно высоких уровней - можно соединить аноды вместе, но по хорошему то да - надо к каждому резистор и от каждого емкость, в промышленном приборе сделано так (правда емкости почему то в нем 15пф, хотя в паспорте вроде меньше указано). Еще из за того, что это по сути 10 чувствительных счетчиков - жрать он может на порядок больше медленных одиночных, тут возможна потенциальная проблема. (еще нужно импульсы успеть посчитать, но скетчи из темы вроде должны успевать)

Я сам такой мучить собираюсь и СБТ-11 (это как примерно половинка СБТ-10).

Кроме всего прочего для этих счетчиков можно раздобыть больше относительно безопасных источников на которые они весело реагируют, а не показывают удвоенный фон :)

Stinger
Offline
Зарегистрирован: 31.01.2018

То есть если поставить на каждый анод датчика по отдельному резистору и подать на них 400 В, а импульсы снимать как и в Ардосе, с катода через транзистор, и скетч переделать под заявленные 362 имп/мкР, то будет адекватно работать? 

Нашел еще вот такую схему:

но не особо понятно как при таком подключении считать импульсы. Нужно ли каждый анод подключать к отдельному пину, или можно все подключить к одному?

Morroc
Offline
Зарегистрирован: 24.10.2016

Правильнее снимать с анодов, с каждого (к каждому резистор, с каждого емкость и вот тут уже емкости можно в кучу свести, в промышленной схеме так). Если объединить аноды - быстрее будет расти погрешность (счетчик и так занижает показания при больших уровнях, а с объединением анодов этот эффект усилится), и с меньшего уровня показания станут недостоверными. Сама ардуинка на 16 МГц должна бы потянуть много импульсов. Если не лазить по Чернобылям это не сильно важно.

Вот тут упрощенная схема съема сигнала http://vrtp.ru/index.php?act=categories&CODE=article&article=3539 вроде повторяли схему - все работает. Или вот с СБТ-11 http://vrtp.ru/index.php?act=categories&CODE=article&article=3552 тут автор объединил по 2 анода и подал на разные пины с прерываниями от сигнала, было бы таких 4 - может и по отдельности подключил бы, нет предела совершенству )

Stinger
Offline
Зарегистрирован: 31.01.2018

Вообще, в дозиметре, с которого был снят этот датчик (ИРД-02Б1) схема выглядит примерно следующим образом: 400 В поступают на каждую пару анодов через резистор 4,7 МОм. С катода снимаются имульсы и через делитель напряжения попадают на транзистор, от куда уже идут на счетную схему.

Вообще было бы удобно соединить конденсаторы ото всех анодов в одной точке и подключить к пину. Вот только не будут ли они мешать друг другу в таком случае? И насколько большое напряжение будет подаваться при импульсе, безопасно ли это для пина?

Morroc
Offline
Зарегистрирован: 24.10.2016

Т.е. там 5 счетных входов ? Ну хорошо жить не запретишь ) Могут мешать если почти одновременно импульсы прилетят с двух, но это лучше, чем соединить напрямую аноды вместе. Пин в какой то мере защищен диодом на питание (диоды внутри структуры элементов), думаю импульсом со счетчика его не выбьет - ток небольшой, а чтобы сложились вместе много коротких импульсов... вероятность мала, ну можно на всякий случай стабилитрон влепить на напряжение чуть ниже 5 вольт прям на этот пин, его счетчик вряд ли убьет.

Можно как в том варианте с СБТ-11 сделать 2 по 5 анодов и подать на 2 и 3 пины, но, возможно, чуток скетч переделать надо будет (навскидку не помню, надо будет глянуть его).

Medvedik
Medvedik аватар
Offline
Зарегистрирован: 09.07.2017

Sajsen пишет:

Выкладываю версию со временем обсчета 36 секунд (по заявкам)

В архиве: https://yadi.sk/d/a5AVS6lT3RrP3m 

только прошивка + ЕЕР, врнемя обсчета датчика 36 секунд (180 cек)

Чего-то по ссылке пусто((

bwn
Offline
Зарегистрирован: 25.08.2014

Joiner пишет:

А я вот уперся рогом в преобразователь высокого напряжения на отдельной микрухе MC34063, пока не доведу его до ума, дальше двигаться не буду. В настоящее время такой работает, работает четко, напряжение держит стабильно, ардуинку не отвлекает...но довольно много жрет, хотя это и не очень критично. Но хочу добиться комфортного режима.

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

Joiner
Offline
Зарегистрирован: 04.09.2014

bwn пишет:

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

Сейчас выложу.

Делал на основе этой схемы http://radiostorage.net/3870-preobrazovatel-napryazheniya-dc-dc-400v-dlya-schetchika-gejgera-mc34063.html

Получилось не сразу. Сказывается отсутствие опыта в электронике. Мотал трансформаторы на разных неизвестных фирритовых кольцах. Какие-то работали лучше, какие-то хуже, но ни один трансформатор не выдавал нужного напряжения. Потом взял какое-то голубенькое из импульсного источника питания, и заработало, но довольно большое потребление. Источник получился довольно мощный, даже при измерении напряжения и высокоомным вольтметром и простым тестером выдает четкое напряжение 400 вольт. Правда в схеме обозначен диод 1n4007, я его заменил на какой-то быстрый.

Завтра покажу как это работает на макете.

P.S. К сожалению источник высокого напряжения до ума пока так и не довел, но борюсь за идею. Если не удасться по нормальному использовать MC34063, буду пробовать что-то другое, более современное. Адуинку регулировкой напряжения грузить не буду.

Morroc
Offline
Зарегистрирован: 24.10.2016

Чего вы так ардуину жалеете ? Я тоже пробовал на микрухе, вроде даже именно на этой, не понравилось (и тоже тока много потребляло) . В ардуине я могу контролировать длительность импульса и частоту как хочу - очень удобно, а микруха... там с этим сложнее.

bwn
Offline
Зарегистрирован: 25.08.2014

Morroc пишет:

Чего вы так ардуину жалеете ? Я тоже пробовал на микрухе, вроде даже именно на этой, не понравилось (и тоже тока много потребляло) . В ардуине я могу контролировать длительность импульса и частоту как хочу - очень удобно, а микруха... там с этим сложнее.

У меня один источник на 400В, один на 180В, плюс динамическая индикация, плюс чтение датчиков, ну не чувствую я себя в силах все это в один МК сложить, лапы коротки.))) Впрочем для данной темы это оффтоп.

Jonier, спасибо.

Joiner
Offline
Зарегистрирован: 04.09.2014

Еще забыл сказать. На выше приведенной схеме,преобразователь работает от источника на 9 вольт. Мне удалось добиться работы от источника 3.7 вольта (литиевый аккум), и даже от более низкого. Пробовал подавать 3 вольта, и он работает. Жалко, мало познаний в трансформаторо-строении и импульсной электронике. Но надежду на нормальный преобразователь пока не потерял. Появилась идея, если не получится с этой схемой, попробовать переделать какой-нибудь китайский преобразователь для этих целей, на более современных и быстрых микросхемах.

У китайев есть в продаже готовые преобразователи на напряжение до 600 вольт. Не помню от какого напряжения они работают, но какой-то паренек писал, что и четырехсот вольт они без доработки не выдают.

Вот обещанное видео демонстрации работы преобразователя https://youtu.be/X30B6IZ7ltM

Постарался быть очень кратким :)

Morroc
Offline
Зарегистрирован: 24.10.2016

У меня есть китайский "на 2000в" (с умножителем) - трансформатор там хороший с отводами в первичке, вполне подойдет, а вот 555й таймер и не открывающийся от 3в транзистор не особо годятся (впрочем таймер то работает и от 3х). Они вроде не для дозиметров те китайские, поэтому с потреблением там не заморачивались. Мой вариант "трансформатора" из дросселя от энергосберегайки и 20 домотанными витками (включен автотрансформатором) качнуть проще до 400+, попробуйте, я так не пробовал с 34063, может и прокатит, только полевик надо бы с напряжением повыше (у меня 30 вольтовый не дох, но желательно вольт на 60 - 100, такие irlml есть).

Микруха насколько я помню просто выключает генерацию если превышено напряжение, а желательно бы управлять частотой следования импульсов и длительность импульса подобрать оптимальную - вот тогда запросто меньше миллиампера ток потребления ключа выходит на >100 МОм нагрузке.

Joiner
Offline
Зарегистрирован: 04.09.2014

Morroc пишет:

У меня есть китайский .................... попробуйте, ...................... запросто меньше миллиампера ток потребления ключа выходит на >100 МОм нагрузке.

Спасибо за информацию. Попробую. 

Morroc
Offline
Зарегистрирован: 24.10.2016

Если что длительность импульса ~20 микросекунд, на стоке полевика импульс выходил до 40 вольт (при питании 3в) и в 10 раз больше на высоковольтной обмотке. Индуктивности могу измерить если надо.

Joiner
Offline
Зарегистрирован: 04.09.2014

Morroc пишет:

Если что ...............................могу измерить если надо.

У меня как раз беда с согласованием трансформатора. Не умею рассчитать какие нужны параметры по индуктивности для преобразователя. И еще трудность в том, что микросхемка MC34063 имеет максимальную частоту около 100 килогерц и с неизменяемым duty процентов 70. Поэтому надо как-то извратиться. Что-то мне подсказывает что это возможно. В ближайшее время продолжу эксперименты, результат отпишу.

Sajsen
Offline
Зарегистрирован: 30.10.2017

Sajsen пишет:

Выкладываю версию со временем обсчета 36 секунд (по заявкам)

В архиве: -------------------------------

только прошивка + ЕЕР, врнемя обсчета датчика 36 секунд (180 cек)

 

Новая ссылка: https://yadi.sk/d/a5AVS6lT3RrP3m Вроде работает?

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

всем таки здравствуйте. 21 страницу пока не осилил. Но пока так и не пришло понимание

если используется ардуино на атмеге328 на 16 мгц. то окуда брать питание для накачки трансформатора? с аккумулятора? или после повышающего преобразователя на 5в?

хочу соорудить дозиметр на сбт-11. http://forum.amperka.ru/threads/%D0%94%D0%BE%D0%B7%D0%B8%D0%BC%D0%B5%D1%82%D1%80-%D0%BD%D0%B0-%D0%90%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE-%D0%B8-%D0%A1%D0%91%D0%A2-11.14506/

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

Пока думаю как подсчитывать импульсы с двух секций сбт-11, принятых на 2 пина с прерываниями по спаду

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

 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Питание и ардуины, и цепей накачки напрямую от литиевого аккумулятора (тестировалось в диапазоне 3.3-5В). В накачке используется не шим, а импульсы фиксированой ширины. При старте даём пачку импульсов для заряда высоковольтного конденсатора, далее периодически проверяем высокое напряжение, если упало ниже порога - генерим импульс. Схема не наша, тоже брали с обкатаных другими разработчиками.
По подсчёту - используется скользящее окно за 40 секунд, счёт импульсов (по прерыванию) за секунду, сохранение результата в массив, обнуление, сдвиг массива.

Morroc
Offline
Зарегистрирован: 24.10.2016

CYITEP_BAC9I пишет:

если используется ардуино на атмеге328 на 16 мгц. то окуда брать питание для накачки трансформатора? с аккумулятора? или после повышающего преобразователя на 5в?

Попробуйте ардуину от 3.3 запитать (в смысле чтобы на мк было 3.3) - скорее всего заработает нормально. Через повышающий проще будет получить 400 вольт, но в принципе оно и так нормально, от 3 вольт тоже можно.

CYITEP_BAC9I пишет:

Пока думаю как подсчитывать импульсы с двух секций сбт-11, принятых на 2 пина с прерываниями по спаду

Так же как с одной, прям в ту же переменную.

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

tekagi и Morroc Большое спасибо!  Это я и хотел узнатьв принципе еслиб стояла задча просто сделать дозиметр на сбт-11, можно было подключить этот датчик, чуть изменить подсчет мкр/ч и получился готовый дозиметр. по документами у него 44 импульса == мкр. аппроксимация до мкр/час за 36 или даже 18 сек. Но мне хочется самому все написать (для начала) .  а если сдамся или не получится вернусь к вашему скетчу.)

Еще раз спасибо за консультацию.

Morroc
Offline
Зарегистрирован: 24.10.2016

Да вот и мне хочется, но времени нет и я что то заморочился с преобразователем сильно, оно в общем и не  надо вроде - уже получил параметры, которые хотел, но все равно хочется попробовать разное и именно на мк :) Сделал вариант, похожий на тот, что у автора с vrtp, только контроль напряжения другой, почему то не получилось как у него (прикрутил на отдельном таймер), а надо бы еще попробовать - идея здравая проверять напряжение компаратором точно в момент высоковольтного импульса (ну или чуть позже, пока не упало). В подсчетах / расчетах / выводе на экран вроде засад не вижу.

Ща родим какого нибудь ужа-ежа :)

Идея сделать с газоразрядными индикаторами мне тоже в голову приходила, но уж как то это... сбт-10 и так большой - с одной стороны раз он уже большой, то и хрен бы с ним - можно и газоразрядные поставить, а с другой... ну очень большая коробка будет :)

bwn
Offline
Зарегистрирован: 25.08.2014

Morroc пишет:

Идея сделать с газоразрядными индикаторами мне тоже в голову приходила, но уж как то это... сбт-10 и так большой - с одной стороны раз он уже большой, то и хрен бы с ним - можно и газоразрядные поставить, а с другой... ну очень большая коробка будет :)

Газоразрядки у меня, это часы, над входом висеть будут. А Гейгер в них пока типа игрушки, хочу попробовать чтобы при открытии двери мгновенное пробовал замерить, при превышении сигнал, там уже вдумчиво смотрим, что за каку принесли. Не получится, пускай просто фон эпизодически меряет.

Morroc
Offline
Зарегистрирован: 24.10.2016

Не получится т.к. вероятность принести нечто ТАКОЕ (чтобы на расстоянии и сразу) очень мала - это только если специально :) У вас часто через дверь носят старые авиационные приборы или тумблеры с спд ? Тут перспективнее что нибудь сцентилляционное - точной калибровки не нужно, зато чутья дофига по сравнению с газоразрядным. Ну так... ради интереса можно, конечно. Я вот специально искал чем бы "посветить" в счетчик... и то с трудом.

bwn
Offline
Зарегистрирован: 25.08.2014

Так тож идея, а не цель, счетчик есть, надо его к чему-нибудь приладить. Не выйдет, будет общий фон потихоньку мерять и докладывать))).

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

всем здравствуйте. для меня было открытием что 1 микрозиверт != 100 микрорентген . А == 114 . сначала не поверил https://www.convert-me.com/ru/convert/radiation/rrmcsievert.html?u=rrmcsievert&v=1. порылся немного и оказалось что это действительно так.

bwn
Offline
Зарегистрирован: 25.08.2014

Рылся по просторам, может кому интересно, программа для определения магнитной проницаемости разных ферритовых сердечников. К сожалению нет гантелек. Насколько точная, не скажу.

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

всем доброго дня.Могли бы посмтореть на мой вариант накачки датчика. Задал вопрос на Амперке, но решил продублировать здесь, поскольку тут уже люди с опытом дозметростроения. прошу прощения за нубство, я только учусь

/*код написан для примера и облегчения читаемости, в реальности будет записан на уровне прямого   программирования портов)*/
void setup()
{
  pinMode(5,OUTPUT)
}

void loop()
{
  int V =((analogRead(A0)*K) // считываем напряжение преобразоваваем в нужные данне
  long D =10;  // промежуток между импульсами micros() этот параметр настраивать в ручную
  int I =; // количесво импульсов в пачке этим параметром и регулировать напряжение накачки
  unsigned long T = micros(); // сохранение времени начала цикла
//написать чтото вроде калибровочной таблицы
if ( 400 - V >50) I=50; // если напряжение меньше нужного на 50 вольт то подаем 50 импулсов накачки
if ( 400 - V >25) I=25; // если напряжение меньше нужного на 25 вольт то подаем 25 импулсов накачки
if ( 400 - V >10) I=10; // если напряжение меньше нужного на 10 вольт то подаем 10 импулсов накачки
if ( 400 - V >2) I=5; // если напряжение меньше нужного на 50 вольт то подаем 5 импулсов накачки
  if (V<400) // если напряжение меньше 40 вольт подаем импульсы 
  {
   if (micros()-T >=D) //задаем интарвал между импульсами
   for (int i=0, i<I, i++) // подаем количество импульсов в зависимости от разницы напряжения
   {
    digitalWrite(5,1); //подаем HIGH на пин5
    digitalWrite(5,0); // выключаем пин 5 LOW
   }
  }
  if(V>400) // если пошло превышение напряжения
  {
    //увеличиваем промежуток между импульсами
    // думаю через 2 -3 повышения должен определиться баланс между промежутками пачек импульсов
    //и убавлять промежуток не придется
    D++;
  }
//предполагаемая частота импульсов до 2000 кгц
}

Если это не приемлимо, вернусь к вашему способу, он продуман и проверен. хотелось своим путем пойти)

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

Отправилось 2 раза, удалить не получается(

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

На аналогридах и диджиталврайтах работать вряд ли будет...

Morroc
Offline
Зарегистрирован: 24.10.2016

CYITEP_BAC9I пишет:

Если это не приемлимо, вернусь к вашему способу, он продуман и проверен. хотелось своим путем пойти)

При вашем подходе, похоже, потребуется целая ардуина для преобразователя и другая для остального. digitalWrite очень медленная штука, у вас длительность импульса огромная получается и чтобы оптимально "зарядить" индуктивность понадобится огромная индуктивность, приличный конденсатор на выходе для сглаживания, обазятельно осциллограф чтобы понять что там в реальности происходит. В общем если упереться рогом, то может и можно заставить это работать, а вот успеет ли оно еще что то параллельно делать - это вопрос.

В общем перво наперво уйти от digitalWrite (способы разные - прямое обращение к регистрам мк, "ускоренные" библиотеки - легко гуглится), второе - сделать код псевдопараллельным как в теме про "избавиться от delay" (в Общее она вроде) - импульсы сами по себе, измерение само по себе, намерили больше 400 - пропускаем импульсы, пока не упадет ниже предела (счетчики работают от ~320 вольт, так что можно ждать и до 350, точность почти не упадет), третье - освоить прерывания по таймеру и/или аппаратную генерацию ШИМа чтобы преобразователь работал сам по себе без кода в loop() [накрайняк там analogRead для контроля напряжения и вкл/выкл импульсов или изменения интервала между ними для более плавной регулировки], тогда у вас будут полностью развязаны руки в отношении основного кода программы.

Оптимальная длительность импульса накачки зависит от примененной индуктивности - ее можно и не менять, подобрав один раз (регулируя кол-во импульсов или интервал между ними), но это очень важная для КПД штука, промахнетесь в меньшую сторону - можете не выйти на 400 вольт (от нагрузки зависит), промахнетесь в большую - преобразователь будет жрать в разы больше нужного. Если речь о единицах миллигенри, как в этой теме, то хорошо получается в районе 20 микросекунд. В принципе это вроде сравнимо со временем выполнения digitalWrite - может что и получится, хотя я уже что то запутался в вариантах преобразователя, у меня свой :)

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

Всем огромная благодарность, за разъяснения и консультацию. На низком уровне пишу корявенько пока, поэтому написал доступным способом на digitalWrite. что бы была понятна основная мысль

Morroc пишет:

[у меня свой :)

вот и я хочу свой велосипед изобрести). 

придумал еще один способ

  bool F=0;//флаг окончания первой накачки
void setup()
{
  pinMode(5,OUTPUT);
}

void loop()
{
int V =(analogRead(A0)*100); // считываем напряжение преобразоваваем в нужные данне
// если напряжение просело до 360 и это не первый цикл накачки с 0
 if (V <360&&F==1) F=0; //сбрасываем флаг отмены генерации импульсов

  //можно было и while
for (int i=0; V<400&&F==0; i++) // дикая конструкция но должна работать i++ оставил на всякий пожарный
   {
   if(V==400)
   {
    F=1; //флаг о наборе нужного напряжения
    break; //выход из цикла
   }
    digitalWrite(5,1); //подаем HIGH на пин5
    digitalWrite(5,0); // выключаем пин 5 LOW
   } 
  
}

достаточно просто и должно работать(теоретически) . Но как вы написали высок шанс что этот процесс заграбастает все ресурсы МК, и на собственно подсчет импулсов уже времени не останется. Вот про это то я забыл. Спасибо что заметили этот момент. попробую организовать параллельный процесс

Еще раз всем спасибо, все моменты уяснил. 

cookins
Offline
Зарегистрирован: 26.03.2016

Добрый
Сделал данный девайс и доволен. Отличная схемка и скетч. Но у меня есть один нюанс. Дисплей новый купил и он мерцает черным фоном во время работы прибора. Почему не понятно. Ардуино у меня нано, через повышающий конвертер питание на нее. Может из за этого мерцает? В плане, вроде все конвертеры повышающие дают какую то задержку. Все остальное по схеме. Не подскажите что с дисплеем?
Вот ссылка видео с мерцанием - https://goo.gl/Bxtgqq

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Если питать без конвертера, от юсб - эффект сохраняется?
Питаете пятью вольтами на вход vcc или повышеным на raw? Дополнительные электролиты, керамика, индуктивность по питанию стоят?
Заодно попробуйте залить пример из библиотеки дисплея (ринки-динк), прописав в инициализации такие же пины, как в Ардосе вместо дефолтных, будет ли мерцание в таком режиме?

cookins
Offline
Зарегистрирован: 26.03.2016

ровно все как в схеме. но некоторые конденсаторы побольшей эмкости (других не было). С17 и С8 22 uF smd керамика. по фильтру питания - еще один такой же паралельно. все остальное также. а все остальное попробую чуток позже - как лак высохнет. 

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

всем здравствуйте. можно еще вопрос. 

с накачкой вроде решил вопрос сделал две функции вызываемые по заданнаму интервалу millis(). накачка вызывается 20 раз в секунду (перебор наверно). раз в секунду обрабатываются полученные данные и выводятся на экранчик. вот сам код



#define  PULSE_interval  50  // интервал между пакетами импулсов
#define  DATA_interval 1000  // раз в секунду обрабатываем полученные данные и выводим на экран
  bool F=0;//флаг окончания первой накачки
int V =0; //переменная для данных сделителя после трансформатора
 int Im=0; // переменная для цикла импулсос
//int number of pulses =0;
int Number_pulses =38; //количество импульсов в пакете

void setup() {
      
   pinMode(5,OUTPUT);  
  Serial.begin(9600);
  attachInterrupt(0, Particle_counting_1, FALLING); //прерывание по спаду фронта
  attachInterrupt(1, Particle_counting_2, FALLING); //прерыванеие по спаду фронта 
   
}
  
void loop()
{
   PULSE_GENERATIONS(  PULSE_interval) ;   //генерим пачки импульсов 20 раз в секунду
   DATA_PROCESSING(  DATA_interval);   // обрабатываем и выводим данные 
}
 

void PULSE_GENERATIONS(unsigned long interval )
{
  static unsigned long prevTime = 0; // 
  if(millis() - prevTime > interval)
  {
    prevTime = millis();  // 
    Serial.println("NNNN");
     Serial.println(Number_pulses);

     V = analogRead(A0); //изсеряем напряжение на делителе
     //пишу просто без преобразований, чтобы не загромождать кот
if (V <360&&F==1) F=0;  //если напряжение упало и это не первая накачка то снимаем флаг запрета генерации
else if(V<400&&F==0) //если напряжение меньше и это первый проход генерим импульсы
{
  for( Im=0;Im<Number_pulses ; Im++ ) //&&F==0
  {
   digitalWrite(5,1); //подаем HIGH на пин5
   digitalWrite(5,0); // выключаем пин 5 LOW
  }
}
 V = analogRead(A0);//int VA=analogRead(A0);//еще раз проверяем напряжение после генерации импульсов
if(V<400&&F==0) //если таки напряжение еще не повысилось до нормы, добаваляем импульсов в пакете
{
 Number_pulses++; // если напряжение на конденсаторе будет в норме то импульсы прибвлятья не будут
}
else if(V>=400&&F==0) //если все таки напряжение дошло до нужного или превысило его
{
  
 Number_pulses--; //уменьшаем количество импульсов в пакете для следущего старта
   F=1; //ставим флаг что пока не нужно генерить импульсы
}   

  
}
}
// просто для проверки
void DATA_PROCESSING(unsigned long interval){
  static unsigned long prevTime=0;
  if(millis()-prevTime>interval){
    prevTime=millis();
     
    Serial.print("Current time:");
     Serial.println(Im);
    Serial.println(millis());
 
  }
}
void Particle_counting_1 ()
{
  Count++;   
}
void Particle_counting_2 ()
{
  Count++;   
}
​

В симумуляторе отрабатывает нормально. но когда я загружу фунцию DATA_PROCESSING по полной. это будет уже не нормально. цикл PULSE_GENERATIONS собьется 100%.

можете подсказать, возможно ли цикл накачки PULSE_GENERATIONS посадить на прерывание по таймеру 1, с интервалом 50 мс??? у меня и так есть два веншних прерывания, но они работают вполне адекватно. если верить тому что написано в книжках то нельзя(((. потому что пока исполняется цикл прерывания по таймеру PULSE_GENERATIONS, возможно потери подсчета импулсов на внешних прерываниях. Или я не прав и можно все таки поставить гкнерацию импульсов на прерывания по тамеру не в ущерб подсчета импульсов?

Morroc
Offline
Зарегистрирован: 24.10.2016

У вас код какой то не параллелящийся. Генерацию импульсов не можно, а нужно засунуть в прерывание (или в аппаратный ШИМ), рулить этой генерацией можно даже из основного цикла по идее. Но в прерывании должен быть быстроисполнимый код, типа вошел - если было LOW и пора накачивать - выдал HIGH - "зарядил" таймер на длительность импульса - вышел из прерывания, потом вошел (через время длительности импульса) - если было HIGH сделал LOW - "зарядил" таймер на длительность паузы между импульсами - вышел из прерывания (до следующего импульса. и все это без digitalWrite - надо заменить), для случая регулировки накачки числом импульсов туда еще прикручивается счетчик с декрементом и условие "если счетчик = 0  - отключаем таймер накачки" (включим в основном цикле когда надо).

Считать импульсы можно по идее и счетчиком тоже - тогда импульсы не пропадут, даже сходу и не соображу какие тут минусы, разве что работать с ним не совсем по ардуински придется.

CYITEP_BAC9I
Offline
Зарегистрирован: 21.10.2016

спасибо! не знаю как тут благодарять за помощь, плюсую сообщения в знак благодарности.

Все примеры которые встречал для "распараллеливания" процессов ардуино, именно к этому и сводились. по миллис определялся интервал срабатывания функций. вариантов оформления много, но суть одна и таже. из костылей библиотека Thread.h для ардуино. но тоже не идеал в данном случае.  поскольку цикл расчетов и вывода на экран в наглую " забьет" робкие попвтки вклинится циклу накачки. Тут думаю первенство отдать накачке, а фоном пойдут расчеты. Сделаю последний подход с прерываниями, и сдамся наверное((( лучше чем в исходнике не придумаешь. зато совесть чиста будет. что пытался свое создать, а не в наглую скопипастил.

cookins
Offline
Зарегистрирован: 26.03.2016

питание на vin подаю напрямую. через usb пробовал - тоже самое (без конвертора).

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

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Проверяйте все соединения, особенно подключение дисплея. Высоковольтную часть лучше полностью перебрать, шить не должно. Также необходимо убедиться, что напряжение на ВВ части держится около 400 вольт (методика настройки есть на пятнадцатой странице топика), и применённые элементы ВВ части рассчитаны на напряжение не менее 630В.

Если собрано на макетке, да ещё и беспаечной - то работать не будет.

cookins
Offline
Зарегистрирован: 26.03.2016

все правильно. в настройках показывает 420 вольт. и где гуляет это напряжение - по 630 вольт всё компоненты. где то пробивает и наверное по-этому мигает дисплей. примерно одинаково мигает с стреском. ну ладно. как разберусь, может, напишу что это было. еще раз спасибо.