Драйвер для плавного изменения яркости

sezam
Offline
Зарегистрирован: 15.11.2015

Привет, форумчане!

Аппаратная часть:

- arduino pro mini на базе ATmega 328P и любая оптопара;

Как вы все знаете, ардуинка может управлять каналами PWM. Один из каналов (D6) использовал для своих целей по управлению сигналом PWM внешними устройствами, а именно - регулировка яркости лампочки на 12 вольт.

Схему сопряжения собрал и она работает на простом светодиоде (12 вольт). Однако, вот какая штука ... свет начинает очень часто моргать. В чем может быть проблема и как её обойти (стабилизировать)?

Вот схема, по которой изготовил диммер:

http://alcs.ch/wp-content/uploads/2012/01/dimmer_v3.png

Аналоговый выход позволяет регулировать сигналом в диапазоне от 0 до 255. При выставлении любых значений, происходит частое моргание, как у стробоскопа. В чем может быть проблема?

 

Вот код:

analogWrite(6,3);

delay(350);

analogWrite(6,168);

 

 

vk007
Offline
Зарегистрирован: 16.06.2015

sezam пишет:

Аналоговый выход позволяет регулировать сигналом в диапазоне от 0 до 255. При выставлении любых значений, происходит частое моргание, как у стробоскопа. В чем может быть проблема?

Проблема может быть в delay(350);

sezam пишет:

Вот код:

analogWrite(6,3);

delay(350);

analogWrite(6,168);

Это не код, это список из 3-х функций.

sezam
Offline
Зарегистрирован: 15.11.2015

Если я просто в setup () указываю функцию, например, analogWrite(6,128) , то при запуске кода светодиод начинает моргать, но это моргание почти не заметно для глаз (только если вглядываться), однако, при подключении внешнего устройства (лампа на 12В), то моргание становится на порядок заметным. Не горит, а мигает.

sezam
Offline
Зарегистрирован: 15.11.2015

ШИМ - это и есть пульсация с определенной частотой, указываемой во втором параметре ф-и analogWrite(), увеличенной на постоянный коэф-т, определяемый внутренним кодом ардуинки (можно и 1024 положения). Вот этот ШИМ и начинает проявляться.

vk007
Offline
Зарегистрирован: 16.06.2015

sezam пишет:

ШИМ - это и есть пульсация с определенной частотой, указываемой во втором параметре ф-и analogWrite(), увеличенной на постоянный коэф-т, определяемый внутренним кодом ардуинки

Чего? о_О

Частота ШИМ там как раз стабильная (около 490 Гц), меняется только ширина импульса (скважность).

m-zzz
Offline
Зарегистрирован: 30.05.2015

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

sezam
Offline
Зарегистрирован: 15.11.2015

Попробую объяснить.

Есть вот такая схема:

Эту схему я реализовал. Вместо (М) стоит светодиод на 12V. Использовал MOSFET IRLR2905.

Когда задаю управляющий ШИМ равный 128 (либо любой другой, отличный от граничных 0 и 255), то на выходе происходит пульсация напряжения.

 

 

 

m-zzz
Offline
Зарегистрирован: 30.05.2015

Я бы конечно посоветовал ткнуть осциллографом, много е стало бы ясно..

Но если нет доступа к такому оборудованию, то поопробуй параллельно нагрузке (если я правильно понимаю, это LED-лампа) поставить электролитический конденсатор например в таком диапазоне 150-500 мК * 16В.

И погоняй выходные значения от 1 до 253, посмотри как будет меняться напряжение на нагрузке.

vk007
Offline
Зарегистрирован: 16.06.2015

Даже не видя скетча, а только пару функций (это я свой хрустальный шар протер) я ведь уже писал, что проблема в delay(350)

Это самый настоящий 3-хгерцовый (приблизительно) стробоскоп и получается.

Что еще надо? Ждете пока соберем консилиум?

m-zzz
Offline
Зарегистрирован: 30.05.2015

Дело в том, что входная емкость у выбранного транзистора не очень маленькая, может при PWM режиме( а это как раз любяе значения , кроме граничных 0 и 254, при них то либо чистый ноль, либо чистая лог. единица)) . Сам то я по старинке на полевики, работающие в подобных PWM схемах ставлю драйверы нижнего плеча... Посему с такой проблемой сталкиваться не приходилось, да оно и многи други возможные косяки на корню решает....1 700

m-zzz
Offline
Зарегистрирован: 30.05.2015

далее, как совершеено верно отметил уважаемый  vk007 совершенно не исключены программные косяки, и трехгерцовый строб, это только видимая часть айсберга))) а там еще много всего может быть наворочено)))

Но скетч топикстартер пока не представил на всеобщее обозрение)))

 

m-zzz
Offline
Зарегистрирован: 30.05.2015

может быть вообще что угодно.. включая блок питания из трансформатора и выпрямителя (без фильтрующих электролитов)

Тоесть управляющей части схемы своего стаба и конденсаторов хватает для работы, а на нагрузке в PWM-е из за биения частот может вообще что угодно показываться.. тоже был такой вариант у одного несомненно талантливого человека...(правда там не про Дуню шла речь, но все же)

vk007
Offline
Зарегистрирован: 16.06.2015

Ну а чем тогда можно объяснить вот это:

sezam пишет:

analogWrite(6,3);

delay(350);

analogWrite(6,168);

К гадалке не ходи - в лупе крутится.

sezam
Offline
Зарегистрирован: 15.11.2015

Пауза здесь не играет роли, т.к. мерцание происходит гораздо чаще, чем раз в секунду (примерно 5 раз). Обычный скеч с перебором значений:

void loop() {

for (value = 0; value <= 255; value += 5){

analogWrite(6, value);

delay(1000);

}

for (value = 255; value >= 0; value -= 5) {

analogWrite(6, value);

delay(1000);

}

}

 

m-zzz
Offline
Зарегистрирован: 30.05.2015

А про пять раз уже интересно... 

БП, я полагаю трансформаторный, не импульсник? 

Каково напряжение БП без включенной лампы и с включенной? Велика ли просадка, и нет ли ощутимых пульсаций по питанию?

Просто чатота ШИМа у дуни около пятиста герц.. а при недостаточной фильтрации на выходе получаем пульсации в 100 герц..

Как раз примерно пятикратная разница..

Проверьте правильность питания вашего устройства..

 

А в скетче добавляйте по единице, просто с меньшим дилеем.. чтоб уменьшить ступени в регулировании яркости..

sezam
Offline
Зарегистрирован: 15.11.2015

ОК, ещё раз перепроверю ... отпишусь. Есть подозрение на мосфетный транзистор. Вроде как из-за малого сопротивления он постоянно перезаряжается и работает как импульсный кондер. Накопил энергию - выпустил, снова накопил и т.д. Напряжение и ток не велики, до 50V и ток до 4 ампер с запасом (полевик на 25А рассчитан) (в реале до 1,5-2А макс.).

Может попробовать обычный биполярный транзистор с линейным регулируемым (по базе от 1 до 5 вольт) выходом? Какой можете посоветовать?

m-zzz
Offline
Зарегистрирован: 30.05.2015

полевик на 25А рассчитан

-- исходя из даташита, на указанный вами транзистор, он расчитан на 42А при 25С и на 30А при 100С, а наличие столь мощного ключа не проходит бесследно, сильно растет емкость гейта, а для бездрайверной схемы это тоже может быть критичным.

Какой можете посоветовать?

-- да по сути собери составной  n-p-n  транзистор из практическии любого маломощного , и в пару к нему  большей мощности на подходящий ток... Включай по схеме с общим эмиттером, а в базу ему токозадающий резистор ом на 100-200.. и все..

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

m-zzz
Offline
Зарегистрирован: 30.05.2015

sezam пишет:

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

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

sezam
Offline
Зарегистрирован: 15.11.2015

Подскажите, правильно ли я делаю?

Между выходом ардуинки (выход D6) и базой полевика расположен резистор на 550 Ом (реально 544 Ома с учетом погрешности). Правильно ли это или можно обойтись без резистора, ведь затвор управляется не током, а напряжением, и поэтому токоограничивающий резистор не нужен ... ток через затвор не идет.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

управляется напряжением, но кондесатор входной емкости никто не отменял. он есть и никуда не денется. если бы не этот конденсатор цены бы полевикам не было. сразу напрямую к мк можно было бы цеплять по 10-20 полевиков по 50-100А и охреневать от мощности

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

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

много где пишут, что в данном случае резистор там стоит не для полевика (ему он нафиг не нужен), а для защиты пинов МК от обратных бросков тока.

Незнаю насколько это соответствет действительности.

Гриша
Offline
Зарегистрирован: 27.04.2014

Tomasina пишет:

много где пишут, что в данном случае резистор там стоит не для полевика (ему он нафиг не нужен), а для защиты пинов МК от обратных бросков тока.

Незнаю насколько это соответствет действительности.

если есть емкость (а она там есть), значит есть реактивная составляющая – вот от нее и защищает транзистор. Плохое влияние реактивки давят током т.е. ставят драйвер рисунок 6 и 7

sezam
Offline
Зарегистрирован: 15.11.2015

В общем, сгорел у меня полевик IRLR2905 из-за перегрева ... гонял на циклах увеличения/уменьшения ШИМ. Пришлось провести замену и поставить небольшой радиатор. Хорошо хоть не взорвался ...

Теперь вопрос. Какой транзистор использовать: низкочастотный или высокочастотный, и можете привести пример таких транзисторов что бы не блукал долго по даташитам? Частота ШИМ врое бы стандартная в 490 Гц.

Сейчас использую биполярный транзистор 2SC4408, но он тоже греется ...

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

IRLZ44 - у них меньше емкость затвора и можн подключать затвор через резистор 200-400 Ом к Arduino 

Гриша
Offline
Зарегистрирован: 27.04.2014

sezam пишет:

Теперь вопрос. Какой транзистор использовать: низкочастотный или высокочастотный, и можете привести пример таких транзисторов что бы не блукал долго по даташитам? Частота ШИМ врое бы стандартная в 490 Гц.

чем выше частота, тем ниже емкость (не совсем так, есть там НО) нагрев происходить в момент переключения, нужен хороший фронт управляющего сигнала, значит нужен ТОК, давить емкость. Решение: поставить драйвер. Какой? - биполярник по обычной схеме ОК. R коллектора =U/I =5/0.1…ххх = 50-150 Ом и 50-100 Ом в затвор – не самый лучший вариант…

вот видео 1м:20с – нужная инфа, только там нужен сопрот от сквозного тока, который нужно подбирать (уменьшать от 50 Ом и параллельно ему кондер, не электролит  ) 

 

UPD забыл совсем  , необходимо смотреть напряжение полного открытия для полевика, примерно 7 вольт, от 5 он не полностью открывается (обычно, нужно листать даташит) вот и нагрев прет.

sezam
Offline
Зарегистрирован: 15.11.2015

Подскажи пару таких, если сможешь. На какой параметр обращать внимание? Как он правильно называется?  V(GS)?

Гриша
Offline
Зарегистрирован: 27.04.2014

sezam пишет:

Подскажи пару таких, если сможешь. На какой параметр обращать внимание? Как он правильно называется?  V(GS)?

Tomasina пишет:

IRLZ44 - у них меньше емкость затвора и можн подключать затвор через резистор 200-400 Ом к Arduino 

FIG-3  говорит что ему 5 В достаточно, 3В хватает 10А пропустить. Tomasina толково посоветовал.

Кт 3102 и 3107 можно попробовать для защиты поставить – их не жалко, и по 100-200 Ом в затвор.

sezam
Offline
Зарегистрирован: 15.11.2015

В схеме будет использоваться максимум 3-4 ампера, частота генерации ШИМ ~500 Гц и питание ... какое напряжение используется при ШИМ? Уж не 5В? Изменяется только скважность импульсов. Если смотреть FIG-3, то открытие транзистора будет при 1-2В.

Получается амплитуда напряжения 5В, частота генерации ~500 Гц с изменяемой скважностью?

С частотой ШИМ на ардуино будет ли транзистор (IRLZ44) согласовываться?

sezam
Offline
Зарегистрирован: 15.11.2015

На сайте cxem.net есть схема управления нагрузкой. Привожу рисунок (собирал по правой схеме):

На ардуино использую в качестве ШИМ выход № 6. Может в этом проблема?

sezam
Offline
Зарегистрирован: 15.11.2015

Вот такая моя схема:

https://yadi.sk/i/-bB1eDpPkiBx8

Нагрузка - лампа с током потребления 0,7А.

На выходе прибора постоянное напряжение 12 вольт.

Если подключаю к нагрузке обычный светодиод на 12 вольт (диам. 10 мм), то он работает нормально по ШИМу. Если присотреться, то можно заметить частотную составляющую.

Если подключить лампу с потреблением 0,7А, то мерцание очень заметно. Частота около 10 Гц.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sezam, вы так и не написали  от чего всё это питаете. Хотя с этого нужно было начать.

sezam
Offline
Зарегистрирован: 15.11.2015

Обычный блок питания на 5В 1.5А.

Гриша
Offline
Зарегистрирован: 27.04.2014

sezam пишет:

Обычный блок питания на 5В 1.5А.

схема нормальная, если подключено все верно - должно работать. 

вероятно, нужен отдельный БП 5В для ардуино, и отдельно для нагрузки. Общий провод объединить.

выложите весь скетч - вот как это сделать ПРАВИЛЬНО

UPD, добавьте к вашей схеме полностью разводку по питанию, что, откуда, куда...  

sezam
Offline
Зарегистрирован: 15.11.2015

Питание ардуинки: обычный блок питания на 5В 1.5А

Питание нагрузки отдельное, от внешнего прибора: 12В 1.0А

Программный код:

  for (value = 0; value <= 255; value += 5)
  {
    analogWrite(6, value);
    delay(500);
  }
  for (value = 255; value >= 0; value -= 5)
  {
    analogWrite(6, value);
    delay(500);
  }
  
  for (value = 0; value <= 3; value += 5)
  {
    analogWrite(6, 255);
    delay(1000);  
    analogWrite(6, 0);
    delay(1000); 
  }

 

Гриша
Offline
Зарегистрирован: 27.04.2014

sezam пишет:

Программный код:

......

а где инициализация? объявление переменных? - это секрет?????

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

 

sezam
Offline
Зарегистрирован: 15.11.2015

Да никакого секрета нет.

// при появлении импульса на входе D3, производим плавное включение и выключение нагрузки

void setup() {
  attachInterrupt(1, button1, RISING);  // Определяем прерывание на pin 3
  Serial.begin(9600);
  Serial.println('START');
  
  for (value = 0; value <= 3; value += 5)
  {
    analogWrite(6, 255);
    delay(1000);  
    analogWrite(6, 0);
    delay(1000); 
  }
    
}

void button1() 
{
  for (value = 0; value <= 255; value += 5)
  {
    analogWrite(6, value);
    delay(500);
  }

  for (value = 255; value >= 0; value -= 5)
  {
    analogWrite(6, value);
    delay(500);
  }
}

void loop()
{

}

 

Гриша
Offline
Зарегистрирован: 27.04.2014

sezam пишет:

Да никакого секрета нет.

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

попозже попробую помочь...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sezam пишет:

Питание ардуинки: обычный блок питания на 5В 1.5А

Питание нагрузки отдельное, от внешнего прибора: 12В 1.0А

Лампа с током потребления 0,7 ампера потребляет 0,7 только после того как разгорится. В момент включения она может вызвать скачёк тока до нескольких ампер. Если БП импульсный, то в момент скачка он может уходить в защиту и отключать питание на доли секунды, потом  снова включаться, и этот процесс будет повторяться бесконечно пока стартовый ток не станет ниже допустимого.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

эм, вы в обработик прерывания засунули две задержки по 0,5 сек? 

sezam
Offline
Зарегистрирован: 15.11.2015

В том-то и дело, что на прямую от прибора лампа нормально работает без перезапусков и миганий.

Померил напругу на затворе полевика. Дергается (при мигании лампы) в пределах от 2.3 до 2.5В. На граничных показателях открытия полевика. При "полном" открытии (граница 255) выдает 4.7 - 5.0В.

sezam
Offline
Зарегистрирован: 15.11.2015

Tomasina Да, последовательно, т.к. прерывание срабатывает раз в 5 сек. Если код изменить вот так

void setup() {
  Serial.begin(9600);
  Serial.println('START');
}
void loop() {
  for (value = 0; value <= 255; value += 5)
  {
    analogWrite(6, value);
    delay(500);
  }
  for (value = 255; value >= 0; value -= 5)
  {
    analogWrite(6, value);
    delay(500);
  }
}

Ситуация не изменится. Граничные состояния (0 и 255) будут работать нормально, а внутренние - мигать.

Полевики IRLZ44N купил. Вечером буду пробовать. Может всё дело в них.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sezam пишет:

В том-то и дело, что на прямую от прибора лампа нормально работает без перезапусков и миганий.

Этот факт ничего не доказывает и не опровергает. Попробуйте с более мощным БП, хотя бы со стандартным комповым atx.

sezam
Offline
Зарегистрирован: 15.11.2015

Светодиод питается от источника тока, у которого напряжение на выходе может меняться от 3В до 10В, при этом он выдает стабильно ток 350мА. т.е эквивалентное нагрузочное сопротивление в пределах от 8 Ом до 28 Ом. За этим диапазоном вместо  постоянного тока - частотный импульсный режим.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

может поэтому и моргает, что  источник тока все время пытается исправить влияние ШИМ?

Гриша
Offline
Зарегистрирован: 27.04.2014

sezam пишет:

В том-то и дело, что на прямую от прибора лампа нормально работает без перезапусков и миганий.

Померил напругу на затворе полевика. Дергается (при мигании лампы) в пределах от 2.3 до 2.5В. На граничных показателях открытия полевика. При "полном" открытии (граница 255) выдает 4.7 - 5.0В.

чем измеряли? вольтметром? постоянкой или переменкой? вольтметр вообще не покажет ничего нормального - ну максимум среднеквадратичное значение, которое не есть истинное в данном контексте.

вот только при максимальном открытии и можно "чего-нибудь" вразумительное увидеть.

ЗЫ. снова не полный скетч выложили... где инициализация? где объявление переменных?

sezam
Offline
Зарегистрирован: 15.11.2015

Гриша, см. пост 41: отработка даже такого примитивного скеча - не срабатывает правильно.

Измерял вольтметром.

Пост 43 - ответ производителя.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

sezam пишет:

Светодиод питается от источника тока, у которого напряжение на выходе может меняться от 3В до 10В, при этом он выдает стабильно ток 350мА. т.е эквивалентное нагрузочное сопротивление в пределах от 8 Ом до 28 Ом. За этим диапазоном вместо  постоянного тока - частотный импульсный режим.

То вы пишете про лампу 0,7а , теперь откуда то светодиод объявился! Яркостью светодиода, включенного через стабилизатор тока нельзя управлять тупо  коммутируя питание драйвера.  

Гриша
Offline
Зарегистрирован: 27.04.2014

dimax пишет:

sezam пишет:

Питание ардуинки: обычный блок питания на 5В 1.5А

Питание нагрузки отдельное, от внешнего прибора: 12В 1.0А

Лампа с током потребления 0,7 ампера потребляет 0,7 только после того как разгорится. В момент включения она может вызвать скачёк тока до нескольких ампер. Если БП импульсный, то в момент скачка он может уходить в защиту и отключать питание на доли секунды, потом  снова включаться, и этот процесс будет повторяться бесконечно пока стартовый ток не станет ниже допустимого.

Достаточно легко проверить…

Запускаем скетч со следующим лупом:

  void loop() 
{
  for (int value = 0; value <= 255; value++)
  {
    analogWrite(6, value);
    Serial.println(value);
    delay(500);
  }
  for (int value = 255; value >= 0; value--)
  {
    analogWrite(6, value);
    Serial.println(value);
    delay(500);
  }
}

смотрим чего пишет в порт когда начинает мерцание

Гриша
Offline
Зарегистрирован: 27.04.2014

sezam пишет:

Гриша, см. пост 41: отработка даже такого примитивного скеча - не срабатывает правильно.

Измерял вольтметром.

Пост 43 - ответ производителя.

Пост 43 - вообще не будет работать в данном режиме включения, какая постаянная управления (тау драйвера) драйвера светодиодной ленты?

Гриша
Offline
Зарегистрирован: 27.04.2014

dimax пишет:

То вы пишете про лампу 0,7а , теперь откуда то светодиод объявился! Яркостью светодиода, включенного через стабилизатор тока нельзя управлять тупо  коммутируя питание драйвера.  

убивая светодиод импульсной накачкой выхода драйвера (зависит от регулирования тока, устройства драйвера)

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

В общем, надо такую схему: Источник напряжения ==> LED драйвер с ШИМ-управлением ==> Светодиод.