Диммер переменного тока на MOC3042 или аналог (цель - убрать период)
- Войдите на сайт для отправки комментариев
Пт, 30/10/2020 - 13:32
Здравствуйте. Стоит задача снизить количество тактов помпы Ulka EX5 на 50% (помпа - обычный электромагнит, дёргающий поршень 25 раз в секунду), для этого мне нужно пропускать каждый второй период синусоиды.
К сожалению, готовые диммирующие устройства для Arduino, что мне удалось найти, обрезают часть синусоиды, а не пропускают целый период.
Свм паять и травить платы не умею. Может, есть что-то готовое в продаже с детектором нуля, способное делать пропуск периода?
готовые диммирующие устройства для Arduino
Ничего сами не обрезают. Это твоя работа — сделать то, что тебе нужно. Если захочешь сделать пропуск - будет пропуск.
снизить количество тактов помпы Ulka EX5 на 50%
Если только 50%, то подключить через диод. И никакая ардуина не нужна.
снизить количество тактов помпы Ulka EX5 на 50%
Если только 50%, то подключить через диод. И никакая ардуина не нужна.
Нет. Так ты сократишь пополам амплитуду движения поршня, и качать не будет. Если не сгорит от насыщения сердечника соленоида
Нет. Так ты сократишь пополам амплитуду движения поршня, и качать не будет. Если не сгорит от насыщения сердечника соленоида
Не важно период убирать или половину. Для подобной механики разницы никакой. Важнее то, что диод в помпе уже стоит, поэтому вариант с диодом подойдёт только для помп свыше 24 вольт, где его нет.
Не важно период убирать или половину. Для подобной механики разницы никакой. Важнее то, что диод в помпе уже стоит, поэтому вариант с диодом подойдёт только для помп свыше 24 вольт, где его нет.
Понятия не имеешь, о чем идет речь.
Не важно период убирать или половину.
Хотя бы потому, 50 или 25 Гц.
Не важно период убирать или половину.
Хотя бы потому, 50 или 25 Гц.
Если убрать одну волну, то новый период будет 12.5 Гц, если полуволну — период останется 25. 50 Гц не будет.
Что касается диода, то он уже стоит в помпах Ulka EX5 с напряжением питания ниже 24 вольт, они уже работают на полупериоде.
В принципе убрать волну не сложно, просто выпрямить питающее напряжение, резистор со стабилитроном на 3.6-4.7 вольта для ограничения и этот сигнал подать на вход прерывания. Каждые два вызова менять состояние ключа. Или просто подать эти импульсы на пару T-триггеров и второй будет управлять тем же ключом.
Можно самому сделать.
И схему нарисуют и код напишут, если обратиться в тему "Ищу исполнителя"
Если убрать одну волну, то новый период будет 12.5 Гц, если полуволну — период останется 25. 50 Гц не будет.
К сожалению, готовые диммирующие устройства для Arduino, что мне удалось найти, обрезают часть синусоиды, а не пропускают целый период.
покупай готовый, меняй МОС на тот, что с zero cross - патамштэ так проще. Под такую плату проще код написать, обычные digitalRead и digitalWrite и пара флагов, ну и мозг конечно.
как выше сам и написал, тебе не нужен ФИМ, а синхронизироваться на полуволне не сложно. Ну или на D триггере собери - и ардуино не нужно.
покупай готовый, меняй МОС на тот, что с zero cross - патамштэ так проще.
Да. Съездить за оптопарой, выпаять старую, впаять новую. Гораздо проще, чем написать две строчки кода.
Если убрать одну волну, то новый период будет 12.5 Гц, если полуволну — период останется 25. 50 Гц не будет.
Ну подсчитал от 25 Гц вместо 50, так что сразу аттестат? :) Уже давно не опасаюсь.
Это не принципиально, а утверждать что если срезать половину периода, то мощность упадёт, а если срезать период из двух то нет — точно не так.
Но для решения исходной задачи ардуинка в принципе лишняя.
Ох и понаписали же тут! В насосе уже стоит диод, установка ещё одного или не решит задачу, или снизит мощность до нуля.
Повторюсь: мне нужно пропускать целый период. Для того, чтобы больше не делили и не писали про полупериоды, давайте задача будет такой: пропустить два периода.
К сожалению, готовые диммирующие устройства для Arduino, что мне удалось найти, обрезают часть синусоиды, а не пропускают целый период.
покупай готовый, меняй МОС на тот, что с zero cross - патамштэ так проще. Под такую плату проще код написать, обычные digitalRead и digitalWrite и пара флагов, ну и мозг конечно.
как выше сам и написал, тебе не нужен ФИМ, а синхронизироваться на полуволне не сложно. Ну или на D триггере собери - и ардуино не нужно.
Я купил готовый диммер от RobotDyn http://out.arduino.ru/?redirect=https%3A%2F%2Faliexpress.ru%2Fitem%2F328... . На нём MOC3021, что для моей задачи, как я понимаю, не подходит: он диммирует только лампу, срезая от каждого периода по 1...100% (я так понимаю, в произвольном месте).
Можно пошагово - выпаиваю MOC3021 (хоть руки не из того места, но эта задача мне по силам), какой впаивать на его место и как действовать дальше?
он диммирует только лампу, срезая от каждого периода по 1...100%
Ничего он НЕ ДИММИРУЕТ.
Диммирует ТВОЯ ПРОГРАММА.
НАПИШИ ДРУГУЮ ПРОГРАММУ, которая пропускает периоды, и он будет пропускать периоды.
В насосе уже стоит диод,
Фотку насоса с диодом выложи.
Возможно можно обойтись включением насоса на 1-ну секунду и выключением на н-секунд ,к примеру, регулируя таким образом производительность насоса.
Много лет назад это называлось "бегущий огонь"
И даже счётчик был подходящий - декадный ИЕ8.
http://www.joyta.ru/7402-mikrosxema-k561ie8-opisanie-i-sxema-vklyucheniya/
Установкой диодов на его выходах
устраиваем любую последовательность включения чего угодно
в пределах десяти тактов.
он диммирует только лампу, срезая от каждого периода по 1...100%
Ничего он НЕ ДИММИРУЕТ.
Диммирует ТВОЯ ПРОГРАММА.
НАПИШИ ДРУГУЮ ПРОГРАММУ, которая пропускает периоды, и он будет пропускать периоды.
Вы сильно ошибаетесь, возможности железа накладывают свои ограничения.
Попробуйте сами написать программу определения момента пересечения нуля без детектора нуля.
Попробуйте сами написать программу определения момента пересечения нуля без детектора нуля.
Да нет ничего сложного, написать грубый детектор ноля...
Но смешно другое, на этом модуле детектор есть
Покупая модуль, я думал так же. Но когда я его стал тестировать, оказалось, что детектор нуля не работает. Вопросы на форуме привели к тому, что припаянная на него оптопара (MOC3021) без детектора нуля.
То есть, перепаяв 6 контактов, я смогу получить то же самое устройство, но с детекцией нуля.
Но когда я его стал тестировать, оказалось, что детектор нуля не работает. Вопросы на форуме привели к тому, что припаянная на него оптопара (MOC3021) без детектора нуля.
Нет, идиот. У тебя просто дефектный модуль. Если бы ты сразу это написал, вместо того чтобы додумывать чушь про вещи, которых не понимаешь, тебе бы сразу ответили.
Но когда я его стал тестировать, оказалось, что детектор нуля не работает. Вопросы на форуме привели к тому, что припаянная на него оптопара (MOC3021) без детектора нуля.
Нет, идиот. У тебя просто дефектный модуль. Если бы ты сразу это написал, вместо того чтобы додумывать чушь про вещи, которых не понимаешь, тебе бы сразу ответили.
Ркит! Ты перечитай, что ТС написал! ;)))) У него моська на модуле без детектора перехода через ноль, а с модулем - все нормально.
Я же эти темы, как "анекдот.ру" читаю... ;))
припаянная на него оптопара (MOC3021) без детектора нуля.
При чем здесь MOC3021? Вот детектор: (белая микросхема 4N25)
припаянная на него оптопара (MOC3021) без детектора нуля.
При чем здесь MOC3021? Вот детектор: (белая микросхема 4N25)
Спасибо вам. В этой теме запутали меня с детектором и "выпаять старый, впаять другой, тот, что с детекцией нуля", а я, не проверяя, поверил.
Погуглил теперь про эту микросхему - действительно, есть детектор.
Теперь вопрос, почему плата работает с родным RBDDIMMER.H, а код ниже (в частности, получение сигнала о пересечении нуля в прерывании - строка 39 и далее) не работает
//Zerro crossing подключен к D2 #define TRIAC_PIN 5 // Dimmer #define AC_DELAY 13 #define REG_MAX (100) //количество уровней регулировки (2-127) volatile uint8_t gACdelay_cnt; volatile signed short gRegError = REG_MAX / 2; volatile unsigned short gPowerPercent=0; //текущий уровень мощности 0- REG_MAX /* Установка уровня мощности Level - 0- REG_MAX */ void SetNewPLevel(uint8_t Level) { if (Level>REG_MAX) Level = REG_MAX; cli(); gRegError = REG_MAX / 2; gPowerPercent = Level; sei(); } void do_bresenham() { gRegError = gRegError - gPowerPercent; if (gRegError <= 0) { gRegError = gRegError + REG_MAX; digitalWrite(TRIAC_PIN, HIGH); //SwitchOn(); } else { digitalWrite(TRIAC_PIN, LOW); //SwitchOff(); } } uint8_t inline readACpin() { return PIND & _BV(PD2); } ISR(INT0_vect) { for (uint8_t cnt = 0; cnt < 5; ++cnt) { if (readACpin()) return; //не реагируем на помехи } gACdelay_cnt = 0; //disable AC interrupts for AC_DELAY ms EIMSK &= ~_BV(INT0);//DisableAC_Int(); do_bresenham(); } // 1 mSec interrupts ISR(TIMER0_COMPA_vect) { gACdelay_cnt++; if (gACdelay_cnt >= AC_DELAY) { EIMSK |= _BV(INT0);//EnableAC_Int(); } // do_encoder(); // if (gStartKeyScan) do_button(); //check and de-bounce button } void setup() { pinMode(TRIAC_PIN, OUTPUT); pinMode(2, INPUT); EICRA = 2; //Falling endge interrupt EIMSK |= _BV(INT0);//EnableAC_Int(); OCR0A = 0xAF; //1ms прерыания TIMSK0 |= _BV(OCIE0A); } uint8_t i; void loop() { i++; if(i>REG_MAX) i=0; SetNewPLevel(i); delay(3000); }А куда у вас пин диммера ZC подключен?
А куда у вас пин диммера ZC подключен?
У меня arduino nano v3, аппаратное прерывание на 2 пине.
А куда у вас пин диммера ZC подключен?
У меня arduino nano v3, аппаратное прерывание на 2 пине.
Ну, у arduino nano v3 аппаратное прерывание может быть почти на всех пинах.
Так все же. Куда подключен пин диммера ZC? Ко 2му пину? Если да вы пробовали просто подключить туда кнопку и проверить срабатывают ли прерывания?
to andreykrasnodar. Извините за глупый вопрос, а почему Вам не выпрямить эти 24 вольта и не сделать простой генератор с регулируемой частотой на выходе. Тогда Вы сможете выставить нужную частоту без всяких танцев с бубном?
imp, Вы думаете силовой выпрямитель и мощный генератор - будет проще?
Смотря что понимать под понятием проще. Схемотехнически скорее всего нет, а вот время и общая стоимость разработки может быть ниже. Да, еще и точность регулировки производительности насоса будет не сравнимо выше. Вопрос, рассматривалась ли такая возможность и если да, то почему от нее отказались?
to andreykrasnodar. Извините за глупый вопрос, а почему Вам не выпрямить эти 24 вольта и не сделать простой генератор с регулируемой частотой на выходе. Тогда Вы сможете выставить нужную частоту без всяких танцев с бубном?
220 вольт. Я и не подумал, что можно было поставить обычный диодный мост, а дальше сделать абсолютно любую частоту... но, разве это не костыль, так вообще делают?
Вообще я вопрос решил, подойдя совершенно другой (неожиданной) стороны. Но желание разобраться в вопросе с пропуском периодов не отпускает (в будущем эти знания пригодятся и неизвестно, какой метод в итоге окажется лучше).
И да, мне мешает неопытность в вопросах, связанных с электричеством.
Так все же. Куда подключен пин диммера ZC? Ко 2му пину?
Да.
void setup() {
...
pinMode(2, INPUT);
Если да вы пробовали просто подключить туда кнопку и проверить срабатывают ли прерывания?
Пробовал, но схему разобрал, уже забыл, какая реакция была на кнопку. Надо будет ещё раз разобрать и посмотреть, что там было не так.
220 вольт. Я и не подумал, что можно было поставить обычный диодный мост, а дальше сделать абсолютно любую частоту... но, разве это не костыль, так вообще делают?
покупай готовый, меняй МОС на тот, что с zero cross - патамштэ так проще.
Да. Съездить за оптопарой, выпаять старую, впаять новую. Гораздо проще, чем написать две строчки кода.
Спасибо вам. В этой теме запутали меня с детектором и "выпаять старый, впаять другой, тот, что с детекцией нуля", а я, не проверяя, поверил.
я имел ввиду, если в модуле (микросхеме МОС) есть детектор нуля - вся схема превращается в мигание светодиодом. МОС будет запускаться только в начале полуволны (сама).
схема пост 23 (переделка под задачу) меняем диодный мост на 1 диод, получаем меандр. Имея меандр и оптопару, которая сама видит пересечение - задача становится чрезвычайно простой даже для новичка, все сводится к зажиганию светодиодика по нажатию кнопки.
в приведенной схеме (диммира) необходимо подбирать константу задержки открытия. В переделанной, этого не требуется, но и управление станет строго под задачу.
нужно пропускать каждый второй период синусоиды
#define PWM 3 #define ZC 2 #define PAUSE 19 void setup() { pinMode(PWM , OUTPUT ); pinMode(ZC, INPUT ); } void loop() { if (digitalRead(ZC)) { digitalWrite(PWM, !digitalRead(PWM)); delay(PAUSE); } }Это плохой вариант, но с этого можно было бы начинать... и это работает ...