Как сгладить ШИМ выход на нагрузке ?
Как сгладить ШИМ выход на нагрузке ?
с ардуино снимаю шим на освещение свотодиодами
в самом начале когда он медленно загорается оно происходит ступенчато пимерно раз в секунду
далее как становится по ярче эфект пропдает видимо из за невозможности сфокусировать глаз на ярком предмете
если я куплю большой конденсатор и поставлю паралельно нагрузке насколько это поможет сгладить ступеньки на яркости ?
и какой ёмкости покупать ?
как её выщитать ?
в самом начале когда он медленно загорается оно происходит ступенчато пимерно раз в секунду
далее как становится по ярче эфект пропдает видимо из за невозможности сфокусировать глаз на ярком предмете
если я куплю большой конденсатор и поставлю паралельно нагрузке насколько это поможет сгладить ступеньки на яркости ?
и какой ёмкости покупать ?
как её выщитать ?
Re: Как сгладить ШИМ выход на нагрузке ?
А сколько этих ваших ступенек?
Есть нелинейность восприятия ступенек яркости. На малой яркости увеличение на одну ступень заметнее, чем на большой яркости. Нужно увеличить число ступенек на малой яркости и уменьшить на большой. То есть, если у вас есть например 5 ступенек в процентах: 20%, 40, 60, 80, 100. А нужно сделать вот так: 5, 10, 15, 20, 30, 40, 60, 80, 100.
Визуально разница между 5% и 10% гораздо заметнее, чем разница между 95% и 100% ШИМ.
Большой конденсатор ничего толкового не даст.
Есть нелинейность восприятия ступенек яркости. На малой яркости увеличение на одну ступень заметнее, чем на большой яркости. Нужно увеличить число ступенек на малой яркости и уменьшить на большой. То есть, если у вас есть например 5 ступенек в процентах: 20%, 40, 60, 80, 100. А нужно сделать вот так: 5, 10, 15, 20, 30, 40, 60, 80, 100.
Визуально разница между 5% и 10% гораздо заметнее, чем разница между 95% и 100% ШИМ.
Большой конденсатор ничего толкового не даст.
Re: Как сгладить ШИМ выход на нагрузке ?
если по вашему методу то нужно построить параболу из люменов и проицировать на неё время и выдавать конктретный шим в этой точке времени
что бы её построить на ум пока приходит взять фоторезистор и прикрпить его в плотную к светодиоду и снять показания относитеьно шима к ацп
и построить из этих точек нелинйное маштабирование
что бы её построить на ум пока приходит взять фоторезистор и прикрпить его в плотную к светодиоду и снять показания относитеьно шима к ацп
и построить из этих точек нелинйное маштабирование
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Как сгладить ШИМ выход на нагрузке ?
Попробуйте второй код. Для более сложных проектов я бы экспортировал заранее рассчитанные значения в массив, чтобы не работать с float.
Arduino LED Fader
https://www.electroschematics.com/arduino-led/
Arduino LED Fader
https://www.electroschematics.com/arduino-led/
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Как сгладить ШИМ выход на нагрузке ?
а ШИМ там сколько бит?
если 8, то сглаживай-не сглаживай, при малых яркостях будут видны явные градации.
выход - или применять 16 бит ШИМ,
или если таймер больше ни чем не занят, переходить на регулировку яркости на низах изменением периода ШИМ 8 битного генератора (не знаю только, возможно ли это средствами ардуины)
(недостаток первого хетода - аппаратное ограничение -нужен свободный 16 бит таймер, и относительно низкая частота,
недостаток второго - сложное управление, нестабильная частота ШИМ сигнала)
если 8, то сглаживай-не сглаживай, при малых яркостях будут видны явные градации.
выход - или применять 16 бит ШИМ,
или если таймер больше ни чем не занят, переходить на регулировку яркости на низах изменением периода ШИМ 8 битного генератора (не знаю только, возможно ли это средствами ардуины)
(недостаток первого хетода - аппаратное ограничение -нужен свободный 16 бит таймер, и относительно низкая частота,
недостаток второго - сложное управление, нестабильная частота ШИМ сигнала)
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- electroget
- Друг Кота
- Сообщения: 4651
- Зарегистрирован: Ср сен 30, 2020 16:51:47
- Откуда: РФ
Re: Как сгладить ШИМ выход на нагрузке ?
Стас38,
Сглаживают вообще-то напряжение пульсаций. А напряжение шим оно довольно ровное такое, поэтому конденсатор там ничего особо не даст, так что не тратьте деньги на бесполезную покупку, а ищите решение.
Сглаживают вообще-то напряжение пульсаций. А напряжение шим оно довольно ровное такое, поэтому конденсатор там ничего особо не даст, так что не тратьте деньги на бесполезную покупку, а ищите решение.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Как сгладить ШИМ выход на нагрузке ?
библиотека TimerOne
Используйте примерной код (напр. FanSpeed), поменяйте строки и заработает (1024 шагов, 25 kHz).
Запускал тестово за вентиляторa.
Используйте примерной код (напр. FanSpeed), поменяйте строки и заработает (1024 шагов, 25 kHz).
Запускал тестово за вентиляторa.
Re: Как сгладить ШИМ выход на нагрузке ?
у меня 8 бит
шим на выходу я увличиваю равномерно по формуле время/шим
к примеру берём 60 сек / 255 = 235 мс
тоесть я должен получать примерно 4 шага в сек
но на деле даже если смотреть на осцылограф то там длина импульса увеличивается очень странно примерно раз в сек вместо 4 раз в сек
как будто он сначала накпливает 4 шага а потом на выход выкидывает результат
попробовал вместо постоянного времени на шаг задать 50мс на постоянку генератором и в начале шим набирается быстрее 50 мс/шаг и постепенно начинает пропускать импульсы доганяясь под конец остатками шима
плавнее стало но быстрый старт присутствует вместо медленного разгорания собственно это и ожидаемо было
в принципи пойдёт
шим на выходу я увличиваю равномерно по формуле время/шим
к примеру берём 60 сек / 255 = 235 мс
тоесть я должен получать примерно 4 шага в сек
но на деле даже если смотреть на осцылограф то там длина импульса увеличивается очень странно примерно раз в сек вместо 4 раз в сек
как будто он сначала накпливает 4 шага а потом на выход выкидывает результат
попробовал вместо постоянного времени на шаг задать 50мс на постоянку генератором и в начале шим набирается быстрее 50 мс/шаг и постепенно начинает пропускать импульсы доганяясь под конец остатками шима
плавнее стало но быстрый старт присутствует вместо медленного разгорания собственно это и ожидаемо было
в принципи пойдёт
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Как сгладить ШИМ выход на нагрузке ?
какой контроллер? какой таймер задействован? ну, и... код в студию!
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Как сгладить ШИМ выход на нагрузке ?
нано
Код: Выделить всё
//Подключаем библиотеку
#include <GyverPWM.h>
struct _poligonInexes
{
int minIndex;
int maxIndex;
}
;
int _Poligon_InArray_1[6] = {0, 300, 900, 2000, 4000, 6000};
int _Poligon_OutArray_1[6] = {0, 90, 150, 190, 230, 255};
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _count1I = 0;
int _count1_Value = 0;
bool _bounseInputD12S = 0;
bool _bounseInputD12O = 0;
unsigned long _bounseInputD12P = 0UL;
void setup()
{
pinMode(3, OUTPUT);
pinMode(12, INPUT_PULLUP);
_bounseInputD12O = digitalRead(12);
}
void loop()
{
bool _bounceInputTmpD12 = (digitalRead (12));
if (_bounseInputD12S)
{
if (millis() >= (_bounseInputD12P + 40))
{
_bounseInputD12O= _bounceInputTmpD12;
_bounseInputD12S=0;
}
}
else
{
if (_bounceInputTmpD12 != _bounseInputD12O)
{
_bounseInputD12S=1;
_bounseInputD12P = millis();
}
}
//Плата:1
if (!(0))
{
if (! _gen1I)
{
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
}
else
{
_gen1I = 0 ;
_gen1O= 0;
}
if (_gen1I)
{
if (_isTimer (_gen1P , 25))
{
_gen1P = millis();
_gen1O = ! _gen1O;
}
}
if (!(_bounseInputD12O))
{
if (_trgrt1I)
{
_trgrt1 = 0;
}
else
{
_trgrt1 = 1;
_trgrt1I = 1;
}
}
else
{
_trgrt1 = 0;
_trgrt1I = 0;
}
;
if (_gen1O)
{
if (! _count1I)
{
_count1I = 1;
if (!(_bounseInputD12O))
{
if(_count1_Value < 1200)
{
_count1_Value = _count1_Value + 1;
}
}
else
{
if(_count1_Value > 0)
{
_count1_Value = _count1_Value - 1;
}
}
}
}
else
{
_count1I = 0;
}
if ((_trgrt1))
{
//Устанавливаем на пине частоту в режиме 0
PWM_frequency(3, (2000L), 0);
}
//изменить заполнение на пине
PWM_set (3, ((_poligon((_count1_Value), _Poligon_InArray_1, _Poligon_OutArray_1, 6))));
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
int _poligon(int value, int intArray[], int outArray[], int arraySize)
{
struct _poligonInexes indexes;
indexes = _getPoligonIndexes(value, intArray, arraySize);
return map(value, intArray[indexes.minIndex], intArray[indexes.maxIndex], outArray[indexes.minIndex], outArray[indexes.maxIndex]);
}
struct _poligonInexes _getPoligonIndexes(int value, int array[], int arraySize)
{
struct _poligonInexes result;
int i;
result.minIndex = 0;
result.maxIndex = 0;
for (i = 0; i < arraySize; i++)
{
if (array [result.minIndex] > array[i])
{
result.minIndex = i;
}
if (array [result.maxIndex] < array[i])
{
result.maxIndex = i;
}
}
for (i = 0; i < arraySize; i++)
{
if ((array [i] >= value) && (array [result.maxIndex] > array[i]))
{
result.maxIndex = i;
}
}
if (result.maxIndex==0)
{
result.minIndex = 0;
result.maxIndex=1;
}
else
{
result.minIndex = result.maxIndex -1;
}
return result;
return result;
}- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Как сгладить ШИМ выход на нагрузке ?
Стас38, такую длинную "портянку" нужно прятать под спойлер.
а почему строку
return result;
ты повторил всего 2 раза, а не 8 раз?
а почему строку
return result;
ты повторил всего 2 раза, а не 8 раз?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- vlasovzloy
- Друг Кота
- Сообщения: 20066
- Зарегистрирован: Чт янв 26, 2012 16:44:29
- Откуда: Таксимо
Re: Как сгладить ШИМ выход на нагрузке ?
Параллельно светодиодам конденсаторы нельзя ставить
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru
Re: Как сгладить ШИМ выход на нагрузке ?
Нужно не величину шага менять, а время когда шаг, равный 1, изменится.
Последний раз редактировалось korsaj Ср июн 29, 2022 13:45:29, всего редактировалось 1 раз.
Re: Как сгладить ШИМ выход на нагрузке ?
Там дело не в интервале времени, а в интервале шагов. Они неравномерно влияют на видимую яркость.