Официальный сайт компании Arduino по адресу arduino.cc
led диммер 0-10в
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 26/03/2015 - 01:57
делаю диммер на основе подачи 0-10в через делитель напряжения (до 5в) на аналоговый вход ардуино
все работает, но есть одна проблема: нестабильная отдача сигнала, из-за этого наблюдается небольшое мерцание света, особенно на маленькой яркости
на скрине видно, как выходной сигнал немного прыгает
может сделать какое-нибудь усреднение?
https://www.dropbox.com/s/nwj2irfgq3w21n6/Screen%20Shot%202015-03-25%20a...
код:
#define analog_in_1 A0 #define analog_in_2 A1 #define analog_in_3 A2 #define analog_in_4 A3 #define analog_out_1 2 #define analog_out_2 3 #define analog_out_3 4 #define analog_out_4 5 int level_in1 = 0; int level_in2 = 0; int level_in3 = 0; int level_in4 = 0; int level_out1 = 0; int level_out2 = 0; int level_out3 = 0; int level_out4 = 0; void setup() { pinMode(analog_in_1, INPUT); pinMode(analog_in_2, INPUT); pinMode(analog_in_3, INPUT); pinMode(analog_in_4, INPUT); pinMode(analog_out_1, OUTPUT); pinMode(analog_out_2, OUTPUT); pinMode(analog_out_3, OUTPUT); pinMode(analog_out_4, OUTPUT); // analogWrite(analog_out_1, 0); // analogWrite(analog_out_2, 0); // analogWrite(analog_out_3, 0); // analogWrite(analog_out_4, 0); Serial.begin(9600); } void loop() { analog_work(); } void analog_work() { level_in1 = analogRead(analog_in_1); level_in2 = analogRead(analog_in_2); level_in3 = analogRead(analog_in_3); level_in4 = analogRead(analog_in_4); level_out1 = map(level_in1, 0, 1023, 0, 255); level_out2 = map(level_in2, 0, 1023, 0, 255); level_out3 = map(level_in3, 0, 1023, 0, 255); level_out4 = map(level_in4, 0, 1023, 0, 255); analogWrite(analog_out_1, level_out1); analogWrite(analog_out_2, level_out2); analogWrite(analog_out_3, level_out3); analogWrite(analog_out_4, level_out4); Serial.println(level_out3); }
вопрос - на каких пинах шим?
level_out3 = map(level_in3, 0, 1023, 0, 255);
можно ведь просто поделить на 4
vvadim
на 2, 3, 4, 5
jeka_tm
пробовал - совсем жестко мерцает
странно))) ты так делал?
level_out3 = level_out3/4;
да
причем если прописать фиксированную величину, например analogWrite(analog_out_1, 20); - не мерцает ничего. т.е. дело не в схемотехнике, проводах и тп, а именно в программе
а map видимо дает более сглаженный результат чем деление - с ним мерцание намного меньше
map выполняется медленнее просто. может дело в этом. delay(1) добавь
попробую, но в итоговом варианте не хотелось бы, там еще куча других функций
alexey_and, а что вы подключаете к входам?
а вообще шимом генерировать аналоговый сигнал не так просто. зависит от нагрузки, нужно сглаживать. если пусть обратную связь будет получше. а лучше цап сделать
dimax
диммер (источник напряжения 0-10в)
jeka_tm
так у меня шим в итоге на полевик уходит. зачем вообще генерировать аналоговый сигнал, если он у меня и так с диммера идет?
схема такая: (0-10в) - (делитель напряжения) - (аналоговый вход) - (pwm выход) - (mosfet) - (led лента)
так диммер самодельный на мосфете управляемый шимом или диммер магазиннный на который нужно подать сигнал аналоговый 0-10В?
самодельный на мосфете
на него подается сигнал 0-10 с магазинного
))) понятно. экономим значит. когда мерцает? когда изменяешь яркость или всегда?
alexey_and, всё равно не ясно.. сначала какой-то магазиный диммер, он выдаёт регулируемое напряжение до 10 вольт, затем что-то самодельное, затем через делитель на вход.. Зачем это всё? ШИМом удобнее управлять цифровым устройством ввода, например енкодером. Ещё элегантно крутить яркость через обычную ps/2 мышь :)
jeka_tm
честно? не экономим, а от безысходности. нет, есть специализированные диммеры для лент, но 25 тыщ за 1 шт :)
диммеры такого плана http://www.neoncolor.ru/light-control/dimmery-vhod-0-10v-vyh-12-24v-gr-497/dimmer-sr-2006-12-36v-96-288w-1-10v-1ch-article-014168.html
требуют большую нагрузку. конкретно в этой задаче у меня 4 куска ленты меньше метра каждая. такие диммеры столь малую нагрузку не диммируют, их надо грузить ближе к 100%
мерцает:
1) на любой яркости всегда, немного как-бы подрагивает. особенно заметно на малой яркости (до 5-10%), выше - почти не заметно. с делением подрагивает сильно и на любой яркости
2) когда яркость изменяешь от 0% до примерно 20%, дальше идет плавно. от 20% до 0% тоже мерцает. но это скорее не мерцание, ступенчатое изменение яркости - как будто тормозит. диммер изменяет напряжение плавно по принципу: было 0, поставили 20 - плавно меняет напряжение от 0в до 2в в течение 2 секунд и тд
dimax
это интерфейс 0-10в, к нему нельзя подключать токовые устройства :) поэтому без силового диммера не обойтись
повысь частоту шим и сделай апроксимацию аркости хоть на глаз, чтобы выправить характеристику
кстати, еще странность
когда-то давно подключал к этой конструкции 10 метров ленты на 24в, на 1 канал - мощность была нехилая
и никакого мерцания вроде не было, было только торможение при наборе яркости
сейчас на одном канале примерно 60см ленты на 12в
повысь частоту шим и сделай апроксимацию аркости хоть на глаз, чтобы выправить характеристику
наоборот, после решения этих проблем хотел спросить как частоту понизить
не рекомендуется частота более 400-600Гц - типа излучение и все такое, а у меня эта лента прям надо головой :)
все брендовые диммеры работают не больше 400-600Гц
после истока полевика поставь диод, а параллельно ленте конденсатор 4700мкф
с какими параметрами диод?
alexey_and, а по мне так любой шим вреден, как он действует на мозг -не известно. Правильная регулировка яркости для дома и семьи - либо регулировкой тока, либо (если есть возможность) отключением части светодиодов.
ампера на 3 прозапас. лучше шотки. например такой
хотя нарисовал и понял нафига диод)))
Библиотека FastPWM должна устранить видимое мерцание.
после истока полевика
А на картинке нарисовано после стока (drain).
после истока полевика
А на картинке нарисовано после стока (drain).
все время путаю. додумались почти одинаково назвать
alexey_and, попробуйте так:
Хотя, формально - одно и то же. Кстати, 3, 5, 6, 9 указано не от балды (если речь об Uno). Иначе - совтварная PWM (костыль), либо BAM (быстрее, но больше переключений транзистора).
все время путаю. додумались почти одинаково назвать
Ага, исток - сток часто путают. Поэтому предпочитаю называть gate, source, drain. Так точно не перепутаешь :)
это что экспонента?
jeka_tm, для линейности на светиках. На самом деле не относится к сходящей с ума ленте, где-то в другом месте косяк. Кстати, полезно сериал монитором посмотреть, что там делает map() или деление после чтения из АЦП? И померить что после делителей, желательно не вольтметром а осциллографом. Вдруг оно на самом деле скачет туда-сюда, а analogWrite() просто выводит то что ей скажут?
экспонента для яркости чтобы скомпенсировать "логарифм" измерения яркости глазом))) вот написал
32 градации яркости с логарифмической зависимостью :)
void loop() { analogWrite (10,pow ( (analogRead(A0)>>5),1.614)); }
ну какая же логарифмическая. это же степенная фукнция. форма как у экспоненты
а вообще прикольное решение. проще чем массив
alexey_and, попробуйте так:
Хотя, формально - одно и то же. Кстати, 3, 5, 6, 9 указано не от балды (если речь об Uno). Иначе - совтварная PWM (костыль), либо BAM (быстрее, но больше переключений транзистора).
совсем плохо ((( еще хуже чем деление
дуина - мега
jeka_tm, для линейности на светиках. На самом деле не относится к сходящей с ума ленте, где-то в другом месте косяк. Кстати, полезно сериал монитором посмотреть, что там делает map() или деление после чтения из АЦП? И померить что после делителей, желательно не вольтметром а осциллографом. Вдруг оно на самом деле скачет туда-сюда, а analogWrite() просто выводит то что ей скажут?
вот что показывает чтение при уровне 33%
https://www.dropbox.com/s/qdvdk6zl7mtqt3e/Screen%20Shot%202015-03-26%20a...
что показывает map есть в первом сообщении - тоже есть нестабильность
осциллографа нет. вольтметр показывает небольшую разбежку, супер стабильного значения нет
не хочется над головой мегагерцовую антенну иметь
наоборот, хочу понизить до 400 гц
поставь конденсатор по входу. твой контроллер шумит, ацп шумит. а виновата map
не хочется над головой мегагерцовую антенну иметь
наоборот, хочу понизить до 400 гц
Алексей, ваше решение неверное в принципе. Поясню почему.
1. Во первых вы ошибаетесь с частотой. Чтобы получить фон в виде излучения, частота должна быть в районе десятков мегагерц. Ведь WiFi и GSM, которыe работают в частоте 1-2,5 МГц вас почему то не пугают? Все современные ШИМ регуляторы работают в диапазоне от десятков до сотен Мгц. И сделано это вот почему:
2. Регулировать яркость бытового освещения при помощи ШИМ - крайне опасно для глаз. Чтобы исключить досужные домыслы, скажу сразу - это оговаривается в СНИП на освещение. Номер не помню, но найдете легко. Для помещений, с установленной компьютерной техникой, максимальный уровень пульсаций ограничен 5%. Для ряда помещений - еще меньше - 1%. Уровень пульсаций существенно влияет на комфорт и, при продолжительном пребывании, - на зрение. Делая коэффициент заполнения даже 95% - вы получаете запредельный уровень пульсаций! Будь у вас осциллограф, вы бы увидели эту печальную картину прямо на светодиодах.
Как обычно делают и для чего выпускают ШИМ-диммеры?
Обычный ШИМ-диммер можно использовать с инерционной нагрузкой - например лампой накаливания или галогеновой. За счет того, что спиарль светится некоторое время после отключения, пульсации нивелируются. Даже КЛЛ уже даст неприемлимый уровень пульсаций - у нее свой высокочастотный драйвер.
А делают обычно так: регулируемый источник питания имеет интерфейс управления ШИМ (или аналоговый 0-10в), а на основании этого управления он уже осуществляет токовую регулировку, не повышая уровень пульсаций. Для питания светодиодов, например: http://mmp-irbis.ru/content/e-sources/files/A220T070C056M07.pdf Посмотрите как реализован принцип управления. Я делаю именно так. Т.е. ШИМом управляю подобным источником тока. При этом во всем диапазоне регулирования уровень пульсаций остается на допустимом уровне.
Но у вас не сетодиоды, а лента с резисторами. Вам для регулирования яркости достаточно варьировать напряжение, причем в небольших пределах. Проще всего - на базе вашего линейного аналогового диммера сделать регулируемый источник питания (хоть параметрический стабилизатор) и регулировать им напряжение, например в пределах 8-12в. Я не знаю параметров вашей ленты, но мне кажется что этого будет достаточно. Для человека, который на полевике делает ШИМ, это решение не должно составить проблем. К сожалению, Ардуино для этого решения не нужно. Это главный минус предложенного мной решения.
Чем? До 85 Гц - да соглашусь, та же ситуация что и с электронно-лучевым монитором - не успевает отрисовать больше 56 кадров/сек, что приводит к мерцанию, особенно меметичен ЭЛ-телевизор на фоне современного монитора, и при взгляде боковым зрением.
НО: вы сейчас сидите за столом и читаете этот текст с монитора, скорее всего бытовой серии на какой-нибудь матрице LG типа LP156WH, которая работает вообще на 60 Гц, а мерцание не палится за счёт инерции жидких кристаллов. Четыре, семь, девять часов за ним сидим, и ничё - голова не бобо. А вот перед ЭЛТ уже через 40 минут начинало потихоньку давать. Уже на частотах свыше 170 Гц никаких подобных эффектов не будет, только до 85 Гц или совпадающие с мозговыми ритмами, а это уже инфразвуковые частоты. Та же TLC5940 - модулирует светики на 1 кГц, и для освещения заходит просто отменно. Этого вполне достаточно.
2 МГц - конечно круто звучит, но братишки, это ж сколько энергии у вас будут полевики рассеивать?
Повторюсь - сваливаться в дискуссию о вреде не буду. Есть СНИП.
И потом - вы путаете частоту работы импульсного источника питания и частоту протокола его управлением.
1КГц - это допустимая частота мерцания ДЛЯ ПОДСВЕТКИ, например рекламных вывесок, но недопустимая для ОСВЕЩЕНИЯ. А управлять можно хоть на частоте 20Гц.
Современные ИМС ИИП вполне себе работают на частотах до 2МГц - для уменьшения габаритов дросселей.
тогда вопрос, но не ради развидия дискусии :) почему везде в офисах стоят так называемые лампы дневного света, мерцание которых я вижу практически невооруженным взглядом? а если в этом офисе еще dlp проектор работает - вообще беда
лампа, которую я делаю - подсветка-ночник, в качестве основного освещения использовать даже не думал
на основном у меня блоки питания со встроенным диммированием 0-10в, диммирует током. но там своя проблема - чтоб получить полный диапазон диммирования, надо грузить блок под 100%. у меня загружен на 70%, и диапазон диммирования получается 30-100%
насчет частоты pwm 400-600гц - европейцы делают именно такое диммеры, акцентируя на этом особое внимание
например: http://zennio.com/products/lighting/lumento-x3
PWM is the type of modulation that Lumento uses to dim. PWM allows to modify the intensity of light by varying the pulse duration of the power signal. The parameter PWM frequency defines the frequency of this signal and the recommended value depends on the type of application. If we are using the LEDs for decorative lighting, we can set any value as long as all the frequencies are high enough so that the human eye won’t notice the blinking. For desk lighting, we recommend the highest frequency (600 Hz) as it can prevent eyestrain; nevertheless, the default value (488 Hz) is appropriate for most applications.
jeka_tm
попробую
ну или можно программно значения 5-10 измерений усреднять и только потом выдавать на ШИМ выход. В ваших замерах уровень сигнала скачет от 332 до 338 при делении на 4 получаем от 82 до 85 на выходе. Учитывая что при малых значениях ШИМа глаз очень хорошо видит скачки даже на 1, то и наблюдается мерцание.
Собственно, если задать стандартный пример ардуины - Fade - если не ошибаюсь, то Вы должны наблюдать равномерное увеличение-уменьшение яркости ленты. Отсюда простой вывод: выходной тракт на мосфете работает верно, а проблема кроется как раз таки в "мерцании" управляющего напряжения 0-10В. Его то и надо сглаживать, либо через кондер, либо программно.
о-ла-ла... Ка раз очень неравномерное изменение яркости - сначала резное нарастание (диапазон от 5 до 20), а потом еле заметное увеличение (диапазон 21-254). Дело тут не в ШИМ, а в характеристиках светодиода и его мощности.
Да нельзя его так ШИМом регулировать - дело не только в характеристике LEDa (хтя это тоже сильно влияет), но и в характеристике блока питания - как быстро он запускается? Как реагирует на нагрузку? Есть ли у него большая емкость на выходе или нет (зависит от того импульсный или параметрический источник). Можно получить вообще непредсказуемый результат.
Я уже писал как нужно регулировать.
p.s. Отвечал на предыдущий пост и потерлось сообщение. Второй раз писать формулы и сслыки терпения не хватит. Прошу прощения у автора, который задавал мне вопросы.
stakan1986
до магазина еще не доехал кондеры купить, хотел бы пока попробовать программно, может и достаточно будет
Имел ввиду, что будет равномерное увеличение значений ШИМа, без мерцаний наблюдаемых топикстартером. Равномерного увеличения свечения конечно не будет.
А вообще конечно лучше использовать токовый драйвер светодиодный. Частоты, и в самом деле, десятки-сотни кГц. Хотя ленту к нему уже приделать будет проблематично((.
to select2, в качестве ночника - мне кажется не так уж и страшно будет использовать такое регулировку. Зато простота изготовления явно перевешивает
ну, равномерность диммирования меня вроде устраивает - во всем диапазоне изменение яркости заметно, даже лучше чем на токовом драйвере. торможение изменения яркости от 0 до 20% можно убрать, если поставить минимальную яркость в самом диммере процентов 15-20, хотя в идеале хотелось бы и этот момент победить
кстати есть диммер с драйвером DMX для лент, там вообще нет никакого торможения и мерцания на любой яркости. там используется тот же pwm с транзисторами. хотелось бы добиться такой же гладкой работы на ардуине
https://www.dropbox.com/s/mrrdn6fhv4zvpnq/IMG_0926.JPG?dl=0
Скачки яркости на низких значениях ШИМа связаны малой битностью - т.е. 8бит - 256 градаций, при малых значениях изменение на 1/256 весьма заметно глазу. Как вариант использовать ШИМ на полные 16 бит -итого получаем 65535 градаций, но даже так - самые начальные стадии заметны глазу.
А каким образом решено ШИМ управление в DMX драйвере неизвестно - видимо стоит некий контроллер - но какую битность ШИМа он выдает и с какой частотой, идет ли изменение по линейной зависимости или по какой нибудь экспоненте остается только догадываться.
Все же нормальный токовый драйвер лучше. Тут Вы, смотрю, немного путаете понятия - на вход драйвера вы подаете управляющий ШИМ сигнал с ардуины на частоте 488Гц(если стандартно брать), а вот сам драйвер подает питание на светодиод на частотах в десятки и сотни кГц, что в сочетании с индуктивностью дает на осциллографе практически ровную линию тока, совсем не похожую на прямоугольно скачущий с 0 до 1 ШИМ сигнал. (о чем писал select2 в посте 38). Вы же свои ленты "кормите" самым обычным рваным ШИМом
а есть какая-нибудь специализированная микросхема, на которую можно подать 0-10в (либо через какой-либо преобразователь) и получить на выходе качественный шим 16 бит?
в dmx стоит какая-то мелкая микросхема, с которой идут дороги на транзисторы, могу посмотреть ее маркировку
с токовым опять же заморочки - нужно подбирать мощность драйвера соответственно с мощностью ленты. если грузить его меньше положенного, диапазон диммирования резко сокращается пропорционально избытку мощности. например, если присоединить к 200W драйверу ленту на 100W, диммироваться она будет от 50 до 100%
конкретно в данном случае я хочу управлять маленькими лентами ватт по 7-10, токового драйвера с диммированием 0-10 на такую мощность я не нашел, минимум начинается от 70W
можно конечно забить и запитать эти ленты от dmx, но это последний вариант. таких лент у меня предполагается несколько и есть проблемы с прокладкой дополнительной проводки под декодеры dmx во все места. и опять же, в дешевых китайских декодерах 100500 гц, а на европейские тратиться пока неохота
нашел такую штуку https://www.adafruit.com/products/1411
можно даже частоту задавать
стоит попробовать?