Как подсчитать количество полупериодов ???
- Войдите на сайт для отправки комментариев
Делаю точечную сварку, и появилась идея отмерять длительность импульса не по времени, а по количеству полупериодов напряжения!
Трансформатор для питания ардуино будет обычный (не импульсный) поэтому я могу "снимать" напряжение прямо с его вторички через диоды и подавать на вход платы через обычный делитель!
За 1 секунду проходит 100 полупериодов, поэтому, если мне нужно включить устройство на 0,1 сек, нужно отсчитать десять полупериодов и выключить!
Для начала нужно объявить две переменные Current_Count=0; //текущее значение счетчика импульсов
и Set_Count=10;// устанавливаемое значение (сколько импульсов отсчитать до выключения)
дальше if Current_Count < Set_Count {устройство включено} else {выключено}
Мне напонятно только, как с помощью arduino подсчитать количество импульсов? Подскажите пожалуйста!
Делаю точечную сварку, и появилась идея отмерять длительность импульса не по времени, а по количеству полупериодов напряжения!
IMHO плохая идея:
- усложняет схему,
- усложняет скетч,
- снижает точность измерений.
Мне напонятно только, как с помощью arduino подсчитать количество импульсов? Подскажите пожалуйста!
Считать - просто. Вопрос - оно Вам надо?
Присоединяюсь к топикстартеру. Сегодня ожидаю прибытия (на предмет изучения) трансформаторной точечной сварки и тоже нужно будет дозировать время её включения. Ознакомтесь, там применяется ардуино https://www.youtube.com/watch?v=U0oUG5AJqM4
И ещё. Кто то может детально пояснить, как работает Zero Voltage Crossing в MOC3062.
Что такое MO32062? Почему гугль не дает ничего похожего на Zero Voltage Crossing?
За 1 секунду проходит 100 полупериодов
внезапно! 50Гц
мне нужно включить устройство на 0,1 сек, нужно отсчитать десять полупериодов и выключить!
отсчитай пять периодов
Я говорю именно про полупериоды, потому что:
ну, дык ++n
Наверно нужно ввести ещё одну переменную типа boolean для запоминания состояния? И назвать её например previous_state
Правильно, я рассуждаю? Если нет, подскажите как? Другого способа я не вижу!
Чем прохождение через ноль ловите?
https://www.circuitar.com/nanoshields/modules/zero-cross/
Этой штукой. Схема прилагается. Считать количество фронтов.
А если я буду включать/выключать симистор не через обычную оптопару, а оптопару с детектором нуля
нужно ли тогда "ловить" ноль?
Я думал ардуино и так сделает из пульсирующего напряжения прямоугольное - цифровые пины ведь реагируют на определенный уровень напряжения? Правильно?
Посмотрел код:
Там другим способом подсчет импульсов сделан! Функция void cross увеличивает счетчик в прерывании!
Только я не понял, зачем там указано #define SECONDS 2.0??? Почему 2.0, а не еденица?
Торопился утром, ошибся. Правильно MOC3062. Аппарат привезли, изучаю. Просмотрите материал по моей ссылке. Там очень не плохо. Работает с точностью до полупериода, без подсчёта импульсов.
Может быть потому что подсчёт ведётся 2 секунды?
Я делал на пик контроллере режим торможения двигателя, отлавливал одно прохождение через ноль, датчик нуля не я разрабатывал, схему не скажу, так что с точностью до одного периода можно )))
Ребята, зачем Вам нужно ловить прохождение через ноль? Ведь можно чуть иначе, и без этого детектора.
.
Написал предварительную версию скетча! Оцените пожалуйста!
Подскажите пожалуйста, можно ли как-то обойтись без noInterrupts(); и Interrupts(); для того, чтобы отсчет в прерывании ишёл только, когда нажата кнопка? Или это единственный способ?
GreenLight, так вы его опробывали, эту вашу предварительную версию? Не вижу причин что б она работала. Ошибка на ошибке сидит и ошибкой погоняет. Да и вообще тут прерывания не нужны.
Можно по просто и надёжно без прерываний:
И получаем на выходе вот такую прекрасную картинку:
GreenLight, так вы его опробывали, эту вашу предварительную версию? Не вижу причин что б она работала. Ошибка на ошибке сидит и ошибкой погоняет.
Странно, я думал все ошибки в коде исправил - компилятор не ругается!
Если Вам не сложно подскажите пожалуйста, в чем я ошибся? Я не прошу расписывать детально, но подскажите хотя бы по какому запросу погуглить, чтобы я эти ошибки нашел!
Заранее спасибо!
GreenLight, вы думаете, раз компилятор не ругается, стало быть и ошибок нет? Увы, он ругается когда уже полный ппц. Не понимаю,что вы хотите гуглить. Ошибки в 29, в 21, в 15 строке + одной строки в сетапе не хватает.
+ алгоритмический недостаток -вы включаете Output_Pin пин не в момент перехода ноля, а абы когда. Хотя ничто не мешает это сделать именно в момент перехода ноля.
GreenLight, буквально пару недель назад запустил аналогичное устройство, сваривает металл до 0.5мм. Агоритм сварки выбран такой ипульс-пауза-импульс (экспериментально получено оптимальное время для приварки контактов литий иона 15ms-20ms-30ms ), двойной импульс выбран после гугления теории точечной сварки. В качестве детектора нуля для привязки начала импульса использую внутренний компаратор АТМЕГИ, с внешним осточником ИОН (0.7в. - обычный диод), и включение трансформатора через симистор BTB16-600 (радиатор не нужен) через оптодинистор MOC3061 (со встроеной схемой привязки к нолю сети). Периоды не считаю, а просто использую delay нужной длительности - получается точно (проверял приборами). Установлен LSD 2Х16, кнопки управления, выбранные параметры сохраняются в EEPROM.
А какой у Вас трансформатор (мощность, напряжение х.х.)? Мне дали точечную сварку на предмет попытки приварки металла 0,6 мм к литий ионным аккумуляторам. Если не затруднит, дайте ссылку на описание режима "импульс - пауза - импульс".
контактов литий иона 15ms-20ms-30ms ), двойной импульс выбран после гугления теории точечной
Первый импульс у вас будет в любом случае 20мс, тк. симистор может закрыться только при проходе через ноль. А второй импульс придёться началом на полный размах фазы, открытие симистора придержит Moc3061, и откроет через четверть периода.Таким образом второй импульс будет занимать точно 2 периода., т.е фактический ваш тайминг будет 20-20-30
контактов литий иона 15ms-20ms-30ms ), двойной импульс выбран после гугления теории точечной
Первый импульс у вас будет в любом случае 20мс, тк. симистор может закрыться только при проходе через ноль. А второй импульс придёться началом на полный размах фазы, открытие симистора придержит Moc3061, и откроет через четверть периода.Таким образом второй импульс будет занимать 3 периода., т.е фактический тайминг будет 20-20-30
dimax ВЫ правы, тайминги у меня 10ms - это пол периода а симистор закрывается сам при переходе сети через "0", да не 15ms , а 10-20-30 описка, чтобы не было случайного захвата следующего полупериода импульс запуска делаю на 2ms короче. Код скинул , если получится скопировать схему (так как схемы рисую на листочке, так привык) скину схему и фото аппарата.
А какой у Вас трансформатор (мощность, напряжение х.х.)? Мне дали точечную сварку на предмет попытки приварки металла 0,6 мм к литий ионным аккумуляторам. Если не затруднит, дайте ссылку на описание режима "импульс - пауза - импульс".
Трансформатор советского производства П-образный было написано 380в. на 24в. , размер примерно 20см*15см*7см (примерно потому, что сейчас он находится в другом месте), смотал вторичную обмотку и часть первичной (до тех пор пока первичная обмотка не стала ощютимо гретья после нескольких минут работы). Наматал вторичную в 3 - провода (толщина провода примерно с мезинец) 3 витка, напряжение Х.Х. около 4 вольт.
Ссылки на режим импульс-пауза-импульс уменя нет, просто гугл на пол дня, там где-то есть даже форум по контактной сварке.
контактов литий иона 15ms-20ms-30ms ), двойной импульс выбран после гугления теории точечной
Первый импульс у вас будет в любом случае 20мс, тк. симистор может закрыться только при проходе через ноль. Таким образом второй импульс будет занимать точно 2 периода., т.е фактический ваш тайминг будет 20-20-30
Не понял в чем сложность получить 15мс в первом импульсе. Семистор открываем через 5мс после перехода через ноль, получаем четверть периода плюс еще полупериод и даст 15мс и семистор закроется.
Таким образом второй импульс будет занимать точно 2 периода., т.е фактический ваш тайминг будет 20-20-30
Два периода - это 40мс при 50Гц. Или я чего не понимаю?
Интересно былобы услышать о преимуществах двух импульсов над одним.
Logik, сложностей нет, но речь шла про оптосимистор c контролем пересечения ноля, который все операции делает в момент пересечения ноля, т.е. возможно получить лишь тайминги, кратные 10мс, т.е. полупериоду.
Не понял в чем сложность получить 15мс в первом импульсе. Семистор открываем через 5мс после перехода через ноль, получаем четверть периода плюс еще полупериод и даст 15мс и семистор закроется.
Cемистор открывается только в момент перехода сети через ноль для этого стоит оптодинистор MOC3061, в противном случае получаем мощный генератор помех и большую вероятность пробоя семистора.
Интересно былобы услышать о преимуществах двух импульсов над одним.
гугл в помощь.
[/quote]
Logik, сложностей нет, но речь шла про оптосимистор c контролем пересечения ноля, который все операции делает в момент пересечения ноля, т.е. возможно получить лишь тайминги, кратные 10мс, т.е. полупериоду.
Понятно. Симистор слишком умный, зараза. Отличный пример того, что логика девайса должна быть в софте а не схемотехнике. Но думаю, что 10, что 15 не критично будет.
oleg_kazakof нафига в гугл посылать, если " просто гугл на пол дня,".Вы кратко своими словами намекните чем лучше, и подтверждает ли ваш личный опыт это.
oleg_kazakof нафига в гугл посылать, если " просто гугл на пол дня,".Вы кратко своими словами намекните чем лучше, и подтверждает ли ваш личный опыт это.
Насколько я понял из гугления : первый импульс -разогревает металл, выжигает грязь, а горячий металл естественно электроды сильнее сжимают с друг с другом - второй импульс собственно и сваривает металл. Одним импульсом варить не пробовал поэтому что лучше сказать не могу.
Всё отлично, только совсем не понимаю зачем синхронизовать с сетью? МОС сам засинхронизирует с нулём. Подать в любой момент сигнал на открывание подождать любое время, больше 10 милисекунд отключить зажигание. МОС сам отсчитает время точно кратное 10 мс и отключится. Другого просто быть не может. Проверьте сами. На какую бы фазу напряжения не пришёлся импульс включения, тирристор включится в начале следующего полупериода и выключится в конце того, где отключилось зажигание. Если например подать импульс 30 мс то тирристор будет открыт только 3 полупериода. Т.е. delay(30); без синхронизации вполне выполнит поставленную задачу.
Вот и я на это делаю ставку, но практически ещё не проверял как работает MOC3062.
Подскажите пожалуйста насчет кода
Я так и не понял, почему в строке 7 два раза повторяется digitalRead(A0)==LOW ? Объясните пожалуйста "чайнику"! Заранее спасибо!
GreenLight, они разные (1) -если пин 1 == low, то... ( 2) крутим цикл пока пока пин1 ==low Попросту говоря программа стопорится и продолжит свой ход лишь когда кнопку отпустят.
Всё отлично, только совсем не понимаю зачем синхронизовать с сетью? МОС сам засинхронизирует с нулём. Подать в любой момент сигнал на открывание подождать любое время, больше 10 милисекунд отключить зажигание. МОС сам отсчитает время точно кратное 10 мс и отключится. Другого просто быть не может. Проверьте сами.
Давайте рассмотрим такой вариант: допустим необходимо получить импульс сварки 10ms - соответственно логично сделать импульс управления также 10ms (и допустим что момент нажатия кнопки попал на "0" сети) - в итоге можем получить импульс сварки 10ms , а можем и 20ms так нужно добавить время на выполнения каманд переключения пина, но тогда Вы скажете сделаем импульс управления не 10 ms , 8ms - вэтом случае мы можем получить импульс сварки 10ms, а может вообще не быть сварочного импульса. Это при сварке одиночным импульсом, у меня сварка имеет три временных интервала работы - импульс - пауза - импульс, вот теперь сами пасчитайте наложение временных интервалов. Както так.
rs. симистор открывается при каком-то начальном напряжении, при "0" вообще ничего открыться не может, тоесть и это время нужно учитывать. А если мне допустим нужен тайминг 20-10-30ms ???. вот по этой причине сделал двойную привязку к "0" сети. Конечно это не самолёт но всё-же я посчитал , что лишним это не будет.
Переписал код, чтобы количество импульсов можно было изменять кнопками! Добавил индикацию всего на одном светодиоде!
Прокомментирована каждая срочка! Оцените пожалуйста!
Переписал код, чтобы количество импульсов можно было изменять кнопками! Добавил индикацию всего на одном светодио
Прокомментирована каждая срочка! Оцените пожалуйста!
А, принципиальную схему Вашего устройства можно, или это курсовая или диплом.
Время переключения пина меньше микросекунды. На фоне 10 милисекунд величина бесконечно малая, не влияющая на результат.
А вообще практика критерий истины. В даташите нет параметра, как длительность задержки импульса относительно нуля напряжения влияет на запуск тиристора. Нужно провести опыты, что бы что то утверждать. Как мне кажется, любой импульс, длительностью меньше 10 мс должен давать один полупериод, меньше 20 мс - 2 полупериода и.т.д. На это немекает фигура 3 даташита, где черным по белому написано, что 100микросекундный импульс номинального управляющего тока вызывает срабатывание тригера запуска. По логике zero-crossing после срабатывания тригера будет выдан следующий полупериод.
Время переключения пина меньше микросекунды. На фоне 10 милисекунд величина бесконечно малая, не влияющая на результат.
А вообще практика критерий истины. В даташите нет параметра, как длительность задержки импульса относительно нуля напряжения влияет на запуск тиристора. Нужно провести опыты, что бы что то утверждать. Как мне кажется, любой импульс, длительностью меньше 10 мс должен давать один полупериод, меньше 20 мс - 2 полупериода и.т.д. На это немекает фигура 3 даташита, где черным по белому написано, что 100микросекундный импульс номинального управляющего тока вызывает срабатывание тригера запуска. По логике zero-crossing после срабатывания тригера будет выдан следующий полупериод.
Почитайте ещё раз внимательно, что я написал выше, сделайте устройство, приведите осциллограммы, а потом будем диспутировать. (или у Вас нет осцилографа ???).
У меня нет MOC. У меня есть даташит с граффиками. Всё что я написал подтверждается даташитом. Я вам предлагаю проверить. MOC у вас. Проверьте и подтвердите, что я не прав.
Я утверждаю, что любой импульс 100 микросекунд приведет к выдаче одного полуперода.
А кто как представляет себе работу схемы детектра нуля в фотосимисторе MOC? Я вот вижу, пока, такие варианты:
1. Если напряжение на фотосимисторе менее Zero Voltage Crossing, то свет от светодиода доходит до фотосимистора и пытается его открыть (освещая). Когда напряжение превышает величину Zero Voltage Crossing, нечто блокирует возможность открыть фотосимистор (примитивно говоря - закрывается фотошторка).
2. В момент достижения напряжения на выводах фотосимистора величины Zero Voltage Crossing, происходит стробирование (как в D- триггере) фотосимистора, и если светодиод в этот момент светил, то фотосимистор откроется.
Казалось бы результат будет один и тот же, но, момент, когда фотосимистор откроется, будет немного разным. В варианте 1 - возможно отрытие фотосимистора практически сразу после нуля напряжения, а в варианте 2 - только в момент входного напряжения равного Zero Voltage Crossing.
И ещё вопрос. А одинаково ли происходит срабатывание фотосимистора на разных полуволнах сетевого напряжения (положительном, отрицательном)?
В даташите устройство называется тригер. Импульс взводит тригер и при прересечении нуля он срабатывает и сбрасывается. Тиристор открыт, пока ток через него не упадет до нуля. Если в это время придёт еще импульс или предыдущий не прекратится, тригер будет взвед вновь и будет ждать следующего пересечения нуля. От длительности запускающего импульса зависит только сработал тригер или нет. Если его длительность меньше 100микросекунд, нужно увеличивать ток, согласна фиг.3 даташита.
Я не понял смысла предложения " Импульс взводит тригер и при прересечении нуля он срабатывает и сбрасывается." Импульс - это свет от светодиода? Что значит "он срабатывает и сбрасывается."?