| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Как сгладить ШИМ выход на нагрузке ? https://radiokot.ru/forum/viewtopic.php?f=62&t=183388 |
Страница 1 из 1 |
| Автор: | Стас38 [ Вс июн 26, 2022 04:26:45 ] |
| Заголовок сообщения: | Как сгладить ШИМ выход на нагрузке ? |
с ардуино снимаю шим на освещение свотодиодами в самом начале когда он медленно загорается оно происходит ступенчато пимерно раз в секунду далее как становится по ярче эфект пропдает видимо из за невозможности сфокусировать глаз на ярком предмете если я куплю большой конденсатор и поставлю паралельно нагрузке насколько это поможет сгладить ступеньки на яркости ? и какой ёмкости покупать ? как её выщитать ? |
|
| Автор: | Up2805 [ Вс июн 26, 2022 08:06:10 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
А сколько этих ваших ступенек? Есть нелинейность восприятия ступенек яркости. На малой яркости увеличение на одну ступень заметнее, чем на большой яркости. Нужно увеличить число ступенек на малой яркости и уменьшить на большой. То есть, если у вас есть например 5 ступенек в процентах: 20%, 40, 60, 80, 100. А нужно сделать вот так: 5, 10, 15, 20, 30, 40, 60, 80, 100. Визуально разница между 5% и 10% гораздо заметнее, чем разница между 95% и 100% ШИМ. Большой конденсатор ничего толкового не даст. |
|
| Автор: | Стас38 [ Вс июн 26, 2022 08:27:04 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
если по вашему методу то нужно построить параболу из люменов и проицировать на неё время и выдавать конктретный шим в этой точке времени что бы её построить на ум пока приходит взять фоторезистор и прикрпить его в плотную к светодиоду и снять показания относитеьно шима к ацп и построить из этих точек нелинйное маштабирование |
|
| Автор: | veso74 [ Вс июн 26, 2022 10:00:43 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
Попробуйте второй код. Для более сложных проектов я бы экспортировал заранее рассчитанные значения в массив, чтобы не работать с float. Arduino LED Fader https://www.electroschematics.com/arduino-led/ |
|
| Автор: | Ivanoff-iv [ Вс июн 26, 2022 15:05:26 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
а ШИМ там сколько бит? если 8, то сглаживай-не сглаживай, при малых яркостях будут видны явные градации. выход - или применять 16 бит ШИМ, или если таймер больше ни чем не занят, переходить на регулировку яркости на низах изменением периода ШИМ 8 битного генератора (не знаю только, возможно ли это средствами ардуины) (недостаток первого хетода - аппаратное ограничение -нужен свободный 16 бит таймер, и относительно низкая частота, недостаток второго - сложное управление, нестабильная частота ШИМ сигнала) |
|
| Автор: | electroget [ Вс июн 26, 2022 15:59:54 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
Стас38, Сглаживают вообще-то напряжение пульсаций. А напряжение шим оно довольно ровное такое, поэтому конденсатор там ничего особо не даст, так что не тратьте деньги на бесполезную покупку, а ищите решение. |
|
| Автор: | veso74 [ Вс июн 26, 2022 17:18:15 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
библиотека TimerOne Используйте примерной код (напр. FanSpeed), поменяйте строки и заработает (1024 шагов, 25 kHz). Запускал тестово за вентиляторa. |
|
| Автор: | Стас38 [ Вс июн 26, 2022 19:44:18 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
у меня 8 бит шим на выходу я увличиваю равномерно по формуле время/шим к примеру берём 60 сек / 255 = 235 мс тоесть я должен получать примерно 4 шага в сек но на деле даже если смотреть на осцылограф то там длина импульса увеличивается очень странно примерно раз в сек вместо 4 раз в сек как будто он сначала накпливает 4 шага а потом на выход выкидывает результат попробовал вместо постоянного времени на шаг задать 50мс на постоянку генератором и в начале шим набирается быстрее 50 мс/шаг и постепенно начинает пропускать импульсы доганяясь под конец остатками шима плавнее стало но быстрый старт присутствует вместо медленного разгорания собственно это и ожидаемо было в принципи пойдёт |
|
| Автор: | Ivanoff-iv [ Вс июн 26, 2022 20:14:26 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
какой контроллер? какой таймер задействован? ну, и... код в студию! |
|
| Автор: | Стас38 [ Вт июн 28, 2022 15:20:14 ] |
| Заголовок сообщения: | 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 [ Вт июн 28, 2022 18:41:32 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
Стас38, такую длинную "портянку" нужно прятать под спойлер. а почему строку return result; ты повторил всего 2 раза, а не 8 раз? |
|
| Автор: | vlasovzloy [ Ср июн 29, 2022 06:40:58 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
Параллельно светодиодам конденсаторы нельзя ставить |
|
| Автор: | korsaj [ Ср июн 29, 2022 09:48:35 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
Нужно не величину шага менять, а время когда шаг, равный 1, изменится. |
|
| Автор: | НовыйДень [ Ср июн 29, 2022 10:09:45 ] |
| Заголовок сообщения: | Re: Как сгладить ШИМ выход на нагрузке ? |
Там дело не в интервале времени, а в интервале шагов. Они неравномерно влияют на видимую яркость. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


