Определить наличие переменного напряжения, ***код?

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср авг 18, 2021 17:23:02

Сообщение lvovitch »

Здравствуйте!

Мне нужно научить ардуинку определить наличие Переменного напряжения.
Для этого собрал схемку:
Изображение

получается, что на входе ардуины появляется напряжение, но не постоянно.
написал функцию:

Код: Выделить всё

bool checkEng(){
  int teON=0;
  for(int i=0; i<3000; i++){
    teON=teON+digitalRead(buttonPin);
  }

  if(teON>0){  
    return true;
  }else{
    return false;
  }
все работает. Но может можно как-то это сделать правильно?
Реклама
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Сообщение С.Н. »

[uquote="lvovitch",url="/forum/viewtopic.php?p=4341617#p4341617"]Но может можно как-то это сделать правильно?[/uquote]
У каждого будет свое мнение. Многое зависит от начальных условий.
На картинке это выносной датчик скрытую проводку искать или это обмотка трансформатора, наличие напряжения на котором и следует обнаружить?
50Гц?
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Реклама
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср авг 18, 2021 17:23:02

Сообщение lvovitch »

[uquote="С.Н.",url="/forum/viewtopic.php?p=4341672#p4341672"][uquote="lvovitch",url="/forum/viewtopic.php?p=4341617#p4341617"]Но может можно как-то это сделать правильно?[/uquote]
У каждого будет свое мнение. Многое зависит от начальных условий.
На картинке это выносной датчик скрытую проводку искать или это обмотка трансформатора, наличие напряжения на котором и следует обнаружить?
50Гц?[/uquote]


Это обмотка генератора. На устройстве, которое необходимо автоматизировать, выход с генератора на общую колодку от 15 до 32 вольт. Соответственно нужно отследить момент когда генератор начал работать. Пока тестирую с трансформатором АС24вольта
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Схема как схема, работать будет. Только C посчитай из условия R₁C=100мс - десяти полупериодов должно хватить, чтобы зарядить кондер. Ну и через где-то R₂C после прерывания напруги он разрядится.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Сообщение electroget »

lvovitch,
Работу генератора лучше отслеживать по шуму. Такая функция реализована во многих автомобильных сигнализациях.
Реклама
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

На схеме написано: "to analog Input". Что не нравится вход в аналоговом входе, а написали повторение 3000 раз с цифровым входом с функцией накопления? Подключите к входам, обозначенным буквой A, и все готово, однострочное чтение. Даже будете следить за напряжением. Вставьте и стабилитрон, напр. 4,7V.
Контактная информация:
Реклама
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Сообщение С.Н. »

Уважаемый Eddy_Em предлагает возложить на емкость функцию усреднения. Емкость можно и побольше - так, чтобы после глушения двигателя она еще ~ секунды еще "обманывала" контролер. Тогда программой можно будет не читать 3000 раз значение бита.
Далее завести флаг, означающий "есть напряжение" и анализ линии в основной цикл loop Ардуино с одиночным чтением или на ножку линии прерывания "на изменение". В программе обработке прерывания - однократный анализ этой линии.

Тогда с основной программе легко и непринужденно этим флагом можно оперировать. И та емкость все подержит как надо!
По крайней мере, сам бы в эту сторону двигался про программе. По схеме бы еще один диод поставил от емкости на +5В - для защиты входной линии. В чипе есть такой p-n переход и он до 15-20 мА тока выдержит, но что Вам диода жалко копеечного.
Последний раз редактировалось С.Н. Пт дек 23, 2022 16:17:05, всего редактировалось 2 раза.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

[uquote="veso74",url="/forum/viewtopic.php?p=4341720#p4341720"]Вставьте и стабилитрон, напр. 4,7V.[/uquote] да, защитный функционал не будет лишним, лучше в виде двунаправленного супрессора
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср авг 18, 2021 17:23:02

Сообщение lvovitch »

[uquote="electroget",url="/forum/viewtopic.php?p=4341706#p4341706"][/uquote]
Спасибо! Н знал, что есть такой способ. Но все же планирую определять по наличию напряжения, так как заводской модуль делает это именно этим способом, и мне хотелось бы повторить.

Добавлено after 1 minute 52 seconds:
[uquote="veso74",url="/forum/viewtopic.php?p=4341720#p4341720"]На схеме написано: "to analog Input". Что не нравится вход в аналоговом входе, а написали повторение 3000 раз с цифровым входом с функцией накопления? Подключите к входам, обозначенным буквой A, и все готово, однострочное чтение. Даже будете следить за напряжением. Вставьте и стабилитрон, напр. 4,7V.[/uquote]

Да, это схема для измерения напряжения. Но мне это не нужно. Мне нужно просто знать есть оно или нет. Не знаю точно получиться ли использовать ногу прерывания на ардуине, но буду пробовать. А эта нога цифровая, поэтому и тестирую на цифровом входе.

Добавлено after 2 minutes 28 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4341702#p4341702"]Схема как схема, работать будет. Только C посчитай из условия R₁C=100мс - десяти полупериодов должно хватить, чтобы зарядить кондер. Ну и через где-то R₂C после прерывания напруги он разрядится.[/uquote]

Честно говоря пока кондер вообще не поставил. Не знаю какой номинал нужен, да и вроде без него работает.

Добавлено after 2 minutes 40 seconds:
[uquote="С.Н.",url="/forum/viewtopic.php?p=4341723#p4341723"]Уважаемый Eddy_Em предлагает возложить на емкость функцию усреднения. Емкость можно и побольше - так, чтобы после глушения двигателя она еще ~ секунды еще "обманывала" контролер. Тогда программой можно будет не читать 3000 раз значение бита.
Далее завести флаг, означающий "есть напряжение" и анализ линии в основной цикл loop Ардуино с одиночным чтением или на ножку линии прерывания "на изменение". В программе обработке прерывания - однократный анализ этой линии.

Тогда с основной программе легко и непринужденно этим флагом можно оперировать. И та емкость все подержит как надо!
По крайней мере, сам бы в эту сторону двигался про программе. По схеме бы еще один диод поставил от емкости на +5В - для защиты входной линии. В чипе есть такой p-n переход и он до 15-20 мА тока выдержит, но что Вам диода жалко копеечного.[/uquote]

Да, хотел как повесить на ножку прерывания. Т.е. я планирую так: включается стартер на 3 секунды, и далее начинаю отслеживать появилось ли напряжение на генераторе. Если да, то двигатель считается запущенным и стартер можно выключить раньше, чем 3 секунды. Правильно я понял, что удобнее это сделать через ногу с прерыванием?

Добавлено after 2 minutes 5 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4341727#p4341727"][uquote="veso74",url="/forum/viewtopic.php?p=4341720#p4341720"]Вставьте и стабилитрон, напр. 4,7V.[/uquote] да, защитный функционал не будет лишним, лучше в виде двунаправленного супрессора[/uquote]

скорее всего стабилитрона у меня нет в наличии. :( а без него беда?
Друг Кота
Аватара пользователя
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Сообщение electroget »

[uquote="lvovitch",url="/forum/viewtopic.php?p=4341776#p4341776"]Правильно я понял, что удобнее это сделать через ногу с прерыванием?[/uquote]
А какая цель в использовании прерывания?
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср авг 18, 2021 17:23:02

Сообщение lvovitch »

[uquote="electroget",url="/forum/viewtopic.php?p=4341781#p4341781"][uquote="lvovitch",url="/forum/viewtopic.php?p=4341776#p4341776"]Правильно я понял, что удобнее это сделать через ногу с прерыванием?[/uquote]
А какая цель в использовании прерывания?[/uquote]

выключить стартер.

т.е. я включаю стартер и выключаю его тогда, когда двигатель завелся и на генераторе появилось напряжение
Друг Кота
Аватара пользователя
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Сообщение electroget »

lvovitch,
А тогда основная программа что делает?
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

[uquote="lvovitch",url="/forum/viewtopic.php?p=4341776#p4341776"]а без него беда?[/uquote] необязательно, но вероятность есть и немаленькая (особенно при наличии стартера). Нет никакого защитного функционала, если вдруг проскочит высоковольтная помеха или обратное напряжение. Тогда останется надеяться на входные защитные диоды микроконтроллера, но на них надеяться нежелательно. Можно воспользоваться двумя диодами Шоттки. как на рисунке 10 https://cxem.net/beginner/beginner102.php
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср авг 18, 2021 17:23:02

Сообщение lvovitch »

[uquote="electroget",url="/forum/viewtopic.php?p=4341795#p4341795"]lvovitch,
А тогда основная программа что делает?[/uquote]

алгоритм такой:
1.включаю бензоклапан
2.вынимаю заслонку
3. включаю стартер, и выключаю через 3 секунды либо до этого, если появилось напряжение. Если прошло 3 секунды и напряжение не появилось, то повторяю этот пункт 5 раз.
4. измеряю температуру двигателя и убираю заслонку по температуре двигателя.
5. жду 5 секунд и включаю контакторы

Можно и без прерывания, наверное, но мне показалось использовать эту функцию в ардуине уместно (за нее ведь уплочено :)
)

Добавлено after 2 minutes 6 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4341796#p4341796"][uquote="lvovitch",url="/forum/viewtopic.php?p=4341776#p4341776"]а без него беда?[/uquote] необязательно, но вероятность есть и немаленькая (особенно при наличии стартера). Нет никакого защитного функционала, если вдруг проскочит высоковольтная помеха или обратное напряжение. Тогда останется надеяться на входные защитные диоды микроконтроллера, но на них надеяться нежелательно. Можно воспользоваться двумя диодами Шоттки. как на рисунке 10 https://cxem.net/beginner/beginner102.php[/uquote]


понял. Спасибо большое! Буду искать стабилитрон или диоды шотки
Друг Кота
Аватара пользователя
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Сообщение electroget »

lvovitch,
Поделюсь своими соображениями о использовании прерывания.
Допустим, есть основная программа "А" и есть некое возможное событие "икс".
Если событие "икс" происходит (например это двигатель завёлся) , то происходит прерывание, программа "А" перестаёт выполняться и начинает выполняться программа "Б". При этом подразумевается, что у программы "А" есть некий свой собственный алгоритм и у программы "Б" есть некий свой собственный алгоритм. По моим представления это как-то так должно быть.
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср авг 18, 2021 17:23:02

Сообщение lvovitch »

[uquote="electroget",url="/forum/viewtopic.php?p=4341809#p4341809"]lvovitch,
Поделюсь своими соображениями о использовании прерывания.
Допустим, есть основная программа "А" и есть некое возможное событие "икс".
Если событие "икс" происходит (например это двигатель завёлся) , то происходит прерывание, программа "А" перестаёт выполняться и начинает выполняться программа "Б". При этом подразумевается, что у программы "А" есть некий свой собственный алгоритм и у программы "Б" есть некий свой собственный алгоритм. По моим представления это как-то так должно быть.[/uquote]

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

Мне казалось, что с прерыванием код меньше будет Но я, возможно, заблуждаюсь. Опыт пока не такой большой. Ладно, попробую написать все это сначала, а там уж виднее будет.
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Процессы медленные. Программа будет работать и без прерывания. С флагами - измерит входное напряжение. Если да/нет - вкл. таймер или др. логика. В основном цикле. И Arduino будет отдыхать (в loop()). Бы добавил датчики, реле, светодиоды, дисплей, кнопку/и ... (Но можно обойтись и без них). А вычислительная мощность МК отн. велика для этих процессов. В ATtiny13A наверное собрался бы.
Последний раз редактировалось veso74 Пт дек 23, 2022 18:39:52, всего редактировалось 2 раза.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Сообщение electroget »

lvovitch,
Я совершенно не против использование прерывания, просто я хотел четко разделить выполнение программы с алгоритмом "А" и программы с алгоритмом "Б".
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Ср авг 18, 2021 17:23:02

Сообщение lvovitch »

а еще у меня вопрос чисто теоретический. Понять не могу...

Частота переменного тока 50 герц. Так написано на блоке питания.
Частота кварца на ардуине 16000 герц. Так на кварце написано.

получается, что что бы точно считать положительную полуволну нужно прочитать ногу (16000/50) 320 раз. Но по факту работает только если прочитать 3000 раз.

Где я ошибаюсь?
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Вы ошибаетесь. Это не триггер на логике. Каждая команда разбивается на количество инструкций. Количество инструкций * время для одной = общее время. Грубо: ниже (хотя со версиям команди менялись, да и оптимизация тоже мутит расчеты). Времена просто примерные. Но нет никакого беспокойства, 50 Hz - очень медленный процесс даже для Arduino с его командами. А и всегда можно писать и компилируется на чистом C/C++ даже в среде Arduino IDE.
Вложения
arduino_command_speed_zps.jpg
(141.07 КБ) 72 скачивания
Контактная информация:
Ответить

Вернуться в «Arduino»