Pull to refresh

Comments 64

Вы забыли довольно толстый пласт с линеаризацией подаваемой мощности. То есть если просто время открытия менять линейно, яркость при этом меняться будет нелинейно. Я немного сумбурно описывал этот момент в статье про реализацию ПИД регулятора в разделе «VI. Управление мощностью».
Не забыл, просто не стал писать про особенности программной реализации. Это отдельная тема.
В прошивке, которая у меня дома управляет светом, это реализовано.
всегда дико удивляла ненависть сообщества easyelectronics к сообществу arduino…
Какая ненависть? Просто я потратил довольно много времени, прежде чем девушка перестала жаловаться на мигание ламп освещения. Вот я и поделился своим рецептом.
Девушка как двигатель прогресса?
UFO just landed and posted this here
Ну тогда вот текущая версия силовой платы:
image
Пять каналов и детектор перехода через ноль. Сопротивления расположены с обратной стороны.
В следующей версии буду пытаться добавить защиту от перегрузки и располагать контроллер прямо на плате.

Но пониманию статьи ни эта ни ваша картинка не помогут. Полезные картинки в AN-3008.
Хороший контроллер для диммера:

Features:
2 — 14 Bit, 65 MHz A/D Channels
2 — 14 Bit, 65 MHz D/A Channels
On Boards TCXO (5ppm)
1 or 2 Million Gate FPGA for user code

Applications:
Digital Radio
Electronic Warfare
Vector Signal Generator
Signal Identification

Но я предпочитаю более дешевые варианты.
Подскажите, пожалуйста, в качестве детектора перехода через ноль что нужно использовать?
Это сильно зависит от требований. Если гальванической развязки микроконтроллера нет, то можно прямо на ногу заводить через делитель напряжения. Но отсутствие гальванической развязки автоматом означает, что никаких проводных интерфейсов не делаем.
Если развязку делать, то можно использовать оптрон pc814. Он будет срабатывать на каждые пол-периода.

А дальше вопрос в том, хотите ли вы добавить больше электроники и получать четкие пики в момент перехода через 0 или же усложнить прошивку, но использовать минимум деталей. В первом случае надо будет усиливать сигнал от оптрона. А во втором можно подключить его прямо к ногам микроконтроллера, использовав внутренний pullup резистор.
+ посмотреть точный момент перехода сигнала в 0 — это слегка заранее, чем полуволна, и учитывать в расчетах
Что за макетка? И где силовые ключи?
UFO just landed and posted this here
> Freeduino

Опять всякая гадость!
UFO just landed and posted this here
Но, если вы хотите управлять яркостью лампы освещения, необходимо использовать драйвер без детектора нуля (MOC305X) и самостоятельно открывать его в нужные моменты.

А как вы определяете нужный момент фазы, если у вас контроллер гальванически развязан с сетью?
Это делается очень просто, на мк сами ловим переход через ноль, и все. а дальше просто открываем через N время которое рассчитывается программно.

p.s. если требуется развязка МК то просто через оптопару ищем момент перехода через ноль.
Детектор нуля тоже можно сделать с гальванической развязкой. Вот так:
digihouse.xsgroup.ru/wiki/2/Датчик_перехода_фазы_через_ноль_(для_диммирования)
На картинке выше это маленькая черная 4х выводная микросхема и синий конденсатор в левой части платы.
Спасибо. Как раз скоро понадобится делать управление канальной вентиляцией — нагревателем и двигателем.
Давайте посмотрим на описанный по ссылке диммер. Никакого описания, почему схема должна быть такой, какая она есть. Почемы выбраны те или иные компоненты.

Детектор нуля использует одно сопротивление. Можно было снизить нагрев использовав конденсатор.

На схеме указано, что сопротивление 0.5W, однако на нем будет выделяться 0.59. Может и сгореть.

MOC подключен через сопротивление в 510 Ом, arduino использует питание 5В, падение на диоде 1.2В, ток будет 74мА. Внимательно смотрим в datashit и видим, что максимально допустимый ток для оптрона 50 мА. Также превышен максимально допустимый ток для вывода arduino.

Симистор ничем не защищен и не обосновано, почему его можно не защищать.

Код ужасен. В прерываниях нельзя сидеть долго, из них нужно выходить сразу, как только это возможно. А там задержки проставлены. Это же одна ардуина сможет управлять только одной лампочкой, причем не сможет в это время делать что-либо еще, влючая коммуникацию с компьютером или опрос кнопок. Т.е. лампочкой управлять будет невозможно.

Для сравнения, у меня arduino mega управляет 12 лампами, слушает 10 выключателей и у нее остается куча свободного времени.
Виноват, мощность, выделяющуюся на сопротивлении посчитал неправильно. Там диод и ток идет только половину времени.
«Детектор нуля использует одно сопротивление. Можно было снизить нагрев использовав конденсатор.
На схеме указано, что сопротивление 0.5W, однако на нем будет выделяться 0.59. Может и сгореть.»

Похоже Вы не учили закон Ома.

«MOC подключен через сопротивление в 510 Ом, arduino использует питание 5В, падение на диоде 1.2В, ток будет 74мА. Внимательно смотрим в datashit и видим, что максимально допустимый ток для оптрона 50 мА. Также превышен максимально допустимый ток для вывода arduino.»
Интересно на Вашу формулу расчета посмотреть, но все же лучше будет если Вы в расчетах будете использовать закон Ома.

«Симистор ничем не защищен и не обосновано, почему его можно не защищать»
Защищать от чего?

«В прерываниях нельзя сидеть долго, из них нужно выходить сразу, как только это возможно.»
Сами придумали или есть ссылка на первоисточник? Хотелось бы на Ваш код взглянуть, в статье его к сожалению не увидел.
Похоже Вы не учили закон Ома

Не закон ома, а формулу электрической мощности
p = u^2 / r = 220^2 / 82k = 0.59
Чуть позже я поправился, что так как там диод, то ток течет только половину времени и теповыделение будет в два раза меньше.
Интересно на Вашу формулу расчета посмотреть, но все же лучше будет если Вы в расчетах будете использовать закон Ома.

I = U / R = (5В — 1.2В) / 510 Ом = 0.0074 = 7.45 мА.
Ошибся на порядок, пока ехал в электричке. Впрочем, этого тока может быть недостаточно, чтобы открыть указанные в схеме MOC'и
Защищать от чего?

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

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

Сворй код я сейчас выкладывать не хочу.
Не закон ома, а формулу электрической мощности
p = u^2 / r = 220^2 / 82k = 0.59

То есть по Вашему эта формула ни какого отношения к закону Ома не имеет?
И еще, при расчете Вы забыли учесть коэффициент «Эффективного напряжения»

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

Ошибся на порядок, пока ехал в электричке.
Учим поговорку.

Впрочем, этого тока может быть недостаточно, чтобы открыть указанные в схеме MOC'и
Опять Вы гадаете на кофейной гуще? Откройте DS на MOC

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

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

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

А пока потрудитесь объяснить, как в вашем коде можно организовать управление лампой, например как не пропустить нажатие на клавишу, во время ожидания в прерывании.
По моему это Вы статью написали, я Вам ее дописывать не собираюсь.
У меня статья про Dimmer лежит в черновиках, как допишу так сразу выложу

Свой код я сейчас выкладывать не хочу.
Судя по всему у Вас его просто нет.

То есть по Вашему эта формула ни какого отношения к закону Ома не имеет?

Кажется, буковки одинаковые. Не надо троллить.
И еще, при расчете Вы забыли учесть коэффициент «Эффективного напряжения»

Простите? 220 — это и есть эффективное напряжение. Не говорите о том, чего не понимаете.
Опять Вы гадаете на кофейной гуще? Откройте DS на MOC

Input trigger current. Смотрим на графу максимального значения. Только у 3023 оно менее 7.5 мА. Все остальные могут не открыться.
Для спонтанного включения лампы придется открыть симистор, а он как мы знаем гальванически развязан от контроллера, а питание контроллера стабилизировано и отфильтрует любую помеху. Наверно помехе как то придется зажечь светодиод оптрона, для открытия симистора?
Может объясните как?

Прочтите статью, которую пытаетесь комментировать. Зажигать светодиод оптрона не надо. Поищите на этой странице символы «dV/dt».
Я то и читать почти не умею.

Чукча не читатель — чукча писатель. ОК.
По моему это Вы статью написали, я Вам ее дописывать не собираюсь.
У меня статья про Dimmer лежит в черновиках, как допишу так сразу выложу

Простите, что «угнал» тему. Только сначала добейтесь стабильной работы своей системы.
Судя по всему у Вас его просто нет.

А вы, батенька, тролль. Давайте я вас подразню?
Вот обработчик прерывания таймера:
// Event queue interrupt
void processQueue() {
    static const uint16_t GAP = 20;
    uint16_t zeroTime = timer::elapsedSinceZero();
    uint16_t next;

    if (prevZeroTime > zeroTime) {
        guard = false;
    }
    prevZeroTime = zeroTime;
    if (guard) {
        OCR5A = max_time(timer::zeroCross() + timer::sinePeriod(), TCNT5 + 5);
        return;
    }

    do {
        next = bulbQueue.execute(zeroTime);
        zeroTime = timer::elapsedSinceZero();
    } while(next < zeroTime + GAP && next >= zeroTime);
    if (next == uint16_t(~0)) {
        guard = true;
        bulbQueue.resetIterator();
        OCR5A = max_time(timer::zeroCross() + timer::sinePeriod(), TCNT5 + 5);
        if (bulbQueue.swapScheduled()) {
            bulbQueue.swap();
            interrupts();
            bulbQueue.populateMutable();
        }
    } else {
        OCR5A = max_time(timer::zeroCross() + (uint16_t)next, TCNT5 + 5);
    }
}

ISR(TIMER5_COMPA_vect) {
    processQueue();
}

Тут обрабатывается немало краевых ситуаций:
изменяющийся период тока
резкие изменения фазы (например при переключении на другую фазу)
обратный ход времени (когда переход через 0 происходит позже предполагаемого срока и elapsedSinceZero уменьшается)
переполнение таймера
позднее исполнение прерывания из-за блокировки прерываний

И эта реализация потокобезопасна.

Приведенный выше код распространяется под GPL3. Впрочем, воспользоваться вы им не сможете, так как для этого надо написать остальные 4000 строк прошивки.
Чукча не читатель — чукча писатель. ОК.
А вы, батенька, тролль.
Собственно ничего умней я от Вас и не ожидал.
Я не вижу смысла продолжать общение с недалеким человеком.
Я рад, что вы умеете выбирать наиболее конструктивные части из ответов и отвечать только на них.
Только, пожалуйста, не учите людей писать плохой код. Стремитесь к хорошему.
Непонятно, зачем городить на дискретных симисторах и оптронах, когда кругом навалом SSR модулей с опторазвязкой и встроенной схемой коммутации при переходе через «0» для минимизации помех?
Я хочу управлять яркостью лампы накаливания, поэтому открывать симистор нужно не в момент перехода через ноль. Поэтому мне не подходит схема со «встроенной схемой коммутации при переходе через «0» для минимизации помех».

А еще так дешевле.
Есть модификации и с фазовым управлением, но они подороже.
Управляемые напряжением на ебее от $4 с доставкой.
Спасибо, буду знать. Все зависит от задачи. Например сейчас у меня один контроллер управляет 12 лампами. У него нет столько аналоговых выходов. Кроме того, у него аналоговые выходы от 0 до 5 вольт, пришлось бы ставить транзисторы, чтобы поднять его до 0-10 вольт. Корпусов получилось бы столько же.
Плавную регулировку мощности двигателя вентилятора на них можно сделать?
А зачем регулировать мощность электродвигателя? Для плавного пуска?
Плавный пуск- раз. И скорость вращения — два.
Для переменного тока регулировать скорость напряжением — моветон.
А как правильно? Частотный преобразователь?
В идеале да. Мы же про обычный асинхронный двигатель говорим? Полистайте для понимания теории: model.exponenta.ru/electro/0080.htm очень хорошо расписаны принципы. В частности, взгляните на раздел «Искуственные механические характеристики»: при изменении напряжения имеем падение момента двигателя (а благодаря этому можно уменьшить пусковой ток, между прочим, но для малых мощностей пусковой ток — это не тот параметр, на который нужно обращать внимание), а скорость практически не меняется. А про скорость есть раздел «Регулирование частоты вращения асинхронных двигателе», для стандартного двигателя годится только изменение частоты.
Спасибо за ссылку. Там всё расписано про трёхфазный двигатель. Я так понимаю, что если делают двигатель с однофазным питанием, то две остальные фазы формируют искусственно на конденсаторах и индуктивностях?
И про скорость. Если момент упадёт, то при достаточном механическом сопротивлении упадут и обороты. Так ведь? Это, по идее, то, что и нужно — вентилятор будет меньше шуметь и меньше воздуха нагнетать. Я так понимаю, что при регулировке напряжением КПД будет невысоким, и это единственная проблема. Делают ведь регуляторы скорости на симисторном ключе, и ничего. Вот пример: www.electrotest.ru/file/sb002-instruction.pdf
Да, бытовые моломощные это по сути SSR с фазовым управлением. По вашей ссылке как раз такой + ограничители мин/макс мощности, что при управлении от МК лишнее.
Однофазный двигатель, это, грубо, двигатель с одной парой полюсов + некоторые особенности. Конденсатор + пусковая обмотка используются для запуска двигателя как раз из-за этих особенностей. Если очень вдаваться в теорию, то вот, например: www.induction.ru/library/book_001/glava4/4-17.html
Теперь про регулирование скорости напряжением.
image
Красные — это механические характеристики двигателя при изменении напряжения,
темная прямая — механическая характеристика вентилятора.
Точки пересечения характеристик — так называемые рабочие точки системы
dn — это изменение скорости при заданном изменении напряжения. Если напряжение будет еще меньше, характеристика двигателя уйдет еще левее, пересечение может оказаться ниже nкр (критической скорости) и двигатель остановится. При малом моменте нагрузки наклон механической характеристики будет меньше (будет ближе к оси ординат), напряжение можно будет менять в больших пределах, но отклик по скорости опять же уменьшится, т.к. характеристики двигателя выходят из одной точки.
Пробовал управлять однофазником через ЛАТР — сущая мука.
В принципе, для вентиляторной нагрузки фокус с изменением напряжения удастся, но большого диапазона изменения скорости не будет. При значительном уменьшении напряжения режим работы станет неустойчивым и двигатель остановится.
Там может быть и коллекторный двигатель, хоть это и редкость.
Насчет плавности не скажу, но включать/выключать можно, только они не любят индуктивную нагрузку, номинальный ток надо выбирать раз в 8-10 больше чем ток двигателя.
Очень полезная статья. Не знал, чтослишком мощный симистор не сможет включать маломощную лампочку так как будет выключаться, из-за этого несколько недель рабочего времени убито в свое время :(
А вот картинок маловато.
Картинку в inkscape ручками рисовали?
Нет. Графики рисовал в gnuplot, вывел в SVG, затем в inkscape собрал из них картинку.
А можете поделиться идеологией и способами коммутации систем умного дома?
У меня получилось так, что я купил компоненты, с которыми уже можно начать что-то делать, и теперь не понимаю, с чего начать.
Вопрос очень общий. Начать надо с понимания того, что такое «Умный дом» конкретно для вас. Что он должен делать, а что не должен:
Управлять светом
Управлять климатом (теплые полы/кондиционирование/вентиляция)
Управлять музыкой/видео (мультирум)
Перенаправлять телефонные звонки в комнату, в которой находится владелец
Охранная сигнализация
Пожарная сигнализация
Энергоэффективность (следить за потреблением энергии и распределять нагрузку по времени)
Готовить кофе/еду

Исходя из этого брать оборудование, которое покрывает ваши нужды и работает по одному и тому же протоколу. Также можно посмотреть на limux mce, как на систему, способную объединить переферию, работающую по разным протоколам.
Да, с готовыми компонентами и готовыми контроллерами с типичными программами все более-менее понятно.
Хочется же сколхозить на ардуино, чтобы дополнять и настраивать можно было до бесконечности (а потом, когда-нибудь, в новый дом просто купить готовую систему, потому что все уже придумали, ага).
Оказалось, что воображения ответить на вопрос «что я хочу, чтобы оно делало в первую очередь» не хватает.

Поэтому интересно, с чего начинаются самодельные умные дома, и в частности, с чего начинается управление светом.
Начинаются с желания научиться чему-то новому и понимания, что в худшем случае я смогу сделать так, чтобы все работало как обычно, без переделывания проводки.
Управление освещением — относительно простая, а главное, вполне самостоятельная, часть системы. И при этом довольно полезная:
Я могу выключить весь свет выключателем у входной двери.
Свет над длинным рабочим столом управляется одним выключателем, но, при желании, я могу осветить только нужную половину стола.
Я могу регулировать яркость света.
Есть мысли, что некоторые выключатели нужно было расположить иначе. Я могу добавить новые в тех местах, где это удобно.
Схему чего? В зависимости от того, чем управлять, схема будет разная. В зависмости от напряжения, выдаваемого контроллером будут разные токоограничивающие сопротивления.
Конкретные схемы есть в datashit'е к MOC3051 и в AN-3008. Копировать их сюда я не имею права: они не мои. Рисовать их заново не вижу смысла: они есть в открытом доступе и они хороши.
внимательным чтением datashit'а

тонко =)
У автора видимо особая неприязнь к этим документам, чтобы так их обзывать :-)
Спасибо. Поправил, где мог.
Тип корпуса, вероятно, имелся в виду TO-220.
При этом микроконтроллеры stm могут пропускать через себя до 80-120 мА, а avr до 200 мА
это на все выводы вместе, а один вывод AVR, к примеру, 20-40 мА.
Спасибо, действительно имелся в виду TO-220. Поправил.

Ограничение по току на один вывод в данном случае не критично: даже более прожорливый MOC3051 потребляет меньше. Но если микроконтроллер может прокачать через себя только 80 мА, а подключать к нему MOC3051, то можно сделать не более 5ти каналов. На это ограничение я и хотел обратить внимание.
Доброго времени суток. У меня возник вопрос касательно расчёта током гранича всю день резистора для цепи затвора симистора. Вот тут подробнее, https://toster.ru/q/325764

Хочу понять, почему и изходя из чего выбирается тот или иной токо ограничивающий резистор.
Силовой симистор BTA16-600B, оптопара с симисторным выходом MOC3052.
Задача открывать силовой симистор в произвольное время. Силовая Нагрузка потребителя сопротивлением 30 Ом.
Задача как полное открытие 100% мощности так и неполное 1% мощности, плавно регулируемое мк за счёт обратной связи детектора нуля. Подскажите как считать? Повторюсь что вот этот же вопрос на тостере https://toster.ru/q/325764

Доброго времени суток! Детектор перехода через ноль отвечает только за отпирание или он будет держать симистор открытым до нуля, даже если ик-светодиод уже отключен. Просто думаю: если рулить по переднему фронту, то можно ли будет менять состояние симистора между переходами через ноль, или детектор нуля будет держать состояние до нуля?

Sign up to leave a comment.

Articles