Ограничения обновления SoftPWM
Я использую Arduino для затемнения 9 светодиодных лент с разными выходными контактами после того, как аудиоанализ БПФ дает результаты при 60 Гц = 16 мс. [БПФ выполняется на ПК и отправляется на Arduino с помощью модуля RF24]
Я начал проект, используя SoftPWM на контактах D2->D9 и amp; A4 с более низкой частотой обновления, но теперь у меня проблемы с увеличением частоты обновления. Я уже подключил 6 копий этой платы и ищу программное решение
Чтобы диагностировать проблему, я выполнил тест, отправив значение ШИМ и ноль на определенной частоте. Если частота высокая, вы можете увидеть только меньшую излучаемую мощность
Если я установлю ШИМ, как только у меня будет стабильный сигнал (яркость светодиода) Если я устанавливаю ШИМ каждые ~ 10 мс (10 мс при определенном ШИМ, 10 мс при ШИМ = 0), у меня нестабильная интенсивность, повторяя тест на выводе 6 с помощью обычной аналоговой записи, у меня нет проблем. При 10 мс я ясно вижу, как он мигает со случайной частотой (~ 20 Гц = 50 мс), при 15 мс я вижу только случайное колебание.
Я использую Arduino Pro mini — 5 В — 2 КБ. Без сигналов Arduino выполняет 16 тыс. циклов в секунду (большая часть без каких-либо изменений), с сигналом 10 мс он работает со скоростью 14 тыс. циклов в секунду, так что проблема с нагрузкой, похоже, не возникает.
Может ли кто-нибудь помочь мне с этой проблемой?
- Стоит ли мне менять библиотеку?
- Следует ли мне перейти на более низкий уровень, чтобы переписать более производительную библиотеку?
- Должен ли я использовать только 6 стандартных ШИМ, заново нарисовать плату, снова распечатать их, снова сварить все компоненты и снова протестировать ее?
Спасибо!
PS: Я не могу создать тег SoftPWM из-за проблем с репутацией. Может ли это сделать модератор?
@brazoayeye, 👍0
Обсуждение1 ответ
Лучший ответ:
Проблема не в ограничении SoftPWM, а в физическом. SoftPWM имеет цикл ШИМ с частотой 60 Гц, что делает невозможным обновление выходного сигнала быстрее, чем 34 мс, и это объясняет, почему я вижу, что низкая частота пытается изменить состояние каждые 10 мс.
Жестко запрограммировав IRS, я могу добиться гораздо более быстрого цикла ШИМ, сохраняя ту же частоту ШИМ, и у меня примерно на 60% меньше нагрузки на процессор. При полной загрузке процессора и последней версии кода я могу достичь цикла ШИМ ~600 Гц. Я решил использовать цикл ~300 ШИМ, чтобы иметь достаточно процессора для выполнения других задач (в основном обрабатывать RF24 для получения пакетов с частотой 60 Гц и, при необходимости, пересылать их на другие базы)
Даже на более высоких частотах средняя интенсивность нестабильна, но чем выше частота, тем стабильнее результат. Это можно объяснить тем, что глаз «усредняет» поступающий свет, и этот средний показатель не очень стабилен.
Поскольку для создания визуальных эффектов используются светодиоды, мне не нужна очень точная выходная мощность, и 300 Гц вполне достаточно. (У меня также нет больших МОП-транзисторов, и я не хочу нагружать их более высокими частотами)
- Установите частоту ШИМ на 25 кГц.
- Как получить исходные файлы для библиотек Arduino?
- Какова частота PWM-выхода на Arduino
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
Программное обеспечение AVR может сделать очень многое, они ограничены в «лошадиных силах». Учитывая вашу рабочую нагрузку по БПФ, похоже, вам очень повезло, что оно работает так хорошо, как оно есть. AnalogWrite, так сказать, имеет «аппаратное ускорение», поэтому, если вы можете использовать его вместо этого, это должно обеспечить более высокую производительность. Вы можете получить внешние расширители GPIO или ЦАП или использовать второй про-мини, взаимодействующий с первым через UART., @dandavis
Извините, я не выразился явно. FHT выполняется на ПК, результаты отправляются на Arduino с помощью модуля RF24. Если это действительно не нужно, я хочу избежать модификации аппаратного обеспечения, поскольку оно находится внутри печатной платы, и я беспокоюсь, что мне придется перепроектировать его для работы с новым модулем. У меня есть 6 одинаковых плат, которые принимают пакеты RF24 и включают/отключают светодиоды., @brazoayeye