Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

пулсиране на светоиод
http://mcu-bg.com/mcu_site/viewtopic.php?f=2&t=16431
Страница 1 от 4

Автор:  slav4o.com [ Пон Мар 25, 2019 6:41 pm ]
Заглавие:  пулсиране на светоиод

Направих един светодиод да пулсира. Управлението е PWM с някаква честота под 1kHz. Програмата е елементарна няма прекъсвания и т.н. още експериментирам.
Интересното е че когато коефициента е нисък отначало светенето се усилва бързо а когато е голям коефициента е голям не се променя много. Т.е. дали е 90 или 100%. почти не се вижда разлика, докато от 5 до 15% е друго.
Според програмата нарастването и намаляването на PWM е линейно. Обаче аз не възприемам светенето така, а по-скоро логаритмично.
Може би математически трбява някаква формула за определяне на коефициента

Код:
    while(1){
       
        LED0 = ON;
        Delay(duty);
       
        LED0 = OFF;
        Delay(255-duty);
       
        cnt++;
        if(cnt == 1){
            cnt = 0;
            if(!nazad)
                duty++;
            else
                duty--;
           
            if(duty == 255){
                nazad = TRUE;
            }
            if(duty == 0){
                nazad = FALSE;
            }
        }
    }


Автор:  dan [ Пон Мар 25, 2019 6:45 pm ]
Заглавие:  Re: пулсиране на светоиод

Вебер-Фехнер :)

Автор:  relsys [ Пон Мар 25, 2019 8:41 pm ]
Заглавие:  Re: пулсиране на светоиод

Тука пак те е ударил гения:

Код:
cnt++;
        if(cnt == 1){
            cnt = 0;


8) 8) 8)

Автор:  slav4o.com [ Пон Мар 25, 2019 9:24 pm ]
Заглавие:  Re: пулсиране на светоиод

Аз съм го нагласил да го променям и за пробата го бях намалил докрай :)

Автор:  ToHu [ Пон Мар 25, 2019 9:38 pm ]
Заглавие:  Re: пулсиране на светоиод

Такъв е живота, гаден и несправедлив, освен ако не си смениш "фърмуера" няма да видиш разликата, то не е и до фърмуер а до сензорите ти :) С две думи, човешкото око няма д анарави разлика между 100% и 90%, от моя опит всичко над 100% е безмислено, ограничавам всички подсветки по машините на 70%, пести доста ток, а визуално не се усеща.

Автор:  slav4o.com [ Пон Мар 25, 2019 9:48 pm ]
Заглавие:  Re: пулсиране на светоиод

Чак пък несправедлив :)
Сега го направих така, степените са 20 и ги давам на квадрат и работи много добре:
Код:
    while(1){
       
        pwm = ((unsigned int)duty*duty);
        LED0 = ON;
        Delay(pwm);
       
        pwm = ((unsigned int)400-(duty*duty));
        LED0 = OFF;
        Delay(pwm);
       
        cnt++;
        if(cnt == 4){
            cnt = 0;
            if(!nazad)
                duty++;
            else
                duty--;
           
            if(duty == 20){
                //duty = 0;
                nazad = TRUE;
            }
            if(duty == 0){
                nazad = FALSE;
            }
        }
    }


Пробвах и със 32 степени но става бавно защото делая стига до 1024 а този PIC16F627A е доста бавен на 4MHz...

Автор:  slav4o.com [ Пон Мар 25, 2019 10:43 pm ]
Заглавие:  Re: пулсиране на светоиод

Ето го 32 степени и на 20 MHz

Автор:  ToHu [ Вто Мар 26, 2019 12:20 am ]
Заглавие:  Re: пулсиране на светоиод

Ако искаш да усещаш разликата между степените, промяната не трябва да е линейна.

Автор:  slav4o.com [ Вто Мар 26, 2019 12:43 am ]
Заглавие:  Re: пулсиране на светоиод

Ами точно това ми беше питането. Как да го направя, защото като инкрементирам коефициента става линейно. Сега съм го направил да го дава на квадрат. Понеже числото става голямо, има само 32 степени :) Въпроса е все пак така ли трябва да се прави математически изчислението ?
Код:
    while(1){
       
        pwm = ((unsigned long)(duty*duty));
        LED0 = ON;
        Delay(pwm);
       
        LED0 = OFF;
        pwm = ((unsigned long)1024-(duty*duty));
        Delay(pwm);
       
        cnt++;
        if(cnt == 10){
            cnt = 0;
            if(!nazad)
                duty++;
            else
                duty--;
           
            if(duty == 32){
                nazad = TRUE;
            }
            if(duty == 0){
                nazad = FALSE;
            }
        }
    }


Автор:  ToHu [ Вто Мар 26, 2019 1:53 am ]
Заглавие:  Re: пулсиране на светоиод

Ами и така може, в крайна сметка не знам какво целиш, регулиране или ефект на пулсиране. При регулирането за мен и 32 степени са повече от нужното. Ако е ефект на пулсиране всичко зависи от честотата, но 32 може би пак са ОК. Но ако не искаш да се ограничаваш до 32, просто си смятай по формулата коят си си харесал запълването и после го транслирай в обхвата 0-1024. Въпросът е има ли смисъл, щото ако имаш 1-2 през 0.1 резулата ще е от 1 до 4, пък ти ако искаш и през 0.01 го инкрементвай. И ако трябва да сме точни, квадратната функция не е най-точната апроксимация, по скоро експонента, ама има ли смисъл от това е един друг въпрос.

Автор:  bongo_x2 [ Вто Мар 26, 2019 9:45 am ]
Заглавие:  Re: пулсиране на светоиод

Мии dan ти го каза: Вебер-Фехнер
Смяташ 32 стойности с калкулатора и ги записваш. Всъщност 16 са достатъчни. Може и синусоидално усещане да изимитираш, не триъгълно.

Автор:  miro_atc [ Вто Мар 26, 2019 10:36 am ]
Заглавие:  Re: пулсиране на светоиод

slav4o.com написа:
Въпроса е все пак така ли трябва да се прави математически изчислението ?


Щом квадратичната функция те устройства защо трябва да сменяш математиката?

Повече стойности може да получиш ако си представиш, че интервала не е само целочислени числа, ами имаш и дробни.
Само си го представяш, няма нужда да работиш със запетайки.

Пример, ако вместо 1-20 използваш 1-40 ще имаш два пъти повече стойности. Или иначе казано всяка стойност от първия интервал ти е умножена по две. На колко е равно (2*х)^2? Не е ли х на квадрат по четири?
С две думи ползваш си 1-40, вдигаш на квадрат, делиш на 4 (или шифтваш два пъти резултата)...

Автор:  slav4o.com [ Вто Мар 26, 2019 2:47 pm ]
Заглавие:  Re: пулсиране на светоиод

bongo_x2 написа:
Смяташ 32 стойности с калкулатора и ги записваш. Всъщност 16 са достатъчни. Може и синусоидално усещане да изимитираш, не триъгълно.

Да това е добра идея. Някъде бях гледал някакъв радиомодем с PIC така бяха генерирали синусоида и програмата даже беше на асемблер, а там е лудница да правиш програмно такива сложни сметки. :)
Миро да така е но този софтуерен шим работи бавно ако е с повече от 1024 степени. Бях избрал този контролер с идеята да управлявам повече светодиоди. Той проекта май няма да се прави, но така от любопитство и теоретически интересна е може би темата.

Автор:  miro_atc [ Вто Мар 26, 2019 3:14 pm ]
Заглавие:  Re: пулсиране на светоиод

slav4o.com написа:
Миро да така е но този софтуерен шим работи бавно ако е с повече от 1024 степени


Мисля че питаше как да си разшириш диапазона. Колко бързо работят тия контролери идея си нямам. Но броят на степените не би трябвало да има каквото и да е значение. Поне като гледам, вдигането на квадрат и сметките ги правиш съвсем правилно извън цикъла. Сега ако тоя цикъл не можеш да го врътнеш 1000 пъти в секунда, то наистина що за контролер е това? Да не е ламбов? :D

Автор:  ToHu [ Вто Мар 26, 2019 4:19 pm ]
Заглавие:  Re: пулсиране на светоиод

Ами то таблично е най-бързо, но зависи колко са ти стойностите, казвам 32 са ти малко, то не че и за 256 не може да направиш таблица... въпреки че те нещата са свързани, ако искаш да ги мениш в еднакъв период, колкото повече стъпки толкова повече сметки и толкова повече има смисъл от таблично, но пък и таблицата набъбва. Едва ли ще има проблем да го смяташ.

Страница 1 от 4 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/