Easyelectronics.ru

Электроника для всех
Текущее время: 21 янв 2019, 23:21

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 05 дек 2017, 23:47 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
Добрый вечер. Столкнулся с проблемой шим-яркость.
Дикая нелинейность. Шим у меня программный, 8бит
На практике получается примерно так: шим - яркость %
255 - 100
127 - 80
63 - 70
31 - 60
15 - 50
7 - 35
3 - 20
2 - 10
1 - 5
0 - 0

Тут настолько много факторов что я запутался. Хочу плавно гасить и зажигать.
Кто сталкивался? Как привести эту нелинейность к математическому виду? Таблицы не предлагать.

_________________
vk.com/casusnur


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:07 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
Что есть "яркость %"? (Как получено)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:25 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
яркость приблизительна. получена визуально и с помощью камеры
100% яркость - это при 100% заполнении (256/256) при 20мА

_________________
vk.com/casusnur


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:27 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2546
Откуда: Санкт-Петербург
В первом приближении отклик глаза пропорционален логарифму значения - что вы и видите в своей табличке. pwm = c1*exp(x*c2), c1 и c2 подобрать по вкусу.

А если примерно "как на мониторе" - то можете взять pwm = x*x/const.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:32 
Старожил

Зарегистрирован: 07 фев 2011, 21:00
Сообщения: 477
Откуда: Ханты-Мансийск
Цитата:
Кто сталкивался? Как привести эту нелинейность к математическому виду? Таблицы не предлагать.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:36 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
вы не правы. ШИМу на ВАХ не важен. Диод или включен на 100% или полностью выключен.
тут конкретно инерциональность зрения решает. При том что для человека что для видеокамеры почти одинаково.

_________________
vk.com/casusnur


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:39 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
casus, если вы не накосячили в PWM (дико), то световой поток светодиода прямо пропорционален этому самому PWM. Зависимость прямая. Светодиод - безинерционный излучатель света. У вас проблема не с ним, а с вашей оценкой яркости.
Так что - смотрите то, что порекомендовал aamonster.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:41 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
aamonster правильно написал. я сейчас размышляю над тем как эти логарифмы на 8 битном мк сделать))

я знаю что яркость диода пропорциональна энергетически, но не визуально + затягивание фронтов драйвером + инерциальность зрения+температура кристала диода итд.

_________________
vk.com/casusnur


Последний раз редактировалось casus 06 дек 2017, 00:52, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:51 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
Самый простой вариант - менять N от 0 до 8, при этом ставить PWM в количестве '1' этого числа. Т.е. 0=0, 1=1, 2=0b11, 3=0b111,... 8=0b11111111
Если 8 уровней мало, то можно удвоить значения, добавив среднее между соседними. Т.е 0 1 3 7 15 31 ... 255 -> 0 1 2 3 5 7 11 15 23 31 ... 255.
Да-да, та самая таблица. )))))))))))))) Впрочем, если дико хочется, можете производить возведение в квадрат.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 00:56 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
Спасибо. Это оно. Как решить проблему понял, щас функцию напишу)))))

_________________
vk.com/casusnur


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 02:36 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 556
чего там писать N [0..8].
PWM = (1 << N) - 1;
вот и вся формула :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 03:15 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
void1509 писал(а):
чего там писать N [0..8].
PWM = (1 << N) - 1;
вот и вся формула :)


Сделал как написал u37
Код:
calc_bright
   ldw   x,   #16
calc_rep   
   clr   tmpbr
   decw   x
   clrw   y
   ld   a,   (x)
   add   a,   #1
   ld   yl,   a
   ld   a,   #2
   div   y,   a
   tnzw   y
   jreq zerobright
   decw   y
   scf
   rlc   tmpbr
   tnz   a
   jreq   shift_one
   rcf
   rlc   tmpbr
shift_one
   tnzw   y
   jreq zerobright
   scf
   rlc   tmpbr
   decw   y
   jra   shift_one
zerobright
   ld   a,   tmpbr
   ld   ($10,x),   a
   tnzw   x
   jrne   calc_rep
   ret


Заделал 4 бита.
Работает так. берем байт (0-15), если ноль выходим.
К байту +1 и делим на 2.
От частного вычитаем 1, результат это то количество единиц которое нужно добавить в tmpbr(результат) вконце
в tmpbr добавляем "1", если есть остаток от деления еще добавляем "0", а потом оставшееся количество "1".

)) а единичками заполнить то вобще можно так
Код:
   scf
   rlc   tmpbr


Кстати на вид мега линейно

_________________
vk.com/casusnur


Последний раз редактировалось casus 06 дек 2017, 03:59, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 03:31 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
N = "яркость"
PWM = (((1 << (N >> 2)) - 1) * ( (N & 3) + 4) ) >> 2;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 03:54 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
Для 4 бит (16 уровней яркости) еще нолик нужен. И это, я СИ незнаю

_________________
vk.com/casusnur


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 04:04 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
Я уже подзабыл asm AVR. (могу написать на x86 )))
Оператор "<<" означает сдвиг влево (LSL), а ">>" сдвиг вправо (LSR). Оператор & он же и есть (and). Остальное все просто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 04:20 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2546
Откуда: Санкт-Петербург
casus, ваш код больше, чем табличка на 16 байт + код выбора из неё. И работает медленнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 04:58 
Старожил

Зарегистрирован: 23 дек 2012, 16:46
Сообщения: 310
Откуда: Новый Уренгой
Убедили. Только не 16, а 32 байта. Я писал калькулятор, с возможностью повышать разрядность если будет заметна дискретность.

_________________
vk.com/casusnur


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 10:59 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2546
Откуда: Санкт-Петербург
Ну да. Формула всё равно нужна, таблички ведь не берутся с неба (а передача их из поколения в поколение, как сакрального знания - залог багов: однажды понадобится другая табличка, а применят эту).

Кстати, я бы в районе малых чисел табличку подкорректировал: пусть там значения pwm идут подряд, чтобы там по максимуму использовать разрешение pwm.
Как-то так:
pwm(0) = 0
pwm(i+1) = max(pwm(i)*c, pwm(i)+1)
c - что-то типа 1.1 (подобрать, чтобы до 255 было нужное количество значений)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 12:37 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2305
Откуда: Русь, Новороссийск
aamonster писал(а):
табличка на 16 байт + код выбора из неё
А можно попросить чистовик такого варианта?
А то вроде все буквы знаю, а собрать в слово не могу.

Мне для обучения программированию и осмысления себя в нём. :)


Последний раз редактировалось VladyMile 06 дек 2017, 15:37, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 14:12 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 816
Я туту покумекал и подобрал формулу, которая по идее должна быть близка к истине:

ocr = 255 * (exp(s*k) - 1) / (exp(k) - 1)

, где
s - ожидаемая яркость - изменяется от 0 до 1,
k - эмпирический коэффициент кривизны, приблизительно равен 3.

Надо будет потестировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 06 дек 2017, 23:28 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2305
Откуда: Русь, Новороссийск
aamonster писал(а):
В первом приближении отклик глаза пропорционален логарифму значения...
Цитата:
На основе экспериментов Э. Вебера, Г. Фехнер сформулировал психофизиологический закон (закон Вебера – Фехнера), согласно которому интенсивность ощущения пропорциональна логарифму интенсивности раздражителя: S=k×ln(R), где R – интенсивность раздражителя, S – интенсивность ощущения, k – константа зависящая от единиц измерения.
Позже С. Стивенс произвел модификацию закона Вебера – Фехнера, считая, что зависимость носит характер общей степенной функции с различными показателями степени для каждого вида ощущений (закон Стивенса[1]): S=k×Rn, где n – показатель степени, зависящий от вида ощущений. Для зрительного ощущения яркости, степенной показатель имеет значение n=0,33; при условии адаптированного к темноте наблюдателя и размере раздражителя в 5 градусов.
Готовые таблицы в исходниках тут


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 07 дек 2017, 02:34 
Старожил

Зарегистрирован: 05 дек 2015, 16:56
Сообщения: 290
Почему задаёте вопросы и не читаете ответы?
Сразу же ответили :
aamonster писал(а):
В первом приближении отклик глаза пропорционален логарифму значения - что вы и видите в своей табличке. pwm = c1*exp(x*c2), c1 и c2 подобрать по вкусу.
А если примерно "как на мониторе" - то можете взять pwm = x*x/const.

То есть
GammaCorrectedPWM = Bright * Bright / MaxBright
И никаких таблиц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 07 дек 2017, 09:29 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2305
Откуда: Русь, Новороссийск
С "примерной логарифмичностью" согласились быстро.
Мне кажется, здесь более обсуждалась "выгода" - таблица или расчёты.
Вроде как "победила" таблица.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 07 дек 2017, 13:42 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3479
Откуда: Новосибирск
VladyMile писал(а):
С "примерной логарифмичностью" согласились быстро.
Мне кажется, здесь более обсуждалась "выгода" - таблица или расчёты.
Вроде как "победила" таблица.

Таблица всегда быстрее. Ничего делать не нужно, только вычитывать. 10-20 тактов за итерацию. Мне давно на одном форуме советовали почитать одну книгу. Не помню точно как называется, что там "структура, данные = программа". Вкратце, зависимость: чем структурированнее и табличнее, тем проще программа. И наеборот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ для светодиода, нелинейность
СообщениеДобавлено: 07 дек 2017, 15:18 
Старожил

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 617
Откуда: Челябинск
demiurg1978 писал(а):
VladyMile писал(а):
С "примерной логарифмичностью" согласились быстро.
Мне кажется, здесь более обсуждалась "выгода" - таблица или расчёты.
Вроде как "победила" таблица.

Таблица всегда быстрее. Ничего делать не нужно, только вычитывать. 10-20 тактов за итерацию. Мне давно на одном форуме советовали почитать одну книгу. Не помню точно как называется, что там "структура, данные = программа". Вкратце, зависимость: чем структурированнее и табличнее, тем проще программа. И наеборот.

Не эта?
http://snilit.tspu.ru/uploads/files/default/virt.pdf


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: dima12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB