Быстрый ШИМ: разрешение в герцах
Я пытаюсь получить приятно звучащий переменный ШИМ для ЦАП и намерен использовать клавишу Sallen как часть активного фильтра нижних частот.
Я установил Быстрый ШИМ на максимум 255 (WGM1 [0-3] = 5) и установил / очистил OC1A при сравнении с OCR1A (1<< COM1A1).
Я также обновляю значение OCR1A за 64 отдельных шага, изменяя эти шаги примерно 15 000 раз в секунду, чтобы создать определенную синусоидальную форму.
Поскольку чип работает на частоте 16 Мегагерц, означает ли это, что один цикл ШИМ равен 16 '000'000/256 =
62,5 Килогерц? Если нет, то каково его разрешение
Спасибо!
@B7th, 👍2
Обсуждение1 ответ
Лучший ответ:
С помощью комментариев я решил использовать переменные максимальные значения ШИМ, чтобы они полностью соответствовали частоте. Это привело к более четкому звуку, который на самом деле больше не нуждается в клавише Sallen.
Например, низкий C естественный, или 261,6 Гц
, обновленный 32
раза за 8
полных циклов ШИМ, дает нам для чипа 16 МГц период и амплитуду 238
.
Это означает, что, имея прескалер 8
(CS01
), период (OCR0A
) И максимальный потенциальный рабочий цикл (ICR1
) 238
, а также пройдя 32 итерации искомого звука, я получил желаемый звук и ни одной волновой канавки, которая поставляется с импульсным рабочим циклом короче говоря.
Конечно, это означает меньшую детализацию, когда речь идет о Bb с максимальным рабочим циклом 133, однако это сработало для меня.
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- PWM-вывод Arduino Nano не функционирует
Поскольку вы непосредственно копаетесь в аппаратных регистрах ввода-вывода, вы должны прочитать [ datasheet](http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf). Ищите прескалер и биты CS1[0-2]., @Edgar Bonet
Предполагая, что у вас нет прескалера, вы действительно получите около 62,5 кГц. Частота обновления 15 кГц для синусоидальной немного странная, так как она составляет 1/4.167 от частоты обновления ШИМ. Я бы, вероятно, использовал прерывание таймеров для вызова функции, которая обновляет OC1A каждый 4-й вызов., @Gerben
Спасибо вам обоим за ваши ответы! Я прочитал таблицу данных, но думаю, что без прескалеров это действительно 62,5 кГц. Обновление будет значительно отличаться, так как я пытаюсь сделать 12 тонов шкалы. Если бы я обновлял OC1A каждый 4-й ШИМ, я не уверен, что смогу сделать идеальный период., @B7th