Вопрос из песочницы по ШИМ
- Войдите на сайт для отправки комментариев
Буквально первый шаг в Ардуино. Начитавшись всякого, сваял маленький скетч для посмотреть, как работает ШИМ на светодиодах. Светодиоды - стандартные 5мм колпачки, подключены (изначально были) через резисторы 660 ом (2х330 ом - самое близкое, что было под руками, к найденному где-то уроку, в котором резистор был 680 ом):
int PWMPinYellow=10; int PWMPinRed=11; int PWMPinGreen=12; void setup() { pinMode(PWMPinYellow,OUTPUT); pinMode(PWMPinRed,OUTPUT); pinMode(PWMPinGreen,OUTPUT); Serial.begin(9600); } void loop() { for (int i=0; i<=255; i++) { Serial.println(i); analogWrite(PWMPinYellow,i); analogWrite(PWMPinRed,i); analogWrite(PWMPinGreen,i); delay(50); } for (int i=255; i>=0; i--) { Serial.println(i); analogWrite(PWMPinYellow,i); analogWrite(PWMPinRed,i); analogWrite(PWMPinGreen,i); delay(50); } }
Скетч работает, но: на желтом и зеленом яркость меняется плавно в диапазоне от i=0 до примерно i=130, после 130 и до конца цикла никаких видимых изменений нету. Красный диод на тех же примерно 130 просто включается, а на обратном цикле - выключается. Пробовал подбирать резисторы, дошел на красном до 4,7к - ничего не меняется. Расскажите, пожалуйста, в чем тут дело. Заранее спасибо.
вероятно 12 пин без шима и красный именно на нем
вероятно 12 пин без шима и красный именно на нем
М-да, матчасть еще учить и учить :) Спасибо большое, все именно так.
А плавность (или глубину регулировки, что ли, - не знаю, как правильно сказать) как-то можно улучшить, или с этими диодами не выйдет?
типа чтобы регулировалось до 255 включительно?
Да.
Так и должно быть. По двум причинам.
1. Яркость светодиода с ростом тока растёт не совсем линейно. Посмотрите на график из даташита светодиода 5050 RGB. Здесь логарифмическая шкала, но если снять числовые значени, что всё ранов видно, сначала яркость растёт быстрее, чем в районе максимального (20мА) тока.
Но эта нелинейность невелика и большой проблемы не составляет. Гораздо хуже вторая причина.
2. Наше зрение тоже отнюдь не линейно. Есть такой закон Вебера – Фехнера, согласно которому интенсивность ощущения пропорциональна логарифму интенсивности раздражителя. Т.е. при линейно увеличении интенсивности разражителя, наш глаз сначала будет это чётко фиксировать, а дальше вё меньше и меньше (если интересно, могу найти ссылку на неплохую статью про закон Вебера – Фехнера, там кстати, есть скетчи для логарифмического ШИМ, который поволяет делать линейную регулировку ярокости. Искать?).
Искать?
Я бы почитал.
http://radiolaba.ru/polezno-znat/regulirovka-yarkosti-svetodioda.html
Спасибо большое за подробные объяснения.
[(если интересно, могу найти ссылку на неплохую статью про закон Вебера – Фехнера, там кстати, есть скетчи для логарифмического ШИМ, который поволяет делать линейную регулировку ярокости. Искать?).
Фих знает, насколько я ее осилю, но все равно интересно. :) Спасибо!
http://radiolaba.ru/polezno-znat/regulirovka-yarkosti-svetodioda.html
Спасибо.
ЕвгенийП, еще раз спасибо за статью. Почитал, с логарифмами, конечно, не справился - из школьной математики смутно помню, что обратная логарифму функция - это вроде бы экспонента, но она, к примеру, в Экселе и в ардуинском языке ведет себя как-то уж совсем по-разному. А вот степенная функция выдала результат, какой хотелось. Только (по крайней мере на вот этих СД, с которыми я пока скетч гоняю) все значения ШИМ меньше единицы можно отбрасывать - не горят, загораются как только значение ШИМ переваливает за 1. И пока ШИМ примерно меньше 10, яркость нарастает и гаснет дискретно, с заметными такими рывками.
спасибки, тоже почитал..