Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

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

Пт дек 23, 2022 13:51:02

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

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

получается, что на входе ардуины появляется напряжение, но не постоянно.
написал функцию:
Код:
bool checkEng(){
  int teON=0;
  for(int i=0; i<3000; i++){
    teON=teON+digitalRead(buttonPin);
  }

  if(teON>0){ 
    return true;
  }else{
    return false;
  }


все работает. Но может можно как-то это сделать правильно?

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

Пт дек 23, 2022 14:39:50

Но может можно как-то это сделать правильно?

У каждого будет свое мнение. Многое зависит от начальных условий.
На картинке это выносной датчик скрытую проводку искать или это обмотка трансформатора, наличие напряжения на котором и следует обнаружить?
50Гц?

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

Пт дек 23, 2022 15:02:46

Но может можно как-то это сделать правильно?

У каждого будет свое мнение. Многое зависит от начальных условий.
На картинке это выносной датчик скрытую проводку искать или это обмотка трансформатора, наличие напряжения на котором и следует обнаружить?
50Гц?



Это обмотка генератора. На устройстве, которое необходимо автоматизировать, выход с генератора на общую колодку от 15 до 32 вольт. Соответственно нужно отследить момент когда генератор начал работать. Пока тестирую с трансформатором АС24вольта

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

Пт дек 23, 2022 15:35:28

Схема как схема, работать будет. Только C посчитай из условия R₁C=100мс - десяти полупериодов должно хватить, чтобы зарядить кондер. Ну и через где-то R₂C после прерывания напруги он разрядится.

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

Пт дек 23, 2022 15:47:28

lvovitch,
Работу генератора лучше отслеживать по шуму. Такая функция реализована во многих автомобильных сигнализациях.

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

Пт дек 23, 2022 16:04:51

На схеме написано: "to analog Input". Что не нравится вход в аналоговом входе, а написали повторение 3000 раз с цифровым входом с функцией накопления? Подключите к входам, обозначенным буквой A, и все готово, однострочное чтение. Даже будете следить за напряжением. Вставьте и стабилитрон, напр. 4,7V.

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

Пт дек 23, 2022 16:06:51

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

Тогда с основной программе легко и непринужденно этим флагом можно оперировать. И та емкость все подержит как надо!
По крайней мере, сам бы в эту сторону двигался про программе. По схеме бы еще один диод поставил от емкости на +5В - для защиты входной линии. В чипе есть такой p-n переход и он до 15-20 мА тока выдержит, но что Вам диода жалко копеечного.
Последний раз редактировалось С.Н. Пт дек 23, 2022 16:17:05, всего редактировалось 2 раз(а).

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

Пт дек 23, 2022 16:12:15

Вставьте и стабилитрон, напр. 4,7V.
да, защитный функционал не будет лишним, лучше в виде двунаправленного супрессора

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

Пт дек 23, 2022 17:49:53


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

Добавлено after 1 minute 52 seconds:
На схеме написано: "to analog Input". Что не нравится вход в аналоговом входе, а написали повторение 3000 раз с цифровым входом с функцией накопления? Подключите к входам, обозначенным буквой A, и все готово, однострочное чтение. Даже будете следить за напряжением. Вставьте и стабилитрон, напр. 4,7V.


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

Добавлено after 2 minutes 28 seconds:
Схема как схема, работать будет. Только C посчитай из условия R₁C=100мс - десяти полупериодов должно хватить, чтобы зарядить кондер. Ну и через где-то R₂C после прерывания напруги он разрядится.


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

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

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


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

Добавлено after 2 minutes 5 seconds:
Вставьте и стабилитрон, напр. 4,7V.
да, защитный функционал не будет лишним, лучше в виде двунаправленного супрессора


скорее всего стабилитрона у меня нет в наличии. :( а без него беда?

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

Пт дек 23, 2022 17:53:29

Правильно я понял, что удобнее это сделать через ногу с прерыванием?

А какая цель в использовании прерывания?

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

Пт дек 23, 2022 18:04:48

Правильно я понял, что удобнее это сделать через ногу с прерыванием?

А какая цель в использовании прерывания?


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

т.е. я включаю стартер и выключаю его тогда, когда двигатель завелся и на генераторе появилось напряжение

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

Пт дек 23, 2022 18:08:34

lvovitch,
А тогда основная программа что делает?

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

Пт дек 23, 2022 18:09:35

а без него беда?
необязательно, но вероятность есть и немаленькая (особенно при наличии стартера). Нет никакого защитного функционала, если вдруг проскочит высоковольтная помеха или обратное напряжение. Тогда останется надеяться на входные защитные диоды микроконтроллера, но на них надеяться нежелательно. Можно воспользоваться двумя диодами Шоттки. как на рисунке 10 https://cxem.net/beginner/beginner102.php

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

Пт дек 23, 2022 18:15:10

lvovitch,
А тогда основная программа что делает?


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

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

Добавлено after 2 minutes 6 seconds:
а без него беда?
необязательно, но вероятность есть и немаленькая (особенно при наличии стартера). Нет никакого защитного функционала, если вдруг проскочит высоковольтная помеха или обратное напряжение. Тогда останется надеяться на входные защитные диоды микроконтроллера, но на них надеяться нежелательно. Можно воспользоваться двумя диодами Шоттки. как на рисунке 10 https://cxem.net/beginner/beginner102.php



понял. Спасибо большое! Буду искать стабилитрон или диоды шотки

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

Пт дек 23, 2022 18:21:45

lvovitch,
Поделюсь своими соображениями о использовании прерывания.
Допустим, есть основная программа "А" и есть некое возможное событие "икс".
Если событие "икс" происходит (например это двигатель завёлся) , то происходит прерывание, программа "А" перестаёт выполняться и начинает выполняться программа "Б". При этом подразумевается, что у программы "А" есть некий свой собственный алгоритм и у программы "Б" есть некий свой собственный алгоритм. По моим представления это как-то так должно быть.

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

Пт дек 23, 2022 18:35:49

lvovitch,
Поделюсь своими соображениями о использовании прерывания.
Допустим, есть основная программа "А" и есть некое возможное событие "икс".
Если событие "икс" происходит (например это двигатель завёлся) , то происходит прерывание, программа "А" перестаёт выполняться и начинает выполняться программа "Б". При этом подразумевается, что у программы "А" есть некий свой собственный алгоритм и у программы "Б" есть некий свой собственный алгоритм. По моим представления это как-то так должно быть.


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

Мне казалось, что с прерыванием код меньше будет Но я, возможно, заблуждаюсь. Опыт пока не такой большой. Ладно, попробую написать все это сначала, а там уж виднее будет.

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

Пт дек 23, 2022 18:36:45

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

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

Пт дек 23, 2022 18:39:00

lvovitch,
Я совершенно не против использование прерывания, просто я хотел четко разделить выполнение программы с алгоритмом "А" и программы с алгоритмом "Б".

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

Пт дек 23, 2022 18:40:03

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

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

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

Где я ошибаюсь?

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

Пт дек 23, 2022 18:48:15

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